Черт, я думал, там написано: «Выигрывает наименьшее количество линий». Я не собираюсь выигрывать здесь конкурс на наименьшее количество символов, но эта программа на Common Lisp состоит только из одной строки.
_ _ _ _ _ _ _ _ _ _
10
e
_ _ _ _ e _ _ _ _ _
10
o
_ o _ _ e _ _ _ _ _
10
i
_ o _ _ e _ _ i _ _
10
a
_ o _ _ e _ _ i a _
10
l
_ o _ _ e _ _ i a l
10
c
c o _ _ e _ c i a l
10
m
c o m m e _ c i a l
10
t
c o m m e _ c i a l
9
r
c o m m e r c i a l
9
||answer||
Питон 3.
_ _ _ _ _ _ _ _
10
i
_ _ _ _ _ _ _ _
9
e
_ _ e _ _ _ _ e
9
o
o _ e _ _ o _ e
9
a
o _ e _ _ o _ e
8
q
o _ e _ _ o _ e
7
q
o _ e _ _ o _ e
6
q
o _ e _ _ o _ e
5
q
o _ e _ _ o _ e
4
q
o _ e _ _ o _ e
3
q
o _ e _ _ o _ e
2
q
o _ e _ _ o _ e
1
q
o _ e _ _ o _ e
0
Хотя я предпочитаю этот: дольше, но приятнее.
$f = {
$word=$hidden=$args|random|% toCharArray # let $word and $hidden are a random word chars
#$word # uncomment this to cheating
for($n=10){ # forever for with init section
$word-replace"[ $hidden]",'_'-join' ' # display the word with hidden letters
$n # display $n
if(!$hidden+!$n){break} # break loop if hidden array is empty or n equal to 0
$n-=($c=Read-Host)-notin$hidden # input $c from user, decrease $n if $c does not in $hidden array
$hidden=$hidden-ne$c # recreate $hidden array with removed $c
}
}
$words = gc .\wordlist.txt
&$f $words
||answer||
Рубин 1,9, 134 132 120 117 108 107
Список слов представлен в формате ARGV. Слова и введенные буквы должны совпадать по регистру.
$w=$h=$args|random|% t*y
for($n=10){$w-replace"[ $h]",'_'-join' ';$n
if(!$h+!$n){break}$n-=($c=Read-Host)-notin$h
$h=$h-ne$c}
||answer||
С++ (-заголовки)
Module Hangman
Sub Main()
Dim m As Int32, w = "banana|apple|pear|dog|cat|orange|monkey|programming|hangman".Split("|")(New Random().Next(9)), g = "", e = "", x, c As Char, f As Boolean, r = Sub(z) Console.Write(z), p = Sub(y, h) Console.SetCursorPosition(y, h), a = Sub() Console.Clear(), q = Function() Console.ReadKey(1), d = Sub()
r(" +--------+S | |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S |S ---------------------".Replace("S", vbCrLf))
p(0, 2)
r(String.Join(vbCrLf, " /------\S | O O|S \ ... /S ------ S | S | S | S | S -------+-------S | S | S | S / \ S / \ S / \ S / \ ".Split("S").Take(m * 4)))
End Sub
Console.CursorVisible = 0
Do
a()
d()
p(30, 10)
f = 0
For Each x In w
If g.Contains(x) Then
r(x)
Else
r(" ")
f = 1
End If
Console.CursorTop += 1
Console.CursorLeft -= 1
r("_")
Console.CursorTop -= 1
r(" ")
Next
If Not f Then
a()
d()
p(30, 10)
r("You win! Press any key to close.")
q()
End
End If
p(30, 13)
r(e)
Do
c = q().KeyChar
Loop Until Char.IsLetter(c)
If g.Contains(c) Then
e = "You have already guessed that letter."
Else
g &= c
If w.Contains(c) Then
e = "There is a" & If("aehilmnorsx".Contains(c), "n", "") & " """ & c & """ in the word."
Else
e = "There is no """ & c & """ in the word. Try again."
m += 1
End If
End If
Loop Until m = 4
a()
d()
p(30, 10)
r("You lose! Press any key to close.")
q()
End Sub
End Module
кот /usr/dict/words | xargs палач