Day 3: Mull It Over

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

  • morrowind@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    7 days ago

    Smalltalk

    I wrote matchesActual cause all of smalltalk’sstupid matchesDo: or whatever don’t give you the actual match with captures, only substrings (that wasted a good 40 minutes).

    Also smalltalk really needs an index operator

    day3p1: input
      | reg sum |
        reg := 'mul\((\d\d?\d?),(\d\d?\d?)\)' asRegex.
        sum := 0.
        
        reg matchesActual: input do: [ :m | " + sum at end cause operator precedence"
            sum := (m subexpression: 2) asInteger * (m subexpression: 3) asInteger + sum 
        ].
        
        ^ sum.
    
    day3p2: input
      | reg sum do val |
    
        reg := 'do(\:?n''t)?\(\)|mul\((\d{1,3}),(\d{1,3})\)' asRegex.
        sum := 0.
        do := true.
        reg matchesActual: input do: [ :m |
            val := m subexpression: 1.
            (val at: 1) = $d ifTrue: [ do := (val size < 5) ]
            ifFalse: [ 
                do ifTrue: [ 
                    sum := (m subexpression: 2) asInteger * (m subexpression: 3) asInteger + sum.
            ].  ].
        ].
        
        ^ sum.