23 lines
591 B
Plaintext
23 lines
591 B
Plaintext
procedure main(A)
|
|
rules := loadRules(open(A[1],"r"))
|
|
every write(line := !&input, " -> ",apply(rules, line))
|
|
end
|
|
|
|
record rule(pat, term, rep)
|
|
|
|
procedure loadRules(f)
|
|
rules := []
|
|
every !f ? if not ="#" then put(rules,
|
|
rule(1(trim(tab(find("->"))),move(2),tab(many(' \t'))),
|
|
(="."|&null), trim(tab(0))))
|
|
return rules
|
|
end
|
|
|
|
procedure apply(rules, line)
|
|
s := line
|
|
repeat {
|
|
s ?:= tab(find((r := !rules).pat)) || r.rep || (move(*r.pat),tab(0))
|
|
if (s == line) | \r.term then return s else line := s
|
|
}
|
|
end
|