Odin SolutionsOdin Solutions
☎️
Some Mars
Week 15, 2026
All SolutionsSimple look up table | greenya | Odin Solutions
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
}