Победитель: профессор Башфиш ответ ! Целых 9 байтов! Вау!
Вы можете продолжить отправлять свой ответ, однако вы больше не можете выиграть. Оригинальный пост сохранен для потомков:
Ваша цель - преобразовать целое число от 1 до 9 в слово, которое оно представляет.
- Вам не нужно беспокоиться о десятичных дробях
- Пользователь введет номер. Предположим, что они никогда не будут вводить что-либо 10 или выше
- Пользователь должен ввести число в какой-то момент, однако метод, который читает программа, не имеет значения. Это может быть стандартный ввод, чтение текстового файла и т. Д., Однако пользователь должен нажать кнопку 9 на клавиатуре (например) в какой-то момент
- Он не чувствителен к регистру (т. Е. Допустимы "один", "один", "один", "один" и т. Д.)
- Запросы HTTP / etc разрешены, однако любой код, выполняемый сервером, который делается для подсчета байтов в вашем конечном коде (например, если у меня программа на C ++ делает HTTP-запрос, код PHP, используемый в запросе HTTP, рассчитывает )
- Все, что можно скомпилировать и запустить, приемлемо
- Этот конкурс завершился 27 июня 2014 года (7 дней с момента отправки).
- Это код-гольф , поэтому выигрывает самый короткий код
one
) приемлемым?3
, вы не можете выводить,one two three four five six seven eight nine
даже если вы технически выводитеthree
. Точно так же вы не можете выводитьthree seven
и т. Д.Ответы:
Bash (с bsdgames), 9
Читает со стандартного ввода.
Я не знаю, почему для этого есть утилита, но что угодно.
источник
Python 2, 64
Вот как выглядит строка с дополнительными пробелами (попробуйте читать по вертикали):
Как объясняется в комментариях ниже,
[input()::9]
начинается с заданного индекса и выбирает каждый девятый последующий символ.источник
input()::9
- это диапазон отinput()
конца строки с шагом9
, например1,10,19,28,37
или3,12,21,30,39
, которые являются точными индексами, в которых находятся буквы для соответствующего слова.Common Lisp - 22 байта
Вот общий (не только для одной десятки):
О, вы хотите порядковые числа (первое, второе, ... трехсотое ...)? Хорошо!
источник
BASH 51
Поэтому я сделал еще одну, используя свою вторую идею, плюс некоторую помощь от других:
Где «Х» - это номер, который вы хотите.
BASH 48 (67)
67 с
\n
переносами строкЯ не уверен, считается ли это полностью, потому что он читает из файла, но:
sed -n Xp a
Где "X" - это ввод, а где
a
файл с:Файл содержит 36 символов, а команда bash - 13.
Как это устроено:
источник
a
.'
цитаты. Вы также можете попробовать использовать здесь строку вместо внешнего файла. Но вы действительно должны посчитать разрывы строк в вашем файле.К № 127 (86/46)
Если вы берете только исполняемую часть ...
и если
HourOfDay
бы он был частью пространства имен System, вам понадобилось бы 46 символов. К сожалению это сидит вSystem.DirectoryServices.ActiveDirectory
котором делает это 86 ... другой шум портит это.Это можно скомпилировать и запустить из командной строки (127 символов):
если сохранено в файл с именем cg2.cs
Как это работает?
HourOfDay
является типом enum, поэтому мы можем использовать имена вместо магических констант. Типы Enum имеют реализацию ToString (), которая дает вам имя значения . Вы можете привести int к перечислению. Console.Read () читает символ из входного потока, представленного как целое число. набрав '1' , вы получите 49 , вычтите 48, чтобы получить 1, приведите / box к,HourOfDay
чтобы вернуть 'One'Посмотрите на версию Powershell этого же трюка
источник
-48
делает здесь?Befunge 98,
116105103 байтBefunge не был сделан для этого ...
Объяснение:
источник
char[][]
, держатьx
иy
расположение, и выполнить характер в этом месте. Сложнее всего было бы определить операцию для каждого возможного персонажа.&1-
.Javascript 68
Atob / btoa может быть инструментом сжатия бедных людей
(но если вы хотите попробовать это в консоли, вы не можете копировать из отформатированного текста, который вы видите сразу. Перейдите в «edit» и скопируйте с панели источника)Редактору уценок не нравятся некоторые символы в этом ответе: некоторые символы теряются при сохранении. Тем не менее, я думаю, что это проблема редактора, а не моя. Потерянные символы - это действительные 8-битные символы Юникода.
(В противном случае я ошибаюсь, если эта проблема уже обсуждалась в мета-версии, дайте мне знать) Вот версия, в которой экранированные символы экранированы, каждая последовательность \ xNN должна считать 1
Простой тест
В консоли Firefox:
источник
Tree
иEightF
.Javascript 73
69
источник
alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])
то же самое, но сэкономить 8 байт? Пользователь по-прежнему вводит желаемое число ...Perl, 55
Он запускается с опцией
-p
(+1 байт), например:Ввод ожидается в STDIN, а вывод записывается в STDOUT.
Код просто генерирует массив и выбирает нужный элемент. Option
-p
выполняет чтение строки ввода$_
и печатает результат в$_
.Варианты:
С трейлингом новой строки (+3):
или (тот же счетчик байтов):
Обновить:
Использование голых слов вместо
qw[...]
(спасибо Заид).Отрицательный индекс сохраняет байт (спасибо aragaer).
источник
$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
use strict
).$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]
- на один символ короче.Oracle SQL - 46
демонстрация
Я допускаю, что это включает стандартную лазейку , но SQL-код короче, чем Golfscript; Я не мог устоять!
Он работает (ab) с использованием моделей формата даты / времени Oracle .
TO_DATE(n, 'j')
преобразует число в юлианский день , количество дней с 1 января 4712 г. до н.TO_CHAR(<date>, 'jsp')
преобразует это обратно в целое число (хотя и в виде строки).sp
, Является формат элемент суффикса , который записывает число. Это на самом деле будет работать с большим количеством цифр.&1
Является подстановка переменной , который будет работать только с клиентами , которые принимают его, например , SQL * Plus.источник
CJam,
4543 байтаВыше используются символы ^ и M, так как некоторые символы непечатаемы.
За счет 9 дополнительных байтов можно избежать непечатных символов:
Попробуйте онлайн.
Как это устроено
пример
источник
IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
GolfScript, 51 байт
Это простая таблица поиска. Входные данные оцениваются (
~
), создается массив значений и указывается индекс.Попробуй здесь
источник
Try it here
ссылка имеет другой код, чем вставленный код.Try it here
отличии Линка в коде происходит потому , что веб - страница не поддерживает ввод данных пользователя. Измените строку после;
, это идентично вводу пользователя.Perl, 60 байт
Требуется
-p
переключатель (два байта).пример
Как это устроено
-p
читает из STDIN и сохраняет результат в$_
.=~/.[a-z]*/g
разбивает предыдущее голое слово на подстроки одной (заглавной) буквы, за которой следует любое количество строчных букв.(…)
собирает подстроки в массив.[$_]
извлекает подстроку, соответствующую пользовательскому вводу$_=…
сохраняет результат в$_
.-p
печатает значение$_
.источник
DOS Batch - 162 символа (включая разрывы строк)
Этот ответ был вдохновлен ответом Python @ grc, хотя я имел в виду нечто подобное.
Использование:
[Имя файла] [номер]
Например, если код находится в файле с именем speak.bat, и вы хотите увидеть число «пять», вы должны запустить его как:
speak 5
Кроме того, вывод сверху вниз, а не слева направо! Так что вместо
ты увидишь
источник
Bash + coreutils, 64
Концепция неконкурентного сжатия
Некоторые из экзотических символов здесь могут отображаться некорректно, поэтому этот сценарий можно восстановить из его представления base64:
Пример вывода
объяснение
Мне пришло в голову, что строка
one two three four five six seven eight nine
содержит только буквыefghinorstuvwx
и разделитель пробелов - всего 15 символьных значений. Таким образом, каждый символ потенциально может быть представлен 4 битами или 2 символами на 1 байт. Мы можем использовать шестнадцатеричное представление байта как простой способ разбить каждый байт на две шестнадцатеричные цифры. Затем мы можем преобразовать шестнадцатеричные цифры обратно в буквы, которые нам нужны,tr
или аналогичные. Как назло,rstuvwx
последовательны, поэтому может быть выражено какr-x
вtr
. Кодирование устроен таким образом, чтоe
иf
осталось , как есть, и что слова линии разбития разделены, поэтому мы можем использовать ,sed
чтобы ouptut только линии нам нужно.Этот процесс декодирования заканчивается использованием достаточного количества дополнительного пространства, поэтому этот ответ становится неконкурентным как ответ в стиле shell-script, но может быть полезной концепцией в других языках.
источник
(чистый) Баш, 64
Принимает входные данные в качестве первого аргумента при условии допустимого ввода.
Создает массив
v
, затем обращается к элементу, указанному на входе. Поскольку массивы индексируются нулем, мне пришлось добавить 0-й элемент в качестве заполнителя. В качестве альтернативы (спасибо @DennisWilliamson за это):источник
v=(one two three four five six seven eight nine)
иecho ${v[$1-1]}
Python 2.x -
6564Не так хорошо, как ответ @grc, но, конечно, более разборчиво :-)
Еще один символ, благодаря @flornquake
источник
'nine eight seven six five four three two one'.split()[-input()]
Java 7 - 185
источник
С 111
Длина здесь тщательно спроектирован так , что я могу интерпретировать его как двоичный и обращенным , что в десятичной системе . У меня всего 7 персонажей, я уверен, что у меня есть победитель!
источник
#include
иmain()
возвращаемый тип. Также бит рефакторинга вашего выражения:main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}
. 86 символов по моим подсчетам.111
двоичный код, он будет преобразован7
в десятичную.Баш сказал (OS X):
38«Ваша цель - преобразовать целое число от 1 до 9 в слово, которое оно представляет»
В прошлый раз, когда я проверял, произнесенные слова тоже были словами. Предыдущая попытка (не принимает ввод)
say 4
Редактировать, должен уметь читать ввод:
Введите любое число, и слово выходит. Я знаю, что истекает срок окончания, но, по моему мнению, я должен был выиграть конкурс.
Пример аудиофайла: four.aiff
источник
VBScript
988075источник
J -
68 или 60,57 или 53 байтаИнтерактивная версия (stdin):
Версия функции:
Объяснение:
".(1!:1)1
читает строку и преобразует ее в целое числоисточник
(;:'one two blah')>@{~<:
), а еще шесть, используяone`two`blah
вместо этого герунду;:
.>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1
на 3 знака короче.Perl 36 (58 автономных)
Или без дополнительных модулей:
источник
Can't locate Number/Spell.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at toto.pl line 1.
BEGIN failed--compilation aborted at toto.pl line 1.
syntax error at titi.pl line 1, near "say qw(one two three four five six seven eight nine)"
Execution of titi.pl aborted due to compilation errors.
В AppleScript; 123 символа
Этот скрипт принимает входные данные в диалоге. Затем он дает вывод в результате AppleScript .
Пример :
6
"six"
Вот более приятная версия:
Эта версия отображает вывод в хорошем диалоге.
Пример :
9
nine
[Ответ отредактирован; немного улучшен диалог для ввода; еще 124 символа. Ответ отредактирован снова; теперь на 1 символ меньше! ]
источник
set n to text returned of
... Ух ты.Powershell -
9174Выяснили, как приводить для удаления вызовов Enum и ToObject:
Как это работает?
HourOfDay является типом enum, поэтому мы можем использовать имена вместо магических констант. Типы Enum имеют реализацию ToString (), которая дает вам имя постоянного значения. Вы можете привести int к перечислению. Console.Read () читает символ из входного потока, представленного как целое число. набрав '1', вы получите 49, вычтите 48, чтобы получить 1, приведите к HourOfDay, чтобы получить 'One'.
Потому что powershell делает ToString для всех объектов, записываемых в выходной поток, и ему не нужен пух, чтобы превратить его в исполняемый файл, это все, что нужно, кроме powershell ...
источник
CJam - 50
Это простое решение ASCII, которое использует HTTP-запросы (это разрешено в вопросе):
На сервере имеется 9 текстовых файлов с именами 1, 2, ..., 9, каждый из которых содержит соответствующее слово.
Общий размер: 14 + 3 («один») + 3 («два») + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Можно играть в гольф чаще, используя более короткий домен.
Онлайн-интерпретатор не поддерживает HTTP-запросы, поэтому программу необходимо запускать с использованием Java-интерпретатора .
источник
Партия - 86
Гораздо короче, чем другой пакетный ответ, и на самом деле удивительно конкурентоспособный.
Используется как
filename.bat number
, и вывод в виде файла с именем правильного номера.источник
Ruby 64
источник
9-1
когда можно просто сказать8
? Конечно и то9-1
и другое8
не так; этот скрипт выводит «девять» все время и игнорирует ввод.BASH 9
Бесстыдная линукс-реплика ответа кузинкойкана
говорит один
источник
GolfScript, 50 байтов
Я хотел посмотреть, смогу ли я победить 51-байтовое автономное решение GolfScript от Quincunx . Оказывается, при достаточном количестве трюков, да, я могу - одним байтом.
Поскольку одним из приемов, которые я использую, является использование байтов вне диапазона ASCII для печати, результирующая программа не может быть вставлена здесь напрямую. Вместо этого я предоставляю шестнадцатеричный дамп этого; пользователи в системах Unixish могут использовать
xxd -r
для восстановления фактической 50-байтовой программы GolfScript из шестнадцатеричного дампа:Основной трюк, использованный для генерации этой программы, прост: я сжимаю длинный строковый литерал, составляющий большую часть кода Quincunx, вычитая 99 (ASCII-код буквы
c
) из символьных значений, интерпретируя полученные значения как число в базе 22. (достаточно, чтобы закодировать буквы доx
), а затем перекодировать результирующее число в базе 255, чтобы получить непечатную строку байтов, которая составляет большую часть первой половины моей программы. Затем остальная часть программы переворачивает этот процесс, декодируя строку обратно во что-то для печати.(Поскольку наименьшая буква, присутствующая в именах чисел, такова
e
, я мог бы еще больше сократить строку байтов, вычтя 101 из кодов ASCII и используя основание 20. Однако вычитание 101 привело бы к преобразованию буквыo
в новую строку, которую яn
Я использую в качестве разделителя чисел, потому что он удобно доступен как встроенная константа в GolfScript. Обойти это будет стоить мне больше, чем один байт, который сэкономил бы использование более низкого основания. Использование смещения 99 оставляет новую строку, соответствующую буквеm
, который удобно отсутствует в числовых именах.)Вот демоверсия программы:
источник