Цифровое слово - это слово, в котором после возможного удаления некоторых букв у вас остается одна из единичных цифр: ОДНА, ДВА, ТРИ, ЧЕТЫРЕ, ПЯТЬ, ШЕСТЬ, СЕМЬ, ВОСЕМЬ или ДЕВЯТЬ (не ноль).
Например, BOUNCE и ANNOUNCE являются цифрами, так как они содержат цифру один.
ENCODE не является цифровым словом, даже если оно содержит O, N и E, поскольку они не в порядке.
Напишите программу / функцию, которая принимает одно (прописное или строчное - вы выбираете) слово в качестве ввода или параметра и определяет, является ли оно цифровым словом. Сделайте код максимально коротким.
Если слово не является цифрой, вы должны вернуть «НЕТ», 0 или любое другое значение «ложь» (это может варьироваться в зависимости от вашего языка). Если слово является цифровым словом, вы должны вывести содержащуюся в нем цифру в виде числа.
Вы можете предположить, что никакие слова не содержат более одной цифры, поэтому у вас не будет ничего похожего на ONFIVE.
Тестовые случаи
BOUNCE
1
ENCODE
NO
EIGHT
8
BLACKJACK
NO
FABULOUS
NO
EXERCISE
NO
DRIFTWOOD
2
SERVICEMAN
7
INSIGNIFICANCE
9
THROWDOWN
2
ZERO
NO
OZNERO
1
Эта задача взята из (и является очень незначительной модификацией) Вопроса 1 из BIO 2009 . Большинство тестовых случаев взяты из схемы оценки .
NOFELINEVET
содержит как 5, так и 9 ... что я должен вернуть?0
в случае отсутствия цифр, даже если это не фальшиво на выбранном языке?Ответы:
Javascript (ES6),
10199 байтисточник
PHP> = 7,0, 87 байт
Если для ввода введены только символы из одной цифры в виде слова, выйдите из программы с этой цифрой. Или измените порядок, чтобы
levenshtein("DIGIT $argn",IntlChar::charName("$i"),1,1,0)
не считать удаления символовЛевенштейн
IntlChar :: CHARNAME
PHP> = 7,0, 112 байт
IntlChar :: CHARNAME
PHP, 128 байт
Попробуйте онлайн!
143 байта для более чем 1 цифры
Попробуйте онлайн!
источник
foreach(...)$r+=++$k*preg_match(...);echo$r?:NO;
(-1 байт).chunk_split($v,1,".*")
вместоjoin(...)
(-2 байта).chunk_split
я никогда не видел ее раньше. Вы должны сделать запись в разделе советовIntlChar::enumCharNames
... завтра.levenshtein()
похоже на работу<?for(;$i++<9;)levenshtein(IntlChar::charName("$i"),"DIGIT $argn",0,1,1)?:die("$i")?>NO
.Python 3, 150 байт
combinations
возвращает все комбинации вещей в порядке. Было бы проще иметь номер набора для второго параметраcombinations
, поэтому пробелы добавляются в конец исходной строки, которая является параметром моей лямбды. Это простое описание того, как работает моя запись. Спросите, не хотите ли вы еще разъяснений.источник
Mathematica, 83 байта (кодировка WindowsANSI)
Определяет унарную функцию,
±
которая принимает список символов нижнего регистра в качестве входных данных и возвращает либо цифру в форме{{7}}
, либо пустой список{}
. Я не чувствую, что сделал здесь кучу гольфов, за исключением того, чтоCharacters@*IntegerName~Array~9
генерирует совпадения имен и номеров, чтобы искать без жесткого их кодирования.Пример использования:
доходность
{{9}}
.источник
Желе ,
3128 байт-2 байта теперь, когда допустим ввод строчных букв
Полная программа, которая ожидает ввода строчных
0
букв и печатает результат, используя для случая фальси.Как монадическая ссылка, берущая список символов, она на самом деле возвращает список целых чисел, который содержит единственное число
0
в случае Фалси, одно целое число между1
и9
включительно в ожидаемых случаях использования и несколько таких записей в случаях, когда в слово.Попробуйте онлайн!
Как?
источник
Ruby + to_words :
4948 + 12 =6160 байтИспользует флаги
-rto_words -n
. Принимает строчные слова. Возвращает,nil
если "цифра" не найдена.-1 байт, теперь разрешен ввод в нижнем регистре, что позволяет убрать
i
флаг в регулярном выражении.Для более чистого ответа Ruby без внешних самоцветов 91 + 1 = 92 байта:
источник
05AB1E , 26 байт
Ложное значение здесь 0 .
Объяснение:
Использует кодировку 05AB1E . Попробуйте онлайн! или проверьте все контрольные примеры!
источник
Haskell,
113111 байтовПопробуйте онлайн!
Возвращает,
0
если цифра не найдена.Найдите все подпоследовательности входного слова в списке цифр. Добавить пустую строку
[]
с индексом 0, которая является частью каждой подпоследовательности.elemIndices
возвращает список индексов и=<<
объединяет их в единый список. Выберите последний индекс.источник
JavaScript (ES6), 121 байт
Возвращает наименьшую обнаруженную цифру или,
0
если цифра не обнаружена (+6, еслиNO
требуется).источник
Japt , 52 байта
Попробуйте онлайн!
источник
Сетчатка ,
160126120 байтПопробуйте онлайн!
Возвращает пустую строку, если на входе нет цифры.
-6 байт благодаря @CalculatorFeline .
источник
0
вместоNO
.PHP
134 132128 байтзапустить как трубу с
-nF
или попробуйте онлайн .Создает регулярное выражение со словами в скобках; т.е. каждое слово
N
находится вN
под-выражении th.Если слово найдено, соответствующая строка будет в
$m[0]
и вN
элементе th с элементами между ними пустыми и без пустой строки позади; т.е.$m
имеетN+1
элементы.источник
<?=preg_match("#(".strtr(chunk_split(ONE0TWO0THREE0FOUR0FIVE0SIX0SEVEN0EIGHT0NINE,1,".*"),[")|("]).")#",$argn,$m)?count($m)-1:NO;
Попробуйте онлайн!Python , 148 байт
Неименованная функция, принимающая только заглавные слова и возвращающая целое число (
1
to9
) или0
forNO
.Попробуйте онлайн!
Как?
Для входной строки
s
функция проходит через список строк:"x"
,"ONE"
,"TWO"
,"THREE"
,"FOUR"
,"FIVE"
,"SIX"
,"SEVEN"
,"EIGHT"
,"NINE"
, иs
. Сам ищут любые матчи *Используется сравнение, является ли эта строка
w
той, которая может быть сформирована из комбинации букв в порядке ввода. Функцияcombinations
получает их для нас (и только те, которые нужной длины, используяlen(w)
), но они имеют форму кортежей, поэтому строки сравниваются в кортежи для сравнения.Из одиннадцати результатов
"x"
всегда будетFalse
один для, а дляs
себя - всегдаTrue
. Здесь"x"
есть, чтобы убедиться, что индекс совпадения соONE
сквознымиNINE
значениями являются необходимыми (поскольку списки Python имеют 0-индексированный индекс), онs
служит для того, чтобы гарантировать, что вызовindex(1)
(синонимичныйindex(True)
) не завершится неудачно, когда не найдено ни одно цифровое слово, после чего результирующий10
преобразуется в по0
модулю десять с использованием%10
.* Если
s
по какой-либо причине содержит пробелы, списокw
s будет длиннее, но процесс все равно будет работать, так как совпадения с цифровым словом будут работать так же, а если ни одно из них не совпадает с первой подстрокой, разделенной пробелом,s
будет совпадать, еще раз давая10
и возвращаюсь0
.Если существуют многозначные слова, функция вернет минимальное.
источник
Java,
167153 байтаДовольно наивная реализация, соответствующая регулярному выражению.
Испытай и разгроми
Сохраняет
источник
"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")[i].split("")
непосредственно в цикле for и избавиться отString[]N=
и;
. И вы можете сохранить дополнительные 2 байта, изменив порядок цикла for:,for(int i=0;i<9;)
используйте[i++]
вместо[i]
if в проверке и избавьтесь от+1
возврата."".join
наs.join
.Баш , 163 байта
Попробуйте онлайн!
Не знаю РЕТИНА, но кажется, что это прямой ответ.
источник
*
это с,j=0;for i in ONE TWO .. ; do ((j++)); printf "%s)a=%s;;" $(sed 's/./\*&\*/g' <<<$i) $j ; done
но был дольшеJavascript, 121 байт
или 116
Но просто переработка материала на этом этапе.
источник
Pyth,-44-41 байтПринимает строку в кавычках, выводит 0 для NO.
Попытайся!
объяснение
источник
Java, 254 байта
Попробуйте онлайн
источник
C 198 байтов
Попробуйте онлайн
источник
Python 2, 155 байт
Анонимная функция поиска группы регулярных выражений. Не лучшее решение здесь в Python, но альтернативный способ.
источник