Перетворіть 1, 2, 3, 4, 5, 6, 7, 8 і 9 в "один", "два", "три" тощо


47

Переможець: хитра відповідь професорфіш ! Цілих 9 байт! Оце Так!

Ви можете продовжувати надсилати свою відповідь, однак перемогти більше не можете. Оригінальна публікація, збережена для нащадків:


Ваша мета - перетворити ціле число між 1-9 у слово, яке воно представляє.

  • Вам не потрібно буде турбуватися про десяткові знаки
  • Користувач введе число. Припустимо, що вони ніколи не введуть нічого 10 або вище
  • Користувач повинен ввести номер у якийсь момент, однак спосіб, який програма читає, це не має значення. Це може бути за допомогою stdin, читання текстового файлу тощо, однак користувач повинен в якийсь момент натиснути кнопку 9 на клавіатурі (наприклад)
  • Це не враховує регістр (тобто "one", "one", "oNe", "onE" і т. Д. Всі прийнятні)
  • HTTP / etc запити дозволені, однак будь-який код, виконаний сервером, запит зараховується до підрахунку байтів вашого остаточного коду (наприклад, якщо я мав програму C ++ зробити запит HTTP, PHP-код, використаний у запиті HTTP, зараховується )
  • Все, що можна компілювати та запускати, є прийнятним

  • Цей конкурс закінчився 27 червня 2014 року (7 днів від публікації).
  • Це , тому виграє найкоротший код

2
Чи one прийнятний пробіл (тобто ) ззаду?
grc

1
@grc Так, поки програма виводить слово.
Джон

1
Ви повинні вказати, що друкується тільки заданий номер, а не інші цифри.
Pinna_be

1
@Pinna_be, наприклад, якщо I вхід 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

Пітон 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]починається з даного індексу і вибирається кожен дев'ятий наступний символ.


9
О, лайно, мені це подобається. Напевно, варто зазначити, що це, до речі, пітон 2.
підземниймонорельс

3
Поясніть будь ласка! :)
Крістофер Олссон

6
@ChristoferOlsson input()::9- це діапазон від input()кінця рядка кроками 9, як-от 1,10,19,28,37або 3,12,21,30,39, які є саме такими індексами, в яких знаходяться літери відповідного слова.
Мартін Ендер

1
@ m.buettner дякую! Це мило.
Крістофер Олссон

6
Хіба це не щось на зразок того, що робить шифр із залізничним парканом? (+1 до речі для акуратного рішення.)
Лу,

18

Лист звичайний - 22 байти

Ось загальний (не лише на одну десятку):

(format nil"~R"(read))

Ой, ти хочеш ординалів (перший, другий, ... трисотий ...)? Гаразд!

(format nil"~:R"(read))

10
Це не стандартна лазівка?
seequ

2
Лазівка ​​в якому сенсі? Це чітко визначено в Hyperspec
filcab


3
Будь то стандартна лазівка ​​чи ні, це те, що я прийшов сюди, щоб також розміщувати. +1 :)
Джошуа Тейлор

5
@TheRare Дивлячись на коментарі до цієї відповіді, я не думаю, що існує сильна консенсус у громаді, що це лазівка. Я відчуваю, що питання повинні чітко забороняти використання такого роду вбудованої функції, якщо вони не будуть використані.
Цифрова травма

16

БАШ 51

Тому я зробив ще одну, використовуючи свою другу ідею плюс допомогу інших:

set one two three four five six seven eight nine

$X

Де "X" - це число, яке ви хочете.


БАШ 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
Приємна перша відповідь! Дякуємо, що знайшли час, щоб зрозуміти, як ми форматуємо наші відповіді на цьому веб-сайті. Ласкаво просимо до головоломки програмування та коду для гольфу!
Джастін

2
Ви не рахували канали ліній у a.
Денніс

1
На один байт менше, ніж раніше, приймає аргумент командного рядка і не потрібні додаткові файли: pastebin.com/qdbXKQGP Bash поскаржиться на відсутній роздільник гередока, але він буде працювати нормально з Dash та Zsh.
Денніс

1
@Dennis oh cool мені це подобається. Чи повинен я зараз відредагувати свою відповідь? Вибачте, я новачок у коді гольфу.
Ерік Лагергрен

1
Ви можете опустити 'цитати. Ви також можете спробувати використати рядок тут замість зовнішнього файлу. Але вам справді слід порахувати розриви рядків у вашому файлі.
Цифрова травма

16

C # - 127 (86/46)

Якщо ви берете лише виконану частину ...

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

і якби ви HourOfDayбули частиною простору імен системи, вам знадобиться 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 мають реалізацію ToString (), яка дає вам ім'я значення . Ви можете кинути int на enum. Console.Read () читає символ із вхідного потоку, представленого як ціле число. набравши '1' , ви отримаєте 49 , підсумковий 48, щоб отримати 1, літній / поле HourOfDayдля повернення 'Один'

Погляньте на версію Powershell цього ж фокусу


Як це працює? Скажімо, я ввійшов 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
@Dennis Я не бачу, як це може бути настільки важким. Просто візьміть файл, перетворіть його в char[][], збережіть xі yрозташування, і виконайте символ у цьому місці. Найважче було б визначити операцію для кожного можливого персонажа.
Джастін

1
Ви можете легко зберегти два байти за допомогою &1-.
har-wradim

10

Javascript 68

Atob / btoa може бути інструментом для стиснення чоловіка бідної людини (але якщо ви хочете спробувати це в консолі, ви не можете скопіювати відразу з відформатованого тексту, який ви бачите.

Редактор Markdown не любить деяких символів у цій відповіді: деякі символи втрачаються при збереженні. Але я вважаю, що це проблема редактора, а не моя. Втрачені символи цілком дійсні 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])

