Основы:
Вам нужно будет создать игру с угадайкой слов из девяти уровней, используя как можно меньше символов (на выбранном вами языке).
Метрики:
- Предоставьте список слов (одно слово в строке, разделенных новой строкой) (например,
/usr/share/dict/words
или подобное может сделать). Это нормально, чтобы передать имя файла или сам список слов в ваше решение. - Обеспечить 9 уровней с увеличением длины слова (слова из 4 символов
->
12 символов):
Уровень 1: случайное слово из списка слов, содержащее 4 символа Уровень 2: случайное слово из списка слов, содержащее 5 символов ... ... Уровень 8: случайное слово из списка слов, содержащее 11 символов Уровень 9: случайное слово из списка слов, содержащее 12 символов
- На каждом уровне запутывайте случайно выбранное слово из списка (конечно, с определенной длиной слова) и заменяйте определенное количество символов звездочкой (
*
). Количество символов для замены:current_word_length / 3
(округляя вниз). Перемешать, какие символы заменить. - Позвольте игроку «угадать» слово (только одно
try
на уровень), дать обратную связь (correct
илиwrong
) и соответственно выставить баллы. Когда правильно, игрок получаетnumber_of_obfuscated_characters * 10 points
. - Напечатайте текущий счет в конце каждого уровня.
Формат (и пример ввода / вывода):
Убедитесь, что вы придерживаетесь следующей схемы форматирования:
Уровень 1 # заголовок уровня ======= # g * ek # запутанное слово geek # пользовательский ввод правильная проверка # угадывания оценка: 10 # печать баллов # Уровень 2 ======= л * Nux линукс верный оценка: 20 Уровень 3 ======= RAN ** м случайный верный оценка: 40 ... Уровень 9 ======= семафор *** акт * ве semiinactive неправильно оценка: 90
Победитель:
Кратчайшее решение (по количеству символов кода). Удачи в гольф!
sem***act*ve
==>semelfactive
Ответы:
Perl, 180 символов
Руби побеждает Perl? Это не будет делать! :-)
Как и решение Ruby от jsvnm, но в отличие от Perl-кода Джоэля Бергера, этот скрипт принимает имя файла списка слов в качестве параметра командной строки. То есть вы должны запустить его так:
Вот версия для игры в гольф:
В заявлении
vec($_, rand $n, 8) = 42 while ($= = $n/3) > y/*//
содержится несколько интересных трюков. Во-первых, 42 - это код ASCII звездочки; оказывается, что использованиеvec
для изменения отдельных символов в строке короче, чем с помощьюsubstr
. Во-вторых, переменная$=
принимает только целые значения, поэтому использование ее для хранения количества скрытых букв спасает меняint
. Наконец,y/*//
это короткий способ подсчета количества звездочек в строке с помощью оператора транслитерации.Редактировать: Сохранение 7 символов, используя
$@
для хранения счета, деленного на 10, и добавления к нему нуля во время вывода (который, если подумать, был бы короче, чем предыдущая версия, даже если бы я использовал обычную переменную) ,Редактировать 2: Оказывается, встраивание литеральных новых строк в выходных строках экономит символ, связываясь с
$,
.источник
Рубин (188)
принимает имя файла для чтения слов в качестве аргумента.
источник
Баш, 350 символов
источник
Perl: 266
или немного больше пустого пространства
и я думаю, что с небольшой работой это могло стать еще лучше!
источник
R 363 символа
источник
Python 335
Я знаю, что немного опоздал на вечеринку, но питон не представлен, так что я понял, какого черта:
И полуголый
источник
К, 198
Предполагается словарь d в текущем рабочем каталоге.
Ungolfed:
источник