Neale Pickett
·
2021-02-24
mkpuzzle
1#! /usr/bin/python3
2
3import argparse
4import json
5import os
6import random
7import shutil
8import sys
9
10random.seed(os.getenv("SEED", ""))
11
12words = ["apple", "pear", "peach", "tangerine", "orange", "potato", "carrot", "pea"]
13answer = ' '.join(random.sample(words, 4))
14
15def puzzle():
16 number = random.randint(20, 500)
17 obj = {
18 "Authors": ["neale"],
19 "Body": (
20 "<p>Dynamic puzzles are provided with a JSON-generating <code>mkpuzzles</code> program in the puzzle directory.</p>"
21 "<p>You can write <code>mkpuzzles</code> in any language you like. This puzzle was written in Python 3.</p>"
22 "<p>Here is some salad:<img src='salad.jpg'></p>"
23 ),
24 "Attachments": ["salad.jpg"],
25 "Answers": [
26 answer,
27 ],
28 "Debug": {
29 "Summary": "Dynamic puzzles",
30 "Hints": [
31 "Check the debug output to get the answer." ,
32 ],
33 "Errors": [],
34 "Log": [
35 "%d is a positive integer" % number,
36 ],
37 }
38 }
39 json.dump(obj, sys.stdout)
40
41def open_file(filename):
42 f = open(filename, "rb")
43 shutil.copyfileobj(f, sys.stdout.buffer)
44
45def check_answer(check):
46 obj = {
47 "Correct": (answer == check)
48 }
49 json.dump(obj, sys.stdout)
50
51if len(sys.argv) == 1:
52 raise RuntimeError("Command not provided")
53elif sys.argv[1] == "puzzle":
54 puzzle()
55elif sys.argv[1] == "file":
56 open_file(sys.argv[2])
57elif sys.argv[1] == "answer":
58 check_answer(sys.argv[2])
59else:
60 raise RuntimeError("Unknown command: %s" % sys.argv[1])