Skip to content

Instantly share code, notes, and snippets.

@Omochice
Last active August 4, 2022 03:46
Show Gist options
  • Save Omochice/c48a9090f6067c260c70ac97a7323916 to your computer and use it in GitHub Desktop.
Save Omochice/c48a9090f6067c260c70ac97a7323916 to your computer and use it in GitHub Desktop.
import random
from collections.abc import Iterator
from dataclasses import dataclass
from queue import Queue
@dataclass
class Hoge:
parsed: str
current: str
def hoge(ddsk: list[str], expected: str) -> list[str]:
q = Queue()
q.put(Hoge(parsed=expected, current=""))
results = []
while not q.empty():
poped = q.get()
if poped.parsed == "":
results.append(poped.current)
else:
for idx, s in enumerate(ddsk):
if poped.parsed.startswith(s):
q.put(
Hoge(
parsed=poped.parsed[len(s) :],
current=poped.current + str(idx),
)
)
return results
def get_hex(ddsk: list[str], expected: str) -> str:
bits = ""
while len(expected) > 0:
for i, elm in enumerate(ddsk):
if expected.startswith(elm):
expected = expected[len(elm) :]
bits = f"{bits}{i}"
break
else:
# reach this block if cannot parse
raise ValueError(f"Cannot parse {expected} by {ddsk}")
return bits
def ddsk_iter(ddsk: list[str], expected: str) -> Iterator[str]:
hex = get_hex(ddsk, expected)
bits = ""
while bits != hex:
n = random.randint(0, len(ddsk) - 1)
bits = (bits + str(n))[-1 * len(hex) :]
yield ddsk[n]
if __name__ == "__main__":
s = ["ドド", "スコ"]
for res in ddsk_iter(s, "ドドスコスコスコ" * 3):
print(res, end="")
print("ラブ注入♡")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment