Была проблема с преобразованием числа в цифру на английском языке , но это было слишком просто. Для числа 0–100 ваша задача - вывести соответствующую цифру на французском языке. Французская система счисления имеет более сложную логику по сравнению с английской:
Номер цифра --------------- 0 зеро (обратите внимание на акцент) 1 ун 2 deux 3 тройки 4 кватра 5 фунтов 6 шесть 7 сентября 8 huit 9 новых 10 дикс 11 онзе 12 дуз 13 трейз 14 кватерза 15 лебед 16 захватить 17 Дикс-сент (буквально десять семь) 18 Дикс-Хуит 19 Дикс-Нёф 20 вингт 21 vingt et un (без дефисов) 22 вингт-де ... 30 трентов ... 40 каранте ... 50 cinquante ... 60 сойксанте ... 70 сойксанте-дикс (буквально шестьдесят десять) 71 soixante et onze ... 80 quatre-vingts (обратите внимание, буквально четыре двадцатых) 81 quatre-vingt-un (обратите внимание на дефисы) ... 90 quatre-vingt-dix 91 quatre-vingt-onze ... 99 quatre-vingt-dix-neuf (4 * 20 + 10 + 9) 100 центов
Для получения полного списка следуйте http://quizlet.com/996950/ ( http://www.webcitation.org/6RNppaJx0 ).
Дальнейшие правила / объяснения
- Между словами всегда будет дефис, за исключением того, что число заканчивается на 1.
- Когда число заканчивается на 1, слово et (означающее и ) добавляется перед un или onze . (31 = Тренте и др.)
- Однако 81 и 91 отформатированы так же, как и другие числа. (81 = quatre-vingt-un)
- В 60 система переключается с базы 10 на базу 20.
- В Интернете есть небольшие несоответствия по этому поводу; обратитесь к списку, связанному выше для вопросов.
- Лазейки, которые по умолчанию запрещены , не допускаются.
- Использование внешнего источника, такого как веб-сайт, а также любых библиотек, API, функций и т. П., Которые преобразуют числа в цифры или переводят на французский, недопустимо.
- Это код-гольф , поэтому выигрывает ответ с наименьшим количеством байтов.
- Если возможно, обратитесь к онлайн-компилятору, чтобы облегчить тестирование вашего кода.
вход
- Входные данные должны быть взяты из вашего языка. (STDIN, командная строка и т. Д.)
- Входные данные будут одной строкой, состоящей из целого числа от 0 до 100 включительно (начальные нули необязательны).
- Вы можете предположить, что входные данные всегда будут правильными.
Выход
- Результат будет выведен наиболее удобным для вас языком. (STDOUT, диалоговое окно и т. Д.)
- Дело не имеет значения в выводе.
Примеры
Протестируйте свой код на соответствие этим:
Ввод, вывод ------------- 0 зеро 18 Дикс-Хуит 51 cinquante et un 80 quatre-vingts 91 quatre-vingt-onze 99 quatre-vingt-dix-neuf
code-golf
number
kolmogorov-complexity
NinjaBearMonkey
источник
источник
Ответы:
JavaScript (ES6) 318
321Редактировать Исправлена ошибка (управление ведущими 0s) и golfed более
Кредит на верблюжий трюк @ Core1024
С вводом / выводом через всплывающее окно
В качестве тестируемой функции
Для тестирования в консоли FireFox или FireBug
Тестовый вывод
источник
Haskell, 390 байт
Ungolfed
Функциональные языки программирования вполне подходят для этой работы.
источник
main=interact$f.read
и сохранить несколько символов.interact
. Обновлено.Рубин, 333 байта
В основном это всего две справочные таблицы и куча троичных операторов, которые кодируют все странные правила и сообщают, какую справочную таблицу использовать, когда. Дайте мне знать, если вы хотите узнать больше. ;)
источник
80
должен вывести quatre-vingts, с s в конце.Python - 344
(348) (380) (445) (537)байтовСпасибо grc, Ray и isaacg за помощь в процессе игры в гольф.
Код состоит из начального определения словаря и понимания списка, которое заполняет пробелы соединением элементов словаря.
Вы можете проверить код онлайн на repl.it
Моими последними попытками использовать этот код был отказ от процесса генерации, и с этим сокращением я усовершенствовал функцию, чтобы просто генерировать запрошенное число на месте. Однако, поскольку числа 60 и 80-х нуждаются в неисчисляемых элементах, борьба заключалась в создании такой функции при уменьшении кода.
источник
r=range
, этот трюк для линий 2 и 3, и только одно место для отступа. И вы можете сэкономить 65 байт сd=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux ... quatre-vingt cent'.split()))
r=range
Трюк я был в курсе, но забыл добавить его , когда я написал 1 - й пересмотр. Все остальное было относительно новым для меня, так что спасибо в порядке. Обратите внимание, что код не работает на Python 3.x, если толькоprint
оператор не превращен в функцию, аr
функции в dict не превращены в списки.int(input())
,input()
достаточно.b=a/60*10+10
вf(a)
то вы можете использоватьa-a%b
иa%b
для словаря ключей. Кроме того, вам не нужно пространство1 or
, и 4-я строка может быть сокращена до[f(v)for v in r(100)if v not in d]
. Я не пробовал ничего из этого, хотя.if v not in d
->if(v in d)<1
сохраняет персонажа. Если вы разделяете точки с запятой двумя частями своей функции, вы можете поместить все это в одну строку.Python - 392 байта
У него есть список с базовыми числами, которые он использует для генерации других чисел. Большая часть логики генерации находится в понимании списка в строке 2 с использованием индексации списка для условных выражений. Как только список сформирован, он ищет введенный номер и печатает его.
Изменить: Сокращенный от 426 байтов, используя чаевые GRC.
источник
a='_un_deux_trois ... quinze_seize'.split('_')
Python 3, (503 байта)
Сожмите таблицу, используя bzip2, а затем используйте кодировку ascii85 для сохранения результата. Таблица является:
Очень наивный метод, но все не так плохо.
Golfed
Ungolfed
бонус
Можете ли вы найти слово "Vim" в сжатой строке?
источник
Sh0W
. Не могу найти Вим, как и ты.Bash,
456 440 421408Предполагается допустимый ввод (целое число от 0 до 100 с любым количеством ведущих нулей).
источник
JavaScript 459 (без корпуса верблюда)
@ edc65 не может отнять это у тебя ...;)
A="0un0deux0trois0quatre0cinq0six0sept0huit0neuf0dix0onze0douze0treize0quatorze0quinze0seize0dix-sept0dix-huit0dix-neuf".split(0);S="soixante";Q=A[4]+"-vingt";T=10;V=20;N=59;for(b=5;1<b--;)for(c=V;c--;)X=b*V+c,A[X]=[,["vingt","trente"],["quarante","cinquante"],[S,S],[Q,Q]][b][c/T|0]+(X%T?X>N?X%V==T?"-dix":"":"":"")+(1>X%T?"":(1==X%(X>N?V:T)|71==X)&81!=X?" et ":"-")+(X>N&X%V==T?"-dix":A[c%(X>N?V:T)]);A[0]="zéro";A[80]+="s";A[100]="cent";alert(A[prompt()])
источник