Преобразовать 1, 2, 3, 4, 5, 6, 7, 8 и 9 в «один», «два», «три» и т. Д.

47

Победитель: профессор Башфиш ответ ! Целых 9 байтов! Вау!

Вы можете продолжить отправлять свой ответ, однако вы больше не можете выиграть. Оригинальный пост сохранен для потомков:


Ваша цель - преобразовать целое число от 1 до 9 в слово, которое оно представляет.

  • Вам не нужно беспокоиться о десятичных дробях
  • Пользователь введет номер. Предположим, что они никогда не будут вводить что-либо 10 или выше
  • Пользователь должен ввести число в какой-то момент, однако метод, который читает программа, не имеет значения. Это может быть стандартный ввод, чтение текстового файла и т. Д., Однако пользователь должен нажать кнопку 9 на клавиатуре (например) в какой-то момент
  • Он не чувствителен к регистру (т. Е. Допустимы "один", "один", "один", "один" и т. Д.)
  • Запросы HTTP / etc разрешены, однако любой код, выполняемый сервером, который делается для подсчета байтов в вашем конечном коде (например, если у меня программа на C ++ делает HTTP-запрос, код PHP, используемый в запросе HTTP, рассчитывает )
  • Все, что можно скомпилировать и запустить, приемлемо

  • Этот конкурс завершился 27 июня 2014 года (7 дней с момента отправки).
  • Это , поэтому выигрывает самый короткий код
Джон
источник
2
Является ли конечный пробел (то есть one ) приемлемым?
grc
1
@grc Да, пока программа выводит слово.
Джон
1
Вы должны указать, что может быть напечатан только данный номер, а не другие номера.
Pinna_be
1
@Pinna_be, например, если я ввожу 3, вы не можете выводить, one two three four five six seven eight nineдаже если вы технически выводите three. Точно так же вы не можете выводить three sevenи т. Д.
Джон
1
Этот вопрос был довольно хорош. Но мне не нравится добавление лимита даты. В частности, лимит даты был добавлен непосредственно перед лимитом даты, а не за 7 дней.
Николас Барбулеско

Ответы:

19

Bash (с bsdgames), 9

number -l

Читает со стандартного ввода.

Я не знаю, почему для этого есть утилита, но что угодно.


источник
2
Я не уверен, что мне нравится устанавливать bsdgames и затем называть его "bash", хотя я признаю, что моя оговорка субъективна.
Пол Дрейпер
@PaulDraper И я тоже. Я не опубликовал это как серьезный ответ, я думаю, что один из других ответов заслуживал быть принятым
5
Разве это не стандартная лазейка?
Джастин
2
@ Quincunx да, это в основном так. Хотя большинство вещей в Bash являются внешними утилитами, я бы не посчитал пакет bsdgames чем-то очень допустимым (в отличие от grep, wget, coreutils, sed, bc ...).
132

Python 2, 64

print' ottffssennwhoiieiieoruvxvgn  ere ehe  e   nt'[input()::9]

Вот как выглядит строка с дополнительными пробелами (попробуйте читать по вертикали):

o t t f f s s e n
n w h o i i e i i
e o r u v x v g n
    e r e   e h e 
    e       n t

Как объясняется в комментариях ниже, [input()::9]начинается с заданного индекса и выбирает каждый девятый последующий символ.

GRC
источник
9
Ох, дерьмо, мне это нравится. Наверное, стоит отметить, что это, кстати, Python 2.
подземный
3
Объясните пожалуйста! :)
Кристофер Олссон
6
@ChristoferOlsson input()::9- это диапазон от input()конца строки с шагом 9, например 1,10,19,28,37или 3,12,21,30,39, которые являются точными индексами, в которых находятся буквы для соответствующего слова.
Мартин Эндер
1
@ m.buettner спасибо! Это мило.
Кристофер Олссон
6
Разве это не похоже на то, что делает шифр для ограждения? (+1 для аккуратного решения между прочим.)
Лу
18

Common Lisp - 22 байта

