[Odin] Rolling the base[Odin] Rolling the base

🕵️

Veni, Vidi, Decrypti

Week 43, 2026

package main import "core:fmt" import "core:strings" main :: proc () { buf: [1000] byte text := "dfIrJmI dEDfl. RhLfE iMnJ atILnaNCrbC, DPnJi cDDnVsCeQ oStLk QmbHgeO CmCIBf, " + "FbefKb Ed CBlcJqI aMtbBLfhI dcDJBCrbC acI. Ip, GJ kNkDnNkQCr, Ob jNtbDRe ahHiIjgLk " + "CeUtabGd bScpJk, CeMHtC GiHKrC BNcclbD, CIbddeEbIHtbC acI: EChFk OjFe aiBTtLgBJi " + "IbadGgl, TqeU fgjMFflTtPi dcReDdp, aPnaR vNlTm gcCbLfJp, Ten FcfbI MfaBnc. RsI " + "MuBPi Ef CjHNm, gEDHi, gbPhaLsCeQ ocCDHGgeiC, CeMfgbI IhHiIjgbI, EF bob TepMDnR, " + "ccnEFeiC. DBeb HInJFfEi Md DmdIblMDEtCdI HgLvNmI EnN, mB BDHGsJjI, hLjDBJi, KmBgCR " + "apeFBJpbI dfOhNngPi gDLCrTrNi. eeUmeeUm FbG qOBbCge jNGrFdJIs SngPE rNlBdcTvRnRt, " + "aTmIj FfgPn eNnHe KIm bbB ahIInRtbD. eNj BeMFbi bbNhdDk aDLnRrN lBfPob BO ef JhnGKmI " + "fNCclebI EjJ; It NfLdfItFdJ nNp VpNBfHhdH aob EEjBFBJi hTlHi gEdcPi KmBLcoacDdI IoaO." fmt.println(decode(text, buf[:])) } decode :: proc (s: string, buf: [] byte) -> string { assert(len(s) > 0 && is_alpha(s[0])) assert(len(s) <= len(buf)) sb := strings.builder_from_bytes(buf) base := int(s[0]) for r, i in s { curr := byte(r) result := curr if is_alpha(curr) { if i > 0 { base += curr<='Z' ? 'A'-int(curr) : int(curr)-'a' result = byte(base) assert(is_lower_alpha(result)) } } strings.write_byte(&sb, result) } return strings.to_string(sb) } is_alpha :: proc (c: byte) -> bool { return (c>='A' && c<='Z') || (c>='a' && c<='z') } is_lower_alpha :: proc (c: byte) -> bool { return c>='a' && c<='z' }