From 95e84ceb80e73b8bbde29d32cb6f73de7ff2b849 Mon Sep 17 00:00:00 2001 From: osmarks Date: Sat, 5 Feb 2022 14:45:04 +0000 Subject: [PATCH] publish backlog of things --- art2.py | 50 +++ art3.py | 27 ++ audio-modem.html | 69 ++++ autoformat.py | 78 ++++ beep.py | 25 +- clipstack.py | 35 ++ code-guessing/bad-factorio.html | 254 +++++++++++++ code-guessing/bpe-trainer.py | 48 +++ code-guessing/codexsoln.py | 158 ++++++++ code-guessing/codexsoln2.py | 117 ++++++ code-guessing/compr.json | 1 + code-guessing/compressor-test.py | 95 +++++ code-guessing/fib.c | 366 ++++++++++++++++++ code-guessing/fib.py | 73 ++++ code-guessing/fibinput.c | 71 ++++ code-guessing/fiborig.c | 70 ++++ code-guessing/freqs.json | 1 + code-guessing/json_submission.py | 1 + code-guessing/quantizer.py | 30 ++ code-guessing/sprites/belt-conn.png | Bin 0 -> 140 bytes code-guessing/sprites/belt-corner.png | Bin 0 -> 188 bytes code-guessing/sprites/belt.png | Bin 0 -> 142 bytes code-guessing/sprites/blank.png | Bin 0 -> 338 bytes code-guessing/sprites/blue-plate.png | Bin 0 -> 136 bytes code-guessing/sprites/drill.png | Bin 0 -> 261 bytes code-guessing/sprites/inserter-arm.png | Bin 0 -> 147 bytes code-guessing/sprites/inserter-base.png | Bin 0 -> 121 bytes code-guessing/sprites/ore1.png | Bin 0 -> 207 bytes code-guessing/sprites/ore2.png | Bin 0 -> 195 bytes code-guessing/sprites/plate1.png | Bin 0 -> 136 bytes code-guessing/test7.py | 296 +++++++++++++++ code-guessing/thingy.py | 77 ++++ code-guessing/tictac.html | 249 +++++++++++++ code-guessing/token_map.csv | 142 +++++++ code-guessing/validate_json.py | 16 + esolangs-iceberg/above.jpg | Bin 0 -> 23571 bytes esolangs-iceberg/below.jpg | Bin 0 -> 14750 bytes esolangs-iceberg/belowwater.jpg | Bin 0 -> 33132 bytes esolangs-iceberg/bottom.jpg | Bin 0 -> 20593 bytes esolangs-iceberg/iceberg.html | 178 +++++++++ esolangs-iceberg/middle.jpg | Bin 0 -> 25131 bytes esolangs-iceberg/oniceberg.jpg | Bin 0 -> 29364 bytes gpu_mandelbrot.py | 32 ++ ptt.py | 2 +- square-law gravity - physics test.html | 64 ++++ steganography.py | 63 ++++ tictactoe.html | 472 ++++++++++++++++++++++++ 47 files changed, 3147 insertions(+), 13 deletions(-) create mode 100644 art2.py create mode 100644 art3.py create mode 100644 audio-modem.html create mode 100644 autoformat.py create mode 100644 clipstack.py create mode 100644 code-guessing/bad-factorio.html create mode 100644 code-guessing/bpe-trainer.py create mode 100644 code-guessing/codexsoln.py create mode 100644 code-guessing/codexsoln2.py create mode 100644 code-guessing/compr.json create mode 100644 code-guessing/compressor-test.py create mode 100644 code-guessing/fib.c create mode 100644 code-guessing/fib.py create mode 100644 code-guessing/fibinput.c create mode 100644 code-guessing/fiborig.c create mode 100644 code-guessing/freqs.json create mode 100644 code-guessing/json_submission.py create mode 100644 code-guessing/quantizer.py create mode 100644 code-guessing/sprites/belt-conn.png create mode 100644 code-guessing/sprites/belt-corner.png create mode 100644 code-guessing/sprites/belt.png create mode 100644 code-guessing/sprites/blank.png create mode 100644 code-guessing/sprites/blue-plate.png create mode 100644 code-guessing/sprites/drill.png create mode 100644 code-guessing/sprites/inserter-arm.png create mode 100644 code-guessing/sprites/inserter-base.png create mode 100644 code-guessing/sprites/ore1.png create mode 100644 code-guessing/sprites/ore2.png create mode 100644 code-guessing/sprites/plate1.png create mode 100644 code-guessing/test7.py create mode 100644 code-guessing/thingy.py create mode 100644 code-guessing/tictac.html create mode 100644 code-guessing/token_map.csv create mode 100644 code-guessing/validate_json.py create mode 100644 esolangs-iceberg/above.jpg create mode 100644 esolangs-iceberg/below.jpg create mode 100644 esolangs-iceberg/belowwater.jpg create mode 100644 esolangs-iceberg/bottom.jpg create mode 100644 esolangs-iceberg/iceberg.html create mode 100644 esolangs-iceberg/middle.jpg create mode 100644 esolangs-iceberg/oniceberg.jpg create mode 100644 gpu_mandelbrot.py create mode 100644 square-law gravity - physics test.html create mode 100644 steganography.py create mode 100644 tictactoe.html diff --git a/art2.py b/art2.py new file mode 100644 index 0000000..d5b06fa --- /dev/null +++ b/art2.py @@ -0,0 +1,50 @@ +from PIL import Image +import numpy.fft as fft +import numpy as np +import random +import math + +w, h = 512, 512 +out = np.zeros((w, h, 3)) + +random.seed(4) + +def operate_on_channel(n): + mask = np.full((w, h), 1) + midx, midy = w // 2, h // 2 + + J = 1 + for x in range(midx - J, midx + J + 1): + for y in range(midy - J, midy + J + 1): + mask[x, y] = 0.5 + """ + for x in range(w): + for y in range(h): + dist = (x - midx) ** 2 + abs(y - midy) ** 2 + #if 1024 > dist > 4: + # mask[x, y] = 1 + #mask[x, y] = math.sqrt(dist) / 500 + if dist < 256: mask[x, y] = 1 + """ + """ + for x in range(w): + for y in range(h): + mask[x, y] = random.uniform(0.7, 1) + """ + channel = fft.ifftshift(mask) + rfft = fft.ifft2(channel) + channel = np.abs(np.real(rfft)) + #red2 = np.abs(np.imag(rfft)) + #red = np.log(np.abs(np.real(red))) + #red = np.abs(mask) + + channel = channel * (255 / np.max(channel)) + #red2 = red2 * (255 / np.max(red2)) + + out[..., n] = channel + +for i in range(3): + operate_on_channel(i) + +out = Image.fromarray(out, "RGB") +out.save("/tmp/out.png") \ No newline at end of file diff --git a/art3.py b/art3.py new file mode 100644 index 0000000..1addda4 --- /dev/null +++ b/art3.py @@ -0,0 +1,27 @@ +from PIL import Image +import numpy.fft as fft +import numpy as np +import random +import math + +w, h = 512, 512 +out = np.zeros((w, h, 3), dtype=np.uint8) + +def bitstring(x): return f"{x:06b}" +def concat(l): + out = [] + for m in l: + for n in m: + out.append(n) + return "".join(out) + +for r in range(2**6): + for g in range(2**6): + for b in range(2**6): + a = concat(zip(*(bitstring(r), bitstring(g), bitstring(b)))) + a = int(a, 2) + x, y = a & 0b111111111, a >> 9 + out[x, y] = (r << 2, g << 2, b << 2) + +out = Image.fromarray(out, "RGB") +out.save("/tmp/out.png") \ No newline at end of file diff --git a/audio-modem.html b/audio-modem.html new file mode 100644 index 0000000..1eb2d30 --- /dev/null +++ b/audio-modem.html @@ -0,0 +1,69 @@ + + + + + + \ No newline at end of file diff --git a/autoformat.py b/autoformat.py new file mode 100644 index 0000000..89bf7fa --- /dev/null +++ b/autoformat.py @@ -0,0 +1,78 @@ +from fractions import Fraction +from functools import reduce +import sys +from math import floor +import random + +def interpolate(points): + def mul_polys(p1, p2): + out = [0] * (len(p1) + len(p2) - 1) + for i1, c1 in enumerate(p1): + for i2, c2 in enumerate(p2): + out[i1 + i2] += c1 * c2 + return out + def sum_polys(ps): + out = [0] * max(map(len, ps)) + for p in ps: + for i, c in enumerate(p): + out[i] += c + return out + def basis(j): + px = points[j][0] + out = [] + for x, y in points: + if x != px: + div = px - x + out.append([-Fraction(x, div), Fraction(1, div)]) + return reduce(mul_polys, out) + out = [] + for i, (x, y) in enumerate(points): + out.append([c * y for c in basis(i)]) + return sum_polys(out) + +def evaluate(poly, x): + y = 0 + for c in reversed(poly): + y *= x + y += c + return y + +indents = {"\t": 8, " ": 1, " ": Fraction(2, 3), " ": 2, " ": 4, " ": Fraction(4, 3), "​": 0} +def get_indent(line): + i = 0 + e = 0 + for j, c in enumerate(line): + if c in indents: + i += indents[c] + e = j + 1 + else: break + return i, e + +with open(sys.argv[1]) as tplfile: + counts = [ (lnum, get_indent(line)[0]) for lnum, line in enumerate(tplfile.readlines()) ] + +counts = random.sample(counts, k=4) +poly = interpolate(counts) + +lindents = [ (Fraction(size), char) for char, size in indents.items() if size != 0 ] +lindents.sort() +def gen_indent(n): + n = Fraction(abs(n)) + out = "" + for (csize, cchar), (nsize, _) in zip(lindents, lindents[1:] + [(100000000000000, " ")]): + nmult = 0 + while True: + nxt = nmult + nsize + if nxt <= n: + nmult = nxt + else: break + + dif = floor((n - nmult) / csize) + n -= dif * csize + out += cchar * dif + return out + +with open(sys.argv[2]) as infile: + for lnum, line in enumerate(infile.readlines()): + line = line[get_indent(line)[1]:] + print(gen_indent(evaluate(poly, lnum)) + line, end="") diff --git a/beep.py b/beep.py index b6e97b1..caa2b87 100644 --- a/beep.py +++ b/beep.py @@ -10,8 +10,8 @@ import struct # disk instead of buffering it all in memory list this. But most sounds will fit in # memory. audio = [] -sample_rate = 44100.0 - +sample_rate = 48000.0 +phase = 0 def append_silence(duration_milliseconds=500): num_samples = duration_milliseconds * (sample_rate / 1000.0) @@ -24,10 +24,12 @@ def append_sinewave( freq=440.0, duration_milliseconds=500, volume=1.0): - global audio # using global variables isn't cool. + global phase num_samples = duration_milliseconds * (sample_rate / 1000.0) + pc = math.tau * freq / sample_rate for x in range(int(num_samples)): - audio.append(volume * math.sin(2 * math.pi * freq * ( x / sample_rate ))) + phase += pc + audio.append(volume * math.sin(phase)) def append_squarewave( freq=440.0, @@ -54,11 +56,10 @@ def save_wav(file_name): wav_file.close() return -#for _ in range(8): -# append_sinewave(volume=1.0, freq=1000.0) -# append_silence() -append_sinewave(freq=500, duration_milliseconds=500) -append_sinewave(freq=1000, duration_milliseconds=500) -append_sinewave(freq=2000, duration_milliseconds=500) -append_sinewave(freq=500, duration_milliseconds=500) -save_wav("output.wav") \ No newline at end of file +import random +freq = 6 +for i in range(160): + append_sinewave(volume=1.0, freq=math.exp(freq), duration_milliseconds=50) + freq += random.uniform(-0.2, 0.2) + freq = max(4.5, min(freq, 9)) +save_wav("output.wav") diff --git a/clipstack.py b/clipstack.py new file mode 100644 index 0000000..eaa21ef --- /dev/null +++ b/clipstack.py @@ -0,0 +1,35 @@ +import sqlite3, pyperclip, os.path, subprocess, sys + +conn = sqlite3.connect(os.path.expanduser("~/.local/share/clipstack.sqlite3")) +conn.executescript("""CREATE TABLE IF NOT EXISTS stack (pos INTEGER PRIMARY KEY, data BLOB NOT NULL)""") + +def push(data): + c = conn.cursor() + c.execute("SELECT max(pos) FROM stack") + res = c.fetchone()[0] + if res == None: nxt = 0 + else: nxt = res + 1 + c.execute("INSERT INTO stack VALUES (?, ?)", (nxt, data)) + conn.commit() + +def pop(): + c = conn.cursor() + c.execute("SELECT * FROM stack ORDER BY pos DESC LIMIT 1") + res = c.fetchone() + if not res: return + pos, data = res + c.execute("DELETE FROM stack WHERE pos = ?", (pos,)) + return data + conn.commit() + +mode = sys.argv[1] +if mode == "push": + proc = subprocess.run(["xclip", "-selection", "clipboard", "-o"], stdout=subprocess.PIPE) + if proc.returncode == 0: + push(proc.stdout) + print("push") +elif mode == "pop": + data = pop() + if data: + proc = subprocess.run(["xclip", "-selection", "clipboard"], input=data) + print("pop") \ No newline at end of file diff --git a/code-guessing/bad-factorio.html b/code-guessing/bad-factorio.html new file mode 100644 index 0000000..9b5206d --- /dev/null +++ b/code-guessing/bad-factorio.html @@ -0,0 +1,254 @@ + +
+
+ + +
+ \ No newline at end of file diff --git a/code-guessing/bpe-trainer.py b/code-guessing/bpe-trainer.py new file mode 100644 index 0000000..1cebed7 --- /dev/null +++ b/code-guessing/bpe-trainer.py @@ -0,0 +1,48 @@ +import os, csv, re, itertools, numpy, collections, json + +rawbuffer = bytearray() + +with open("/tmp/input.csv") as f: + r = csv.reader(f) + for row in r: + channel, timestamp, message, _ = row + message = re.sub("<@!?[0-9]+>", "", message) + message = re.sub("<:([A-Za-z0-9_-]+):[0-9]+>", lambda match: match.group(1), message) + rawbuffer += (message.strip() + " ").encode("utf-8") + +#print(rawbuffer.count(b"\x0f")) +#raise SystemExit() + +print(len(rawbuffer)) +buffer = numpy.array(rawbuffer, dtype=numpy.uint16) +dc = {} +for newindex in range(256, 1024): + freqs = collections.Counter(zip(buffer, buffer[1:])) + (fst, snd), count = freqs.most_common(1)[0] + print(newindex, count, repr(chr(fst)), repr(chr(snd))) + dc[newindex] = int(fst), int(snd) + pending = False + newbuffer = numpy.zeros_like(buffer) + z = 0 + for code in buffer: + if pending: + if code == snd: + newbuffer[z] = newindex + z += 1 + pending = False + continue + else: + newbuffer[z] = fst + z += 1 + pending = False + if code == fst: + pending = True + else: + newbuffer[z] = code + z += 1 + buffer = newbuffer[:z] +with open("compr.json", "w") as f: + json.dump({ + "dicts": dc, + "frequencies": dict(collections.Counter(map(int, buffer))) + }, f, separators=",:") \ No newline at end of file diff --git a/code-guessing/codexsoln.py b/code-guessing/codexsoln.py new file mode 100644 index 0000000..6573df3 --- /dev/null +++ b/code-guessing/codexsoln.py @@ -0,0 +1,158 @@ +# Programs are to validate JSON according to the JSON spec (https://www.json.org/), with the exception that you may assume that the string will consist entirely of the classic printable ASCII characters (codepoints 32-127, horizontal tabs, and newlines). +# You may additionally assume that the input will not be nested more than 16 levels. +def entry(string): + if string == "": + return True + elif string[0] == '{': + return entry_object(string) + elif string[0] == '[': + return entry_array(string) + elif string[0] == '"': + return entry_string(string) + elif string[0] in '-0123456789': + return entry_number(string) + elif string[0] == 't': + return entry_true(string) + elif string[0] == 'f': + return entry_false(string) + elif string[0] == 'n': + return entry_null(string) + else: + return False + +def entry_object(string): + if string[0] != '{': + return False + string = string[1:] + if string[0] == '}': + return True + while True: + if not entry_string(string): + return False + if not entry_colon(string): + return False + if not entry(string): + return False + if string[0] == '}': + return True + if not entry_comma(string): + return False + +def entry_array(string): + if string[0] != '[': + return False + string = string[1:] + if string[0] == ']': + return True + while True: + if not entry(string): + return False + if string[0] == ']': + return True + if not entry_comma(string): + return False + +def entry_string(string): + if string[0] != '"': + return False + string = string[1:] + while True: + if string[0] == '"': + return True + if string[0] == '\\': + string = string[1:] + if string[0] == 'u': + string = string[1:] + if not string[0] in '0123456789abcdef': + return False + string = string[1:] + if not string[0] in '0123456789abcdef': + return False + string = string[1:] + if not string[0] in '0123456789abcdef': + return False + string = string[1:] + if not string[0] in '0123456789abcdef': + return False + string = string[1:] + elif string[0] == '"': + pass + elif string[0] == '\\': + pass + elif string[0] == '/': + pass + elif string[0] == 'b': + pass + elif string[0] == 'f': + pass + elif string[0] == 'n': + pass + elif string[0] == 'r': + pass + elif string[0] == 't': + pass + else: + return False + else: + string = string[1:] + +def entry_number(string): + if string[0] not in '-0123456789': + return False + string = string[1:] + if string[0] == '.': + string = string[1:] + if string[0] not in '0123456789': + return False + string = string[1:] + if string[0] in 'eE': + string = string[1:] + if string[0] in '+-': + string = string[1:] + if string[0] not in '0123456789': + return False + string = string[1:] + if string[0] not in '0123456789': + return False + string = string[1:] + return True + +def entry_colon(string): + if string[0] != ':': + return False + string = string[1:] + return True + +def entry_comma(string): + if string[0] != ',': + return False + string = string[1:] + return True + +def entry_true(string): + if string[0:4] != 'true': + return False + string = string[4:] + return True + +def entry_false(string): + if string[0:5] != 'false': + return False + string = string[5:] + return True + +def entry_null(string): + if string[0:4] != 'null': + return False + string = string[4:] + return True + +def main(): + string = input() + if entry(string): + print("Valid JSON") + else: + print("Invalid JSON") + +if __name__ == "__main__": + main() diff --git a/code-guessing/codexsoln2.py b/code-guessing/codexsoln2.py new file mode 100644 index 0000000..2b69309 --- /dev/null +++ b/code-guessing/codexsoln2.py @@ -0,0 +1,117 @@ +# Programs are to validate JSON according to the JSON spec (https://www.json.org/), with the exception that you may assume that the string will consist entirely of the classic printable ASCII characters (codepoints 32-127, horizontal tabs, and newlines). +# You may additionally assume that the input will not be nested more than 16 levels. +def entry(string): + string = string.strip() + if len(string) == 0: + return True + if string[0] == '{': + return object(string) + elif string[0] == '[': + return array(string) + elif string[0] in '-0123456789': + return number(string) + elif string[0] == '"': + return string(string) + else: + return False + +def object(string): + if string[0] != '{': + return False + string = string[1:] + if string[0] == '}': + return True + string = string.strip() + if string[0] != '"': + return False + string = string[1:] + if string[0] != ':': + return False + string = string[1:] + string = string.strip() + if not entry(string): + return False + string = string.strip() + if string[0] == '}': + return True + if string[0] != ',': + return False + string = string[1:] + string = string.strip() + if not object(string): + return False + string = string.strip() + if string[0] != '}': + return False + return True + +def array(string): + if string[0] != '[': + return False + string = string[1:] + if string[0] == ']': + return True + string = string.strip() + if not entry(string): + return False + string = string.strip() + if string[0] == ']': + return True + if string[0] != ',': + return False + string = string[1:] + string = string.strip() + if not array(string): + return False + string = string.strip() + if string[0] != ']': + return False + return True + +def number(string): + if string[0] not in '-0123456789': + return False + string = string[1:] + if string[0] == '.': + string = string[1:] + if string[0] not in '0123456789': + return False + string = string[1:] + while string[0] in '0123456789': + string = string[1:] + if string[0] not in '0123456789': + return False + string = string[1:] + if string[0] not in 'eE': + return False + string = string[1:] + if string[0] not in '+-': + return False + string = string[1:] + if string[0] not in '0123456789': + return False + string = string[1:] + while string[0] in '0123456789': + string = string[1:] + return True + +def string(string): + if string[0] != '"': + return False + string = string[1:] + while string[0] != '"': + if string[0] == '\\': + string = string[1:] + if string[0] not in '"\\/bfnrt': + return False + string = string[1:] + else: + string = string[1:] + return True + +def main(): + string = input() + print(entry(string)) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/code-guessing/compr.json b/code-guessing/compr.json new file mode 100644 index 0000000..1795645 --- /dev/null +++ b/code-guessing/compr.json @@ -0,0 +1 @@ +{"dicts":{"256":[101,32],"257":[116,32],"258":[115,32],"259":[116,104],"260":[105,110],"261":[100,32],"262":[101,114],"263":[97,110],"264":[121,32],"265":[111,32],"266":[111,110],"267":[32,32],"268":[111,117],"269":[111,114],"270":[103,32],"271":[101,110],"272":[97,108],"273":[260,270],"274":[97,32],"275":[114,101],"276":[97,114],"277":[105,258],"278":[32,259],"279":[116,265],"280":[115,116],"281":[105,257],"282":[105,116],"283":[111,109],"284":[97,116],"285":[32,119],"286":[121,268],"287":[104,97],"288":[101,261],"289":[102,32],"290":[44,32],"291":[108,264],"292":[117,115],"293":[263,261],"294":[108,32],"295":[101,258],"296":[73,32],"297":[262,32],"298":[99,104],"299":[111,119],"300":[267,267],"301":[101,115],"302":[259,256],"303":[97,115],"304":[101,99],"305":[286,32],"306":[107,32],"307":[118,256],"308":[108,105],"309":[116,105],"310":[109,32],"311":[39,257],"312":[108,111],"313":[269,32],"314":[114,111],"315":[39,258],"316":[108,256],"317":[109,97],"318":[266,32],"319":[263,32],"320":[101,108],"321":[260,32],"322":[98,117],"323":[97,257],"324":[108,101],"325":[97,99],"326":[105,99],"327":[105,115],"328":[278,256],"329":[105,32],"330":[109,256],"331":[271,32],"332":[97,98],"333":[111,289],"334":[110,111],"335":[105,108],"336":[114,97],"337":[104,32],"338":[112,314],"339":[46,32],"340":[107,256],"341":[117,110],"342":[103,111],"343":[322,257],"344":[118,262],"345":[111,112],"346":[115,283],"347":[163,226],"348":[105,259],"349":[131,347],"350":[349,349],"351":[115,101],"352":[299,32],"353":[105,100],"354":[99,283],"355":[115,265],"356":[109,264],"357":[111,100],"358":[292,256],"359":[282,315],"360":[73,39],"361":[114,105],"362":[96,96],"363":[119,104],"364":[111,108],"365":[102,313],"366":[98,101],"367":[287,307],"368":[115,104],"369":[97,258],"370":[117,114],"371":[272,291],"372":[101,109],"373":[101,120],"374":[97,103],"375":[10,300],"376":[97,100],"377":[115,105],"378":[116,116],"379":[98,256],"380":[62,32],"381":[96,32],"382":[266,256],"383":[334,257],"384":[262,256],"385":[117,99],"386":[226,141],"387":[276,256],"388":[259,277],"389":[116,262],"390":[268,257],"391":[110,311],"392":[112,32],"393":[110,101],"394":[272,32],"395":[268,108],"396":[100,111],"397":[99,319],"398":[41,41],"399":[102,269],"400":[259,323],"401":[271,116],"402":[105,114],"403":[112,112],"404":[266,311],"405":[308,340],"406":[298,32],"407":[98,304],"408":[97,264],"409":[346,101],"410":[46,46],"411":[292,257],"412":[348,32],"413":[112,101],"414":[116,114],"415":[111,102],"416":[112,111],"417":[109,101],"418":[259,273],"419":[97,358],"420":[105,289],"421":[99,266],"422":[287,257],"423":[100,101],"424":[100,265],"425":[112,108],"426":[407,419],"427":[49,49],"428":[115,117],"429":[116,97],"430":[395,261],"431":[100,105],"432":[115,257],"433":[100,404],"434":[103,101],"435":[109,111],"436":[284,105],"437":[116,111],"438":[271,257],"439":[113,117],"440":[110,265],"441":[285,104],"442":[350,350],"443":[260,103],"444":[48,48],"445":[97,109],"446":[99,357],"447":[98,111],"448":[110,32],"449":[121,295],"450":[103,104],"451":[117,108],"452":[65,65],"453":[41,32],"454":[63,32],"455":[263,103],"456":[101,97],"457":[259,101],"458":[282,256],"459":[360,310],"460":[114,32],"461":[268,110],"462":[119,269],"463":[272,108],"464":[106,411],"465":[103,336],"466":[283,32],"467":[110,352],"468":[62,62],"469":[117,116],"470":[278,277],"471":[335,294],"472":[107,273],"473":[346,256],"474":[112,275],"475":[102,114],"476":[101,118],"477":[107,101],"478":[109,109],"479":[112,262],"480":[47,47],"481":[288,279],"482":[119,412],"483":[60,60],"484":[446,256],"485":[102,385],"486":[112,115],"487":[263,257],"488":[97,121],"489":[100,327],"490":[99,269],"491":[116,258],"492":[320,294],"493":[109,112],"494":[284,256],"495":[104,378],"496":[344,264],"497":[58,480],"498":[338,465],"499":[99,256],"500":[326,32],"501":[354,112],"502":[97,261],"503":[413,345],"504":[10,32],"505":[115,112],"506":[104,352],"507":[286,460],"508":[332,390],"509":[107,258],"510":[503,316],"511":[99,263],"512":[102,260],"513":[111,261],"514":[58,32],"515":[40,40],"516":[43,43],"517":[495,486],"518":[517,497],"519":[338,98],"520":[272,294],"521":[280,114],"522":[73,285],"523":[260,389],"524":[284,315],"525":[280,117],"526":[287,258],"527":[61,32],"528":[332,316],"529":[119,114],"530":[115,256],"531":[278,323],"532":[67,32],"533":[101,280],"534":[110,299],"535":[374,256],"536":[272,355],"537":[263,100],"538":[97,330],"539":[301,258],"540":[111,98],"541":[114,256],"542":[119,422],"543":[48,32],"544":[117,109],"545":[342,513],"546":[475,466],"547":[274,98],"548":[99,32],"549":[271,100],"550":[266,291],"551":[109,269],"552":[112,276],"553":[46,354],"554":[301,115],"555":[309,330],"556":[101,100],"557":[450,257],"558":[553,47],"559":[434,257],"560":[266,258],"561":[375,300],"562":[273,279],"563":[320,108],"564":[119,32],"565":[317,340],"566":[108,294],"567":[116,297],"568":[262,258],"569":[120,32],"570":[49,54],"571":[103,105],"572":[370,256],"573":[260,256],"574":[305,397],"575":[97,403],"576":[511,311],"577":[97,97],"578":[104,256],"579":[118,297],"580":[104,105],"581":[115,262],"582":[108,121],"583":[285,422],"584":[118,101],"585":[49,50],"586":[312,111],"587":[442,442],"588":[260,100],"589":[303,109],"590":[362,96],"591":[286,39],"592":[259,384],"593":[102,105],"594":[276,32],"595":[551,256],"596":[102,341],"597":[396,301],"598":[102,102],"599":[115,99],"600":[263,121],"601":[97,105],"602":[309,318],"603":[259,297],"604":[97,118],"605":[105,39],"606":[104,104],"607":[309,109],"608":[386,181],"609":[118,105],"610":[112,117],"611":[278,101],"612":[108,455],"613":[436,318],"614":[116,117],"615":[115,47],"616":[597,391],"617":[119,101],"618":[102,101],"619":[119,369],"620":[51,52],"621":[109,117],"622":[461,261],"623":[260,116],"624":[98,264],"625":[98,114],"626":[312,294],"627":[226,128],"628":[115,111],"629":[105,406],"630":[226,134],"631":[409,418],"632":[452,452],"633":[115,109],"634":[489,490],"635":[485,306],"636":[102,97],"637":[275,371],"638":[437,265],"639":[98,303],"640":[103,117],"641":[260,306],"642":[99,111],"643":[101,112],"644":[515,83],"645":[109,372],"646":[612,117],"647":[103,256],"648":[368,281],"649":[259,32],"650":[301,257],"651":[112,114],"652":[109,263],"653":[105,285],"654":[107,288],"655":[457,264],"656":[109,260],"657":[40,75],"658":[99,108],"659":[285,412],"660":[271,261],"661":[325,306],"662":[296,433],"663":[487,279],"664":[275,99],"665":[104,101],"666":[107,467],"667":[102,289],"668":[351,256],"669":[107,534],"670":[105,122],"671":[488,258],"672":[34,32],"673":[109,401],"674":[266,270],"675":[101,344],"676":[105,102],"677":[332,291],"678":[342,108],"679":[98,316],"680":[325,107],"681":[416,115],"682":[431,261],"683":[275,376],"684":[100,353],"685":[50,98],"686":[10,362],"687":[68,32],"688":[686,381],"689":[116,370],"690":[100,262],"691":[276,261],"692":[49,32],"693":[76,32],"694":[435,432],"695":[589,685],"696":[97,112],"697":[259,524],"698":[116,119],"699":[621,406],"700":[353,101],"701":[108,276],"702":[115,320],"703":[368,430],"704":[262,101],"705":[52,32],"706":[282,264],"707":[103,337],"708":[498,478],"709":[108,282],"710":[116,288],"711":[100,256],"712":[117,112],"713":[99,114],"714":[108,317],"715":[119,471],"716":[684,391],"717":[714,265],"718":[259,331],"719":[121,301],"720":[591,541],"721":[282,105],"722":[48,50],"723":[111,603],"724":[56,54],"725":[298,263],"726":[116,256],"727":[519,677],"728":[309,266],"729":[117,392],"730":[420,305],"731":[83,32],"732":[634,100],"733":[51,50],"734":[525,667],"735":[119,408],"736":[292,273],"737":[336,260],"738":[260,328],"739":[287,403],"740":[675,121],"741":[121,101],"742":[95,32],"743":[287,287],"744":[97,102],"745":[116,121],"746":[630,144],"747":[108,260],"748":[360,307],"749":[303,257],"750":[274,115],"751":[98,32],"752":[415,328],"753":[366,378],"754":[226,136],"755":[105,316],"756":[547,281],"757":[53,32],"758":[367,279],"759":[115,290],"760":[49,48],"761":[260,257],"762":[317,264],"763":[51,32],"764":[377,493],"765":[105,109],"766":[121,456],"767":[116,101],"768":[115,364],"769":[695,289],"770":[102,402],"771":[50,32],"772":[386,186],"773":[529,458],"774":[286,285],"775":[65,80],"776":[54,53],"777":[105,261],"778":[57,57],"779":[55,51],"780":[119,348],"781":[108,284],"782":[287,261],"783":[342,257],"784":[98,502],"785":[98,291],"786":[519,324],"787":[119,430],"788":[117,256],"789":[590,10],"790":[732,575],"791":[266,328],"792":[363,264],"793":[317,121],"794":[257,333],"795":[304,116],"796":[268,114],"797":[109,258],"798":[115,121],"799":[790,558],"800":[102,325],"801":[99,430],"802":[277,274],"803":[360,566],"804":[303,256],"805":[41,59],"806":[396,295],"807":[103,110],"808":[53,53],"809":[646,535],"810":[54,52],"811":[325,99],"812":[476,331],"813":[290,343],"814":[51,48],"815":[414,264],"816":[596,99],"817":[402,32],"818":[409,382],"819":[100,304],"820":[58,58],"821":[111,111],"822":[605,310],"823":[114,341],"824":[95,95],"825":[709,262],"826":[274,99],"827":[276,100],"828":[301,256],"829":[327,391],"830":[366,331],"831":[582,114],"832":[226,138],"833":[112,104],"834":[102,108],"835":[479,115],"836":[610,257],"837":[105,493],"838":[410,410],"839":[351,109],"840":[312,99],"841":[118,111],"842":[269,264],"843":[793,379],"844":[112,256],"845":[363,331],"846":[111,107],"847":[118,272],"848":[115,353],"849":[501,335],"850":[56,55],"851":[57,48],"852":[354,109],"853":[298,304],"854":[104,384],"855":[607,295],"856":[278,641],"857":[299,448],"858":[366,273],"859":[770,432],"860":[268,707],"861":[274,312],"862":[115,304],"863":[278,384],"864":[109,266],"865":[280,276],"866":[109,284],"867":[285,269],"868":[49,53],"869":[260,280],"870":[468,468],"871":[268,116],"872":[282,258],"873":[115,572],"874":[374,295],"875":[277,302],"876":[119,492],"877":[681,377],"878":[587,587],"879":[110,46],"880":[268,115],"881":[483,483],"882":[825,371],"883":[364,261],"884":[304,257],"885":[99,370],"886":[103,271],"887":[47,55],"888":[345,32],"889":[115,337],"890":[276,622],"891":[271,103],"892":[119,256],"893":[335,108],"894":[421,116],"895":[361,112],"896":[97,117],"897":[109,357],"898":[116,273],"899":[275,261],"900":[104,320],"901":[363,265],"902":[111,344],"903":[124,124],"904":[398,398],"905":[226,142],"906":[905,149],"907":[523,533],"908":[98,105],"909":[325,614],"910":[98,108],"911":[112,316],"912":[278,331],"913":[361,557],"914":[766,337],"915":[439,458],"916":[104,277],"917":[627,139],"918":[317,711],"919":[109,272],"920":[105,280],"921":[303,839],"922":[325,256],"923":[107,295],"924":[263,264],"925":[753,297],"926":[427,427],"927":[98,737],"928":[273,302],"929":[309,99],"930":[98,121],"931":[118,32],"932":[103,265],"933":[775,693],"934":[93,32],"935":[296,367],"936":[275,303],"937":[457,310],"938":[441,629],"939":[111,312],"940":[275,256],"941":[586,306],"942":[280,100],"943":[414,263],"944":[298,276],"945":[521,385],"946":[279,302],"947":[285,114],"948":[474,115],"949":[363,629],"950":[702,289],"951":[108,539],"952":[516,32],"953":[115,538],"954":[298,455],"955":[110,538],"956":[395,100],"957":[700,274],"958":[104,274],"959":[272,683],"960":[54,56],"961":[300,300],"962":[117,258],"963":[226,181],"964":[963,151],"965":[393,481],"966":[50,48],"967":[101,290],"968":[363,384],"969":[341,690],"970":[98,115],"971":[399,256],"972":[271,309],"973":[111,337],"974":[271,499],"975":[262,284],"976":[109,554],"977":[372,258],"978":[99,100],"979":[97,260],"980":[285,256],"981":[59,32],"982":[476,297],"983":[100,408],"984":[263,116],"985":[462,306],"986":[393,288],"987":[360,261],"988":[119,671],"989":[909,371],"990":[121,562],"991":[429,340],"992":[98,364],"993":[45,32],"994":[322,335],"995":[293,302],"996":[276,264],"997":[102,361],"998":[498,310],"999":[299,110],"1000":[97,321],"1001":[278,524],"1002":[98,297],"1003":[118,273],"1004":[282,273],"1005":[100,297],"1006":[373,112],"1007":[443,258],"1008":[111,306],"1009":[764,316],"1010":[308,99],"1011":[324,276],"1012":[577,577],"1013":[632,632],"1014":[644,657],"1015":[299,258],"1016":[959,264],"1017":[116,361],"1018":[115,108],"1019":[611,264],"1020":[119,97],"1021":[469,256],"1022":[327,337],"1023":[477,306]},"frequencies":{"67":1181,"266":2585,"116":5978,"401":871,"258":4788,"717":341,"665":386,"264":2378,"586":277,"107":3001,"290":3997,"528":635,"277":3533,"104":4037,"297":2009,"293":4378,"112":5194,"331":975,"580":502,"109":3730,"441":788,"806":283,"740":321,"418":714,"965":210,"379":1217,"103":4177,"549":558,"262":2919,"288":3610,"388":1350,"98":4681,"337":1031,"76":852,"79":1075,"285":1549,"289":531,"812":280,"281":5214,"351":1315,"977":206,"405":1234,"581":502,"579":505,"875":247,"636":428,"603":138,"435":678,"333":2040,"353":964,"105":4308,"111":2826,"491":747,"272":2476,"988":203,"474":593,"807":283,"487":380,"33":518,"84":1183,"69":1264,"72":627,"32":6755,"65":1667,"82":1094,"77":1245,"70":663,"85":434,"693":137,"68":844,"90":226,"46":3232,"653":403,"471":482,"115":6096,"324":2215,"643":421,"273":3829,"368":921,"269":2466,"582":230,"339":2221,"682":371,"305":2737,"669":382,"531":633,"523":421,"110":3753,"394":1302,"623":441,"101":5292,"294":1358,"652":404,"117":3178,"387":1354,"989":203,"529":333,"282":1729,"365":1705,"544":582,"263":1876,"454":915,"113":348,"373":1402,"479":527,"271":2238,"99":6192,"295":2513,"409":494,"542":594,"1005":200,"506":697,"292":1286,"473":814,"416":782,"308":2013,"889":241,"100":4741,"711":119,"918":226,"319":1764,"34":1864,"83":1315,"672":380,"321":2721,"80":1121,"518":668,"119":2786,"298":1972,"425":1124,"47":2196,"966":210,"49":2805,"51":2063,"585":498,"833":266,"681":126,"45":2564,"364":955,"276":2085,"299":727,"121":2713,"798":286,"280":3209,"372":985,"345":1096,"325":916,"106":1264,"853":255,"470":829,"792":290,"400":1253,"95":1780,"462":662,"742":319,"590":199,"10":2854,"761":307,"625":440,"40":2800,"341":1168,"377":958,"120":1928,"453":928,"123":700,"375":1038,"61":1327,"48":2079,"44":2091,"59":888,"399":1056,"814":278,"62":1140,"41":1953,"561":535,"483":188,"42":611,"124":517,"676":378,"125":695,"275":4243,"689":362,"448":705,"688":364,"743":223,"97":3891,"312":1594,"571":518,"279":3989,"356":1883,"393":888,"450":402,"901":236,"414":676,"990":203,"813":280,"459":882,"508":690,"501":463,"755":310,"274":5576,"952":213,"998":201,"534":248,"60":921,"64":164,"38":347,"55":1814,"57":1796,"54":1402,"724":337,"50":2626,"808":231,"56":2106,"427":525,"52":2084,"267":1296,"719":339,"822":273,"421":896,"102":4149,"430":153,"655":399,"985":204,"256":2619,"369":1230,"66":905,"940":218,"690":153,"317":1442,"392":986,"588":494,"944":216,"567":523,"329":2371,"397":756,"536":615,"114":3664,"352":409,"313":1529,"537":615,"108":3136,"546":569,"71":626,"265":1110,"745":316,"844":261,"310":1790,"74":505,"731":328,"702":138,"284":2638,"842":262,"526":636,"540":606,"795":288,"494":736,"257":3409,"658":397,"303":1760,"593":486,"320":1164,"552":552,"417":1151,"389":693,"302":2921,"735":326,"816":276,"309":1129,"560":538,"933":222,"336":1077,"499":520,"73":1473,"314":962,"322":554,"539":393,"886":243,"361":870,"910":231,"344":705,"447":961,"706":350,"604":472,"605":198,"261":2130,"727":334,"991":203,"606":268,"260":3399,"423":1126,"449":951,"482":784,"631":434,"463":866,"637":428,"679":377,"848":258,"703":352,"773":302,"857":254,"811":281,"370":543,"340":217,"809":283,"941":218,"323":889,"464":864,"622":201,"729":331,"796":288,"374":711,"334":885,"929":223,"550":555,"357":613,"408":680,"619":446,"749":313,"893":240,"660":396,"787":294,"774":302,"458":374,"849":258,"949":214,"715":342,"950":214,"897":239,"783":295,"854":255,"343":1809,"959":14,"732":36,"558":254,"725":337,"615":451,"722":338,"733":327,"778":238,"53":1690,"779":296,"887":243,"763":306,"978":206,"879":245,"799":286,"429":888,"673":380,"620":445,"850":258,"960":211,"444":796,"810":282,"270":875,"645":414,"286":393,"607":214,"670":381,"747":314,"594":481,"927":224,"635":430,"498":180,"797":288,"668":383,"496":734,"545":577,"383":1407,"784":295,"677":44,"477":607,"928":224,"118":2250,"793":28,"756":310,"801":285,"328":1504,"490":318,"505":699,"654":402,"738":323,"613":453,"945":216,"572":269,"359":1779,"846":259,"712":345,"363":504,"611":260,"39":1918,"541":261,"556":545,"443":786,"968":209,"530":634,"638":428,"739":323,"481":579,"647":413,"385":392,"91":1623,"1006":200,"434":516,"934":222,"431":697,"568":523,"578":508,"618":447,"287":829,"726":335,"780":296,"382":1167,"268":883,"460":178,"663":393,"507":697,"484":779,"781":296,"767":304,"649":409,"632":15,"577":58,"762":307,"358":658,"469":646,"433":661,"367":1167,"699":353,"338":855,"596":204,"510":682,"512":678,"559":539,"890":241,"426":1120,"566":240,"713":345,"366":867,"971":208,"752":311,"547":257,"996":202,"791":291,"548":559,"616":451,"428":1105,"403":405,"573":516,"871":248,"836":265,"58":1072,"938":219,"439":796,"330":1198,"532":632,"35":736,"936":220,"318":2127,"562":331,"891":241,"624":441,"648":413,"1018":196,"1015":197,"999":201,"700":141,"355":1314,"769":303,"919":226,"992":203,"437":603,"718":341,"565":526,"574":516,"834":266,"332":650,"736":326,"554":341,"326":1970,"973":207,"855":255,"576":512,"489":324,"921":225,"972":208,"788":294,"509":683,"492":499,"390":642,"694":359,"424":1126,"283":1063,"500":727,"602":477,"902":236,"575":222,"592":487,"555":547,"446":193,"301":1173,"402":668,"666":386,"730":331,"583":501,"720":339,"396":518,"708":348,"908":232,"716":342,"502":420,"595":481,"259":2274,"661":396,"922":225,"840":263,"306":1399,"599":479,"520":668,"858":254,"920":226,"96":1698,"381":1114,"829":271,"342":860,"1000":201,"759":308,"122":1295,"974":207,"847":259,"316":758,"521":450,"728":334,"757":310,"1001":201,"650":408,"979":206,"432":454,"678":378,"514":673,"348":511,"601":478,"939":219,"628":438,"78":734,"75":851,"380":1479,"869":249,"456":601,"327":1301,"892":241,"721":339,"436":584,"475":237,"291":1917,"600":479,"376":1189,"671":177,"876":247,"947":215,"785":295,"551":73,"967":210,"304":1057,"642":423,"633":431,"278":1149,"87":502,"830":271,"894":240,"533":399,"782":296,"440":1015,"557":312,"307":1439,"859":254,"1019":196,"953":213,"384":190,"296":3821,"315":773,"948":215,"378":456,"569":519,"488":386,"744":317,"865":251,"837":265,"980":206,"823":273,"404":180,"882":244,"723":338,"867":250,"472":817,"946":216,"659":397,"94":470,"354":409,"445":979,"819":275,"410":418,"956":212,"391":268,"969":209,"750":312,"371":775,"413":464,"614":221,"419":28,"997":202,"883":244,"860":254,"563":533,"764":106,"609":463,"880":245,"589":138,"651":406,"704":352,"861":254,"597":29,"899":237,"993":203,"516":349,"884":244,"584":501,"438":1030,"817":276,"457":285,"975":207,"942":218,"789":294,"37":422,"692":360,"895":240,"300":342,"43":1286,"804":284,"994":203,"598":474,"617":448,"1016":197,"683":159,"758":309,"862":253,"1010":199,"698":354,"741":320,"543":590,"656":399,"872":248,"522":662,"856":255,"802":285,"815":278,"335":743,"843":262,"912":230,"873":248,"640":425,"1022":195,"913":230,"641":169,"705":351,"240":143,"159":151,"152":133,"173":26,"92":398,"126":440,"88":335,"63":769,"760":308,"89":272,"81":161,"93":1322,"86":370,"455":246,"710":346,"907":233,"386":607,"180":47,"832":268,"130":137,"226":582,"148":142,"140":320,"128":95,"172":28,"144":15,"156":23,"188":37,"164":96,"1011":199,"511":167,"885":244,"406":429,"451":938,"535":334,"951":214,"527":636,"480":55,"771":303,"961":154,"805":284,"1007":200,"465":133,"737":100,"982":205,"696":356,"154":6,"147":117,"768":304,"786":295,"930":223,"1008":200,"821":222,"775":79,"794":289,"466":284,"868":250,"452":36,"888":242,"826":272,"906":235,"986":204,"937":220,"995":203,"420":813,"1020":196,"461":430,"866":251,"831":271,"525":324,"777":299,"957":212,"626":440,"911":231,"674":380,"415":850,"411":325,"610":193,"468":206,"564":528,"398":515,"664":391,"493":167,"827":272,"1002":201,"943":217,"835":266,"970":209,"877":247,"923":225,"476":319,"983":205,"915":227,"931":223,"680":374,"570":519,"734":327,"981":206,"916":227,"701":353,"852":257,"1021":196,"591":149,"845":261,"932":223,"924":225,"621":90,"800":286,"863":253,"467":459,"925":225,"1003":201,"896":240,"1009":200,"954":213,"538":188,"828":272,"1004":201,"639":427,"765":306,"347":12,"137":136,"161":21,"478":325,"958":212,"513":97,"874":248,"1017":197,"687":365,"691":362,"864":252,"751":312,"818":276,"776":301,"851":258,"697":356,"962":211,"132":206,"162":159,"239":107,"184":66,"143":29,"486":107,"524":94,"820":275,"766":76,"984":205,"485":348,"825":28,"311":191,"898":238,"976":207,"36":597,"900":237,"914":230,"839":39,"753":86,"646":130,"495":67,"497":65,"519":39,"175":110,"1023":195,"168":224,"707":95,"145":68,"151":122,"139":196,"608":467,"754":311,"134":55,"179":201,"630":120,"160":100,"955":213,"206":82,"163":43,"181":27,"207":15,"131":168,"185":14,"186":20,"191":43,"772":303,"135":77,"136":43,"138":118,"695":53,"407":94,"170":40,"662":396,"183":69,"746":315,"667":58,"194":225,"684":28,"909":28,"503":30,"770":49,"634":103,"709":74,"515":185,"612":40,"685":13,"841":263,"629":4,"146":34,"169":22,"157":62,"675":58,"935":222,"174":8,"748":314,"1012":109,"195":347,"422":36,"360":74,"177":43,"178":32,"133":33,"182":10,"165":65,"150":33,"803":285,"838":157,"197":116,"346":10,"504":708,"189":53,"824":213,"166":159,"987":204,"1013":104,"167":62,"627":213,"153":66,"227":243,"714":3,"142":33,"903":155,"553":9,"196":186,"790":5,"149":56,"129":189,"158":26,"904":174,"926":145,"657":200,"644":219,"1014":198,"229":2,"187":15,"230":1,"232":1,"202":13,"204":2,"201":8,"171":60,"141":39,"231":1,"233":1,"1":11,"155":34,"205":4,"878":124,"350":1,"349":1,"176":19,"190":71,"870":152,"881":143,"200":1,"917":227,"412":2,"686":2,"31":5,"30":8,"29":4,"28":3,"27":5,"26":3,"25":6,"24":3,"23":3,"22":3,"21":3,"20":3,"19":6,"18":6,"17":3,"16":3,"15":3,"14":4,"11":6,"8":3,"7":3,"6":5,"5":4,"4":4,"3":21,"2":5,"209":53,"395":5,"362":18,"964":211,"208":57,"203":7}} \ No newline at end of file diff --git a/code-guessing/compressor-test.py b/code-guessing/compressor-test.py new file mode 100644 index 0000000..92e56bf --- /dev/null +++ b/code-guessing/compressor-test.py @@ -0,0 +1,95 @@ +import json, numpy, math, functools, base64 + +real_bped = numpy.frombuffer(base64.b64decode('ZQAgAHQAIABzACAAdABoAGkAbgBkACAAZQByAGEAbgB5ACAAbwAgAG8AbgAgACAAbwB1AG8AcgBnACAAZQBuAGEAbAAEAQ4BYQAgAHIAZQBhAHIAaQACASAAAwF0AAkBcwB0AGkAAQFpAHQAbwBtAGEAdAAgAHcAeQAMAWgAYQBlAAUBZgAgACwAIABsAAgBdQBzAAcBBQFsACAAZQACAUkAIAAGASAAYwBoAG8AdwALAQsBZQBzAAMBAAFhAHMAZQBjAB4BIABrACAAdgAAAWwAaQB0AGkAbQAgACcAAQFsAG8ADQEgAHIAbwAnAAIBbAAAAW0AYQAKASAABwEgAGUAbAAEASAAYgB1AGEAAQFsAGUAYQBjAGkAYwBpAHMAFgEAAWkAIABtAAABDwEgAGEAYgBvACEBbgBvAGkAbAByAGEAaAAgAHAAOgEuACAAawAAAXUAbgBnAG8AQgEBAXYABgFvAHAAcwAbAaMA4gBpAAMBgwBbAV0BXQFzAGUAKwEgAGkAZABjABsBcwAJAW0ACAFvAGQAJAEAARoBOwFJACcAcgBpAGAAYAB3AGgAbwBsAGYAOQFiAGUAHwEzAXMAaABhAAIBdQByABABIwFlAG0AZQB4AGEAZwAKACwBYQBkAHMAaQB0AHQAYgAAAT4AIABgACAACgEAAU4BAQEGAQABdQBjAOIAjQAUAQABAwEVAXQABgEMAQEBbgA3AXAAIABuAGUAEAEgAAwBbABkAG8AYwA/ASkAKQBmAA0BAwFDAQ8BdABpAHIAcABwAAoBNwE0AVQBKgEgAGIAMAFhAAgBWgFlAC4ALgAkAQEBXAEgAHAAZQB0AHIAbwBmAHAAbwBtAGUAAwERAWEAZgFpACEBYwAKAR8BAQFkAGUAZAAJAXAAbACXAaMBMQAxAHMAdQB0AGEAiwEFAWQAaQBzAAEBZACUAWcAZQBtAG8AHAFpAHQAbwAPAQEBcQB1AG4ACQEdAWgAXgFeAQQBZwAwADAAYQBtAGMAZQFiAG8AbgAgAHkAJwFnAGgAdQBsAEEAQQApACAAPwAgAAcBZwBlAGEAAwFlABoBAAFoATYBcgAgAAwBbgB3AA0BEAFsAGoAmwFnAFABGwEgAG4AYAE+AD4AdQB0ABYBFQFPASYBawARAVoBAAFwABMBZgByAGUAdgBrAGUAbQBtAHAABgEvAC8AIAEXAXcAnAE8ADwAvgEAAWYAgQFwAHMABwEBAWEAeQBkAEcBYwANAXQAAgFAASYBbQBwABwBAAFoAHoBWAEIAToA4AFSAdEBYwAAAUYBIABiAXAAYQAFAZ0BWQEKACAAcwBwAGgAYAEeAcwBTAGGAWsAAgH3ATwBYwAHAWYABAFvAAUBOgAgACgAKAArACsA7wHmAQUC8QFSAWIAEAEmARgBcgBJAB0BBAGFARwBOwEYAXUAHwECAT0AIABMATwBdwByAHMAAAEWAUMBQwAgAGUAGAFuACsBdgEAARABYwEHAWQAYQBKAS0BAgFvAGIAcgAAAXcApgEwACAAdQBtAFYBAQLbAdIBEgFiAGMAIAAPAWQACgEjAW0ADQFwABQBLgBiAS0BcwA1AUoBZQBkAMIBAQEpAi8AsgEBAQoBAgF3ASwBEQEXAUABbAB3ACAAPQFUAWwAJgF0ACkBBgECAXgAIAAxADYAZwBpAHIBAAEEAQABMQGNAWEAkwH/ATcBYQBhAGgAAAF2ACkBaABpAHMABgFsAHkAHQGmAXYAZQAxADIAOAFvALoBugEEAWQALwFtAGoBYAAeAScAAwGAAWYAaQAUASAAJwIAAWYAVQGMAS0BZgBmAHMAYwAHAXkAYQBpADUBPgEDASkBYQB2AGkAJwBoAGgANQFtAIIBtQB2AGkAcAB1ABYBZQBsAMcBtAE+AXQAdQBzAC8AVQKHAXcAZQBmAGUAdwBxATMANABtAHUAzQEFAQQBdABiAAgBYgByADgBJgHiAIAAcwBvAGkAlgHiAIYAmQGiAcQBxAFzAG0A6QHqAeUBMgFmAGEAEwFzAbUBCQFiAC8BZwB1AAQBMgFjAG8AZQBwAAMCUwBtAHQBZAJ1AGcAAAFwARkBAwEgAC0BAQFwAHIAbQAHAWkAHQFrACAByQEIAW0ABAEoAEsAYwBsAB0BnAEPAQUBRQEyASgBsQHnARcBEwFjAGgAZQBrANMBZgAhAV8BAAFrABYCaQB6AOgBAgEiACAAbQCRAQoBDgFlAFgBaQBmAEwBIwFWAWwAYgA8AUUBawCgAXMArwEFARMBeAFkAGEBMgBiAAoAagFEACAArgJ9AXQAcgFkAAYBFAEFATEAIABMACAAswGwAU0CrQJhAHAAAwEMAnQAdwBtApYBYQFlAGwAFAFzAEABcAGuAQYBZQA0ACAAGgEIAWcAUQHyAd4BbAAaAXQAIAFkAAABdQBwAGMAcgBsAD0BdwDXAawChwHKAgkBAwFLAXkALQFPAh0CGgFpADAAMgBvAFsCOAA2ACoBBwF0AAABBwKlAjUBCgF1AIgBpAExAVMAIAB6AmQAMwAyAA0CmwJ3AJgBJAERAVABBAEEAUgBHwGTAaMCeQB5AGUAXwAgAB8BHwFhAGYAdAB5AHYCkABsAAQBaAEzAS8BAQESAXMAYgAgAJ8BSAFuAXoB4gCIAGkAPAEjAhkBNQAgAG8BFwFzACIBMQAwAAQBAQE9AQgBMwAgAHkB7QFpAG0AeQDIAXQAZQBzAGwBtwIhAWYAkgEyACAAggG6ABECygEeAR0BQQBQADYANQBpAAUBOQA5ADcAMwB3AFwBbAAcAR8BBQFWAQEBYgD2AWIAIwEHAkQBdwCuAXUAAAFOAgoA3AI/AgoBSAFrAQgBPQF5AAEBTQEwAXQADAFyAG0AAgFzAHkAFgMuAmYARQFjAK4BFQESAWgBNgIvAQABKQA7AIwBJwFnAG4ANQA1AIYCFwI2ADQARQFjANwBSwEiAVcBMwAwAJ4BCAFUAmMAkgEgAJkBfgFkADABOgA6AG8AbwBdAjYBcgBVAV8AXwDFAgYBEgFjABQBZAAtAQABRwGHAW4BSwFGAnIA4gCKAHAAaABmAGwA3wFzAGICAQFpAO0BmgGaAV8BbQA4AWMAdgBvAA0BCAEZA3sBcAAAAWsBSwFvAGsAdgAQAXMAYQH1AU8BOAA3ADkAMABiAW0AKgEwAWgAgAFfAicBFgGBAisBwAFuAREBAgOwAQwBwwISATgBcwAwARYBgAFtAAoBGAEUAW0AHAEdAQ0BMQA1AAQBGAHUAdQBDAF0ABoBAgFzADwCdgEnARUBLgF3AOwBqQJ5AUsCSwJuAC4ADAFzAOMB4wE5A3MBbAEFATABAQFjAHIBZwAPAS8ANwBZASAAcwBRARQBbgIPAWcAdwAAAU8BbAClAXQAaQFwAGEAdQBtAGUBdAARARMBBQFoAEABawEJAW8AWAF8AHwAjgGOAeIAjgCJA5UACwIVAmIAaQBFAWYCYgBsAHAAPAEWAUsBaQEtAv4CUQG3AcoBaAAVAXMCiwA9AccCbQAQAWkAGAEvAUcDRQEAAWsAJwEHAQgB8QIpAasBqwFiAOECEQEuATUBYwBiAHkAdgAgAGcACQEHA7UCXQAgACgBbwETAS8ByQE2AbkBdQJvADgBEwEAAUoCMgEYAWQAngEHASoBFAEJAoEBFwEuAR0BcgDaAXMAawF1Ar4CIQFsABsCBAIgAHMAGgIqAccBbgAaAosBZAC8AhIBaAASARABqwI2ADgALAEsAXUAAgHiALUAwwOXAIkB4QEyADAAZQAiAWsBgAFVAbICYgBzAI8BAAEPATUBbwBRAQ8B8wEGARwBbQAqAnQBAgFjAGQAYQAEAR0BAAE7ACAA3AEpAWQAmAEHAXQAzgEyAYkBIAFoAQUBdwCfAo0DcwF5ADICrQFUAWIAbAEtACAAQgFPASUBLgEUAQgBZgBpAfIBNgErAW4AYQBBARYBDAJiACkBdgARARoBEQFkACkBdQFwALsBAgFvADIB/AI8ATQBYwBEARQBQQJBAngCeAKEApECKwECAb8DCAF0AGkBcwBsAGMCCAF3AGEA1QEAAUcBUQHdATIB'), dtype=numpy.uint32) +bped_inv = {} +for i in range(256, 1024): + x = real_bped[i - 256] + a, b = x & 0xFFFF, x >> 16 + bped_inv[a, b] = i +N_bits = 14 +X_bits = 2 ** N_bits +mask = X_bits - 1 +qfreqs = numpy.frombuffer(base64.b64decode('AQEBAQEBAQEBAUwBAQEBAQEBAQEBAQEBAQEBAQEBAQGyDTEUDwoKMko0ECE3RFY6N0tFNjctJTA4LxwXGSMeFAQsGB8WIRERDycNFxchEhweBR0jHwsKDQkHBioKIw0vLWd8pH6MbW9qciJPU2JjSYkJYaGdVDxJM0giEwwTDAECBQQEBgEBAgICAwUJAgEBAQIBAgQCAQMEAgEBAQEBBAIBBAECAgQBBgEBAgEBAQMBAQEEAQEBAgIBAQEBAQEBAQEGCQQDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ8GAQEBAQEBAQEBAQEDBAEBAQEBAQEBAQEBAQEBAUVbfj1ZOU0yPx1EIxZCFzxBZZRxN10ealWKLhxGKQoWXg5qMiJ0I0JlNTUSCR5MLhxIJSY1HS4FKygZFBQmOC8fSA8XOxk0Iyg/IBoRNhcTHRsXOwYfFzASHQEBDgEBIgkZCyIyEBEvARcBDRktFx8ZIQ4VGSQSHCAaDCAmHh8lBQsQJCQSEQcaGCIBDRQOHCEXEQsFIQsCEQ0LCQEMEhcVHRMBFRcBHh4eHQ0dGAQSDBENEg8QGxUbFQEUFRkFGRMZChkBGRgGEAgKGAULERcXBAYMBREWDRUWEAYJEAkOAQ8UBRUIAgoKCAgUDQUUARQBBA0UDAsBEhMSEhISEgURAxIFCQESARIMEQsCCBAREQkRERELBwkREAUKEAcQEA8PDwcPDg8CDwEJDw8IBw4ODgkPDg4HDg4NDg0HDQ4FDQEODQ0OBg4NDQgBDAQFBA0NDAwGAQwNDQ0MAwsGBwYMDAUHAQwFDAsMCwwMAQULCwwMBgsBAwwBDAMMCwsMCwoECwwFCwMLCgsLCwsKCwsKBgsLCgsKCwoKCgIKCgsECgoKAgoBCQoKAwoEAQEBCgkJBAkKAwoBCQkKCQQJAwkKCQkCCQIJBAcJAQkJCAkJCQkJCAkJCQkJCAkJAQkJCAkCCAkICAgGCAgJCAgHCAgIAQgICAgICQgJCAgDCAIIBwgBCAgIBwIICAYICAgHCAcICAcHCAEICAEHBwgHBwgIBwgIBwcHBwYICAgHBwcHBggGBwcGBQYGAQgHBwgHBwcHBwcHBwQBBwcHBwcGBwcHBwYHBgcGBwcGBwYHBgcHBwcHBwcGBAcHBgcHBgcDBgcEBwYGBwcHBwYGBwYGBgYFBgcHBwYGBAQBBgYHAQYGBgYGBgYGBQUGBgYGBgYCBgUFBQYGBgYGBQYGBgYFBgUFBQUGBgYGBgQFBAYFBgYBBQQFAQUFBQYFBQYGBgUGBQUEBQUGBQQFBQYFBgUFBQUGBQUFBQUFBQYGBgYFBQYEBQQFBQIDBQYFBQUFBQUEBQ=='), dtype=numpy.uint8) + +cdf = numpy.insert(numpy.cumsum(qfreqs, dtype=numpy.uint16), 0, 0) +@functools.cache +def icdf(y): + for i, x in enumerate(cdf): + if y < x: return i - 1 + +def decompress_bpe(s): + s = numpy.array(s, dtype=numpy.uint16) + while True: + r = numpy.zeros(len(s) * 2, dtype=numpy.uint16) + z = 0 + for c in s: + if c > 255: + x = real_bped[c - 256] + a, b = x & 0xFFFF, x >> 16 + r[z] = a + z += 1 + r[z] = b + z += 1 + else: + r[z] = c + z += 1 + if z == len(s): break + s = r[:z] + return bytes(s.astype(numpy.uint8)) + +def compress_bpe(s): + s = numpy.array(bytearray(s), dtype=numpy.uint16) + while True: + r = numpy.zeros_like(s) + z = 0 + used = False + for pair in zip(s, s[1:]): + if used: + used = False + else: + mp = bped_inv.get(pair) + if mp: + r[z] = mp + z += 1 + used = True + else: + r[z] = pair[0] + z += 1 + used = False + if not used: + r[z] = s[-1] + z += 1 + if z == len(s): break + s = r[:z] + return s + +def compress_ans(bpes): + def C(x, s): + s_count = int(qfreqs[s]) + return (x // s_count) * X_bits + int(cdf[s]) + (x % s_count) + x = 1 + for symbol in bpes: + x = C(x, symbol) + return len(bpes), x + +def decompress_ans(ilen, num): + def D(x): + slot = x & mask + sym = icdf(slot) + prev_state = (x // X_bits) * int(qfreqs[sym]) + slot - int(cdf[sym]) + return sym, prev_state + x = num + syms = [] + for _ in range(ilen): + sym, x = D(x) + syms.append(sym) + syms.reverse() + return syms + +def compress(s): + l, x = compress_ans(compress_bpe(s)) + return l.to_bytes(4, "little") + x.to_bytes(math.ceil(x.bit_length() / 8), "little") + +def decompress(s): + l, x = s[:4], s[4:] + return decompress_bpe(decompress_ans(int.from_bytes(l, "little"), int.from_bytes(x, "little"))) \ No newline at end of file diff --git a/code-guessing/fib.c b/code-guessing/fib.c new file mode 100644 index 0000000..da08bfd --- /dev/null +++ b/code-guessing/fib.c @@ -0,0 +1,366 @@ +#include +#include +#include +#include +#include +#include + +#define nfibs 93 +#define what int64_t +#define the fibs +#define fuck [ +#define did nfibs +#define you ] +#define just = +#define fucking { +#define say 0 +#define about , +#define me 1 +#define YOU , +#define little 0 +#define bitch } +#define i ; +#define ll void +#define have initf +#define YoU ( +#define know ) +#define I { +#define graduated for +#define top ( +#define of int +#define my k +#define class = +#define in 2 +#define tHe ; +#define navy k +#define seals < +#define and nfibs +#define ve k +#define been ++ +#define involved ) +#define In { +#define numerous fibs +#define secret [ +#define raids k +#define on ] +#define al_quaeda = +#define anD fibs +#define i_ [ +#define haVE k +#define over - +#define three 1 +#define hundred ] +#define confirmed + +#define kills fibs +#define am k +#define trained - +#define gorilla ] +#define warfare ; +#define aNd } +#define I_ } +#define m bool +#define thE iusol +#define TOp [ +#define sniper nfibs +#define IN ] +#define THE = +#define entire { +#define us 0 +#define armed } +#define forces ; +#define yoU int +#define are bsectf +#define nothing ( +#define to int64_t +#define Me n +#define but , +#define JUsT int +#define another aa +#define target , +#define i__ int +#define will b +#define wipe ) +#define YOu { +#define The while +#define FuCK ( +#define out aa +#define with < +#define precision b +#define THe ) +#define likes { +#define which mid +#define has = +#define never ( +#define BEEN aa +#define seen + +#define before b +#define ON ) +#define this >> +#define earth 1 +#define mark ; +#define My if +#define fuCkINg ( +#define words fibs +#define yOu [ +#define think mid +#define can < +#define get n +#define away ) +#define With { +#define saying aa +#define that = +#define shit mid +#define TO + +#define ovEr ; +#define ThE } +#define internet else +#define Think { +#define again b +#define fucker = +#define as mid +#define we ; +#define speak } +#define aM return +#define contacting aa +#define MY ; +#define SecrEt } +#define network int +#define oF sumf +#define spies ( +#define across int64_t +#define tHE trg +#define usa ) +#define aND { +#define your int +#define ip pt +#define is = +#define being bsectf +#define traced ( +#define right trg +#define now , +#define so 0 +#define yOU , +#define better nfibs +#define prepare ) +#define FOr ; +#define the_ if +#define storm ( +#define maggot fibs +#define ThE_ [ +#define STorm pt +#define THAT ] +#define wipes == +#define ouT trg +#define pathetic { +#define LitTLe iusol +#define thing [ +#define You pt +#define call ] +#define yOur = +#define life true +#define you_ ; +#define re return +#define FuCKINg 1 +#define dead ; +#define kid } +#define I__ for +#define CAN ( +#define be int +#define anywhere k +#define anytime = +#define And pt +#define i___ - +#define cAN 1 +#define kill ; +#define You_ k +#define iN > +#define OvER 1 +#define seven ; +#define hUndred k +#define ways -- +#define AND ) +#define tHat { +#define s if +#define jusT ( +#define WitH iusol +#define mY [ +#define bare k +#define hands ] +#define not ) +#define only continue +#define AM ; +#define I___ iusol +#define extensively [ +#define trAInEd k +#define unarmed = +#define combat true +#define bUT ; +#define i____ if +#define Have ( +#define access sumf +#define tO ( +#define eNtIRe - +#define arsenal fibs +#define Of [ +#define THE_ k +#define united ] +#define states ) +#define marine ) +#define corps return +#define ANd 1 +#define WILl iusol +#define use [ +#define it k +#define To ] +#define its = +#define full false +#define extent ; +#define to_ } +#define WiPe return +#define YoUR 0 +#define miserable ; +#define ass } +#define off long +#define tHE_ * +#define face f +#define OF ( +#define tHe_ int64_t +#define continent trg +#define LIttle int +#define ShIT * +#define iF length +#define OnLY ) +#define could if +#define hAvE ( +#define known fibs +#define whAt [ +#define unholy 2 +#define retribution ] +#define YouR == +#define clever ) +#define comment initf +#define was ( +#define aBout ) +#define To_ ; +#define bring memset +#define down ( +#define upon iusol +#define maybe 0 +#define would nfibs +#define hAVE ) +#define held ; +#define YOUR sumf +#define FUCkIng ( +#define tongue trg +#define buT ) +#define couldn * +#define t length +#define YoU_ = +#define didn 0 +#define T ; +#define AnD for +#define NOw ( +#define RE k +#define paying = +#define The_ 0 +#define price ; +#define YOU_ k +#define goddamn < +#define idiot nfibs +#define wiLl k +#define shIT ++ +#define fury ) +#define all { +#define OVEr if +#define and_ iusol +#define wilL k +#define drown ] +#define in_ ) +#define iT { +#define Re * +#define FuCkING length +#define DEad ) +#define kiddo ++ +#define WhAT ; +#define f___ } +#define DID int +#define yOU_ j +#define f___ing 0 +#define type ; +#define AbOuT long +#define ME * +#define yOu_ out +#define lITTLe = +#define bitcH calloc +#define I____ ( +#define Ll * +#define HAVe length +#define Know sizeof +#define gRADUaTED uint64_t +#define ToP ) +#define of_ ) +#define CLaSs for +#define at ( +#define mit int +#define aNd_ k +#define i_____ = +#define Ve 0 +#define bEEN ; +#define INVoLVED k +#define IN_ < +#define NUmeRouS nfibs +#define secreT ; +#define wITH ++ +#define anonymous ) +#define HAve ( +#define oVer iusol +#define threE [ +#define hUNdReD k +#define coNfIRMEd ] +#define ddoses ) +#define Am out +#define trAined [ +#define In_ j +#define online ] +#define trolling = +#define anD_ k +#define M j +#define thE_ ++ +#define tOp ; +#define hacker } +#define iN_ } +#define THe_ return +#define ENTirE out +#define world ; +#define YOu_ } +#define aRe int +#define NOthinG main +#define mE ) +#define BUt { +#define juSt initf +#define AnotHER ( +#define virus ) +#define host ; +#define WilL ( +#define wIpE int +#define yoU_ k +#define F___ 0 +#define oUt ; +#define wITh k +#define PReCiSiON < +#define the__ 100 +#define LIKeS ; +#define oF_ k +#define WHICH ++ +#define Has ) +#define nevEr { +#define BeEN sumf +#define sEen ( +#define befoRE 1 +#define InTeRNET sumf +#define mArK ( +#define my_ 2 +#define f___Ing ) +#define wORds ; +#define ThinK } +what the fuck did you just fucking say about me YOU little bitch i ll have YoU know I graduated top of my class in tHe navy seals and i ve been involved In numerous secret raids on al_quaeda anD i_ haVE over three hundred confirmed kills i_ am trained in gorilla warfare aNd I_ m thE TOp sniper IN THE entire us armed forces yoU are nothing to Me but JUsT another target i__ will wipe YOu The FuCK out with precision THe likes of which has never BEEN seen before ON this earth mark My fuCkINg words yOu think you can get away With saying that shit TO me ovEr ThE internet Think again fucker as we speak I_ aM contacting MY SecrEt network oF spies across tHE usa aND your ip is being traced right now so yOU better prepare FOr the_ storm maggot ThE_ STorm THAT wipes ouT THe pathetic LitTLe thing You call yOur life you_ re FuCKINg dead kid I__ CAN be anywhere anytime And i___ cAN kill You_ iN OvER seven hUndred ways AND tHat s jusT WitH mY bare hands not only AM I___ extensively trAInEd IN unarmed combat bUT i____ Have access tO tHE eNtIRe arsenal Of THE_ united states marine corps ANd i WILl use it To its full extent to_ WiPe YoUR miserable ass off tHE_ face OF tHe_ continent yOU LIttle ShIT iF OnLY YOu could hAvE known whAt unholy retribution YouR little clever comment was aBout To_ bring down upon yOU maybe YOU would hAVE held YOUR FUCkIng tongue buT you_ couldn t YoU_ didn T AnD NOw yoU RE paying The_ price YOU_ goddamn idiot i wiLl shIT fury all OVEr YoU and_ yOu wilL drown in_ iT YoU Re FuCkING DEad kiddo WhAT ThE f___ DID yOU_ just f___ing type AbOuT ME yOu_ lITTLe bitcH I____ Ll HAVe yOU Know I____ gRADUaTED ToP of_ MY CLaSs at mit aNd_ i_____ Ve bEEN INVoLVED IN_ NUmeRouS secreT raids wITH anonymous aND i____ HAve oVer threE hUNdReD coNfIRMEd ddoses I Am trAined In_ online trolling anD_ i M thE_ tOp hacker iN_ THe_ ENTirE world YOu_ aRe NOthinG tO mE BUt juSt AnotHER virus host I__ WilL wIpE yoU_ THE F___ oUt wITh PReCiSiON the__ LIKeS oF_ WHICH Has nevEr BeEN sEen befoRE ON tHe InTeRNET mArK my_ f___Ing wORds YOu_ ThinK diff --git a/code-guessing/fib.py b/code-guessing/fib.py new file mode 100644 index 0000000..c8ed719 --- /dev/null +++ b/code-guessing/fib.py @@ -0,0 +1,73 @@ +import subprocess +import ctypes +import tempfile +import bisect + +fibs = [0, 1] +def make_fibs(n): + while fibs[-1] < n: + fibs.append(fibs[-1] + fibs[-2]) + +def dfs(target, inuse=set()): + make_fibs(target) + end_index = bisect.bisect_left(fibs, target) + if fibs[end_index] == target and target not in inuse: + return inuse | {end_index} + for i, possibility in enumerate(fibs[end_index:1:-1]): + reali = end_index - i + if reali in inuse: continue + new = inuse | {reali} + if result := dfs(target - possibility, new): return result + +make_fibs(2**63) +print(len(fibs)) +""" +raise SystemExit() + +for i in range(2, 10000): + print("doing", i) + res = dfs(i) + print(res) + assert sum(map(lambda x: fibs[x], res)) == i, "numbers do not sum to thing" + assert tuple(sorted(set(res))) == tuple(sorted(res)), "things are not unique" +""" +def c_wrapper(file): + print("Compiling", file) + temp = tempfile.mktemp(prefix="lib-compile-") + print(temp) + if subprocess.run(["gcc", file, "-o", temp, "-shared", "-fPIC"]).returncode != 0: + raise ValueError("compilation failed") + library = ctypes.CDLL(temp) + entry = library.f + entry.restype = ctypes.POINTER(ctypes.c_int64) + def wrapper(n): + vlen_ptr = ctypes.c_int(0) + out = entry(n, ctypes.byref(vlen_ptr)) + l_out = [] + for i in range(vlen_ptr.value): + #print(out[i]) + l_out.append(out[i]) + return l_out + return wrapper + +def gollariosolver(n): + #print(n, "is n") + x = bisect.bisect_left(fibs, n) + out = set() + z = 0 + for i in range(x, 0, -1): + #print("gollario", i, z, fibs[i]) + if (y := fibs[i] + z) <= n: + z = y + out.add(i) + if z == n: + return out + +print(fibs[12]+ fibs[23] + fibs[34]) + +c_code = c_wrapper("fib.c") +for i in range(2, 2**16): + res = c_code(i) + #res = gollariosolver(i) + assert sum(map(lambda x: fibs[x], res)) == i, "numbers do not sum to thing" + assert tuple(sorted(set(res))) == tuple(sorted(res)), "things are not unique" \ No newline at end of file diff --git a/code-guessing/fibinput.c b/code-guessing/fibinput.c new file mode 100644 index 0000000..ff82d0c --- /dev/null +++ b/code-guessing/fibinput.c @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include + +#define nfibs 93 + +int64_t fibs[nfibs] = {0, 1, 0}; + +void initf() { + for (int k = 2; k < nfibs; k++) { + fibs[k] = fibs[k-1] + fibs[k-2]; + } +} + +bool iusol[nfibs] = {0}; + +int bsectf(int64_t n, int aa, int b) { + while (aa < b) { + int mid = (aa + b) >> 1; + if (fibs[mid] < n) { aa = mid + 1; } + else { b = mid; } + } + return aa; +} + +int sumf(int64_t trg) { + int pt = bsectf(trg, 0, nfibs); + if (fibs[pt] == trg) { + iusol[pt] = true; + return 1; + } + for (int k = pt - 1; k > 1; k--) { + if (iusol[k]) continue; + iusol[k] = true; + if (sumf(trg - fibs[k])) return 1; + iusol[k] = false; + } + return 0; +} + +long*f(int64_t trg, int*length) { + if (fibs[2] == 0) initf(); + memset(iusol, 0, nfibs); + sumf(trg); + *length = 0; + for (int k = 0; k < nfibs; k++) { + if (iusol[k]) { + (*length)++; + } + } + int j = 0; + long*out = calloc(*length, sizeof(uint64_t)); + for (int k = 0; k < nfibs; k++) { + if (iusol[k]) { + out[j] = k; + j++; + } + } + return out; +} + +int main() { + initf(); + for (int k = 0; k < 100; k++) { + sumf(1); + sumf(2); + } +} \ No newline at end of file diff --git a/code-guessing/fiborig.c b/code-guessing/fiborig.c new file mode 100644 index 0000000..fc084af --- /dev/null +++ b/code-guessing/fiborig.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include +#include + +#define nfibs 93 +int64_t fibs[nfibs] = {0, 1, 0}; + +void initf() { + for (int i = 2; i < nfibs; i++) { + fibs[i] = fibs[i-1] + fibs[i-2]; + } +} + +bool iusol[nfibs] = {0}; + +int bsectf(int64_t n, int a, int b) { + while (a < b) { + int mid = (a + b) >> 1; + if (fibs[mid] < n) { a = mid + 1; } + else { b = mid; } + } + return a; +} + +int sumf(int64_t target) { + int pt = bsectf(target, 0, nfibs); + if (fibs[pt] == target) { + iusol[pt] = true; + return 1; + } + for (int i = pt - 1; i > 1; i--) { + if (iusol[i]) continue; + iusol[i] = true; + if (sumf(target - fibs[i])) return 1; + iusol[i] = false; + } + return 0; +} + +long*f(int64_t target, int*length) { + if (fibs[2] == 0) initf(); + memset(iusol, 0, nfibs); + sumf(target); + *length = 0; + for (int i = 0; i < nfibs; i++) { + if (iusol[i]) { + (*length)++; + } + } + int j = 0; + long*out = calloc(*length, sizeof(uint64_t)); + for (int i = 0; i < nfibs; i++) { + if (iusol[i]) { + out[j] = i; + j++; + } + } + return out; +} + +int main() { + initf(); + for (int i = 0; i < 100; i++) { + sumf(1); + sumf(2); + } +} \ No newline at end of file diff --git a/code-guessing/freqs.json b/code-guessing/freqs.json new file mode 100644 index 0000000..c6e7879 --- /dev/null +++ b/code-guessing/freqs.json @@ -0,0 +1 @@ +{"230": 1, "232": 1, "231": 1, "233": 1, "350": 1, "349": 1, "200": 1, "0": 1, "9": 1, "12": 1, "13": 1, "127": 1, "192": 1, "193": 1, "198": 1, "199": 1, "210": 1, "211": 1, "212": 1, "213": 1, "214": 1, "215": 1, "216": 1, "217": 1, "218": 1, "219": 1, "220": 1, "221": 1, "222": 1, "223": 1, "224": 1, "225": 1, "228": 1, "234": 1, "235": 1, "236": 1, "237": 1, "238": 1, "241": 1, "242": 1, "243": 1, "244": 1, "245": 1, "246": 1, "247": 1, "248": 1, "249": 1, "250": 1, "251": 1, "252": 1, "253": 1, "254": 1, "255": 1, "442": 1, "517": 1, "587": 1, "905": 1, "963": 1, "229": 1, "204": 1, "412": 1, "686": 1, "714": 1, "28": 1, "26": 1, "24": 1, "23": 1, "22": 1, "21": 1, "20": 1, "17": 1, "16": 1, "15": 1, "8": 1, "7": 1, "629": 1, "205": 1, "29": 1, "14": 1, "5": 1, "4": 1, "790": 1, "31": 1, "27": 1, "6": 1, "2": 1, "395": 1, "154": 1, "25": 1, "19": 1, "18": 1, "11": 1, "203": 1, "174": 1, "201": 1, "30": 1, "553": 1, "182": 1, "346": 1, "1": 1, "347": 1, "685": 1, "202": 1, "959": 1, "185": 1, "632": 1, "144": 1, "207": 1, "187": 1, "362": 1, "176": 1, "186": 1, "161": 1, "3": 1, "169": 1, "156": 1, "173": 1, "158": 1, "181": 1, "793": 1, "419": 1, "172": 1, "825": 1, "684": 1, "909": 1, "597": 1, "143": 1, "503": 1, "178": 1, "133": 1, "150": 1, "142": 1, "146": 1, "155": 1, "732": 1, "452": 1, "422": 1, "188": 1, "839": 1, "519": 1, "141": 2, "170": 1, "612": 1, "163": 1, "191": 1, "136": 2, "177": 1, "677": 1, "180": 1, "770": 1, "695": 1, "189": 1, "209": 1, "480": 1, "134": 1, "149": 2, "208": 1, "577": 1, "667": 2, "675": 2, "171": 2, "157": 1, "167": 1, "497": 1, "165": 2, "184": 2, "153": 2, "495": 1, "145": 2, "183": 2, "190": 1, "551": 2, "709": 2, "360": 1, "766": 2, "135": 2, "775": 2, "206": 1, "753": 1, "621": 1, "524": 2, "407": 2, "128": 2, "707": 2, "164": 2, "513": 3, "737": 2, "160": 2, "634": 3, "1013": 3, "764": 3, "239": 3, "486": 2, "1012": 2, "175": 3, "197": 3, "147": 2, "138": 3, "711": 4, "630": 3, "151": 3, "878": 3, "681": 3, "646": 3, "152": 4, "465": 4, "137": 2, "693": 3, "130": 4, "603": 3, "702": 3, "589": 4, "700": 4, "148": 4, "240": 4, "881": 4, "926": 2, "591": 4, "159": 4, "870": 4, "430": 4, "690": 4, "961": 4, "903": 4, "838": 4, "683": 4, "162": 4, "166": 4, "81": 5, "64": 4, "511": 5, "493": 5, "131": 4, "641": 4, "904": 4, "671": 4, "460": 5, "498": 4, "404": 5, "515": 5, "196": 4, "483": 5, "538": 5, "129": 5, "384": 5, "311": 5, "446": 5, "610": 5, "1022": 4, "1023": 5, "1018": 5, "1019": 5, "1020": 5, "1021": 5, "139": 5, "1015": 6, "1016": 5, "1017": 5, "605": 6, "1014": 5, "590": 5, "1010": 5, "1011": 5, "1005": 5, "1006": 6, "1007": 4, "1008": 5, "1009": 4, "657": 6, "998": 5, "622": 5, "999": 5, "1000": 6, "1001": 6, "1002": 6, "1003": 6, "1004": 5, "179": 4, "996": 5, "997": 5, "988": 5, "989": 5, "990": 5, "991": 5, "992": 6, "993": 5, "994": 5, "995": 5, "985": 6, "596": 6, "986": 5, "987": 6, "982": 4, "983": 5, "984": 5, "977": 4, "978": 5, "979": 5, "980": 6, "468": 5, "981": 5, "132": 6, "973": 5, "974": 6, "975": 5, "976": 5, "971": 6, "972": 6, "968": 5, "969": 5, "970": 6, "965": 5, "966": 5, "967": 6, "960": 5, "962": 5, "964": 5, "956": 5, "957": 6, "958": 6, "952": 4, "953": 5, "954": 4, "955": 6, "824": 6, "627": 6, "949": 6, "950": 6, "607": 6, "951": 6, "947": 6, "948": 6, "944": 5, "945": 5, "946": 5, "340": 6, "943": 5, "940": 6, "941": 5, "942": 6, "938": 6, "939": 6, "644": 5, "936": 5, "937": 6, "614": 5, "933": 6, "934": 6, "575": 5, "821": 6, "935": 6, "743": 6, "929": 5, "930": 5, "931": 6, "932": 6, "927": 6, "928": 5, "168": 6, "921": 6, "922": 6, "923": 6, "924": 6, "925": 6, "194": 6, "90": 6, "918": 5, "919": 5, "920": 6, "915": 6, "916": 6, "917": 6, "582": 6, "912": 6, "913": 6, "914": 6, "808": 6, "910": 6, "911": 6, "908": 7, "907": 6, "906": 6, "901": 6, "902": 6, "475": 6, "899": 7, "900": 7, "778": 6, "898": 7, "897": 6, "893": 6, "566": 7, "894": 6, "895": 6, "896": 5, "889": 6, "890": 6, "891": 7, "892": 6, "888": 7, "886": 7, "887": 7, "227": 6, "882": 7, "883": 6, "884": 6, "885": 7, "879": 6, "880": 7, "455": 6, "875": 7, "876": 6, "877": 7, "534": 7, "871": 7, "872": 7, "873": 6, "874": 7, "869": 6, "867": 7, "868": 7, "865": 7, "866": 7, "864": 7, "862": 7, "863": 7, "857": 6, "558": 7, "858": 7, "859": 6, "860": 7, "861": 6, "853": 7, "854": 6, "855": 7, "856": 7, "547": 7, "852": 6, "848": 7, "849": 7, "850": 6, "851": 7, "846": 7, "847": 7, "611": 7, "844": 7, "541": 7, "845": 6, "842": 7, "843": 7, "840": 7, "841": 7, "836": 7, "837": 7, "833": 7, "834": 7, "835": 7, "606": 7, "391": 7, "832": 7, "572": 7, "829": 8, "830": 7, "831": 7, "89": 7, "826": 8, "827": 7, "828": 7, "822": 5, "823": 6, "819": 7, "820": 7, "816": 6, "817": 8, "818": 6, "586": 8, "814": 7, "815": 7, "812": 7, "813": 7, "811": 8, "810": 8, "806": 7, "807": 7, "809": 8, "804": 7, "805": 7, "466": 6, "801": 7, "457": 8, "802": 8, "803": 8, "798": 7, "799": 8, "800": 8, "795": 7, "796": 8, "797": 7, "794": 7, "792": 8, "791": 8, "787": 7, "788": 7, "789": 8, "783": 8, "784": 7, "785": 8, "786": 8, "779": 8, "780": 8, "781": 8, "782": 7, "777": 8, "776": 8, "773": 8, "774": 7, "769": 8, "771": 8, "772": 8, "767": 8, "768": 7, "763": 8, "765": 8, "761": 9, "762": 8, "759": 9, "760": 8, "758": 8, "755": 8, "756": 8, "757": 8, "752": 8, "754": 8, "557": 8, "750": 8, "751": 8, "749": 7, "747": 8, "748": 8, "746": 9, "745": 8, "744": 8, "490": 8, "742": 8, "476": 9, "741": 8, "140": 9, "740": 8, "738": 8, "739": 9, "489": 8, "525": 8, "411": 9, "478": 9, "735": 8, "736": 9, "733": 9, "734": 9, "731": 9, "729": 8, "562": 9, "730": 9, "529": 9, "727": 9, "728": 9, "535": 9, "726": 9, "88": 9, "724": 9, "725": 9, "722": 9, "723": 8, "719": 9, "720": 9, "721": 9, "717": 8, "718": 9, "554": 9, "715": 9, "716": 9, "300": 9, "712": 7, "713": 9, "710": 9, "38": 10, "195": 9, "113": 9, "708": 9, "485": 8, "516": 9, "706": 9, "705": 9, "703": 9, "704": 10, "699": 9, "701": 9, "698": 10, "696": 9, "697": 9, "694": 10, "692": 10, "689": 9, "691": 9, "688": 9, "687": 10, "86": 10, "682": 10, "458": 10, "680": 10, "679": 10, "676": 10, "678": 9, "487": 10, "672": 10, "673": 10, "674": 10, "670": 11, "669": 10, "668": 10, "665": 10, "666": 10, "488": 10, "664": 10, "385": 11, "539": 10, "286": 10, "663": 11, "660": 10, "661": 11, "662": 10, "658": 11, "659": 11, "92": 10, "655": 11, "533": 11, "656": 10, "450": 10, "654": 11, "653": 10, "652": 11, "403": 11, "651": 11, "650": 11, "352": 9, "649": 11, "354": 11, "647": 11, "648": 10, "645": 11, "410": 11, "502": 11, "643": 12, "523": 11, "37": 10, "642": 11, "640": 10, "639": 11, "636": 11, "637": 11, "638": 12, "406": 11, "635": 12, "461": 11, "633": 12, "85": 11, "631": 12, "628": 11, "625": 12, "126": 12, "626": 12, "623": 11, "624": 11, "620": 12, "619": 12, "618": 11, "617": 12, "521": 12, "615": 12, "616": 11, "613": 12, "432": 12, "378": 12, "467": 12, "501": 12, "609": 12, "413": 12, "608": 12, "94": 13, "604": 11, "598": 12, "602": 12, "601": 13, "599": 13, "600": 13, "594": 12, "595": 12, "471": 13, "593": 13, "592": 13, "409": 13, "588": 12, "585": 13, "492": 13, "583": 14, "584": 13, "580": 13, "581": 14, "87": 13, "363": 13, "579": 13, "74": 13, "578": 14, "348": 14, "576": 13, "398": 14, "434": 13, "573": 13, "574": 14, "124": 12, "33": 13, "571": 13, "396": 13, "569": 13, "570": 14, "499": 13, "567": 14, "568": 14, "427": 13, "565": 14, "479": 14, "564": 14, "289": 14, "563": 15, "561": 14, "560": 14, "559": 14, "370": 14, "556": 15, "555": 15, "552": 15, "322": 15, "550": 15, "549": 14, "548": 15, "546": 15, "545": 15, "481": 15, "544": 15, "226": 15, "436": 15, "543": 16, "474": 16, "542": 16, "36": 15, "456": 16, "437": 16, "540": 16, "477": 16, "386": 16, "42": 16, "357": 16, "536": 17, "537": 16, "71": 17, "72": 15, "532": 17, "531": 17, "530": 17, "528": 17, "526": 16, "527": 17, "390": 17, "469": 17, "332": 17, "358": 17, "433": 17, "462": 17, "522": 17, "70": 17, "518": 18, "402": 17, "520": 18, "514": 18, "414": 18, "435": 18, "512": 17, "408": 17, "510": 18, "509": 18, "508": 18, "389": 18, "125": 19, "506": 18, "431": 18, "507": 18, "505": 19, "123": 19, "448": 19, "344": 18, "504": 18, "374": 18, "418": 19, "299": 18, "500": 20, "496": 20, "78": 18, "494": 20, "35": 20, "335": 19, "491": 20, "397": 20, "316": 20, "63": 20, "315": 20, "371": 21, "484": 21, "416": 21, "482": 20, "443": 20, "441": 21, "444": 21, "439": 21, "420": 21, "473": 22, "472": 21, "470": 22, "287": 22, "68": 22, "415": 23, "75": 23, "76": 23, "338": 23, "342": 23, "464": 23, "463": 23, "366": 23, "361": 23, "401": 23, "270": 23, "459": 24, "268": 22, "334": 23, "59": 23, "393": 24, "429": 24, "323": 23, "421": 23, "66": 24, "454": 24, "325": 25, "368": 25, "60": 25, "453": 25, "451": 25, "449": 25, "364": 25, "377": 26, "447": 25, "314": 25, "353": 25, "331": 26, "445": 25, "372": 25, "392": 26, "440": 27, "438": 27, "337": 27, "375": 28, "399": 28, "304": 28, "283": 28, "58": 28, "79": 28, "336": 29, "82": 29, "345": 29, "428": 29, "265": 29, "381": 30, "426": 29, "80": 30, "425": 30, "423": 30, "424": 30, "309": 29, "62": 30, "278": 30, "417": 29, "320": 31, "382": 31, "367": 31, "341": 31, "301": 30, "67": 31, "84": 31, "376": 32, "330": 32, "379": 32, "369": 33, "405": 33, "77": 33, "400": 33, "69": 33, "106": 34, "292": 34, "43": 33, "122": 34, "267": 35, "327": 35, "394": 34, "355": 34, "351": 34, "83": 35, "93": 35, "61": 35, "388": 36, "387": 36, "294": 35, "306": 37, "373": 36, "54": 37, "383": 37, "307": 38, "317": 38, "73": 39, "380": 38, "328": 40, "313": 40, "285": 41, "312": 43, "91": 42, "65": 44, "53": 45, "96": 45, "365": 45, "282": 46, "303": 46, "319": 47, "359": 47, "95": 47, "310": 46, "57": 47, "343": 48, "55": 48, "34": 49, "263": 50, "356": 50, "291": 50, "39": 50, "120": 51, "41": 52, "326": 52, "298": 53, "297": 53, "308": 53, "333": 54, "51": 54, "48": 55, "52": 55, "276": 55, "44": 55, "56": 56, "318": 56, "261": 57, "47": 58, "324": 59, "339": 59, "271": 60, "118": 60, "259": 61, "329": 63, "264": 63, "269": 66, "272": 65, "295": 66, "45": 68, "266": 68, "256": 69, "50": 69, "284": 70, "121": 72, "321": 72, "305": 72, "119": 73, "40": 74, "49": 75, "111": 73, "10": 76, "262": 77, "302": 76, "107": 79, "108": 83, "117": 84, "280": 85, "46": 86, "260": 89, "257": 91, "277": 93, "288": 94, "114": 97, "109": 98, "110": 99, "296": 101, "273": 101, "97": 103, "279": 106, "290": 106, "104": 106, "102": 109, "103": 111, "275": 113, "105": 114, "293": 116, "98": 124, "100": 126, "258": 126, "112": 137, "281": 138, "101": 140, "274": 148, "116": 157, "115": 161, "99": 164, "32": 178} \ No newline at end of file diff --git a/code-guessing/json_submission.py b/code-guessing/json_submission.py new file mode 100644 index 0000000..6433c61 --- /dev/null +++ b/code-guessing/json_submission.py @@ -0,0 +1 @@ +entry = lambda s: __import__("regex").fullmatch(r"""[\t\n ]*(?:(?:\[[\t\n ]*(?:|(?R)|(?R)(?:,[\t\n ]*(?R)[\t\n ]*)*)[\t\n ]*])|(?:{(?:[\t\n ]*|(?:[\t\n ]*"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"[\t\n ]*:[\t\n ]*(?R)[\t\n ]*)|(?:(?:[\t\n ]*"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"[\t\n ]*:[\t\n ]*(?R)[\t\n ]*)(?:,(?:[\t\n ]*"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"[\t\n ]*:[\t\n ]*(?R)[\t\n ]*))*))})|(?:true|false|null|\-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?|"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"))[\t\n ]*""", s, 1<<8) \ No newline at end of file diff --git a/code-guessing/quantizer.py b/code-guessing/quantizer.py new file mode 100644 index 0000000..200b052 --- /dev/null +++ b/code-guessing/quantizer.py @@ -0,0 +1,30 @@ +import json, math, random +N_bits = 14 +X_bits = 2 ** 14 +with open("compr.json", "r") as f: + with open("freqs.json", "w") as g: + rawfreqs = { int(k): v for k, v in json.load(f)["frequencies"].items() } + for i in range(1024): + if i not in rawfreqs: + rawfreqs[i] = 1 + bpe_freqs = sorted(rawfreqs.items(), key=lambda x: x[1]) + total = sum(map(lambda x: x[1], bpe_freqs)) + table = { k[0]: 1 for k in bpe_freqs } + for i, freq in bpe_freqs: + val = max(freq / total * X_bits - 1, 0) + print(val) + n = math.floor(val) + q = val - n + x = n + (random.random() < q) + table[i] += x + diff = X_bits - sum(table.values()) + adjust = random.choices(list(filter(lambda x: table[x] > 1, range(1024))), k=abs(diff)) + if diff > 0: + for a in adjust: + table[a] += 1 + elif diff < 0: + for a in adjust: + table[a] -= 1 + + print(diff, sum(table.values())) + json.dump(table, g) \ No newline at end of file diff --git a/code-guessing/sprites/belt-conn.png b/code-guessing/sprites/belt-conn.png new file mode 100644 index 0000000000000000000000000000000000000000..3fad48f8154bf011aa6e96960166437bca3648a5 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`!JaOTAr^wk2@xDYs*f5pz#czu6{1-oD!M|Ar^wk2@cGwR;~KKb?erR zNvf(#|7V;s+^N89(?PpEadUtP)LDpfwj@%Pssq%(0rM*F*FJfaSOh50>`So^Q+I1Z zyA259IovbTG7+#o%p{K^CXj75=K9Dxa>(%IRbcDv9ioYrqJQePbBPK=2dV0LAfMXD zNA`sXb*CT$)9{gT^0D)n)V{+82^03&OfZSAfYJR8OjF3m9^^BI2lRyXSl8Q9L_!Qs ztdl{if`%&oP?_Ml4o$#Se%O7@5r9}2k?FQm*BWFO0)0&KSGAw&Kr9+YXATM07*qoM6N<$f~?b$^#A|> literal 0 HcmV?d00001 diff --git a/code-guessing/sprites/blue-plate.png b/code-guessing/sprites/blue-plate.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f943de21adc0b289cc0396d31d24e7b2a7b844 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`{+=$5Ar^wk2@Y5q}KjjrJ^iAqZvG1{an^LB{Ts5S$He^ literal 0 HcmV?d00001 diff --git a/code-guessing/sprites/drill.png b/code-guessing/sprites/drill.png new file mode 100644 index 0000000000000000000000000000000000000000..e658f0ccedaed82207a8f386fcfe61cc25f0b570 GIT binary patch literal 261 zcmV+g0s8)lP)z@sS5=w4eV9N1!k^KIZBNMl&o zTn=3@0nb9tnV;_$-=~Q~2;3f#S-0zGDoQDwQsNk6p8)i9f<{|@?e>06fGSJ?3!Z@S zEODwZ0W3IM-v{_lz$5CK@ialKp@kajJSKYnFnGH9xvXz@qLo5WRPCCuoV8G+NSxniG zUED3fL(hl7$ZO(f(WjTL+|cg~5&YX%yx-l{FXObDqx}E-HDAF1fT+xws>nZTgceSK)8s?}B`f$xZ$)YrOcogu~T|zH8NApGdrNthsPc z;;Vb_KDS?ao9q@EaiM9!ds}9IUv7iLg69^zoyPOQfkl4XV9(E@bd@^>bP0 Hl+XkKL?u$g literal 0 HcmV?d00001 diff --git a/code-guessing/sprites/ore2.png b/code-guessing/sprites/ore2.png new file mode 100644 index 0000000000000000000000000000000000000000..893f78d9fb2578c6db026f30c20fe2fca1be66d0 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`U7jwEAr^vLgKi5pDDb?Ni#*6F zd!bdvVO@gdE$@qmC(FN3e%aii!fv52#?<%f`i{LvC3#$HxY)jh9g$S5Y`qg`P?WIv zvE_qJ6Ls@v7O?!=)F0JgXfA*K(2c9U27gw1Txb2w$h>)xSheSa?y?QGA*r#M&r-f` tnaZ$W=VnXhIJsg|#U{JkGvDRfvvM>iWi&pi-3oLSgQu&X%Q~loCIDf`N>=~? literal 0 HcmV?d00001 diff --git a/code-guessing/sprites/plate1.png b/code-guessing/sprites/plate1.png new file mode 100644 index 0000000000000000000000000000000000000000..794a21acc043a5cb36e1e85805052b86fdf13f08 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`{+=$5Ar^wk2@{qt-;xCt&9FU&QNhqU^`$kIfvoIc?Ic2wh1ZLMGcK6 jlh#V!To7pX4`{kSulCC>$vt8~qZvG1{an^LB{Ts5u`VpX literal 0 HcmV?d00001 diff --git a/code-guessing/test7.py b/code-guessing/test7.py new file mode 100644 index 0000000..7613cc4 --- /dev/null +++ b/code-guessing/test7.py @@ -0,0 +1,296 @@ +import sys +import importlib +import subprocess +import ctypes +import random +import traceback +import textwrap +import json +import os +import shutil +try: + from tqdm import tqdm, trange +except ImportError: + print("`tqdm` not found. there will be no progress bars") + def tqdm(x): + return x + trange = range + + +filename = sys.argv[1] + +if filename.endswith(".py"): + print("importing as Python...") + module = importlib.import_module(filename.removesuffix(".py")) + print("done.") + try: + entry = module.entry + except AttributeError: + print("module is missing entrypoint `entry`. aborting.") + sys.exit(1) +elif filename.endswith(".c"): + print("compiling as C with `gcc`...") + obj = "./" + filename.removesuffix(".c") + ".so" + rc = subprocess.call(["gcc", "-shared", "-fPIC", *sys.argv[2:], filename, "-o", obj]) + if rc != 0: + print("compilation failed. aborting.") + sys.exit(rc) + lib = ctypes.CDLL(obj) + try: + entry = lambda s: lib.entry(s.encode()) + except AttributeError: + print("library is missing entrypoint `entry`. aborting.") + sys.exit(1) +elif filename.endswith(".rs"): + print("compiling as Rust...") + os.makedirs("./entry-rs/src", exist_ok=True) + with open("./entry-rs/Cargo.toml", "w") as f: + f.write(""" +[package] +name = "entry-rs" +version = "0.1.0" +edition = "2021" + +[lib] +name = "entry_rs" +crate-type = ["cdylib"] + +[dependencies.pyo3] +version = "0.14.5" +features = ["extension-module"] +""") + with open("./entry-rs/src/lib.rs", "w") as f: + f.write(""" +use pyo3::prelude::*; + +mod entry_impl; +use entry_impl::entry; + +#[pyfunction] +fn wrapped_entry(s: &str) -> PyResult { + Ok(entry(s)) +} + +#[pymodule] +fn entry_rs(_py: Python, m: &PyModule) -> PyResult<()> { + m.add_function(wrap_pyfunction!(wrapped_entry, m)?)?; + Ok(()) +} +""") + shutil.copyfile(filename, "./entry-rs/src/entry_impl.rs") + os.chdir("entry-rs") + rc = subprocess.call(["cargo", "build", "--release"]) + os.chdir("..") + if rc != 0: + print("compilation failed. aborting.") + sys.exit(1) + sys.path.append("./entry-rs/target/release") + os.rename("./entry-rs/target/release/libentry_rs.so", "./entry-rs/target/release/entry_rs.so") + module = importlib.import_module("entry_rs") + entry = module.wrapped_entry +else: + print("unrecognized file extension") + sys.exit(1) + + +tests = [ + ("zero", "0", True), + ("leadingws", "\n\t 0", True), + ("trailingws", "0\n\t ", True), + ("one", "1", True), + ("negativezero", "-0", True), + ("negativeone", "-1", True), + ("wsisbadhere", "- 1", False), + ("multidigit", "100", True), + ("leadingzero", "01", False), + ("noplus", "+1", False), + ("decimal", "1.0", True), + ("leadingdot", ".0", False), + ("trailingdot", "0.", False), + ("bigdecimal", "13847432.35809092", True), + ("scientific", "1e2", True), + ("bigscientific", "-2376420.0033533e533", True), + ("capitalscientific", "2E3", True), + ("scientificminus", "2e-3", True), + ("scientificplusisokay", "2E+3", True), + ("nowshere", "2 e + 3", False), + ("integerexponent", "2e3.0", False), + ("emptystring", r'""', True), + ("notemptystring", r'"not empty"', True), + ("escapes", r'"\n\t\r\f\b\/"', True), + ("unicodeescape", r'"\uaA0b"', True), + ("moreescapes", r'"\\ \" "', True), + ("evilescape", r'"\"', False), + ("manybackslashes", r'"\\\\\\\\"', True), + ("evilmanybackslashes", r'"\\\\\\\\\"', False), + ("invalidescape", r'"\j"', False), + ("invalidunicodeescape", r'"\u000j"', False), + ("bigstring", r'"greetings people. this is a big string. \\[}[{]}}\"&*%4783.02 I am trying to break your code. am I doing a good job?\nplease say I am\\\\"', True), + ("emptyarray", "[]", True), + ("lessemptyarray", "[0]", True), + ("evenlessemptyarray", "[0, 1]", True), + ("heterogenousarray", '[0, 2.0, "string"]', True), + ("unclosedarray", "[0", False), + ("trailingcomma", "[0,]", False), + ("leadingcomma", "[,0]", False), + ("leadingcommaobj", '{,"bee":-4}', False), + ("gap", "[0,,1]", False), + ("nesting", "[[], [1, [2, []], [3, 4]]]", True), + ("hugenest", "[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]", True), + ("emptyobject", "{}", True), + ("singletonobject", r'{"key": "value"}', True), + ("imaginebeinghetero", r'{"key": "value", "otherkey": 1}', True), + ("keysarestrings", "{0: 0}", False), + ("dupesareokay", r'{"key": 0, "key": 1}', True), + ("stillnotrailingcomma", r'{"key": "value",}', False), + ("mixing", r'[0, {"O.O": [{"object in a list in an object in a list\nwhat will it do": "it will do this"}]}]', True), + ("whitespacesilliness", '[ \t 0 , { "whitespace4all" : \n {"woah" :[\n [ \n ] ,0 ]} \t}]', True), + ("true", "true", True), # hehe + ("false", "false", True), + ("null", "null", True), + ("nototherstuff", "asdf", False), + ("alltogethernow", r""" + { + "this": "a JSON value", + "people": [ + { + "name": "christina", + "value": 1e100 + }, + { + "name": "everyone else probably\nidk", + "value": 0.0e0 + } + ], + "peoplecoolerthanchristina": { + "value": null, + "ready": false, + "status": "still processing" + } + } + """, True), + ("noextradata", '["stuff"]extra stuff', False), +] + +print("beginning testing suite") +failures = 0 + +for test_name, value, result in tqdm(tests): + print(f"`{test_name}`... ", end="") + try: + r = entry(value) + except BaseException: + print("error") + traceback.print_exc() + failures += 1 + continue + if bool(r) == result: + print("ok") + else: + failures += 1 + print("failed") + print(f"for test `{test_name}`:") + print(textwrap.indent(value, " "*2)) + print(f"entry returned {r} when {result} was expected\n") +if not failures: + print("test suite finished, all ok") +else: + print(f"test suite finished. {failures} tests failed\n\n") + print("skipping randomized testing because your program is clearly broken and the output from those isn't very helpful for finding bugs") + sys.exit(2) + + +l = [r'\"', r'\\', r'\b', r'\f', r'\n', r'\r', r'\t', rf"\u{random.randint(0x0000, 0xFFFF):04{random.choice('xX')}}", *map(chr, range(ord(" "), ord("}")+1))] +l.remove("\\") +l.remove('"') + +def gen_random_string(): + s = '"' + for _ in range(random.randint(0, 8)): + s += random.choice(l) + s += '"' + return wsify(s) + +def wsify(s): + return s + random.choice(" \t\n")*random.randint(0, 2) + +def gen_random_json(n=1): + if n >= 12: + t = random.choice(["sentinel", "number", "string"]) + else: + t = random.choice(["sentinel", "number", "array", "object", "string", "string", "number", "sentinel"]) + if t == "sentinel": + return wsify(random.choice(["true", "false", "null"])) + elif t == "string": + return gen_random_string() + elif t == "array": + return wsify("[") + wsify(",").join(gen_random_json(n+1) for _ in range(5)) + wsify("]") + elif t == "object": + return wsify("{") + wsify(",").join(gen_random_string() + ":" + gen_random_json(n+1) for _ in range(5)) + wsify("}") + elif t == "number": + nt = random.choice(["int", "decimal", "sci"]) + if nt == "int": + r = str(random.randint(0, 1000000000)) + elif nt == "decimal": + r = str(random.uniform(0, 1000000000)) + elif nt == "sci": + e = random.choice(["e", "E"]) + p = random.choice(["+", "-", ""]) + r = f"{random.uniform(0, 1000000000)}{e}{p}{random.randint(0, 1000000000)}" + else: + assert False + return "-"*random.randint(0, 1) + r + else: + assert False + + +print("beginning randomized testing.") +random_failures = 0 +for _ in trange(100): + j = gen_random_json() + tr = True + if random.randint(0, 1): + j = list(j) + for _ in range(20): + t = random.choice(["insert", "remove", "replace", "replace", "replace"]) + if not j and t in ("remove", "replace"): + continue + idx = random.randrange(0, len(j)+(t == "insert")) + c = random.choice(["\n", "\t", " ", *map(chr, range(ord(" "), ord("}")+1))]) + if t == "replace": + j[idx] = c + elif t == "insert": + j.insert(idx, c) + elif t == "remove": + j.pop(idx) + j = "".join(j) + try: + json.loads(j) + except json.JSONDecodeError: + tr = False + try: + r = entry(j) + except BaseException: + print("error") + traceback.print_exc() + random_failures += 1 + continue + if bool(r) != tr: + print("randomized test case failed:") + print(textwrap.indent(j, " "*2)) + print(f"entry returned {r} when {tr} was expected\n") + random_failures += 1 + +if not random_failures: + print("randomized testing finished. all ok\n\n") +else: + print(f"randomized testing finished with {random_failures} failures\n\n") + + +print("overall report:") +overall = failures + random_failures +if not overall: + print("no failures detected. all seems well!") +else: + print(f"{overall} failures detected overall. you have some bugs to fix") + sys.exit(2) diff --git a/code-guessing/thingy.py b/code-guessing/thingy.py new file mode 100644 index 0000000..088dbdb --- /dev/null +++ b/code-guessing/thingy.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Mar 30 08:37:12 2015 + +@author: jonathan +""" + +import clang.cindex +import clang.enumerations +import random + +# set the config +clang.cindex.Config.set_library_file("/lib/libclang.so") + +class Tokenizer: + # creates the object, does the inital parse + def __init__(self, path): + self.index = clang.cindex.Index.create() + self.tu = self.index.parse(path) + self.path = self.extract_path(path) + + # To output for split_functions, must have same path up to last two folders + def extract_path(self, path): + return "".join(path.split("/")[:-2]) + + # tokenizes the contents of a specific cursor + def full_tokenize_cursor(self, cursor): + + return [ token.spelling for token in cursor.get_tokens() ] + + # tokenizes the entire document + def full_tokenize(self): + cursor = self.tu.cursor + return self.full_tokenize_cursor(cursor) + +copypasta = """ +What the fuck did you just fucking say about me, you little bitch? I'll have you know I graduated top of my class in the Navy Seals, and I've been involved in numerous secret raids on Al-Quaeda, and I have over three hundred confirmed kills. I am trained in gorilla warfare and I'm the top sniper in the entire US Armed Forces. You are nothing to me but just another target. I will wipe you the fuck out with precision the likes of which has never been seen before on this Earth, mark my fucking words. You think you can get away with saying that shit to me over the Internet? Think again, fucker. As we speak, I am contacting my secret network of spies across the USA and your IP is being traced right now so you better prepare for the storm, maggot. The storm that wipes out the pathetic little thing you call your life. You're fucking dead, kid. I can be anywhere, anytime, and I can kill you in over seven hundred ways, and that's just with my bare hands. Not only am I extensively trained in unarmed combat, but I have access to the entire arsenal of the United States Marine Corps and I will use it to its full extent to wipe your miserable ass off the face of the continent, you little shit. If only you could have known what unholy retribution your little clever comment was about to bring down upon you, maybe you would have held your fucking tongue. But you couldn't, you didn't, and now you're paying the price, you goddamn idiot. I will shit fury all over you and you will drown in it. You're fucking dead, kiddo. +What the f--- did you just f---ing type about me, you little bitch? I'll have you know I graduated top of my class at MIT, & I've been involved in numerous secret raids with Anonymous, & I have over three hundred confirmed DDoSes. I am trained in online trolling & I'm the top hacker in the entire world. You are nothing to me but just another virus host. I will wipe you the f--- out with precision the likes of which has never been seen before on the Internet, mark my f---ing words. You think you can get away with typing that shit to me over the Internet? Think again, f---er. As we chat over IRC I am tracing your IP with my damn bare hands so you better prepare for the storm, maggot. The storm that wipes out the pathetic little thing you call your computer. You're f---ing dead, kid. I can be anywhere, anytime, & I can hack into your files in over seven hundred ways, & that's just with my bare hands. Not only am I extensively trained in hacking, but I have access to the entire arsenal of every piece of malware ever created & I will use it to its full extent to wipe your miserable ass off the face of the world wide web, you little shit. If only you could have known what unholy retribution your little clever comment was about to bring down upon you, maybe you would have held your f---ing fingers. But you couldn't, you didn't, & now you're paying the price, you goddamn idiot. I will shit code all over you & you will drown in it. You're f---ing dead, kiddo. +""".lower().replace("-", "_").replace("&", " and ") +for punct in "?'.,": + copypasta = copypasta.replace(punct, " ") +copypasta = [ x.strip() for x in copypasta.split(" ") if x.strip() ] + +import sys + +if len(sys.argv) != 2: + print("please provide a file argument") + exit(1) + +def modcase(s): + return "".join([ c.upper() if random.randint(0, 1) else c.lower() for c in s ] ) + +tok = Tokenizer(sys.argv[1]) # path to a C++ file +results = tok.full_tokenize() +tmap = {"if": None, "for": None} +seq = [] +for cpasta, c in zip(copypasta, results): + while cpasta in tmap and tmap[cpasta] != c: + for i in range(200): + tr = modcase(cpasta) + if tr not in tmap or tmap[tr] == c: + cpasta = tr + break + else: cpasta += "_" + tmap[cpasta] = c + seq.append(cpasta) +print("""#include +#include +#include +#include +#include +#include + +#define nfibs 93""") +for k, v in tmap.items(): + if v: print(f"#define {k} {v}") +print(" ".join(seq)) \ No newline at end of file diff --git a/code-guessing/tictac.html b/code-guessing/tictac.html new file mode 100644 index 0000000..63b1e6c --- /dev/null +++ b/code-guessing/tictac.html @@ -0,0 +1,249 @@ + + + + + Tic-Tac-Toe + + + +
+
+
+ + + + \ No newline at end of file diff --git a/code-guessing/token_map.csv b/code-guessing/token_map.csv new file mode 100644 index 0000000..3209107 --- /dev/null +++ b/code-guessing/token_map.csv @@ -0,0 +1,142 @@ +NUM,20 +STRING,21 +CHAR,22 +BOOL,23 +LITERAL,24 +std,25 +cout,26 +cin,27 +vector,28 +pair,29 +string,30 +NULL,31 +size_t,32 +DEC,33 +REF,34 +USE,35 +IDENT,36 +=,37 ++=,38 +-=,39 +*=,40 +/=,41 +%=,42 +&=,43 +|=,44 +^=,45 +<<=,46 +>>=,47 ++,48 +-,49 +*,50 +/,51 +%,52 +~,53 +&,54 +|,55 +^,56 +<<,57 +>>,58 +!,59 +&&,60 +||,61 +==,62 +!=,63 +<,64 +>,65 +<=,66 +>=,67 +.,68 +",",69 +[,70 +],71 +:,72 +::,73 +->,74 +?,75 +alignas,76 +alignof,77 +and,78 +and_eq,79 +asm,80 +auto,81 +bitand,82 +bitor,83 +bool,84 +break,85 +case,86 +catch,87 +char,88 +class,89 +compl,90 +const,91 +constexpr,92 +const_cast,93 +continue,94 +decltype,95 +default,96 +delete,97 +do,98 +double,99 +else,100 +enum,101 +explicit,102 +export,103 +extern,104 +false,105 +float,106 +for,107 +friend,108 +goto,109 +if,110 +inline,111 +int,112 +long,113 +mutable,114 +namespace,115 +new,116 +noexcept,117 +not,118 +not_eq,119 +nullptr,120 +operator,121 +or,122 +or_eq,123 +private,124 +protected,125 +public,126 +register,127 +return,128 +short,129 +signed,130 +sizeof,131 +static,132 +static_cast,133 +struct,134 +switch,135 +template,136 +this,137 +thread_local,138 +throw,139 +true,140 +try,141 +typedef,142 +typeid,143 +typename,144 +union,145 +unsigned,146 +using,147 +virtual,148 +void,149 +volatile,150 +wchar_t,151 +while,152 +xor,153 +xor_eq,154 +.*,155 +->*,156 +++,157 +--,158 +__func__,159 +#,160 +reinterpret_cast,161 \ No newline at end of file diff --git a/code-guessing/validate_json.py b/code-guessing/validate_json.py new file mode 100644 index 0000000..cdfbe5c --- /dev/null +++ b/code-guessing/validate_json.py @@ -0,0 +1,16 @@ +import regex + +""" +WHITESPACE = r"[\t\n ]*" +NUMBER = r"\-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?" +ARRAY = f"(?:\[{WHITESPACE}(?:|(?R)|(?R)(?:,{WHITESPACE}(?R){WHITESPACE})*){WHITESPACE}])" +STRING = r'"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"' +TERMINAL = f"(?:true|false|null|{NUMBER}|{STRING})" +PAIR = f"(?:{WHITESPACE}{STRING}{WHITESPACE}:{WHITESPACE}(?R){WHITESPACE})" +OBJECT = f"(?:{{(?:{WHITESPACE}|{PAIR}|(?:{PAIR}(?:,{PAIR})*))}})" +VALUE = f"{WHITESPACE}(?:{ARRAY}|{OBJECT}|{TERMINAL}){WHITESPACE}" +print(VALUE) +def entry(s): + return regex.fullmatch(VALUE, s, regex.V1) +""" +entry = lambda s: __import__("regex").fullmatch(r"""[\t\n ]*(?:(?:\[[\t\n ]*(?:|(?R)|(?R)(?:,[\t\n ]*(?R)[\t\n ]*)*)[\t\n ]*])|(?:{(?:[\t\n ]*|(?:[\t\n ]*"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"[\t\n ]*:[\t\n ]*(?R)[\t\n ]*)|(?:(?:[\t\n ]*"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"[\t\n ]*:[\t\n ]*(?R)[\t\n ]*)(?:,(?:[\t\n ]*"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"[\t\n ]*:[\t\n ]*(?R)[\t\n ]*))*))})|(?:true|false|null|\-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?|"(?:[^"\\\n]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*"))[\t\n ]*""", s, regex.V1) \ No newline at end of file diff --git a/esolangs-iceberg/above.jpg b/esolangs-iceberg/above.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b9a98a26f9fb6e21231430b4e054cb6ae9c7806 GIT binary patch literal 23571 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 P@r5$`s!unxf2{r=U_BWu literal 0 HcmV?d00001 diff --git a/esolangs-iceberg/below.jpg b/esolangs-iceberg/below.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5003a73d44b14fa689a9a761b226242630cfd4a2 GIT binary patch literal 14750 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 CJl$>p literal 0 HcmV?d00001 diff --git a/esolangs-iceberg/belowwater.jpg b/esolangs-iceberg/belowwater.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05e7132f880db17e76cbca7830931d50971a59d5 GIT binary patch literal 33132 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 s@>O|=QE%Vgf7sa4CjbBd literal 0 HcmV?d00001 diff --git a/esolangs-iceberg/bottom.jpg b/esolangs-iceberg/bottom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03a32a21972ad29c218a8edb9009f7d3cf454413 GIT binary patch literal 20593 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 V;(8e#81Ot-i<2G}7@&Fc|Jh`6YP$dc literal 0 HcmV?d00001 diff --git a/esolangs-iceberg/iceberg.html b/esolangs-iceberg/iceberg.html new file mode 100644 index 0000000..2fe270a --- /dev/null +++ b/esolangs-iceberg/iceberg.html @@ -0,0 +1,178 @@ + + + + Esolangs Iceberg Meme + + + + +

