Download or view cryptoCircuitPuzzle.frink in plain text format
// Crypto circuit puzzle by @KoynArtist
// https://twitter.com/KoynArtist/status/856875233931923456
// https://pbs.twimg.com/media/C-Q7eM-W0AAm6rV.jpg
xor3[a,b,c] := a xor b xor c
// Convert a boolean (true or false) to string 1 or 0 respectively.
b2n[b] := b == true ? "1" : "0"
decode[str] :=
{
bin = padLeft[base2[parseInt[str, 16]], 8, "0"]
// Convert a 0 or 1 char into false or true respectively
n2b = {|n| n == "1" ? true : false }
[i7, i6, i5, i4, i3, i2, i1, i0] = map[n2b, charList[bin]]
// Top center left gate
g1 = xor3[i6, i5, i4]
// Top center right gate
g2 = xor3[i2, i1, i0]
// center gate
g3 = xor3[g1, i3, g2]
// leftmost gate
g4 = i5 xor g3
// Center left gate
g6 = g4 xor i4
// bottom left gate
g8 = g6 xor i3
// rightmost gate
g5 = g8 xor i2
// Center right gate
g7 = g5 xor i1
// Bottom right gate
g9 = g7 xor i0
// Output bits
o7 = i7
o6 = g3
o5 = g4
o4 = g6
o3 = g8
o2 = g5
o1 = g7
o0 = g9
binary = b2n[o7] + b2n[o6] + b2n[o5] + b2n[o4] + b2n[o3] + b2n[o2] + b2n[o1] + b2n[o0]
out = char[parseInt[binary,2]]
return out
}
input = "6d 30 16 58 30 19 58 0e 30 15 57 51 0b 30 52 58 5b 08 4f 0e 57 0b 4a 39 30 6d 30 15 57 51 0b 30 0e 1c 57 30 1a 51 52 5e 30 58 15 30 0e 1c 57 5b 39 30 7b 6d 4a 4a 51 52 30 61 4a 5d 5b 58 0d"
for [s] = input =~ %r/([0-9a-f]{2})/g
print[decode[s]]
println[]
Download or view cryptoCircuitPuzzle.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 20145 days, 13 hours, 23 minutes ago.