moth

Monarch Of The Hill game server
git clone https://git.woozle.org/neale/moth.git

moth / example-puzzles / example / 3
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])