Last active
August 4, 2022 03:46
-
-
Save Omochice/c48a9090f6067c260c70ac97a7323916 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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