Esolangs Iceberg

+ +
+
+
    +
  • Macron development hell
  • +
  • 50 votes
  • +
  • Code guessing
  • +
  • #rap-battles
  • +
  • APIONET
  • +
  • Apioforms incurse
  • +
  • Write some cool messages here!
  • +
+
+ +
+
    +
  • Macron/Micron split
  • +
  • #r9k-test
  • +
  • Esoserver
  • +
  • NSFW Esolangs
  • +
  • Olivia Time
  • +
  • type class struggle tweets
  • +
  • Programmer socks
  • +
  • GEORGE is all
  • +
  • First-star rule
  • +
  • garbage terminal
  • +
+
+ +
+
    +
  • Project COMPARTMENTAL SLATS
  • +
  • Petcruel
  • +
  • Iterated prisoner's dilemma competition
  • +
  • CG5
  • +
  • LyricLy deliveries
  • +
  • Epicbot downtime
  • +
  • HelloBoi golfing
  • +
  • ASCIIpy spam day
  • +
+
+ +
+
    +
  • Macron is an assembler
  • +
  • ABR typerace cheat
  • +
  • APL conspiracy
  • +
  • heavpoot is osmarks
  • +
  • second #staff-only channel
  • +
  • colin
  • +
  • less than 10% of users are frequently active
  • +
  • cyber PC diagram
  • +
+
+ +
+
    +
  • baidicoot was owner
  • +
  • Emu War Online
  • +
  • FungeChessBot
  • +
  • #club-penguin
  • +
  • macron compilers and interpreters are equivalent
  • +
  • two layer "?choose" recursion limit
  • +
  • GPT-based chatbot deployment
  • +
+
+ +
+
    +
  • The real purpose of Lowlight
  • +
  • gollark was demoted for being cis
  • +
  • Typing Speeder harvests messages for blackmail
  • +
  • all esolangs members are gollark alts
  • +
  • Palaiologos' memetics research
  • +
+
+
+ \ No newline at end of file diff --git a/esolangs-iceberg/middle.jpg b/esolangs-iceberg/middle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..831db8c27bd32f0f0b9847dbfda30201f5bc69c5 GIT binary patch literal 25131 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 literal 0 HcmV?d00001 diff --git a/gpu_mandelbrot.py b/gpu_mandelbrot.py new file mode 100644 index 0000000..240c750 --- /dev/null +++ b/gpu_mandelbrot.py @@ -0,0 +1,32 @@ +import torch +import torchvision.transforms.functional as T +import math +torch.set_grad_enabled(False) + +device = torch.device("cuda:0") +size = 6144 +steps = 2048 +xs = torch.linspace(-1, 1, size, dtype=torch.cfloat, device=device).tile(size, 1) +ys = torch.linspace(-1, 1, size, dtype=torch.cfloat, device=device).tile(size, 1).t() * 1j +zs = xs + ys +ws = zs.clone() +aws = abs(ws) +dead = torch.zeros_like(xs, dtype=torch.bool, device=device) +counts = torch.zeros_like(xs, dtype=torch.float, device=device) + +for i in range(steps): + zs *= zs + zs += ws + dead |= abs(zs) > 4 + counts += torch.where(dead, 1, 0) + +zero = torch.zeros((size, size, 3), dtype=torch.float, device=device) +blue = torch.zeros((size, size, 3), dtype=torch.float, device=device) +blue[..., 2] = 1 +itr = torch.log((steps - counts) / steps) +itr /= math.log(steps) +m = itr.reshape((size, size, 1)).repeat_interleave(3, -1) +z = m * blue +i = T.to_pil_image(z.permute(2, 0, 1)) + +i.save("/tmp/mandel.png") \ No newline at end of file diff --git a/ptt.py b/ptt.py index 4db1c4e..432a6b6 100755 --- a/ptt.py +++ b/ptt.py @@ -11,7 +11,7 @@ import threading scriptdir = os.path.dirname(os.path.abspath(sys.argv[0])) red, green = os.path.join(scriptdir, "red.png"), os.path.join(scriptdir, "green.png") -l_key = keyboard.KeyCode(65312) +l_key = keyboard.Key.f8 source = "alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback" MuteSetEvent, EVT_MUTE_SET_EVENT = wx.lib.newevent.NewEvent() diff --git a/square-law gravity - physics test.html b/square-law gravity - physics test.html new file mode 100644 index 0000000..2a07853 --- /dev/null +++ b/square-law gravity - physics test.html @@ -0,0 +1,64 @@ + + + +

