Paste: AoC 2023 Day 7

Author: Kacarott
Mode: factor
Date: Thu, 7 Dec 2023 08:21:42
Plain Text |
USING: accessors assocs formatting io io.directories
io.encodings.utf8 io.files io.pathnames kernel literals math
math.parser math.statistics namespaces present sequences sorting
source-files splitting vocabs vocabs.parser ;
IN: day7

: key ( hand -- key )
  dup [ 49 = ] partition histogram values inv-sort
  0 suffix unclip rot length + prefix prepend ;

: score ( seq -- n )
  [ 1 + swap second dec> * ] map-index sum ;

: run ( str map -- seq )
  substitute split-lines [ split-words ] map
  [ first key ] sort-by score ;

: part1 ( str -- res ) { "T:" "J;" "Q<" "K=" } run ;

: part2 ( str -- res ) { "T:" "J1" "Q<" "K=" } run ;


MAIN: [
  $[ current-source-file get path>> parent-directory [
      current-vocab vocab-name "../../Inputs/2023/%s.txt" sprintf
      utf8 file-contents
    ] with-directory ]
  [ "Part 1: " write part1 present print ]
  [ "Part 2: " write part2 present print ] bi
]

New Annotation

Summary:
Author:
Mode:
Body: