Podstawy:
Musisz zapewnić dziewięciopoziomową grę w zgadywanie słów dla jak najmniejszej liczby postaci (w wybranym przez Ciebie języku).
Dane:
- Podaj listę słów (jedno słowo w wierszu, oddzielone nową linią) (np
/usr/share/dict/words
Lub podobnie może to zrobić). Możesz wstawić nazwę pliku lub samą listę słów do swojego rozwiązania. - Podaj 9 poziomów z rosnącą długością słowa (słowa zawierające 4 znaki i
->
12 znaków):
Poziom 1: losowe słowo z listy słów zawierające 4 znaki Poziom 2: losowe słowo z listy słów zawierające 5 znaków ... ... Poziom 8: losowe słowo z listy słów zawierające 11 znaków Poziom 9: losowe słowo z listy słów zawierające 12 znaków
- Na każdym poziomie zaciemnij losowo wybrane słowo z listy (oczywiście o określonej długości słowa) i zastąp pewną liczbę znaków gwiazdką (
*
). Liczba znaków do zastąpienia:current_word_length / 3
(zaokrąglonej w dół). Losuj, które postacie chcesz zastąpić. - Pozwól graczowi „odgadnąć” słowo (tylko jeden
try
na poziom), przekaż opinię (correct
lubwrong
) i odpowiednio daj punkty. Gdy jest poprawny, gracz zyskujenumber_of_obfuscated_characters * 10 points
. - Wydrukuj aktualny wynik na końcu każdego poziomu.
Format (i przykładowe we / wy):
Upewnij się, że postępujesz zgodnie z następującym schematem formatowania:
Nagłówek poziomu 1 # ======= # g * ek # zaciemnione słowo geek # dane wejściowe użytkownika popraw poprawność # zgadnij wynik: 10 # wynik wydruku # Poziom 2 ======= l * nux linux poprawny wynik: 20 Poziom 3 ======= przebiegł ** m losowy poprawny wynik: 40 ... Poziom 9 ======= sem *** act * ve półaktywny źle wynik: 90
Zwycięzca:
Najkrótsze rozwiązanie (według liczby znaków kodu). Miłej zabawy w golfa!
sem***act*ve
==>semelfactive
Odpowiedzi:
Perl, 180 znaków
Ruby bije Perla? To się nie uda! :-)
Podobnie jak rozwiązanie Ruby w jsvnm, ale w przeciwieństwie do kodu Perla Joela Bergera, ten skrypt przyjmuje nazwę pliku listy słów jako parametr wiersza poleceń. Oznacza to, że powinieneś uruchomić to w następujący sposób:
Oto wersja bez golfa:
Oświadczenie
vec($_, rand $n, 8) = 42 while ($= = $n/3) > y/*//
zawiera kilka interesujących sztuczek. Po pierwsze 42 to kod ASCII gwiazdki; okazuje się, że użycievec
do modyfikacji pojedynczych znaków w ciągu jest krótsze niż zrobienie tegosubstr
. Po drugie, zmienna$=
przyjmuje tylko wartości całkowite, więc użycie jej do przechowywania liczby ukrytych liter oszczędza miint
. Wreszciey/*//
jest krótki sposób na policzenie liczby gwiazdek w ciągu za pomocą operatora transliteracji.Edycja: Zapisano 7 znaków, używając
$@
do przechowywania wyniku podzielonego przez 10 i dodając do niego zero podczas wyjścia (co, jeśli się nad tym zastanowić, byłoby krótsze niż poprzednia wersja, nawet gdybym użył normalnej zmiennej) .Edycja 2: Okazuje się, że osadzanie dosłownego nowego wiersza w ciągach wyjściowych oszczędza znak przed bałaganem
$,
.źródło
Rubin (188)
pobiera nazwę pliku do odczytu słów jako argumentu.
źródło
Bash, 350 znaków
źródło
Perl: 266
lub z odrobiną więcej białej przestrzeni
i myślę, że przy odrobinie pracy może być jeszcze lepiej!
źródło
R, 363 znaków
źródło
Python 335
Wiem, że jestem trochę spóźniony na imprezę, ale python nie jest reprezentowany, więc pomyślałem, do cholery:
I częściowo nie golfisty:
źródło
K, 198
Zakłada słownik d w bieżącym katalogu roboczym.
Nie golfowany:
źródło