=><=
### 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