2015/01: Add solution for stage 1
This commit is contained in:
parent
ec99b4770b
commit
9843b1d259
7 changed files with 81 additions and 56 deletions
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
input linguist-vendored=true
|
1
2015/day-01/input
vendored
Normal file
1
2015/day-01/input
vendored
Normal file
File diff suppressed because one or more lines are too long
40
2015/day-01/lib.fs
Normal file
40
2015/day-01/lib.fs
Normal file
|
@ -0,0 +1,40 @@
|
|||
: parse-instructions ( ulen addr -- )
|
||||
0 >r
|
||||
0 u+do
|
||||
c@+
|
||||
dup 40 = if
|
||||
r> r> r>
|
||||
1 +
|
||||
>r >r >r
|
||||
then
|
||||
41 = if
|
||||
r> r> r>
|
||||
1 -
|
||||
>r >r >r
|
||||
then
|
||||
loop
|
||||
drop
|
||||
r>
|
||||
;
|
||||
|
||||
256 Constant max-line
|
||||
Create line-buffer max-line 2 + allot
|
||||
0 Value fd-in
|
||||
|
||||
: open-input ( addr u -- )
|
||||
r/o open-file throw to fd-in
|
||||
;
|
||||
|
||||
: close-input ( -- )
|
||||
fd-in close-file throw
|
||||
;
|
||||
|
||||
: parse-file ( -- u )
|
||||
0
|
||||
begin
|
||||
line-buffer max-line fd-in read-line throw
|
||||
while
|
||||
line-buffer swap parse-instructions +
|
||||
repeat
|
||||
drop
|
||||
;
|
|
@ -1,56 +0,0 @@
|
|||
#! /usr/bin/env gforth
|
||||
|
||||
: parse-instructions ( ulen addr -- )
|
||||
0 >r
|
||||
0 u+do
|
||||
c@+
|
||||
dup 40 = if
|
||||
r> r> r>
|
||||
1 +
|
||||
>r >r >r
|
||||
then
|
||||
41 = if
|
||||
r> r> r>
|
||||
1 -
|
||||
>r >r >r
|
||||
then
|
||||
loop
|
||||
r> ;
|
||||
|
||||
s" (())"
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" ()()"
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" ((("
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" (()(()("
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" ))((((("
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" ())"
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" ))("
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" )))"
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
s" )())())"
|
||||
parse-instructions
|
||||
." return: " . cr drop
|
||||
|
||||
bye
|
9
2015/day-01/stage-1.fs
Executable file
9
2015/day-01/stage-1.fs
Executable file
|
@ -0,0 +1,9 @@
|
|||
#! /usr/bin/env gforth
|
||||
|
||||
require lib.fs
|
||||
|
||||
s" input" open-input
|
||||
parse-file . cr
|
||||
close-input
|
||||
|
||||
bye
|
18
2015/day-01/test.fs
Executable file
18
2015/day-01/test.fs
Executable file
|
@ -0,0 +1,18 @@
|
|||
#! /usr/bin/env gforth
|
||||
|
||||
require lib.fs
|
||||
require ../../lib/tap.fs
|
||||
|
||||
8 plan
|
||||
|
||||
s" (())" parse-instructions 0 = ok
|
||||
s" ()()" parse-instructions 0 = ok
|
||||
s" (((" parse-instructions 3 = ok
|
||||
s" (()(()(" parse-instructions 3 = ok
|
||||
s" ))(((((" parse-instructions 3 = ok
|
||||
s" ())" parse-instructions -1 = ok
|
||||
s" ))(" parse-instructions -1 = ok
|
||||
s" )))" parse-instructions -3 = ok
|
||||
s" )())())" parse-instructions -3 = ok
|
||||
|
||||
bye
|
12
lib/tap.fs
Normal file
12
lib/tap.fs
Normal file
|
@ -0,0 +1,12 @@
|
|||
Variable test#
|
||||
|
||||
: plan ( n -- )
|
||||
." 1.." . cr
|
||||
;
|
||||
|
||||
: ok ( f -- )
|
||||
0= if ." not " then
|
||||
." ok "
|
||||
test# dup @ 1+ dup . swap !
|
||||
cr
|
||||
;
|
Loading…
Reference in a new issue