Вот общий (не только для одной десятки):

(format nil"~R"(read))

О, вы хотите порядковые числа (первое, второе, ... трехсотое ...)? Хорошо!

(format nil"~:R"(read))
filcab
источник
10
Разве это не стандартная лазейка?
seequ
2
Лазейка в каком смысле? Это четко определено в Hyperspec
filcab
10
Как в этом: meta.codegolf.stackexchange.com/a/1078/20356
seequ
3
Будь то стандартная лазейка или нет, я тоже пришла сюда, чтобы постить. +1 :)
Джошуа Тейлор
5
@TheRare Глядя на комментарии к этому ответу, я не думаю, что существует твердое согласие сообщества, что это лазейка. Я чувствую, что вопросы должны явно запретить использование такого рода встроенных функций, если они не должны использоваться.
Цифровая травма
16

BASH 51

Поэтому я сделал еще одну, используя свою вторую идею, плюс некоторую помощь от других:

set one two three four five six seven eight nine

$X

Где «Х» - это номер, который вы хотите.


BASH 48 (67)

67 с \nпереносами строк

Я не уверен, считается ли это полностью, потому что он читает из файла, но:

sed -n Xp a

Где "X" - это ввод, а где aфайл с:

one
two
three
four
five
six
seven
eight
nine

Файл содержит 36 символов, а команда bash - 13.

Как это устроено:

Каждая строка в файле нумеруется, начиная с 1. Таким образом, «один» находится на 1-й строке, «два» на 2-й. Команда, которая sed -n 'Xp' aговорит: «Пожалуйста, напечатайте то, что указано в строке« X »файла« a »», sedявляется редактором потока Unix. -nзначит молчать или только по существу игнорировать все остальное. Xpозначает печатать то, что находится на линии 'X'.

Эрик Лагергрен
источник
2
Хороший первый ответ! Спасибо, что нашли время, чтобы выяснить, как мы форматируем наши ответы на этом сайте. Добро пожаловать в программирование головоломок и Code Golf!
Джастин
2
Вы не учитывали переводы строки a.
Деннис
1
На один байт меньше, чем раньше, принимает аргумент командной строки и не требует дополнительных файлов: pastebin.com/qdbXKQGP Bash будет жаловаться на отсутствующий разделитель heredoc, но он будет нормально работать с Dash и Zsh.
Деннис
1
@ Денис, круто, мне это нравится. Должен ли я отредактировать свой ответ сейчас? Извините, я новичок в коде гольф.
Эрик Лагергрен
1
Вы можете опустить 'цитаты. Вы также можете попробовать использовать здесь строку вместо внешнего файла. Но вы действительно должны посчитать разрывы строк в вашем файле.
Цифровая травма
16

К № 127 (86/46)

Если вы берете только исполняемую часть ...

Console.Write(((HourOfDay)Console.Read()-48));

и если HourOfDayбы он был частью пространства имен System, вам понадобилось бы 46 символов. К сожалению это сидит в System.DirectoryServices.ActiveDirectoryкотором делает это 86 ... другой шум портит это.

Это можно скомпилировать и запустить из командной строки (127 символов):

using System;class P{static void Main(){Console.Write((System.DirectoryServices.ActiveDirectory.HourOfDay)Console.Read()-48);}}

если сохранено в файл с именем cg2.cs

csc cg2.cs /r:System.DirectoryServices.dll  && cg2

Как это работает?

HourOfDay является типом enum, поэтому мы можем использовать имена вместо магических констант. Типы Enum имеют реализацию ToString (), которая дает вам имя значения . Вы можете привести int к перечислению. Console.Read () читает символ из входного потока, представленного как целое число. набрав '1' , вы получите 49 , вычтите 48, чтобы получить 1, приведите / box к, HourOfDayчтобы вернуть 'One'

Посмотрите на версию Powershell этого же трюка

