summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs/simple
diff options
context:
space:
mode:
Diffstat (limited to 'krebs/5pkgs/simple')
-rw-r--r--krebs/5pkgs/simple/krebsdance/default.nix157
-rw-r--r--krebs/5pkgs/simple/reaktor2-plugins.nix6
2 files changed, 158 insertions, 5 deletions
diff --git a/krebs/5pkgs/simple/krebsdance/default.nix b/krebs/5pkgs/simple/krebsdance/default.nix
new file mode 100644
index 00000000..cdfe23ef
--- /dev/null
+++ b/krebs/5pkgs/simple/krebsdance/default.nix
@@ -0,0 +1,157 @@
+{ writers }:
+writers.writePython3Bin "krebsdance" { flakeIgnore = [ "E501" ]; } ''
+ import argparse
+ import random
+ import itertools
+
+ claws = [
+ dict(
+ up="(\\/)",
+ down="(/\\)",
+ left="(\\\\)",
+ right="(//)",
+ ),
+ dict(
+ up="(V)",
+ down="(A)",
+ left=">)=",
+ right="=(<",
+ ),
+ dict(
+ up="(U)",
+ down="(n)",
+ left=")==",
+ right="==(",
+ ),
+ ]
+
+ eyes = [
+ "°",
+ "*",
+ "^",
+ "ö",
+ "o",
+ "O",
+ "X",
+ "x",
+ "U",
+ "u",
+ ]
+
+ bodies = [
+ dict(
+ left="(",
+ right=")",
+ ),
+ dict(
+ left="{",
+ right="}",
+ ),
+ dict(
+ left="[",
+ right="]",
+ ),
+ dict(
+ left="<",
+ right=">",
+ ),
+ dict(
+ left="|",
+ right="|",
+ ),
+ ]
+
+ mouths = [
+ ",,,,",
+ ",mm,",
+ "_mm_",
+ "-mm-",
+ ";;;;",
+ ";mm;",
+ ":mm:",
+ "::::",
+ ":ww:",
+ ":<>:",
+ ]
+
+
+ def all_krebses():
+ for mouth, body, eye, claw in itertools.product(mouths, bodies, eyes, claws):
+ yield f'{claw["up"]} {body["left"]}{eye}{mouth}{eye}{body["right"]} {claw["up"]}'
+
+
+ def escape_graph(text):
+ return text.replace("\\", "\\\\")
+
+
+ def krebs_graph() -> str:
+ return "\n".join(itertools.chain(
+ ["digraph {"],
+ [escape_graph(f'"{krebs}"->"{generate(seed=krebs)}"') for krebs in all_krebses()],
+ "}",
+ ))
+
+
+ def generate(*, seed: str, dancing: bool = False) -> str:
+ if seed:
+ random.seed(seed)
+ clawstyle = random.choice(claws)
+ body = random.choice(bodies)
+ eye = random.choice(eyes)
+ mouth = random.choice(mouths)
+ if dancing:
+ return "\n".join(
+ [
+ f'{clawstyle["down"]} {body["left"]}{eye}{mouth}{eye}{body["right"]}{clawstyle["up"]}',
+ f'{clawstyle["left"]}{body["left"]}{eye}{mouth}{eye}{body["right"]} {clawstyle["right"]}',
+ f'{clawstyle["right"]} {body["left"]}{eye}{mouth}{eye}{body["right"]} {clawstyle["left"]}',
+ f'{clawstyle["down"]}{body["left"]}{eye}{mouth}{eye}{body["right"]}{clawstyle["down"]}',
+ ]
+ )
+ else:
+ return f'{clawstyle["up"]} {body["left"]}{eye}{mouth}{eye}{body["right"]} {clawstyle["up"]}'
+
+
+ def fixpoints():
+ for krebs in all_krebses():
+ if generate(seed=krebs) == krebs:
+ yield krebs
+
+
+ def main():
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ "seed",
+ nargs="?",
+ help="random seed to use for generating the krebs variant",
+ )
+
+ parser.add_argument(
+ "--dance",
+ "-d",
+ dest="dance",
+ help="if the krebs should dance",
+ default=False,
+ action="store_true",
+ )
+
+ parser.add_argument(
+ "--mode",
+ "-m",
+ dest="mode",
+ choices=["graphviz", "plain"],
+ default="plain",
+ )
+
+ args = parser.parse_args()
+
+ if args.mode == "plain":
+ print(generate(seed=args.seed, dancing=args.dance))
+ elif args.mode == "graphviz":
+ print(krebs_graph())
+
+
+ if __name__ == "__main__":
+ main()
+''
diff --git a/krebs/5pkgs/simple/reaktor2-plugins.nix b/krebs/5pkgs/simple/reaktor2-plugins.nix
index 54aaf246..052e389a 100644
--- a/krebs/5pkgs/simple/reaktor2-plugins.nix
+++ b/krebs/5pkgs/simple/reaktor2-plugins.nix
@@ -23,11 +23,7 @@ rec {
dance = {
filename = pkgs.writeDash "dance" ''
- echo "<(^.^<)"
- echo "<(^.^)>"
- echo "(>^.^)>"
- echo "(7^.^)7"
- echo "(>^.^<)"
+ ${pkgs.krebsdance}/bin/krebsdance --dance "$@";
'';
};