Я спробував щось подібне, але не міг з'ясувати дійсну рядок base64, починаючи з числа. Я думаю, ти відповів, був пошкоджений stackexchange, хоча.
nderscore

@nderscore, чорт забирай.
Виправлення

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()])

Технічно це не alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])те саме, але заощадити 8 байт? Користувач все ще вводить потрібне число ...
Ерік Лагергрен

@eric_lagergren Ви маєте на увазі, що користувачеві доведеться змінити номер у джерелі? Я не думаю, що це вважатиметься вкладом.
nderscore

О, добре, я бачу, що ти маєш на увазі. Я припускаю, що якщо ви запустили його як команду в консолі, це буде частиною вводу на відміну від джерела.
Ерік Лагергрен

7

Перл, 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.

Код просто генерує масив і вибирає потрібний елемент. Опція -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.


Я маю стосунки любові / ненависті до RDBMS Oracle, але це приємно.
Rene

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/…
Джастін

Чи знаєте ви, що очікує кодування гольфскрипту для символів, що не належать до асції? Здається, це не 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 - 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

Крім того, вихідний результат - зверху вниз, а не зліва направо! Тож замість

п’ять

ти побачиш

f
i
v
e


3

Bash + coreutils, 64

Неконкурентна концепція стиснення

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

Деякі з екзотичних персонажів тут можуть не відображатись добре, тому цей сценарій може бути реконструйований з його базового представлення64:

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 тільки лінії нам потрібно.

Цей процес розшифровки закінчується з використанням достатньої кількості додаткового простору, тому робить цю відповідь неконкурентоспроможною як відповідь у стилі оболонки, але може бути корисною концепцією для інших мов.


3

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

Вважає введення в якості свого першого аргументу, якщо вважати, що це дійсне.

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

Створює масив v, після чого отримує доступ до елемента, вказаного на вході. Оскільки масиви нульово індексуються, мені довелося додати 0-й елемент як заповнювач. Як варіант (thnx @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()]

Цей теж приємний. :-) Це працює.
Ніколя Барбулеско

3
Ви можете зберегти одного персонажа так:'nine eight seven six five four three two one'.split()[-input()]
flornquake

Це хороший!
Віллем

3

Ява 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

C 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

bash сказати (OS X): 3 8

"Ваша мета - перетворити ціле число між 1-9 в слово, яке воно представляє"

Востаннє, коли я перевіряв, вимовлені слова також є словами. Попередня спроба (не приймає даних)

say 4

Редагувати, має бути в змозі читати дані:

say|read

Введіть будь-яке число і слово вийде. Я знаю, що кінцева дата настає, але, на мою думку, я повинен був виграти конкурс.

Приклад аудіофайлу: four.aiff


не повинно бути 5?
rpax

@rpax Я не вірю, що вхід вважається символом, чи не так?
CousinCocaine

1
Це розумно. Але це не вистачає введення.
Ніколя Барбулеско,

1
На жаль , це не є правильною відповіддю , тому що: Він ніколи не приймає вхідні дані від користувача і працює тільки якщо номер 4.
Джон

1
Коментар Чіпперімана щодо цієї відповіді CousinCocaine правдивий. Але це правда і для відповіді від @RegisteredUser . Однак Chipperyman відкинув цю відповідь CousinCocaine і оголосив відповідь переможцем зареєстрованого користувача ex æquo. Крім того, відповідь Зареєстрованого користувача є реплікою цієї відповіді від CousinCocaine. Це більш ніж несправедливо.
Ніколя Барбулеско,


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 читає рядок і перетворює його в ціле число


Ви можете зберегти одну таблицю, записавши її як поїзд ( (;:'one two blah')>@{~<:), а ще шість, скориставшись герундом one`two`blahзамість ;:.
Алгоритм

@algorithmshark Дякую! Я все ще навчаюсь J. Хоча, чи не вимагає версія поїзда текст нескінченного рангу (редагувати: мабуть, ні ... чому б і ні?), А додаткові цитати версії gerund (редагувати: о, це створює список ящики)?
seequ

Вилка може мати іменник у лівому аргументі, що є скороченням для константного дієслова, що виробляє цей іменник з нескінченним рангом (qv Словник ). І ні, зайвих лапок на герунді: невизначені імена трактуються як посилання на дієслова, а герунда для цього - лише рядок, який містить ім'я.
Алгоритм

Крім того, вам не потрібно писати версію 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]

Ваш перший сценарій не працює на моєму 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 char менше! ]


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 мають реалізацію ToString (), яка дає вам ім'я постійного значення. Ви можете кинути int на enum. Console.Read () читає символ із вхідного потоку, представленого як ціле число. набравши '1', ви отримаєте 49, підрезюме 48, щоб отримати 1, передайте HourOfDay, щоб повернути 'Один'.

Оскільки powershell робить ToString для всіх об'єктів, записаних у вихідний потік, і не потрібен пух, щоб перетворити це у виконуваний файл, це все, що потрібно, крім powerhell ...


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 .


1
Будь ласка, додайте коментар, якщо це викликає зворотний зв'язок.
aditsu


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, а вихід складається у вигляді файлу з назвою правильного числа.


2

Рубін 64

p %w?one two three four five six seven eight nine?[$*[0].to_i-1]

1
Ви можете нарізати ще кілька байтів, замінивши 9 безпосередньо на місці x
Містер Чужор

6
Я не бачу, куди вводиться цей код. І навіщо писати, 9-1коли можна просто сказати 8? Звичайно і те, 9-1і 8помиляються; цей сценарій весь час видає "дев'ять" і ігнорує введення.
Ray Toal

2

БАШ 9

безсоромна Linux-репліка відповіді cousincoicane

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.