+ \ No newline at end of file diff --git a/steganography.py b/steganography.py new file mode 100644 index 0000000..effa156 --- /dev/null +++ b/steganography.py @@ -0,0 +1,63 @@ +from PIL import Image +import numpy.fft as fft +import numpy as np +import random +import math + +with Image.open("/tmp/in.png") as im: + rgb_im = im.convert("RGB") + data = np.asarray(rgb_im, dtype=np.uint8) +out = np.zeros_like(data) +#out2 = np.zeros_like(data) + +random.seed(4) + +def operate_on_channel(n): + red = data[..., n] + + red = fft.fft2(red) + red = fft.fftshift(red) + + w, h = red.shape + mask = np.full_like(red, 1) + midx, midy = w // 2, h // 2 + print(red.shape) + + J = 48 + for x in range(midx - J, midx + J + 1): + for y in range(midy - J, midy + J + 1): + mask[x, y] = random.uniform(0.0, 2.0) + """ + for x in range(w): + for y in range(h): + dist = (x - midx) ** 2 + abs(y - midy) ** 2 + #if 1024 > dist > 4: + # mask[x, y] = 1 + #mask[x, y] = math.sqrt(dist) / 500 + if dist < 256: mask[x, y] = 1 + """ + """ + for x in range(w): + for y in range(h): + mask[x, y] = random.uniform(0.7, 1) + """ + red = fft.ifftshift(red * mask) + rfft = fft.ifft2(red) + red = np.abs(np.real(rfft)) + #red2 = np.abs(np.imag(rfft)) + #red = np.log(np.abs(np.real(red))) + #red = np.abs(mask) + + red = red * (255 / np.max(red)) + #red2 = red2 * (255 / np.max(red2)) + + out[..., n] = red + #out2[..., n] = red2 + +for i in range(3): + operate_on_channel(i) + +out = Image.fromarray(out, "RGB") +out.save("/tmp/out.png") +#out2 = Image.fromarray(out2, "RGB") +#out2.save("/tmp/out2.png") \ No newline at end of file diff --git a/tictactoe.html b/tictactoe.html new file mode 100644 index 0000000..e57a293 --- /dev/null +++ b/tictactoe.html @@ -0,0 +1,472 @@ + + + + + + Tic-Tac-Toe + + + +
+
+
+ + + + + + Select Opponent + +
+ + + + \ No newline at end of file