Skip Navigation

Posts
182
Comments
355
Joined
2 yr. ago

Concatenative Programming @programming.dev

Dotenv (parsing) – Re: Factor

Concatenative Programming @programming.dev

1x Forth by Charles Moore 4/13/99

Concatenative Programming @programming.dev

Color Prettyprint | Re: Factor

Concatenative Programming @programming.dev

Tracking Dict – Re: Factor

Concatenative Programming @programming.dev

Writing a Verified Postfix Expression Calculator in Ada/SPARK

Concatenative Programming @programming.dev

Generic Type Syntax in Concatenative Languages | Discussion on Reddit

Concatenative Programming @programming.dev

GEORGE: A semi-translation programming scheme for DEUCE (1957 Manual)

Concatenative Programming @programming.dev

Implementing DOES> in Forth, the entire reason I started this mess - The Boston Diaries - Captain Napalm

Concatenative Programming @programming.dev

Deconstructing a tweet-sized language

Concatenative Programming @programming.dev

bab=aaa, bbb=bb – Re: Factor

Concatenative Programming @programming.dev

Bitcask – Re: Factor

Concatenative Programming @programming.dev

Implementing a Forth - ratfactor

Concatenative Programming @programming.dev

Game of Life | Re: Factor

Concatenative Programming @programming.dev

BQN: Left to right ordering?

Concatenative Programming @programming.dev

Raylib | Re: Factor

Concatenative Programming @programming.dev

Shuffle Syntax – Re: Factor

Concatenative Programming @programming.dev

More Brainf*ck – Re: Factor

Concatenative Programming @programming.dev

Roman Sort – Re: Factor

Concatenative Programming @programming.dev

mitchpaulus/mshell: Experimental Concatenative Shell-like Scripting Language

Concatenative Programming @programming.dev

Recamán’s Sequence | Re: Factor

  • Factor

     
        
    : get-input ( -- corrupted-input )
      "vocab:aoc-2024/03/input.txt" utf8 file-contents ;
    
    : get-muls ( corrupted-input -- instructions )
      R/ mul\(\d+,\d+\)/ all-matching-subseqs ;
    
    : process-mul ( instruction -- n )
      R/ \d+/ all-matching-subseqs
      [ string>number ] map-product ;
    
    : solve ( corrupted-input -- n )
      get-muls [ process-mul ] map-sum ;
    
    : part1 ( -- n )
      get-input solve ;
    
    : part2 ( -- n )
      get-input
      R/ don't\(\)(.|\n)*?do\(\)/ split concat
      R/ don't\(\)(.|\n)*/ "" re-replace
      solve ;
    
      
  • Factor

     
        
    : get-input ( -- reports )
      "vocab:aoc-2024/02/input.txt" utf8 file-lines
      [ split-words [ string>number ] map ] map ;
    
    : slanted? ( report -- ? )
      { [ [ > ] monotonic? ] [ [ < ] monotonic? ] } || ;
    
    : gradual? ( report -- ? )
      [ - abs 1 3 between? ] monotonic? ;
    
    : safe? ( report -- ? )
      { [ slanted? ] [ gradual? ] } && ;
    
    : part1 ( -- n )
      get-input [ safe? ] count ;
    
    : fuzzy-reports ( report -- reports )
      dup length <iota> [ remove-nth-of ] with map ;
    
    : tolerable? ( report -- ? )
      { [ safe? ] [ fuzzy-reports [ safe? ] any? ] } || ;
    
    : part2 ( -- n )
      get-input [ tolerable? ] count ;
    
      
  • Factor

     
        
    : get-input ( -- left-list right-list )
      "vocab:aoc-2024/01/input.txt" utf8 file-lines
      [ split-words harvest ] map unzip
      [ [ string>number ] map ] bi@ ;
    
    : part1 ( -- n )
      get-input
      [ sort ] bi@
      [ - abs ] 2map-sum ;
    
    : part2 ( -- n )
      get-input
      histogram
      '[ dup _ at 0 or * ] map-sum ;
    
      

    https://github.com/AndydeCleyre/aoc-2024

  • Day 3

    Image:

  • Day 2:

    Image:

  • Sure, but nox is the closer counterpart for in-venv-task definitions. List "sessions" with -l, pick specific sessions to run with -s.

     python
        
    import nox
    from nox.sessions import Session
    
    nox.options.reuse_existing_virtualenvs = True
    APP_NAME = 'logging_strict'
    
    @nox.session(python='3.12')
    def mypy(session: Session):
        """Static type checker (in strict mode)"""
        session.install('-U', 'mypy', '.')
        session.run('mypy',  '-p', APP_NAME, *session.posargs)
    
      

    Unfortunately it doesn't currently do any parallel runs, but if anyone wants to track/encourage/contribute in that regard, see nox#544.

  • As someone's new comments just brought me back to this post, I'll point out that these days there's another good option: uv run.

  • No, I don't use GHA locally, but the actions are defined to run the same things that I do run locally (e.g. invoke nox). I try to keep the GHA-exclusive boilerplate to a minimum. Steps can be like:

     
            - name: fetch code
          uses: actions/checkout@v4
    
        - uses: actions/setup-python@v5
          with:
            allow-prereleases: true
            python-version: |
              3.13
              3.12
              3.11
              3.10
              3.9
              3.8
              3.7
    
        - run: pipx install nox
    
        - name: run ward tests in nox environment
          run: nox -s test test_without_toml combine_coverage --force-color
          env:
            PYTHONIOENCODING: utf-8
    
        - name: upload coverage data
          uses: codecov/codecov-action@v4
          with:
            files: ./coverage.json
            token: ${{ secrets.CODECOV_TOKEN }}
    
    
      

    Sometimes if I want a higher level interface to tasks that run nox or other things locally, I use taskipy to define them in my pyproject.toml, like:

     
            [tool.taskipy.tasks]
        fmt = "nox -s fmt"
        lock = "nox -s lock"
        test = "nox -s test test_without_toml typecheck -p 3.12"
        docs = "nox -s render_readme render_api_docs"
    
      
  • If you choose to give Fedora a try, I recommend Ultramarine, which has more set up from the start, including their "Terrs" repository with more updated packages.

  • Ah yes you can tell by the post title:

    best linux terminal emulator

  • For me: Wezterm. It does pretty much everything. I don't think Alacritty/Kitty etc. offer anything over it for my usage, and the developer is a pleasure to engage with.

    Second place is Konsole -- it does a lot, is easy to configure, and obviously integrates nicely with KDE apps.

    Honorable mention is Extraterm, which has been working on cool features for a long time, and is now Qt based.

  • Just note that the comment was inaccurate, in that their weird encryption is indeed open source at least.

  • I'd say an important part of this calculator's interaction model is doing something, getting a result, then doing something else to that result. That's not too bad in the regular Python interpreter either.

    For example, in Python:

     python
        
    >>> 5
    5
    >>> 4 + _
    9
    >>> 2 * _
    18
    
      

    In Stacker:

     python
        
    >>> 5
    [5]
    >>> 4 +
    [9]
    >>> 2 *
    [18]
    
      

    Does Hy have something like the Python interpreter's _?