initial
This commit is contained in:
115
solver.py
Executable file
115
solver.py
Executable file
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env python3
|
||||
from RuneSolver import VigenereSolver, SequenceSolver
|
||||
from RuneText import Rune, RuneText
|
||||
import sys
|
||||
|
||||
|
||||
def load_sequence_file(fname):
|
||||
with open(fname, 'r') as f:
|
||||
return [int(x) for x in f.readlines()]
|
||||
|
||||
|
||||
PRIMES = load_sequence_file('data/seq_primes_1000.txt')
|
||||
PRIMES_3301 = load_sequence_file('data/seq_primes_3301.txt')
|
||||
NOT_PRIMES = load_sequence_file('data/seq_not_primes.txt')
|
||||
FIBONACCI = load_sequence_file('data/seq_fibonacci.txt')
|
||||
LUCAS = load_sequence_file('data/seq_lucas_numbers.txt')
|
||||
|
||||
|
||||
def print_all_solved():
|
||||
def plain(slvr):
|
||||
slvr.KEY_DATA = []
|
||||
|
||||
def invert(slvr):
|
||||
slvr.KEY_DATA = []
|
||||
slvr.KEY_INVERT = True
|
||||
|
||||
def solution_welcome(slvr):
|
||||
slvr.KEY_DATA = [23, 10, 1, 10, 9, 10, 16, 26] # DIVINITY
|
||||
slvr.INTERRUPT = 'ᚠ'
|
||||
slvr.INTERRUPT_POS = [4, 5, 6, 7, 10, 11, 14, 18, 20, 21, 25]
|
||||
|
||||
def solution_koan_1(slvr):
|
||||
slvr.KEY_DATA = [26] # Y
|
||||
slvr.KEY_INVERT = True
|
||||
|
||||
def solution_jpg107_167(slvr): # FIRFUMFERENFE
|
||||
slvr.KEY_DATA = [0, 10, 4, 0, 1, 19, 0, 18, 4, 18, 9, 0, 18]
|
||||
slvr.INTERRUPT = 'ᚠ'
|
||||
slvr.INTERRUPT_POS = [2, 3]
|
||||
|
||||
def solution_p56_end(slvr):
|
||||
slvr.FN = lambda i, r: r - (PRIMES[i] - 1)
|
||||
slvr.INTERRUPT = 'ᚠ'
|
||||
slvr.INTERRUPT_POS = [4]
|
||||
|
||||
def solve(path, fn_solution, solver=VigenereSolver):
|
||||
slvr = solver()
|
||||
slvr.output.COLORS = False
|
||||
slvr.output.QUIET = True # or use -v/-q while calling
|
||||
slvr.input.load(file=f'pages/{path}.txt')
|
||||
fn_solution(slvr)
|
||||
print(f'pages/{path}.txt')
|
||||
print()
|
||||
slvr.run()
|
||||
print()
|
||||
|
||||
solve('0_warning', invert)
|
||||
solve('0_welcome', solution_welcome)
|
||||
solve('0_wisdom', plain)
|
||||
solve('0_koan_1', solution_koan_1)
|
||||
solve('0_loss_of_divinity', plain)
|
||||
solve('jpg107-167', solution_jpg107_167)
|
||||
solve('jpg229', plain)
|
||||
solve('p56_an_end', solution_p56_end, solver=SequenceSolver)
|
||||
solve('p57_parable', plain)
|
||||
|
||||
|
||||
def play_around():
|
||||
slvr = VigenereSolver()
|
||||
slvr.output.COLORS = False
|
||||
slvr.input.load(file='_input.txt')
|
||||
slvr.KEY_DATA = []
|
||||
slvr.run()
|
||||
|
||||
|
||||
def try_totient_on_unsolved():
|
||||
slvr = SequenceSolver()
|
||||
slvr.output.QUIET = True
|
||||
slvr.output.BREAK_MODE = '' # disable line breaks
|
||||
# for uuu in ['54-55']:
|
||||
for uuu in ['0-2', '3-7', '8-14', '15-22', '23-26', '27-32', '33-39', '40-53', '54-55']:
|
||||
print()
|
||||
print(uuu)
|
||||
with open(f'pages/p{uuu}.txt', 'r') as f:
|
||||
slvr.input.load(RuneText(f.read()[:110]))
|
||||
# alldata = slvr.input.runes_no_whitespace() + [Rune(i=29)]
|
||||
|
||||
def b60(x):
|
||||
v = x % 60
|
||||
return v if v < 29 else 60 - v
|
||||
# for p in PRIMES[:500]:
|
||||
# print(p)
|
||||
# for z in range(29):
|
||||
# def fn(i, x):
|
||||
# return (x + alldata[i - 1].index + z) % 29
|
||||
# if fn(0, alldata[0].index) not in [10, 24]:
|
||||
# continue
|
||||
# slvr.FN = lambda i, r: Rune(i=fn(i, r.index))
|
||||
# slvr.run()
|
||||
for z in range(29):
|
||||
# slvr.FN = lambda i, r: r - z # ((i + z) // 3)
|
||||
# slvr.FN = lambda i, r: r - PRIMES[i] + z
|
||||
# slvr.FN = lambda i, r: Rune(i=b60(r.prime) + z % 29)
|
||||
# slvr.FN = lambda i, r: Rune(i=((r.prime + alldata[i + 1].prime) + z) % 60 // 2)
|
||||
# slvr.FN = lambda i, r: Rune(i=(3301 * r.index + z) % 29)
|
||||
slvr.FN = lambda i, r: Rune(i=(67 * r.index + z) % 29)
|
||||
# slvr.FN = lambda i, r: Rune(i=(r.prime ** i + z) % 29)
|
||||
slvr.run()
|
||||
|
||||
|
||||
if '-s' in sys.argv: # print [s]olved
|
||||
print_all_solved()
|
||||
else:
|
||||
# play_around()
|
||||
try_totient_on_unsolved()
|
||||
Reference in New Issue
Block a user