[Odin] Simple look up table[Odin] Simple look up table

☎️

Some Mars

Week 15, 2026

package main import "core:fmt" import "core:strings" MESSAGE := #load("message.txt", string) DOT :: "☀️" DASH :: "❄️" CODE_BREAK :: " " // 3 spaces WORD_BREAK :: " " // 7 spaces main :: proc () { message_trimmed := strings.trim_space(MESSAGE) fmt.println("---- INPUT ----") fmt.println(message_trimmed) morse_lut := gen_morse_lut() sb := strings.builder_make() for word in strings.split(message_trimmed, WORD_BREAK) { for code in strings.split(word, CODE_BREAK) { fmt.assertf(code in morse_lut, "Unexpected code `%s`", code) strings.write_byte(&sb, morse_lut[code]) } strings.write_byte(&sb, ' ') } fmt.println("---- OUTPUT ----") fmt.println(strings.to_string(sb)) } // https://upload.wikimedia.org/wikipedia/commons/b/b5/International_Morse_Code.svg gen_morse_lut :: proc (allocator := context.allocator) -> map [string] u8 { m := make(map [string] u8, allocator) m[DOT+DASH] = 'a' m[DASH+DOT+DOT+DOT] = 'b' m[DASH+DOT+DASH+DOT] = 'c' m[DASH+DOT+DOT] = 'd' m[DOT] = 'e' m[DOT+DOT+DASH+DOT] = 'f' m[DASH+DASH+DOT] = 'g' m[DOT+DOT+DOT+DOT] = 'h' m[DOT+DOT] = 'i' m[DOT+DASH+DASH+DASH] = 'j' m[DASH+DOT+DASH] = 'k' m[DOT+DASH+DOT+DOT] = 'l' m[DASH+DASH] = 'm' m[DASH+DOT] = 'n' m[DASH+DASH+DASH] = 'o' m[DOT+DASH+DASH+DOT] = 'p' m[DASH+DASH+DOT+DASH] = 'q' m[DOT+DASH+DOT] = 'r' m[DOT+DOT+DOT] = 's' m[DASH] = 't' m[DOT+DOT+DASH] = 'u' m[DOT+DOT+DOT+DASH] = 'v' m[DOT+DASH+DASH] = 'w' m[DASH+DOT+DOT+DASH] = 'x' m[DASH+DOT+DASH+DASH] = 'y' m[DASH+DASH+DOT+DOT] = 'z' m[DOT+DASH+DASH+DASH+DASH] = '1' m[DOT+DOT+DASH+DASH+DASH] = '2' m[DOT+DOT+DOT+DASH+DASH] = '3' m[DOT+DOT+DOT+DOT+DASH] = '4' m[DOT+DOT+DOT+DOT+DOT] = '5' m[DASH+DOT+DOT+DOT+DOT] = '6' m[DASH+DASH+DOT+DOT+DOT] = '7' m[DASH+DASH+DASH+DOT+DOT] = '8' m[DASH+DASH+DASH+DASH+DOT] = '9' m[DASH+DASH+DASH+DASH+DASH] = '0' return m }