=><= ### Futhark Puzzle Form the words below. |Word>[{ (if:$Score<$Puzzles's length)[(set:$CurrentPuzzle to (1+$Score) of $Puzzles)] ($checkSolved:) (if:$Score<$Puzzles's length)[(if:$Solved)[(set:$Score to it+1)] (else-if:$MovesLeft<1)[(if:$Edit)[(set:$Edit to false)(rerun:?Word)]]] (if: $Score is $Puzzles's length)[(if:$Edit)[(set:$Edit to false)] (color:green)[ =><= Congratulations! You have completed the Futhark Puzzle Challenge! ]] (set: _runes to $CurrentOrder of $Futhark) <center> <table style="width:100%"> <tr> <td style="width:10%"></td> <td style="width:20%">(if:$Edit)[(link-repeat:"↑")[($rotateColumnUp: 1)(rerun:?Word)]](else:)[(color:grey)[↑]]</td> <td style="width:20%">(if:$Edit)[(link-repeat:"↑")[($rotateColumnUp: 2)(rerun:?Word)]](else:)[(color:grey)[↑]]</td> <td style="width:20%">(if:$Edit)[(link-repeat:"↑")[($rotateColumnUp: 3)(rerun:?Word)]](else:)[(color:grey)[↑]]</td> <td style="width:20%">(if:$Edit)[(link-repeat:"↑")[($rotateColumnUp: 4)(rerun:?Word)]](else:)[(color:grey)[↑]]</td> <td style="width:10%"></td> </tr> <tr> <td>(if: $Edit)[(link-repeat:"<")[($rotateRowLeft: 1)(rerun:?Word)]](else:)[(color:grey)[<]]</td> <td>($formatRune: (str: 1 of _runes))</td> <td>($formatRune: (str: 2 of _runes))</td> <td>($formatRune: (str: 3 of _runes))</td> <td>($formatRune: (str: 4 of _runes))</td> <td>(if:$Edit)[(link-repeat:">")[($rotateRowRight: 1)(rerun:?Word)]](else:)[(color:grey)[>]]</td> </tr> <tr> <td>(if: $Edit)[(link-repeat:"<")[($rotateRowLeft: 2)(rerun:?Word)]](else:)[(color:grey)[<]]</td> <td>($formatRune: (str: 5 of _runes))</td> <td>($formatRune: (str: 6 of _runes))</td> <td>($formatRune: (str: 7 of _runes))</td> <td>($formatRune: (str: 8 of _runes))</td> <td>(if: $Edit)[(link-repeat:">")[($rotateRowRight: 2)(rerun:?Word)]](else:)[(color:grey)[>]]</td> </tr> <tr> <td>(if: $Edit)[(link-repeat:"<")[($rotateRowLeft: 3)(rerun:?Word)]](else:)[(color:grey)[<]]</td> <td>($formatRune: (str: 9 of _runes))</td> <td>($formatRune: (str: 10 of _runes))</td> <td>($formatRune: (str: 11 of _runes))</td> <td>($formatRune: (str: 12 of _runes))</td> <td>(if: $Edit)[(link-repeat:">")[($rotateRowRight: 3)(rerun:?Word)]](else:)[(color:grey)[>]]</td> </tr> <tr> <td>(if: $Edit)[(link-repeat:"<")[($rotateRowLeft: 4)(rerun:?Word)]](else:)[(color:grey)[<]]</td> <td>($formatRune: (str: 13 of _runes))</td> <td>($formatRune: (str: 14 of _runes))</td> <td>($formatRune: (str: 15 of _runes))</td> <td>($formatRune: (str: 16 of _runes))</td> <td>(if: $Edit)[(link-repeat:">")[($rotateRowRight: 4)(rerun:?Word)]](else:)[(color:grey)[>]]</td> </tr> <tr> <td></td> <td>(if:$Edit)[(link-repeat:"↓")[($rotateColumnDown: 1)(rerun:?Word)]](else:)[(color:grey)[↓]]</td> <td>(if:$Edit)[(link-repeat:"↓")[($rotateColumnDown: 2)(rerun:?Word)]](else:)[(color:grey)[↓]]</td> <td>(if:$Edit)[(link-repeat:"↓")[($rotateColumnDown: 3)(rerun:?Word)]](else:)[(color:grey)[↓]]</td> <td>(if:$Edit)[(link-repeat:"↓")[($rotateColumnDown: 4)(rerun:?Word)]](else:)[(color:grey)[↓]]</td> <td></td> </tr> </table> </center> } (if:$Solved)[Solved! (if:$Puzzles's length > $Score)[(link-repeat: "Next")[{ (set:$MovesLeft to it + $MovesPerPuzzle)(rerun:?Word) }]]](elseif:$MovesLeft<1)[(color:red)[You ran out of moves!] (link:"Play again")[($startGame:)(rerun:?Word)]](else:)[(joined: " ᛬ ", ...(altered: _pair via 1st of _pair, ...$CurrentPuzzle))] |== Score: $Score/(str:$Puzzles's length) ==| Moves left: (color:(cond: $MovesLeft>3, white, $MovesLeft>0, orange, red))[$MovesLeft] |==| ] |== [[ᚠᚢᚦᚬᚱᚴ->Futhark Alphabet]] ==| [[About]] |==|{ (set: $startGame to (macro:[ (set: $Futhark to (array:..."ᚠᚢᚦᚬᚱᚴᚼᚾᛁᛅᛋᛏᛒᛘᛚᛦ")) (set: $CurrentOrder to (shuffled:...(range:1,16))) (set: $Score to 0) (set: $MovesPerPuzzle to 7) (set:$MovesLeft to $MovesPerPuzzle) (set: $Edit to true) (output:)[] ])) ($startGame:) (set: $rotateColumnUp to (macro: num-type _c, [ (set:_entries to (altered: _ix via _ix + _c, 0, 4, 8, 12)) (set:$CurrentOrder's _entries to (rotated: -1, ...$CurrentOrder's _entries)) (set:$MovesLeft to it-1) (output:)[] ])) (set: $rotateColumnDown to (macro: num-type _c, [ (set:_entries to (altered: _ix via _ix + _c, 0, 4, 8, 12)) (set:$CurrentOrder's _entries to (rotated: 1, ...$CurrentOrder's _entries)) (set:$MovesLeft to it-1) (output:)[] ])) (set: $rotateRowLeft to (macro: num-type _r ,[ (set:_entries to (range: 1 + 4*(_r-1), 4*_r)) (set:$CurrentOrder's _entries to (rotated: -1, ...$CurrentOrder's _entries)) (set:$MovesLeft to it-1) (output:)[] ])) (set: $rotateRowRight to (macro: num-type _r ,[ (set:_entries to (range: 1 + 4*(_r-1), 4*_r)) (set:$CurrentOrder's _entries to (rotated: 1, ...$CurrentOrder's _entries)) (set:$MovesLeft to it-1) (output:)[] ])) (set: $findWord to (macro: str-type _word, [ (set: _match to false) (set: _rev to (str-reversed:_word)) (for: each _entries, (a:1, 2, 3, 4), (a:5, 6, 7, 8), (a:9,10,11,12),(a:13,14,15,16), (a:1,5,9,13), (a:2, 6, 10, 14), (a:3,7,11,15),(a:4,8,12,16) )[ (set: _runes to (str:...$Futhark's $CurrentOrder's _entries)) (if: ($isIn: _word, _runes))[(set:_match to true)] ] (output-data: _match) ])) (set: $isIn to (macro: str-type _word, str-type _runes, [ (set: _match to false) (for: each _i, ...(range:1, 5 - (_word's length)))[ (set: _candidate to (substring: _runes, _i, _i-1+_word's length))[ (if: _candidate is _word)[(set: _match to true)] (elseif: (str-reversed:_candidate) is _word)[(set: _match to true)] ] ] (output-data: _match) ])) (set: $checkSolved to (macro:[ (set: _solved to true) (set:$CorrectRunes to "") (set:$FoundWords to (a:)) (for: each _puzzleWord, ...$CurrentPuzzle)[ (set: _word to 1st of _puzzleWord) (if: ($findWord: _word))[ (set:$FoundWords to it + (a: _word)) (set:$CorrectRunes to it + _word) ](else:)[ (set: _solved to false) ] ] (set:$Solved to _solved) (output:)[] ])) (set: $formatRune to (macro: str-type _rune, [ (output:)[(color:(cond:$CorrectRunes contains _rune, green,,white))[_rune]] ])) } =><= ### Futhark Alphabet Futhark Puzzle uses the Younger Futhark Alphabet. The Younger Futhark consists of 16 runes: ==| ᚠ |== F (V) |==| ==| ᚢ |== U (O, Y) |==| ==| ᚦ |== TH (D) |==| ==| ᚬ |== A (Å) |==| ==| ᚱ |== R |==| ==| ᚴ |== K (G) |==| ==| ᚼ |== H |==| ==| ᚾ |== N |==| ==| ᛁ |== I (E) |==| ==| ᛅ |== Ä (J) |==| ==| ᛋ |== S |==| ==| ᛏ |== T |==| ==| ᛒ |== B (P) |==| ==| ᛘ |== M |==| ==| ᛚ |== L |==| ==| ᛦ |== R (CH) |==| Runes can be written left-to-right, right-to-left, up-down, and down-up. Sample rune words below. =><= ### ᚢᚦᛁᚾ Odin //Leader of the Norse Gods// ### ᚠᚱᛁᚴ Frig //Wife of Odin// ### ᚦᚢᚱ Thor //God of Thunder// ### ᛋᛁᚠ Sif //Wife of Thor// (set: $Puzzles to (a: (a: (a: "ᚦᚢᚱ", "THOR"), ), (either: (a: (a: "ᛋᛁᚠ", "SIF"), ), (a: (a:"ᛏᛁᚱ", "TYR"), ), (a: (a: "ᚢᛚᚠ", "ULV"), ), (a: (a: "ᚢᚱᛘ", "ORM"), ), (a: (a: "ᛅᚢᚴ", "AUK"), ), (a: (a: "ᛒᚬᚦ", "BÅD"), ), (a: (a: "ᚼᚬᚠ", "HAV"), ), ), (either: (a: (a:"ᚬᛋ", "AS"), (a: "ᛁᚴ", "EK"), ), (a: (a:"ᛅᛏ", "ÆT"), (a: "ᚼᚢ", "HU"), ), ), (either: (a: (a:"ᚢᚱ", "UR"), (a:"ᚠᛅ", "FÄ"), ), (a: (a:"ᛋᚢ", "SO"), (a: "ᚠᛁ", "VI"), ), (a: (a:"ᚢᚦ", "OD"), (a: "ᚠᛁ", "VI"), ), ), (either:(a: (a:"ᚬᛋᚴ", "ASK"), (a: "ᛁᚴ", "EK"), ), (a: (a:"ᛅᛏ", "ÆT"), (a:"ᚢᛚᚠ", "ULV"), ), (a: (a:"ᚬᛋ", "AS"), (a:"ᚠᛅᚾ", "VÆN"), ), ), (either: (a: (a:"ᚦᚢᚱ", "THOR"), (a:"ᛋᛁᚠ", "SIF"), ), (a: (a:"ᛋᚢᛚ", "SOL"), (a:"ᛘᚬᚾ", "MÅN"), ), (a: (a:"ᛋᚢᛚ", "SOL"), (a: "ᚱᛁᛘ", "RIM"), ), ), (either: (a: (a:"ᚾᛁᚦ", "NID"), (a: "ᚼᚢᚴ", "HUG"), ), (a: (a: "ᛒᛚᚬ", "BLÅ"), (a:"ᛏᛅᚾ", "TAND"), ), (a: (a: "ᛅᚱᛚ", "JARL" ), (a: "ᚠᚱᛁ", "FRI"), ), (a: (a:"ᚠᛁᚾ", "VIN"), (a:"ᛘᛅᚦ", "MJØD"), ), ), (either: (a: (a: "ᚦᚢᚱ", "THOR"), (a:"ᚴᛁᛏ", "GED"), ), (a: (a:"ᚢᛚᚠ", "ULV"), (a:"ᛏᛁᚱ", "TYR"), ), (a: (a:"ᚼᚢᚦ", "HØD"), (a:"ᛒᛁᛚ", "PIL"), ), (a: (a: "ᚦᚢᚱ", "THOR"), (a:"ᛅᚾᚴ", "ÆNG"), ), ), (either:(a: (a:"ᚾᛅᛏ" ,"NAT"), (a:"ᛒᛅᛚ", "PAL") ), (a: (a:"ᚾᛅᛏ" ,"NAT"), (a:"ᚦᛅᚴ", "DAG") ), ), (either:(a: (a:"ᛚᛅᚱ", "LAR"), (a: "ᚢᚱᚾ", "ØRN"), ), (a: (a:"ᛏᛁᚱ", "TYR"), (a: "ᚬᚱᛘ", "ARM"), ), ), (either: (a: (a:"ᚢᛚᚠ", "ULV"), (a: "ᚢᚱᛘ", "ORM"), ), (a: (a: "ᚴᚢᚦ", "GUD"), (a:"ᚴᛁᛏ", "GED"), ), ), (either: (a: (a:"ᚬᛋᚴ", "ASK"), (a: "ᚱᚬᚠ", "RAV"), ), (a: (a:"ᚱᚬᚾ", "RAN"), (a: "ᚼᚬᚠ", "HAV"), ), (a: (a: "ᛒᚬᚦ", "BÅD"), (a: "ᚼᚬᚠ", "HAV"), ), ), (either: (a: (a:"ᚢᚦᛁᚾ", "ODIN"), ), (a: (a:"ᛁᚦᚢᚾ", "IDUN"), ), ), (either: (a: (a:"ᚠᚱᛁᛅ", "FREJ"), ), (a: (a:"ᚠᚱᛁᚴ", "FRIG"), ), ), (either: (a: (a: "ᚢᛘᛁᚱ", "YMER"), ), (a: (a:"ᛏᚱᚢᛘ", "TRYM"), ), ), (either: (a: (a:"ᛚᚢᚴᛁ", "LOKI"), ), (a: (a:"ᛚᚢᚴᚱ", "LOGR"), ), ), (either: (a: (a:"ᚴᚬᚱᛘ", "GARM"), ), (a: (a:"ᛅᚴᛁᚱ", "ÆGIR"), ), (a: (a:"ᚼᚬᛏᛁ", "HATE"), ), (a: (a: "ᛋᚴᚢᛚ", "SKOL"), ), (a: (a:"ᚱᚬᚠᚾ", "RAVN"), ), (a: (a:"ᛋᛁᛅᛚ", "SIÆL"), ), (a: (a:"ᚼᛅᛁᛘ", "HEIM"), ), ), (either: (a: (a:"ᚦᚢᚱᛋ", "THURS"), ), (a: (a:"ᚦᚢᚱᚾ", "THORN"), ), (a: (a:"ᚼᛅᚴᛚ", "HAGL"), ), (a: (a: "ᚴᚢᛒᛚ", "KUBL"), ), (a: (a:"ᚦᛁᚾᚴ", "THING"), ), (a: (a:"ᛒᛚᛁᚴ", "BLIK"), ), (a: (a:"ᚼᛅᛘᚾ", "HAMN"), ), ), (either:(a: (a: "ᚢᛘᛁᚱ", "YMER"), (a:"ᚠᛅ", "FÄ"), ), (a: (a:"ᚱᚬᚠᚾ", "RAVN"), (a: "ᛁᚴ", "EK"), ), ), (either: (a: (a:"ᚠᚱᛁᛅ", "FREJ"), (a:"ᛅᛏ", "ÆT"), ), (a: (a:"ᛚᚢᚴᛁ", "LOKI"), (a:"ᚢᚦ", "OD"), ), (a: (a:"ᚢᚦᛁᚾ", "ODIN"), (a: "ᚠᛁ", "VI"), ), ), (either:(a: (a:"ᚬᛋ", "AS"), (a: "ᚴᚬᚱᚦ", "GÅRD"), ), (a: (a:"ᛏᚱᚢᛘ", "TRYM"), (a: "ᚼᚢ", "HU"), ), (a: (a:"ᚢᚦ", "UD"), (a: "ᚴᚬᚱᚦ", "GÅRD"), ), ), (either:(a: (a:"ᚴᚢᚦ", "GUD"), (a:"ᛋᛁᛅᛚ", "SIÆL"), ), (a: (a:"ᚴᚬᚱᛘ", "GARM"), (a:"ᚢᛚᚠ", "ULV"), ), (a: (a:"ᚼᛅᛁᛘ", "HEIM"), (a: "ᚦᚬᛚ", "DAL") ), (a: (a:"ᛋᛅᛚ", "SÆL"), (a:"ᚼᚢᚾᚦ", "HUND"), ), (a: (a:"ᛒᛚᛁᚴ", "BLIK"), (a: "ᚼᚬᚠ", "HAV"), ), ), (a: (a:"ᛏᚱᚬᛘ", "TRÅM"), (a:"ᚾᛅᛏ" ,"NÆT"), ), (either:(a: (a:"ᛏᛁᚱ", "TYR"), (a:"ᚴᚬᚱᛘ", "GARM"), ), (a: (a: "ᚼᛁᛚ", "HEL"), (a:"ᚴᚬᚱᛘ", "GARM"), ), ), (a: (a:"ᚠᛁᚾ", "VIN"), (a: "ᛚᛅᚾᚦ", "LAND"), ), (a: (a:"ᛘᛁᚦ", "MID"), (a: "ᚴᚬᚱᚦ", "GÅRD"), ), (either:(a: (a:"ᚠᚬᛚᚴ", "FALK"), (a:"ᚼᚬᛘ", "HAM"), ), (a: (a:"ᚠᚬᛚᚴ", "FALK"), (a: "ᚢᚱᚾ", "ØRN"), ), (a: (a: "ᚱᛁᛘ", "RIM"), (a: "ᛋᚴᛁᚾ", "SKIN"), ), (a: (a:"ᛋᚢᛚ", "SOL"), (a: "ᛋᚴᛁᚾ", "SKIN"), ), ), (a: (a: "ᛅᛚᚠ", "ALF"), (a:"ᚼᛅᛁᛘ", "HEIM"), ), (a: (a:"ᛚᚢᚴᛁ", "LOKI"), (a: "ᚢᚱᛘ", "ORM"), ), (a: (a:"ᚱᚬᚠᚾ", "RAVN"), (a:"ᚢᛚᚠ", "ULV"), ), (a: (a:"ᛁᚦᚢᚾ", "IDUN"), (a:"ᛘᛅᚦ", "MJØD"), ), (a: (a: "ᛅᚴᛁᚱ", "ÆGIR"), (a: "ᚬᚱᚦ", "ARD"), ), (either:(a: (a:"ᚼᚢᛚᛘ", "HOLM"), (a: "ᚴᚬᚱᚦ", "GÅRD"), ), (a: (a:"ᛋᚢᚱᛏ", "SURT"), (a: "ᚾᛁᚠᛚ", "NIFL"), ), (a: (a:"ᚼᚬᛏᛁ", "HATE"), (a: "ᛋᚴᚢᛚ", "SKOL"), ), ), (either:(a: (a: "ᛏᚬᚠᛚ", "TAFL"), (a:"ᛋᛒᛁᛚ", "SPEL"), ), (a: (a:"ᛘᚬᚦᚱ", "MADR"), (a: "ᛒᚢᚱᛁ", "BURI"), ), ), (either: (a: (a:"ᚢᚦᛁᚾ", "ODIN"), (a:"ᚠᚱᛁᚴ", "FRIG"), ), (a: (a:"ᚢᚦᛁᚾ", "IDUN"), (a:"ᚠᚱᛁᛅ", "FREJ"), ), (a: (a: "ᚾᛁᚠᛚ", "NIFL"), (a:"ᚼᛅᛁᛘ", "HEIM"), ), ), (a: (a:"ᚱᚬᚾ", "RAN"), (a: "ᚼᚬᚠ", "HAV"), (a: "ᚾᛁᛏ", "NET"), ), (a: (a:"ᚼᚢᚦ", "HØD"), (a:"ᛒᛁᛚ", "PIL"), (a:"ᛋᚢᚾ", "SYN"), ), (a: (a:"ᚦᚢᚱ", "THOR"), (a: "ᛅᚢᚴ", "AUK"), (a:"ᛋᛁᚠ", "SIF"), ), (a: (a:"ᛋᚢᛚ", "SOL"), (a: "ᛅᚢᚴ", "AUK"), (a:"ᛘᚬᚾ", "MÅN"), ), (a: (a: "ᚦᚱᛅᛚ", "THRÆL"), (a:"ᛅᚢᚴ", "AUK"), (a:"ᚠᚱᛁ", "FRI"), ), )) =><= ###About The Futhark Puzzle Challenge Designed by Thoughtful Dane Frederik Jensen Copyright 2026 Built with Twine 2.12.0 and Harlowe 3.3.9 Version 1.0.5