-
Notifications
You must be signed in to change notification settings - Fork 0
/
day04.logo
48 lines (38 loc) · 1.02 KB
/
day04.logo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
TO WORDS :LINE
MAKE "NEW (WORD)
IF EMPTY? :LINE [OUTPUT (LIST (WORD))]
MAKE "REST WORDS BUTFIRST :LINE
IFELSE ((FIRST :LINE) = CHAR 32) [
OUTPUT (FPUT (WORD) :REST)
] [
OUTPUT (FPUT (WORD (FIRST :LINE) (FIRST :REST)) (BUTFIRST REST))
]
END
TO LINEVALID? :WDS
IF EMPTY? :WDS [OUTPUT "TRUE]
MAKE "FST FIRST :WDS
MAKE "REST BUTFIRST :WDS
IF EMPTY? :REST [OUTPUT "TRUE]
MAKE "VALIDS MAP [? <> :FST] :REST
OUTPUT (AND (REDUCE "AND :VALIDS) (LINEVALID? :REST))
END
TO SORT :WD
IF EMPTY? WD [OUTPUT WD]
OUTPUT (WORD
(SORT (FILTER [(RAWASCII ?) < (RAWASCII (FIRST :WD))] :WD))
(FIRST :WD)
(SORT (FILTER [(RAWASCII ?) > (RAWASCII (FIRST :WD))] :WD)))
END
TO VALIDCOUNT :FILENAME
OPENREAD :FILENAME
SETREAD :FILENAME
MAKE "VALID 0
MAKE "VALIDANAGRAMS 0
FOREVER [
MAKE "LINE READWORD
IF EMPTY? :LINE [OUTPUT (LIST :VALID :VALIDANAGRAMS)]
IF LINEVALID? WORDS :LINE [MAKE "VALID :VALID + 1]
IF LINEVALID? (MAP [SORT ?] WORDS :LINE) [MAKE "VALIDANAGRAMS :VALIDANAGRAMS + 1]
]
END
PRINT VALIDCOUNT "/home/benkraft/Downloads/input4