https://adventofcode.com/2019
Day1
)copy loaddata
a←LoadTEXT 'input.txt'
a←{⍎⍵}¨¯1↓a
d1←{+/(⌊⍵÷3)-2}
d2←{
f←{r←d1 ⍵ ⋄ r≤0:⍺ ⋄ (⍺+r)∇ r}
+/(0 f⊢)¨⍵
}
Day2
d2←'1,0,...'
d2←⎕JSON '[',d2,']'
∇R←q3 prog;⎕IO;mem;c;op;r1;r2;r3
⎕IO←0
mem←prog
mem[1]←12
mem[2]←2
c←0
LOOP:
op←mem[c]
→(1 2 99=op)/ADD MUL HALT
ADD:op←'+'
→COM
MUL:op←'×'
COM:
r1←mem[c+1]
r2←mem[c+2]
r3←mem[c+3]
mem[r3]←⍎op,'/mem[r1 r2]'
c+←4
→LOOP
HALT:
R←mem[0]
∇
⍝ Part 2 is easy once you discover the relation between input and output is polynomial
1 个赞
day3
q1
:Namespace Day3
⍝ === VARIABLES ===
...
⍝ === End of variables definition ===
(⎕IO ⎕ML ⎕WX)←1 1 3
draw←{
walk←{
f←{d n←⍵
d≡'R':n 0
d≡'U':0 n
d≡'L':(-n)0
d≡'D':0(-n)}
⍺+f ⍵
}
worker←{
0=≢⍵:⍺⍺
W((⍺⍺,⊂W)∇∇)1↓⍵⊣W←⍺ walk⊃⍵
}
0 0((⊂0 0)worker)⍵
}
expand←{
e←{A B←⍵ ⋄ (K/A)(⌽⍣(⊃~K),)¨(⊃-∘(⍳∘|××)-/),(~K←A=B)/↑A B}
⊃,/e¨((1 0⍴⍨⍴)⊂⊢)((⌽+⊢)0(@1)(⍴⍵)⍴1)/⍵
parse←{(⊃,(⍎1↓⊢))¨(','≠⍵)⊆⍵}
q1←{
l1 l2←⍵
f←expand∘draw∘parse
⌊/(+/|)¨I/⍨(I←f l1)∊f l2
}
:EndNamespace
q2
q2←{
l1 l2←⍵
f←expand∘draw∘parse
s←{(⍸K)[⍒(K←⍵∊⍺)/⍵]}
⌊/(f l2)(s+s⍨)f l1
}
1 个赞
day4
q1←{
⍴(((∧⌿2≤⌿⊢)∧(∨⌿2=⌿⊢))(6⍴10)⊤⍵)/⍵
}
q2←{
⍴⍵/⍨(∨/{0 1 0≡⍵}⌺3)¨↓⍉2=⌿(6⍴10)⊤⍵
}
Day6, 用 dfs。
直接贴 q2
test←{
c1←1 2 3 4 5 2 6 4 5 7 8 8 9
c2←2 3 4 5 10 6 11 9 7 8 12 13 14
dfs←{⊃∇⍨/⌽(⊂⍺ ⍺⍺ ⍵),⍺ ⍵⍵ ⍵}
next←{
f depth id←⍵
c←(id=c1)/c2
p←(id=c2)/c1
{id,(depth+1),⍵}¨{(f≠⍵)/⍵}c,p
}
acc←{
f depth id←⍵
14=id:⍺+depth
⍺
}
(0(acc dfs next)0 0 13)-2
}
吐槽一下,那个 byte code interpreter 用了三题了,不知道是出题人太沒創意还是为了故意 punish 那些前面题目沒好好 polish 的人。
Day8
add←{(⍴⍵)⍴(∊⍺){'2'=⍺:⍵ ⋄ ⍺}¨∊⍵}
reshape←{⍵⍴⍨((⍴⍵)÷×/⍺),⌽⍺}
q1←{
new←25 6 reshape ⍵
sect←(⍸(⌊/=⊢)(+/⍣2)'0'=new)⌷new
((+/'2'=⊢)×(+/'1'=⊢)),sect
}
q2←{
⎕IO←0
'⎕ '['0'=add⌿25 6 reshape ⍵]
}
LdBeth
2019 年12 月 18 日 12:02
9
今年一半的题都是那设计得很没品的 byte code simulator 翻来覆去出,贴出来实在太没意思,更何况我看你们回贴的都没有,这逼没法装下去了
1 个赞
Action
2019 年12 月 18 日 12:31
11
建一个leetcode in elisp的Post哇, 每天来盖楼观摩。
LdBeth
2019 年12 月 18 日 20:58
13
那喊个666也可以,总不能啥都不干就想白嫖老夫的答案吧
1 个赞
LdBeth
2019 年12 月 18 日 21:28
14
有好好的 Common Lisp 不用我为啥要用 elisp 这种不但语言特性比 CL 少性能还比 CL 弱的东西……
1 个赞
完全看不懂就无法真心喊出6了,要是写段CL写个什么continuation我还能模糊地感觉到6然后喊出真心的666 不过随便回复一下还是义不容辞的嗯
along
2019 年12 月 19 日 02:29
18
有些颜文字混进去了
(顺便说一下插入表情的时候不会自动在前面加空格,需要手动添加)
LdBeth
2019 年12 月 19 日 03:02
20
前天那题(Day 16 - Advent of Code 2019 )我创建了个 6,000,000 左右个 element 的 list/vector。
用 (make-vector 6000000 0)
Emacs 就挂老久了。Clozure CL (make-array 6000000)
秒 return。
当然理论上可以用 mod
,但是理论上还可以手算呢。用的编程语言优化好,性能好,在这种不限制暴力解的题就是优势。
Part2 我和別人一起写的,他用 C++ 暴力解跑了一分多鐘出來了,我用 APL 写的解运行只用了 0.11 秒,但比他多花了一个多小时才整出來。