One-line Hangman

Summary

thr 2016-02-06: The following line of code lets you play a text-based Hangman game. It's basically a port of this Python code: Hangman implemented in 3 lines of Python (2) . Pay attention to the word file. As I'm on Windows, I simply used this file: [L1 ].

Code

try {foreach {chosenWord guesses scaffold man guessesLeft} [list [split [lindex [set words [lmap word [split [read [open linuxwords r]] \n] {string toupper $word}]] \
        [expr {int(rand() * [llength $words])}]] {}] {} "|======\n|   |\n| %4\$s %1\$s %6\$s\n|  %3\$s%2\$s%5\$s\n|  %7\$s %8\$s\n|  %9\$s %10\$s\n|" {O T - \\ - / / \\ | |} 10] \
        {while {([lsort -uniq $chosenWord] ne [lsort -uniq $guesses]) && $guessesLeft > 0} {set guessesLeft [expr {10 - [llength [lmap guess [lappend guesses \
        [puts -nonewline [format "\n%s (%s guesses left)\n%s\n%s: " [join $guesses ","] $guessesLeft [format $scaffold {*}[concat [lrange $man 0 9-$guessesLeft] [lrepeat $guessesLeft " "]]] \
        [lmap letter $chosenWord {expr {$letter in $guesses ? $letter : "_"}}]]][expr {[set nextGuess [string toupper [gets stdin]]] ni $guesses ? $nextGuess : [continue]}]] \
        {expr {$guess ni $chosenWord ? $guess : [continue]}}]]}]}}} finally {puts "You [expr {$guessesLeft == 0 ? "lose!\n[format $scaffold {*}$man]" : "win!"}]\nWord was [join $chosenWord ""]"}

Comments

Larry Smith I like the English version better: "This Court doth adjudge that you be taken to the common place of execution, and there hanged by the neck until you are dead; and may God Almighty have mercy on your soul." Shorter, sweeter, and no replays! ...

See also: The Gallows game