Log in to post a comment.
const dict = { "start": {code: "11010000100", value: 103}, "stop": {code: "1100011101011", value: 106}, " ":{code: "11011001100", value: 0, }, "!":{code: "11001101100", value: 1, }, '"':{code: "11001100110", value: 2, }, "#":{code: "10010011000", value: 3, }, "$":{code: "10010001100", value: 4, }, "%":{code: "10001001100", value: 5, }, "&":{code: "10011001000", value: 6, }, "'":{code: "10011000100", value: 7, }, "(":{code: "10001100100", value: 8, }, ")":{code: "11001001000", value: 9, }, "*":{code: "11001000100", value: 10, }, "+":{code: "11000100100", value: 11, }, ",":{code: "10110011100", value: 12, }, "-":{code: "10011011100", value: 13, }, ".":{code: "10011001110", value: 14, }, "/":{code: "10111001100", value: 15, }, "0":{code: "10011101100", value: 16, }, "1":{code: "10011100110", value: 17, }, "2":{code: "11001110010", value: 18, }, "3":{code: "11001011100", value: 19, }, "4":{code: "11001001110", value: 20, }, "5":{code: "11011100100", value: 21, }, "6":{code: "11001110100", value: 22, }, "7":{code: "11101101110", value: 23, }, "8":{code: "11101001100", value: 24, }, "9":{code: "11100101100", value: 25, }, ":":{code: "11100100110", value: 26, }, ";":{code: "11101100100", value: 27, }, "<":{code: "11100110100", value: 28, }, "=":{code: "11100110010", value: 29, }, ">":{code: "11011011000", value: 30, }, "?":{code: "11011000110", value: 31, }, "@":{code: "11000110110", value: 32, }, "A":{code: "10100011000", value: 33, }, "B":{code: "10001011000", value: 34, }, "C":{code: "10001000110", value: 35, }, "D":{code: "10110001000", value: 36, }, "E":{code: "10001101000", value: 37, }, "F":{code: "10001100010", value: 38, }, "G":{code: "11010001000", value: 39, }, "H":{code: "11000101000", value: 40, }, "I":{code: "11000100010", value: 41, }, "J":{code: "10110111000", value: 42, }, "K":{code: "10110001110", value: 43, }, "L":{code: "10001101110", value: 44, }, "M":{code: "10111011000", value: 45, }, "N":{code: "10111000110", value: 46, }, "O":{code: "10001110110", value: 47, }, "P":{code: "11101110110", value: 48, }, "Q":{code: "11010001110", value: 49, }, "R":{code: "11000101110", value: 50, }, "S":{code: "11011101000", value: 51, }, "T":{code: "11011100010", value: 52, }, "U":{code: "11011101110", value: 53, }, "V":{code: "11101011000", value: 54, }, "W":{code: "11101000110", value: 55, }, "X":{code: "11100010110", value: 56, }, "Y":{code: "11101101000", value: 57, }, "Z":{code: "11101100010", value: 58, }, "[":{code: "11100011010", value: 59, }, "\\":{code: "11101111010", value: 60, }, "]":{code: "11001000010", value: 61, }, "^":{code: "11110001010", value: 62, }, "_":{code: "10100110000", value: 63, }, "NUL":{code: "10100001100", value: 64, }, "SOH":{code: "10010110000", value: 65, }, "STX":{code: "10010000110", value: 66, }, "ETX":{code: "10000101100", value: 67, }, "EOT":{code: "10000100110", value: 68, }, "ENQ":{code: "10110010000", value: 69, }, "ACK":{code: "10110000100", value: 70, }, "BEL":{code: "10011010000", value: 71, }, "BS":{code: "10011000010", value: 72, }, "HT":{code: "10000110100", value: 73, }, "LF":{code: "10000110010", value: 74, }, "VT":{code: "11000010010", value: 75, }, "FF":{code: "11001010000", value: 76, }, "CR":{code: "11110111010", value: 77, }, "SO":{code: "11000010100", value: 78, }, "SI":{code: "10001111010", value: 79, }, "DLE":{code: "10100111100", value: 80, }, "DC1":{code: "10010111100", value: 81, }, "DC2":{code: "10010011110", value: 82, }, "DC3":{code: "10111100100", value: 83, }, "DC4":{code: "10011110100", value: 84, }, "NAK":{code: "10011110010", value: 85, }, "SYN":{code: "11110100100", value: 86, }, "ETB":{code: "11110010100", value: 87, }, "CAN":{code: "11110010010", value: 88, }, "EM":{code: "11011011110", value: 89, }, "SUB":{code: "11011110110", value: 90, }, "ESC":{code: "11110110110", value: 91, }, "FS":{code: "10101111000", value: 92, }, "GS":{code: "10100011110", value: 93, }, "RS":{code: "10001011110", value: 94, }, "US":{code: "10111101000", value: 95, }, } // You can find the Turtle API reference here: https://turtletoy.net/syntax Canvas.setpenopacity(1); // Global code will be evaluated once. const turtle = new Turtle(); turtle.setheading(90) const HEIGHT = 50 const WIDTH = 0.8 const START = -50 const drawLine = (x, black) => { for (let i=0; i<WIDTH*10; i++) { turtle.penup() turtle.goto(x+i*0.1, -HEIGHT/2+5) if (black) { turtle.pendown() } turtle.forward(HEIGHT) } } const drawCode = (input) => { let x = START for (let i=0; i<input.length; i++) { drawLine(x, input[i]) x += WIDTH } } const textToInput = (text) => { return text.split("").reduce((result, letter) => { if (!dict[letter]) { throw Error("Missing character: " + letter + ".") } return result + dict[letter].code }, "").split("").map(Number) } const checkSum = (text) => { let sum = 103 for (let i = 1; i <= text.length; i++) { sum += i * dict[text[i-1]].value } return sum % 103 } const getCheckSum = (text) => { const cs = checkSum(text) for (letter in dict) { if (dict[letter].value === cs) { return dict[letter].code.split("").map(Number) } } throw Error("Could not find letter with value: " + cs + ".") } const getDate = () => { const d = new Date() return d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() } const text = getDate() drawCode( dict.start.code.split("").map(Number) .concat(textToInput(text)) .concat(getCheckSum(text)) .concat(dict.stop.code.split("").map(Number)) )