Rene
источник
Как это работает ? Допустим, я ввожу 9. Что делает программа тогда?
Николас Барбулеско
Что это -48делает здесь?
Николас Барбулеско
2
@NicolasBarbulesco добавил как это работает? параграф. Имеет ли это смысл?
Рене
1
@NicolasBarbulesco - сортируется по алфавиту. Что имеет смысл в любом контексте, кроме «Эти слова являются числами». Так как я уверен, что документация генерируется автоматически, не имеет смысла специально рассматривать одну статью.
Бобсон
13

Befunge 98, 116 105 103 байт

&1-       v
vvvvvvvvvj<
"""""""""
etnxereoe
nheivuewn
igvsiorto
nie"ffh""
"es ""t
 ""   "
>>>>>>>>>4k,@

Befunge не был сделан для этого ...

Объяснение:

&1-           ;Grab the input number (`n`) and subtract 1 from it
&1-       v   ;Start moving downwards
          <   ;Start moving leftwards
         j    ;Jump `n - 1` characters to the left.
vvvvvvvvvj    ;Redirect each of the possible locations to jump to, sending the IP down.

        "     ;If `n` was 1, push `o, n, e` onto the stack (`o` is at the bottom)
        e
        n
        o
        "

       "      ;If `n` was 2, push `t, w, o` onto the stack
       o
       w
       t
       "

    *
    *
    *

"             ;If `n` was 9, push `n, i, n, e` onto the stack
e
n
i
n
"

>>>>>>>>>     ;Collect all the different possible positions the IP could be in, and send it right
>>>>>>>>>4k,  ;Print the top 5 chars. If there are less than 5, the rest are null characters. This is allowed
            @ ;End of program
Джастин
источник
8
@ Денис, я не понимаю, как это может быть так сложно. Просто возьмите файл, превратить его в char[][], держать xи yрасположение, и выполнить характер в этом месте. Сложнее всего было бы определить операцию для каждого возможного персонажа.
Джастин
1
Вы можете легко сохранить два байта с помощью &1-.
har-wradim
10

Javascript 68

Atob / btoa может быть инструментом сжатия бедных людей (но если вы хотите попробовать это в консоли, вы не можете копировать из отформатированного текста, который вы видите сразу. Перейдите в «edit» и скопируйте с панели источника)

Редактору уценок не нравятся некоторые символы в этом ответе: некоторые символы теряются при сохранении. Тем не менее, я думаю, что это проблема редактора, а не моя. Потерянные символы - это действительные 8-битные символы Юникода.
(В противном случае я ошибаюсь, если эта проблема уже обсуждалась в мета-версии, дайте мне знать) Вот версия, в которой экранированные символы экранированы, каждая последовательность \ xNN должна считать 1

alert(btoa("×C§{Dð£Dá­ç´\x16\x8b«ÐX¯{D¢ÇD\x9e½éô\x12(!·Cb\x9dí").split(0)[prompt()])

Простой тест

В консоли Firefox:

[0,1,2,3,4,5,6,7,8,9]
.map(x=>x +',' btoa("×C§{Dð£Dá­ç´\x16\x8b«ÐX¯{D¢ÇD\x9e½éô\x12(!·Cb\x9dí").split(0)[x])
edc65
источник
Я пробовал что-то похожее, но не смог определить правильную строку base64, начиная с цифры. Я думаю, что ваш ответ был поврежден из-за stackexchange.
nderscore
@ nderscore, черт возьми, ты прав. Поправка к посту, все же, по моему мнению, действительна
edc65
1
С версией, в которой есть экранированные символы, все работает, кроме 3 и 8, вывод Treeи EightF.
Джастин
3
@ Quincunx «Дерево» - это я не говорю по-английски
edc65
10

Javascript 73

alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[prompt()])

69

alert(btoa("ôéÞõ5õ1ëxO_¢êý|Þöȱõ'xß^hSôا{Ý").split(9)[prompt()])
nderscore
источник
Технически это не alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])то же самое, но сэкономить 8 байт? Пользователь по-прежнему вводит желаемое число ...
Эрик Лагергрен
@eric_lagergren Вы имеете в виду, что пользователь должен будет изменить номер в источнике? Я не думаю, что это будет считаться вкладом.
nderscore
О, хорошо, я понимаю, что вы имеете в виду. Я полагаю, если вы запустите его как команду в консоли, это будет частью ввода, а не источника.
Эрик Лагергрен,
7

Perl, 55

$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]

Он запускается с опцией -p(+1 байт), например:

perl -pe '$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]'

Ввод ожидается в STDIN, а вывод записывается в STDOUT.

Код просто генерирует массив и выбирает нужный элемент. Option -pвыполняет чтение строки ввода $_и печатает результат в $_.

Варианты:

  • С трейлингом новой строки (+3):

    $_=(nine,eight,seven,six,five,four,three,two,one)[-$_].$/

    или (тот же счетчик байтов):

    s/./(nine,eight,seven,six,five,four,three,two,one)[-$&]/e

Обновить:

  • Использование голых слов вместо qw[...](спасибо Заид).

  • Отрицательный индекс сохраняет байт (спасибо aragaer).

Хайко Обердиек
источник
1
Сохраните пару символов:$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
Заид
2
@Zaid: Спасибо, это спасло два байта. (Я привык к use strict).
Хайко Обердик
Мне не нравится это "-1". $_=(nine,eight,seven,six,five,four,three,two,one)[-$_]- на один символ короче.
aragaer
@aragaer: Спасибо, хорошая идея.
Хайко Обердик
6

Oracle SQL - 46

select to_char(to_date(&1,'j'),'jsp')from dual

демонстрация

Я допускаю, что это включает стандартную лазейку , но SQL-код короче, чем Golfscript; Я не мог устоять!

Он работает (ab) с использованием моделей формата даты / времени Oracle . TO_DATE(n, 'j')преобразует число в юлианский день , количество дней с 1 января 4712 г. до н. TO_CHAR(<date>, 'jsp')преобразует это обратно в целое число (хотя и в виде строки). sp, Является формат элемент суффикса , который записывает число. Это на самом деле будет работать с большим количеством цифр.

&1Является подстановка переменной , который будет работать только с клиентами , которые принимают его, например , SQL * Plus.

Бен
источник
У меня есть отношения любовь / ненависть с СУБД Oracle, но это хорошо.
Рене
6

CJam, 45 43 байта

"^AM-^L8M-xM-^L^US^_M-^WrM-rM- 1M-s^CHM-|M-X^HE,M-qM-^EM-q4"256bKb'ef+'j/li=

Выше используются символы ^ и M, так как некоторые символы непечатаемы.

За счет 9 дополнительных байтов можно избежать непечатных символов:

" one two three four five six seven eight nine"S/li=

Попробуйте онлайн.

Как это устроено

" Convert the string into an integer by considering it a base-256 number.                ";

"^AM-^L8M-xM-^L^US^_M-^WrM-rM- 1M-s^CHM-|M-X^HE,M-qM-^EM-q4"256b

" Convert the integer from above into an array by considering it a base-20 number.       ";

Kb

" Add the ASCII character code of “e” to all elements of that array. This casts to char. ";

'ef+

" So far, we've pushed the string “jonejtwojthreejfourjfivejsixjsevenjeightjnine”.       ";

" Split the the above string where the character “j” occurs.                             ";

'j/

" Read an integer from STDIN and push the corresponding substring.                       ";

li=

пример

$ base64 -d > convert.cjam <<< IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YktiJ2VmKydqL2xpPQ==
$ wc -c convert.cjam
43 convert.cjam
LANG=en_US cjam convert.cjam <<< 5
five
Деннис
источник
Вау, наши ответы идентичны, даже по длине (я предполагаю, что пользователь вводит строку).
Джастин
1
@Quincunx: Умы одинаково думают здорово! : P Но чтение пользовательского ввода будет стоить два байта в CJam, поэтому мне придется подумать о чем-то еще ...
Деннис
@Quincunx: Он должен работать и с GolfScript, хотя, вероятно, не будет сохранять байты. Дамп Base64:IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
Деннис
Это то, что мне удалось придумать; это длиннее: golfscript.apphb.com/…
Джастин
Знаете ли вы, что ожидает кодировка golfscript для персонажей не-ascii? Похоже, не будет UTF-8
Джастин
5

GolfScript, 51 байт

~'
one
two
three
four
five
six
seven
eight
nine'n/=

Это простая таблица поиска. Входные данные оцениваются ( ~), создается массив значений и указывается индекс.

Попробуй здесь

Джастин
источник
Пользователь должен ввести строку, ее нельзя жестко запрограммировать. Кроме того, ваша Try it hereссылка имеет другой код, чем вставленный код.
Джон
@Chipperyman Пользователь вводит строку в этой программе. В Try it hereотличии Линка в коде происходит потому , что веб - страница не поддерживает ввод данных пользователя. Измените строку после ;, это идентично вводу пользователя.
Джастин
Ах я вижу. Я не очень хорошо знаю сценарий игры в гольф, спасибо, что сообщили мне об этом.
Джон
2
@Chipperyman: GolfScript помещает содержимое STDIN в стек перед выполнением самого скрипта.
Деннис
2
Хах! Я могу побить тебя одним байтом ! ;-)
Илмари Каронен
4

Perl, 60 байт

$_=(ZOneTwoThreeFourFiveSixSevenEightNine=~/.[a-z]*/g)[$_]

Требуется -pпереключатель (два байта).

пример

$ perl -p convert.pl <<< 5
Five

Как это устроено

  • -pчитает из STDIN и сохраняет результат в $_.

  • =~/.[a-z]*/g разбивает предыдущее голое слово на подстроки одной (заглавной) буквы, за которой следует любое количество строчных букв.

  • (…) собирает подстроки в массив.

  • [$_] извлекает подстроку, соответствующую пользовательскому вводу

  • $_=…сохраняет результат в $_.

  • -pпечатает значение $_.

Деннис
источник
2
Мне нравится трюк с регулярными выражениями. +1
seequ
3

DOS Batch - 162 символа (включая разрывы строк)

Этот ответ был вдохновлен ответом Python @ grc, хотя я имел в виду нечто подобное.

@setlocal enabledelayedexpansion
@set s="ottffssennwhoiieiieoruvxvgn  ere ehe  e   nt
@set /a c=%1
@set z=!s:~%c%,1!
@if _%z%==_ exit /b
@echo %z%
@%0 %c%+9

Использование:

[Имя файла] [номер]

Например, если код находится в файле с именем speak.bat, и вы хотите увидеть число «пять», вы должны запустить его как:

speak 5

Кроме того, вывод сверху вниз, а не слева направо! Так что вместо

5

ты увидишь

ф
я
в
е

Руслан
источник
3

Bash + coreutils, 64

Концепция неконкурентного сжатия

xxd -p<<<TàPnàõ:àsÀ~®@ãCN|tr 0-9a-d \\ng-inor-x|sed -n $1p

Некоторые из экзотических символов здесь могут отображаться некорректно, поэтому этот сценарий можно восстановить из его представления base64:

base64 -d <<< eHhkIC1wPDw8VOCLUIJu4PWWDzrgc8B+rkDjEoBDTnx0ciAwLTlhLWQgXFxuZy1pbm9yLXh8c2VkIC1uICQxcA==

Пример вывода

$ ./n.sh 1
one
$ ./n.sh 9
nine
$ 

объяснение

Мне пришло в голову, что строка 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, но может быть полезной концепцией в других языках.

Цифровая травма
источник
3

(чистый) Баш, 64

Принимает входные данные в качестве первого аргумента при условии допустимого ввода.

v=(o one two three four five six seven eight nine)
echo ${v[$1]}

Создает массив v, затем обращается к элементу, указанному на входе. Поскольку массивы индексируются нулем, мне пришлось добавить 0-й элемент в качестве заполнителя. В качестве альтернативы (спасибо @DennisWilliamson за это):

v=(one two three four five six seven eight nine)
echo ${v[$1-1]}

источник
2
Одинаковое количество символов: v=(one two three four five six seven eight nine)иecho ${v[$1-1]}
Деннис Уильямсон
3

Python 2.x - 65 64

Не так хорошо, как ответ @grc, но, конечно, более разборчиво :-)

'one two three four five six seven eight nine'.split()[input()-1]

Еще один символ, благодаря @flornquake

'nine eight seven six five four three two one'.split()[-input()]
Willem
источник
Этот тоже хорош. :-) Оно работает.
Николас Барбулеско
3
Вы можете сохранить один символ, как это:'nine eight seven six five four three two one'.split()[-input()]
Flornquake
Это хороший!
Виллем
3

Java 7 - 185

class Num{
public static void main(String[] args) {
    System.out.print("ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE".split(",")[(new java.util.Scanner(System.in)).nextInt()-1]);
    }}
малыш
источник
3

С 111

#include <stdio.h>
int main(){printf("%.5s","one  two  threefour five six  seveneightnine"+5*(getchar()-'1'));}

Длина здесь тщательно спроектирован так , что я могу интерпретировать его как двоичный и обращенным , что в десятичной системе . У меня всего 7 персонажей, я уверен, что у меня есть победитель!

Джерри Гроб
источник
1
+1 Любители кода, как правило, не возражают, если ваш код c компилируется с предупреждениями , если он соответствует спецификациям. Таким образом, вы можете опустить #includeи main()возвращаемый тип. Также бит рефакторинга вашего выражения: main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}. 86 символов по моим подсчетам.
Цифровая травма
Я не понимаю, что такое длина, и я не вижу, где будет 7 символов.
Николас Барбулеско
@NicolasBarbulesco: это 111 символов - но если мы будем рассматривать 111двоичный код, он будет преобразован 7в десятичную.
Джерри Гроб
Джерри, в твоей голове бегает гольф!
Николас Барбулеско
3

Баш сказал (OS X): 3 8

«Ваша цель - преобразовать целое число от 1 до 9 в слово, которое оно представляет»

В прошлый раз, когда я проверял, произнесенные слова тоже были словами. Предыдущая попытка (не принимает ввод)

say 4

Редактировать, должен уметь читать ввод:

say|read

Введите любое число, и слово выходит. Я знаю, что истекает срок окончания, но, по моему мнению, я должен был выиграть конкурс.

Пример аудиофайла: four.aiff

CousinCocaine
источник
не должно быть 5?
rpax
@ rpax Я не верю, что вход считается символом, не так ли?
Кузен Кокаин
1
Это умно. Но это пропускает вход.
Николас Барбулеско
1
К сожалению, это неверный ответ, потому что: он никогда не принимает ввод от пользователя и работает только при числе 4.
Джон
1
Комментарий Чиппериман к этому ответу кузен Кокаин является правдой. Но это верно и для ответа @RegisteredUser . Тем не менее, Chipperyman отклонил этот ответ от CousinCocaine, и объявил ответ победителем зарегистрированного пользователя ex æquo. Кроме того, ответ зарегистрированного пользователя является точной копией этого ответа CousinCocaine. Это более чем несправедливо.
Николас Барбулеско
2

VBScript 98 80 75

msgbox split(" one two three four five six seven eight nine")(inputbox(""))
comfortablydrei
источник
2

J - 68 или 60, 57 или 53 байта

Интерактивная версия (stdin):

>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1

Версия функции:

f=:one`two`three`four`five`six`seven`eight`nine>@{~<:

Объяснение:

f=:one`two`three`four`five`six`seven`eight`nine>@{~<:
                                                   <: Decrease by one
                                                 {~   Get the correct string
                                               >@     Unbox

".(1!:1)1 читает строку и преобразует ее в целое число

seequ
источник
Вы можете сохранить один символ, записав его как поезд ( (;:'one two blah')>@{~<:), а еще шесть, используя one`two`blahвместо этого герунду ;:.
алгоритмическая
@algorithmshark Спасибо! Я все еще изучаю J. Хотя, версия поезда не требует, чтобы текст был бесконечного ранга (редактировать: очевидно, нет ... почему нет?) И дополнительные цитаты версии gerund (редактировать: о, это создает список коробки)?
Seequ
В левом аргументе разветвление может иметь существительное, которое является сокращением для константы глагола, производящей это существительное с бесконечным рангом (см. Словарь ). И нет, никаких дополнительных кавычек на герунде: неопределенные имена обрабатываются как ссылки на глаголы, а герундой для этого является просто строка в штучной упаковке, содержащая имя.
алгоритмическая
Кроме того, вам не нужно писать версию STDIN как выражение глагола: >one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1на 3 знака короче.
алгоритм игры
1
@algorithmshark Хаха, почему я так не сделал?
Seequ
2

Perl 36 (58 автономных)

use Number::Spell;say spell_number<>

Или без дополнительных модулей:

say qw(one two three four five six seven eight nine)[<>-1]
el.pescado
источник
Ваш первый скрипт не работает, на моем Mac. 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.
Николас Барбулеско
Ваш второй скрипт не работает, на моем Mac. 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.
Николас Барбулеско
2

В AppleScript; 123 символа

{"one","two","three","four","five","six","seven","eight","nine"}'s item((display dialog""default answer"")'s text returned)

Этот скрипт принимает входные данные в диалоге. Затем он дает вывод в результате AppleScript  .

Пример :

  • Вход: 6
  • Выход : "six"

Вот более приятная версия:

set l to {"one","two","three","four","five","six","seven","eight","nine"}
set n to text returned of (display dialog "?" default answer "")
display dialog (l's item n) buttons ("OK") default button 1

Эта версия отображает вывод в хорошем диалоге.

Пример :

  • Вход: 9
  • Выход : nine

[Ответ отредактирован; немного улучшен диалог для ввода; еще 124 символа. Ответ отредактирован снова; теперь на 1 символ меньше! ]

Николас Барбулеско
источник
1
set n to text returned of... Ух ты.
seequ
2

Powershell - 91 74

[Enum]::ToObject([System.DirectoryServices.ActiveDirectory.HourOfDay],[Console]::Read()-48)

Выяснили, как приводить для удаления вызовов Enum и ToObject:

[System.DirectoryServices.ActiveDirectory.HourOfDay]([Console]::Read()-48)

Как это работает?

HourOfDay является типом enum, поэтому мы можем использовать имена вместо магических констант. Типы Enum имеют реализацию ToString (), которая дает вам имя постоянного значения. Вы можете привести int к перечислению. Console.Read () читает символ из входного потока, представленного как целое число. набрав '1', вы получите 49, вычтите 48, чтобы получить 1, приведите к HourOfDay, чтобы получить 'One'.

Потому что powershell делает ToString для всех объектов, записываемых в выходной поток, и ему не нужен пух, чтобы превратить его в исполняемый файл, это все, что нужно, кроме powershell ...

Rene
источник
2

CJam - 50

Это простое решение ASCII, которое использует HTTP-запросы (это разрешено в вопросе):

"aj21.com/"r+g

На сервере имеется 9 текстовых файлов с именами 1, 2, ..., 9, каждый из которых содержит соответствующее слово.

Общий размер: 14 + 3 («один») + 3 («два») + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Можно играть в гольф чаще, используя более короткий домен.

Онлайн-интерпретатор не поддерживает HTTP-запросы, поэтому программу необходимо запускать с использованием Java-интерпретатора .

aditsu
источник
1
Пожалуйста, добавьте комментарий, если проголосуете.
aditsu
-1, это стандартная лазейка .
nyuszika7h
3
@ nyuszika7h это конкретно разрешено в этом вопросе
aditsu
1
Извините, я пропустил это. Я не могу отменить свое понижение сейчас, пока ответ не отредактирован.
nyuszika7h
1
@ nyuszika7h отредактировано
aditsu
2

Партия - 86

Гораздо короче, чем другой пакетный ответ, и на самом деле удивительно конкурентоспособный.

for /f "tokens=%1" %%1 in ("one two three four five six seven eight nine") do echo>%%1

Используется как filename.bat number, и вывод в виде файла с именем правильного номера.

Οurous
источник
2

Ruby 64

p %w?one two three four five six seven eight nine?[$*[0].to_i-1]
Mhmd
источник
1
Вы можете разделить еще несколько байтов, подставив 9 непосредственно в место x
Mr. Alien
6
Я не вижу, где этот код принимает на вход. А зачем писать, 9-1когда можно просто сказать 8? Конечно и то 9-1и другое 8не так; этот скрипт выводит «девять» все время и игнорирует ввод.
Рэй Тоал
2

BASH 9

Бесстыдная линукс-реплика ответа кузинкойкана

spd-say 1

говорит один

зарегистрированный пользователь
источник
1
Разве это не сработало бы, если вход был 1?
Джон
1
@ Chipperyman это работает для любого числа
Зарегистрированный пользователь
Предел, но умный!
Николас Барбулеско
Это пропускает вход.
Николас Барбулеско
@nicolasbarbulesco да. но было много других ответов, которые пропускали ввод, поэтому я продолжил это.
Зарегистрированный пользователь
2

GolfScript, 50 байтов

Я хотел посмотреть, смогу ли я победить 51-байтовое автономное решение GolfScript от Quincunx . Оказывается, при достаточном количестве трюков, да, я могу - одним байтом.

Поскольку одним из приемов, которые я использую, является использование байтов вне диапазона ASCII для печати, результирующая программа не может быть вставлена ​​здесь напрямую. Вместо этого я предоставляю шестнадцатеричный дамп этого; пользователи в системах Unixish могут использовать xxd -rдля восстановления фактической 50-байтовой программы GolfScript из шестнадцатеричного дампа:

0000000: 7e6e 270b 97eb 442f e166 9894 9f00 c63c  ~n'...D/.f.....<
0000010: 8128 73a3 9b55 5065 a9fb f06a 2727 ff16  .(s..UPe...j''..
0000020: 277b 6261 7365 7d2f 2b6e 2f3d 7b39 392b  '{base}/+n/={99+
0000030: 7d25                                     }%

Основной трюк, использованный для генерации этой программы, прост: я сжимаю длинный строковый литерал, составляющий большую часть кода Quincunx, вычитая 99 (ASCII-код буквы c) из символьных значений, интерпретируя полученные значения как число в базе 22. (достаточно, чтобы закодировать буквы до x), а затем перекодировать результирующее число в базе 255, чтобы получить непечатную строку байтов, которая составляет большую часть первой половины моей программы. Затем остальная часть программы переворачивает этот процесс, декодируя строку обратно во что-то для печати.

(Поскольку наименьшая буква, присутствующая в именах чисел, такова e, я мог бы еще больше сократить строку байтов, вычтя 101 из кодов ASCII и используя основание 20. Однако вычитание 101 привело бы к преобразованию буквы oв новую строку, которую я nЯ использую в качестве разделителя чисел, потому что он удобно доступен как встроенная константа в GolfScript. Обойти это будет стоить мне больше, чем один байт, который сэкономил бы использование более низкого основания. Использование смещения 99 оставляет новую строку, соответствующую букве m, который удобно отсутствует в числовых именах.)

Вот демоверсия программы:

~       # eval the input, turning it into a number
n       # push a newline onto the stack; we'll need it later

# this is the byte string encoding the number names:
"\x0B\x97\xEBD/\xE1f\x98\x94\x9F\x00\xC6<\x81(s\xA3\x9BUPe\xA9\xFB\xF0j"

# convert the encoded string from base 255 to base 22
# (and, incidentally, from a string to an array):
"\xFF\x16" {base}/

+       # prepend the newline pushed earlier to the array, re-stringifying it
n/      # split the resulting string at newlines
=       # pick the substring corresponding to the input number
{99+}%  # add 99 to the character values in the chosen substring
Илмари Каронен
источник