copy pasting the rules from last year’s thread:

Rules: no spoilers.

The other rules are made up aswe go along.

Share code by link to a forge, home page, pastebin (Eric Wastl has one here) or code section in a comment.

  • zogwarg@awful.systems
    link
    fedilink
    English
    arrow-up
    1
    ·
    4 days ago
    re:10

    Mwahaha I’m just lazy and did are “unique” (single word dropped for part 2) of start/end pairs.

    #!/usr/bin/env jq -n -R -f
    
    ([
         inputs/ "" | map(tonumber? // -1) | to_entries
     ] | to_entries | map( # '.' = -1 for handling examples #
         .key as $y | .value[]
       | .key as $x | .value   | { "\([$x,$y])":[[$x,$y],.] }
    )|add) as $grid | #           Get indexed grid          #
    
    [
      ($grid[]|select(last==0)) | [.] |    #   Start from every '0' head
      recurse(                             #
        .[-1][1] as $l |                   # Get altitude of current trail
        (                                  #
          .[-1][0]                         #
          | ( .[0] = (.[0] + (1,-1)) ),    #
            ( .[1] = (.[1] + (1,-1)) )     #
        ) as $np |                         #   Get all possible +1 steps
        if $grid["\($np)"][1] != $l + 1 then
          empty                            #     Drop path if invalid
        else                               #
        . += [ $grid["\($np)"] ]           #     Build path if valid
        end                                #
      ) | select(last[1]==9)               #   Only keep complete trails
        | . |= [first,last]                #      Only Keep start/end
    ]
    
    # Get score = sum of unique start/end pairs.
    | group_by(first) | map(unique|length) | add