Вы должны сделать игру Too-low --- Too-high (TLTH) в самом коротком коде (в байтах)
Правила игры:
- Компьютер выберет случайное число из целого диапазона (-32768..32767).
- Теперь вы будете думать о числе и вводить его.
- Компьютер сообщит, является ли ваш номер ниже (
TOO LOW
) или выше (TOO HIGH
) выбранного номера. - Когда вы угадаете число, компьютер должен отобразить
Congrats! You found the number!
.
Правила Кодекса:
Не используйте символы
T
,O
,L
,W
,H
,I
иG
(ни в нижнем регистре , ни в верхнем регистре) в строковых или символьных литералов.
Например:tolower(T); // Acceptable cout<<"T"; // Unacceptable char ch='T'; // Unacceptable
Удалите 300 байт, если ваш код может отображать правила игры перед началом игры.
Удалите 50 байт, если ваш код может считать количество ходов и отображать количество ходов, сделанных в конце игры, например:
"Congrats! You found the number in n turns!"
где n - число выполненных оборотов вместо
"Congrats! You found the number!"
Удалите 25 байт из своей оценки, если ваш код может сказать пользователю, что введенное вами число находится вне целочисленного диапазона.
Например:Enter the number: 40000 Sorry! This number is out of range Please Enter the number again:
Удалите 25 байтов, если ваш код берет случайное число, а не встроенную случайную функцию.
Удалите 10 байтов, если ваш код отображает «поздравления» в цвете (выберите любой цвет, кроме белого по умолчанию).
Правила подачи заявок:
Добавьте заголовок с названием вашего языка и счетом со всеми расчетами вознаграждений и их объяснениями.
Разместите свой код для игры в гольф и без игры.
победитель
- Ответ с наименьшим количеством байтов выигрывает.
- Если есть ничья, победит ответ с большим количеством голосов.
- Победитель будет выбран через 5 дней.
РЕДАКТИРОВАТЬ : Пожалуйста, покажите вывод вашего кода.
РЕДАКТИРОВАТЬ-2 : Вы можете игнорировать Правило-1 для Правил-2,3 и 4 в Правилах Кодекса
Удачи :]
WhileURong(USayNumbr;ISayBigrOrSmalr)
Ответы:
JavaScript (-210 баллов (
190
байт -300
(для правил) -50
(для количества догадок) -25
(для неиспользования какого-либо встроенного источника случайных чисел) -25
(для сообщения о том, находится ли ввод вне диапазона со знаком16
-битное целое число) ):Golfed:
Полный код (красиво отформатированный):
Выход:
источник
0
. :-( Кроме того, не должно быть места вTOO LOW
/TOO HIGH
?Perl 5.10+:
159144 байта - 350 = −206 балловРедактировать 2: С недавним изменением правил, которое позволяет мне использовать любой строковый литерал для сообщения «поздравляю», я могу сохранить 15 байтов из моего исходного 159-байтового решения. Нет ничего особенно нового или интересного в новом вышеприведенном коде по сравнению со старым кодом (я только что избавился от
p
функции иsay
вместо этого вызвал напрямую), поэтому в оставшейся части этого поста будет описан оригинальный код, показанный ниже:Да, я чертовски злоупотребляю правилом 1. Кому нужны строки, когда вы можете иметь голые слова ? ;-)
Запустите с,
perl -M5.010
чтобы включить функцию Perl 5.10+say
(или замените телоp
функции наprint join$",@_,$/
на дополнительную плату в 5 байт).Бонусные баллы:
Код не содержит ни одного строковых литералов в строгом смысле этого слова, так что я бы сказал , что правило 1, технически, не нарушается. Хитрость заключается в том, что в Perl
use strict
любой идентификатор, который не соответствует ключевому слову или подпрограмме известного языка, просто оценивает свое собственное имя. Затем функцияp
просто берет список слов и выводит их через пробел.Пример воспроизведения:
Редактировать: О, правильно, правила говорят, что мне нужно опубликовать версию кода без игры в гольф, так что вот так. Технически, это «де-гольф», так как я обычно сочиняю свои программные гольф-программы в более или менее полностью гольф-форме с самого начала, и иногда бывает сложно убрать все «гольфовые» оптимизации без фундаментального изменения того, как некоторые части программная работа. Тем не менее, я хотя бы попытался добавить пробелы, комментарии и более значимые имена функций / переменных:
Ps. В качестве альтернативы, если использование простых слов вместо строк кажется вам слишком обманчивым, вот 182-байтовое решение, которое не использует буквы
TOLWHIG
даже в голых словах (но использует их в операторе транслитерации). Он по-прежнему получает те же бонусы, для общего счета 182 - 350 = −168 баллов :Вывод выглядит точно так же, как указано выше. Согласно (оригинальным) правилам, я использую буквы
t
иi
при печати правил, поскольку это разрешено; исключение даже тех использований стоило бы только два дополнительных байта. И наоборот, вывод всего верхнего регистра (который, судя по приведенным выше комментариям, кажется разрешенным) позволил бы мне сохранить три байта.источник
def method_missing *args;args.join' ';end
.Python 2: -80 очков (270-300-50)
Оценка - 270 символов, минус 300 за показ инструкций, минус 50 за показ догадок в поздравлениях! строка, в общей сложности 80 отрицательных баллов.
Безгольфовая версия цикла с неэкранированными строками:
Встроенный
cmp
функция возвращает 0, если значения равны, -1, если первое меньше, и 1, если первое больше. Я использую значение для индексации кортежа строк, а затем снова в качестве условия выхода цикла. Индексирование последовательности с отрицательным индексом (например, -1) начинается с конца последовательности, а не с начала.Мне очень хотелось пропустить импорт и просто использовать в
4
качестве моего случайного числа, согласно XKCD 221 (будет ли это соответствовать бонусу -25 символов?).Пример выполнения (завершается с ошибкой, где я не могу выполнить отрицательную математику):
источник
g
равно нулю, иwhile
цикл заканчивается.You can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
JavaScript 293, -300 (правила) - 50 (отображение поворотов) - 25 (предупреждение о диапазоне) - 25 (без случайной функции) = -107 (новый счет)
r=new Date%65536+~(z=32767);n=x="";for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))n++;A("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+"\164urns!")
Я бы сказал, что, согласно соглашениям RGB, черный - это цвет, но это было бы своего рода обманом ...
О, и я мог бы добавить, что не нарушается и правило № 1!
Вывод в серии предупреждений и подсказок
Ungolfed код:
источник
A=alert;
и заменить все изalert
сA
. И еще один, если вы переместите предупреждениеA(0>(x...
после точки с запятой вprompt())!=r;)n++1
.feedback if too high/low
который использует 84 символов в настоящее времяi give feedback
(что потребует только\151 \147\151ve feedback
или 24 символов для сохранения 60 символов .n++
цикл for в цикл,x=prompt(n++)
чтобы сохранить необходимость+ ++n+
в последнем предупреждении. Это спасло бы 3.Javascript, 324 байта, оценка -76
[Обновлено из-за изменений правил]
Общий балл: -76
Golfed:
Позволяет распутать этот беспорядок.
Во-первых, правильно идентифицировано (но это все еще не очень хорошо с запутанным кодом):
Во-вторых, переименование идентификаторов:
Таким образом, функция unencrypt получает все символы между ASCII 33 (
!
) и ASCII 58 (:
) и добавляет 32, преобразовывая их в символы в диапазонеA-Z
.Давайте расширим код, расшифровав все строки:
И, наконец, давайте переместим некоторые инструкции в другие места, заменим длинную троичную цепочку на ifs и elses, соединим конкатенационные строки и упростим математику, чтобы повысить удобочитаемость:
Образец:
источник
C - 272 символа - 300 - 50 - 25 = -103
Гольф-код:
Ungolfed:
Выход:
источник
C: 237 - 300 - 50 - 25 - 25 - 10: -173 очка
-300 для правил, -50 для отображения количества догадок, -25 для неиспользования встроенного генератора случайных чисел, -25 для сообщения вне диапазона и -10 для раскрашивания поздравляющих сообщений.
Ungolfed:
Пример выполнения:
Последняя строка отображается красным цветом.
источник
Баш, -137
Гол
273 (байты) - 300 (правила) - 50 (количество попыток) - 25 (предупреждение OOF) - 25 (пользовательский PRNG) - 10 (цвет)
Гольф версия
Обратите внимание, что последняя строка является комментарием, поэтому она не содержит строковых или символьных литералов.
Неуправляемая версия
Образец вывода
Последняя строка напечатана зеленым цветом.
источник
C #: -30 баллов
Гольф :
Для того, чтобы запустить его, поместите его в файл (code.cs) и работать с scriptcs в командной строке:
scriptcs code.cs
.Ungolfed : расширенные имена переменных во что-то более простое для понимания, и измененные шестнадцатеричные буквы в реальные буквы.
Пример вывода доступен здесь .
источник
T
,O
,L
,W
,H
,I
иG
(ни в нижнем регистре , ни в верхнем регистре) в строковых или символьных литералов. »T
,O
,L
... с\x54
,\x4F
,\x4C
... и все в порядке.С ++ 505 + (-300-50-25-25) = 105
-300: инструкции
-50: отображение количества оборотов
-25: не использовать случайную функцию
-25: предупреждение пользователя о входе вне диапазона
GOLFED
UNGOLFED
ВЫХОД
источник
С 183-300-25 = -142
183 байта -300 для правил -25 для неиспользования случайной библиотеки
версия без золота:
образец прогона:
источник
"TOO HIGH"
и"TOO LOW"
оба содержат недопустимые символыTOLWHIGtolwhig
.TOO LOW
разрешено редактировать 2 ?J - 190 символов -300 -50 = -160 баллов
Пояснение (напомним, что J читается справа налево):
'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2
- Распечатать правила.32767-?2^16[
- Бросьте возвращаемое значение, а затем сгенерируйте случайное число от 0 до 2 ^ 16-1 включительно. Затем настройте его на диапазон -32768..32767, вычтя его из 32767.1>:@]^:(...)^:_~
-x u^:v^:_ y
Образец похож на цикл времени.x
остается постоянным иy
мутирует при каждом выполненииu
. Это продолжается до тех пор, пока либо неx v y
вернет 0, либоx u y
не изменится наy
. В~
меняет местами два аргумента, так чтоx
будет случайное число иy
начнется в 1. Нашегоu
есть>:@]
, которая увеличивает этот 1 и возвращает его, так что он действует в качестве счетчика иx u y
условия завершения не может произойти.[:".1!:1@1:
- Возьмите счетчик и проигнорируйте его значение, используя вместо этого число 1 (1:
). Прочитайте строку ввода (1!:1
) с клавиатуры (дескриптор файла 1) и выполните ее (".
). Это позволяет J, чей отрицательный знак обычно_
, принимать числа в форме-n
(оценивается как отрицание, примененное к числуn
).]`(...)@.*@-
- Возьмите разницу случайного числа от и до предположения (-
). Теперь мы выбираем следующее действие в зависимости от того, равна ли эта разница нулю (@.*
). Если это так, верните (]`
) этот 0 как результат дляx v y
, чтобы выполнение завершилось, и весь цикл while возвращает счетчик. Else ...71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>
- Вернуть массив,5 8 16
если число отрицательное, и1 2 0 1
если оно положительное. Затем13 8 8 _39
добавьте ко всему 71 и добавьте либо,84 79 79 32 76 79 87
либо84 79 79 32 72 73 71 72
.1[2:1!:2~a.{~
- Превратите эти числа в символы ASCII, указав дляa.
них алфавит . Затем распечатайте их с1!:2
помощью (используя дескриптор файла 2) и верните 1 в результатеx v y
.'Congrats, you found the number in ',' turns!',~":
- Когда цикл заканчивается, он возвращает счетчик. Преобразуйте его в строку с":
и поместите его между строками'Congrats, you found the number in '
и' turns!'
.Образец вывода:
источник
JavaScript -40
335 - 300 (правила) - 50 (количество ходов) - 25 (вне диапазона)
Думаю, не выиграю, но получу письма интереснее.
Golfed
Ungolfed
Образец вывода
источник
APL (Dyalog) (157 - 300 - 50 = -193)
(Да, они считаются байтами, кодировка APL помещается в байт.)
Я утверждал, что «отображать правила игры» и «считать количество ходов».
Пример выполнения:
Ungolfed:
источник
Пого: -95 (255 - 300 - 50)
Если число 10:
Количество символов основано на коде со всеми удаленными пробелами.
Обратите внимание, что Pogo не является поддельным языком. Я создал его и написал для него компилятор и IDE: https://github.com/nrubin29/Pogo
источник