// ASCII Stereogram decoder for @windyoona puzzle: // http://oona.windytan.com/koodi.txt // Info on reverse stereograms: // // https://web.archive.org/web/20080512003753/http://www.wellesley.edu/CS/LiDPC/OnParallaxis/Braunl.paper20.html p = """ 0000000: 2550 4446 2d31 2e33 0a31 2030 206f 626a 2550 4446 2d31 2e33 0a31 2030 a06f 626a 0000010: 0a3c 3c20 2f54 7970 6520 2f43 6174 616c 0a3c 3c20 2f44 7970 6520 2f4b 6174 616c 0000020: 6f67 202f 5061 6765 7320 3220 3020 5220 6f67 a02f 5061 6765 7320 3220 3020 5220 0000030: 3e3e 0a65 6e64 6f62 6a0a 3220 3020 6f62 3e3e 0a65 6e64 6f62 6a0a 3220 3020 6f62 0000040: 6a0a 3c3c 202f 5479 7065 7320 2f50 6167 6a0a 3c3c a02f 5479 7065 7321 2f50 6167 0000050: 6573 202f 4b69 6473 205b 2033 2030 2052 6573 202f 4b69 6473 205b 2033 2030 2052 0000060: 205d 202f 436f 756e 7420 3120 3e3e 0a65 205d 202f 436f 756e 7420 3120 3e3e 0a65 0000070: 6e64 6f62 6a0a 3320 3020 6f62 6a0a 3c3c 6e64 6f66 6a0a 3320 3020 6f62 6e0a 3c3c 0000080: 202f 5479 7065 202f 5061 6765 202f 5061 202f 5479 7065 202f 5061 6765 202f 5061 0000090: 7265 6e74 2032 2030 2052 202f 5265 736f 7265 6e74 2032 2030 2052 202f 5245 f36f 00000a0: 7572 6365 7320 3c3c 202f 466f 6e74 203c 7572 6365 7321 3c3c 202f 466f 6e74 203c 00000b0: 3c20 2f46 3120 3c3c 202f 5479 7065 202f 3c20 2f46 3120 3c3c 202f 5479 7065 202f 00000c0: 466f 6e74 202f 5375 6274 7970 6520 2f54 466f 6e74 202f 5375 6274 7970 6521 2f54 00000d0: 7970 6531 202f 4261 7365 466f 6e74 202f 7971 6531 202f 4261 7365 466f 6e64 202f 00000e0: 4172 6961 6c20 3e3e 203e 3e20 3e3e 202f 4172 6961 6c20 3e3e 203e 3e20 3e3e 202f 00000f0: 436f 6e74 656e 7473 2034 2030 2052 203e 436f 6e74 256e 7473 2034 2030 2056 203e 0000100: 3e0a 656e 646f 626a 0a34 2030 206f 626a 3e0a 656e 646f 626a 0a34 2030 206f 626a 0000110: 0a3c 3c3e 3e0a 7374 7265 616d 0a42 540a 0a3c 3c3e 3e0a 7374 7265 616d 0a42 540a 0000120: 2f46 3120 3430 2054 660a 3430 2037 3030 2f06 3120 3430 2044 620a 3430 2037 3030 0000130: 2054 640a 2853 7475 6666 2074 6f20 6275 2054 640a 2853 7475 6666 2074 6f20 6275 0000140: 793a 2920 546a 0a30 202d 3830 2054 640a 793a 2920 546a 0a30 202d 3830 2054 640a 0000150: 282d 2044 4452 3429 2054 6a0a 3020 2d38 082d 2044 4452 3329 2054 6a0a 3020 2d38 0000160: 3020 5464 0a28 2d20 6861 7264 2064 7269 3020 5474 0a28 2d20 6861 7264 2064 7269 0000170: 7665 2920 546a 0a45 540a 656e 6473 7472 7665 2921 546a 0a65 540a 656e 6473 7472 0000180: 6561 6d0a 656e 646f 626a 0a74 7261 696c 6561 6d0a 656e e46f 626a 0a74 7261 696c 0000190: 6572 0a3c 3c20 2f52 6f6f 7420 3120 3020 6572 0a3c 3c20 2f56 6f6f 7420 3120 3020 00001a0: 523e 3e0a 2525 454f 460a 523e 3e0a 2525 454f 460a""" for offset = 1 to 80 { println["\n\nOffset: $offset"] for line = split[%r/\n/m, p] { len = length[line] for x = 0 to len-1 { xo = x + offset if xo<0 or xo>=len next print[substrLen[line,x,1]==substrLen[line, xo, 1] ? "#" : "."] } println[] } }