Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
fun with itertools solution in Clear category for Sequence Analyzer by juestr
from itertools import chain, islice, pairwise
from typing import Iterable
type StrSeq = Iterable[str]
type OptionM[T] = Iterable[T] # at most 1 element
def const_step_seq(start: int, step: int) -> StrSeq:
while ...:
yield chr(start + 65)
start = (start + step) % 26
def try_get_const_step_seq(s: str) -> OptionM[StrSeq]:
step = (ord(s[1]) - ord(s[0])) % 26
if all((b - a) % 26 == step for a, b in pairwise(map(ord, s))):
yield const_step_seq(ord(s[0]) - 65, step)
def intertwine(*seqs: StrSeq) -> StrSeq:
return chain.from_iterable(zip(*seqs))
def second12(seq: StrSeq) -> str:
return ''.join(islice(seq, 12, 24))
def analyzer(s: str) -> str:
for seq1 in try_get_const_step_seq(s):
return second12(seq1)
for seq1 in try_get_const_step_seq(s[0::2]):
for seq2 in try_get_const_step_seq(s[1::2]):
return second12(intertwine(seq1, seq2))
for seq1 in try_get_const_step_seq(s[0::3]):
for seq2 in try_get_const_step_seq(s[1::3]):
for seq3 in try_get_const_step_seq(s[2::3]):
return second12(intertwine(seq1, seq2, seq3))
March 23, 2024
Comments: