Преобразуйте строку, содержащую цифры как слова, в целое число, игнорируя начальные нули.
Примеры
"four two"
->42
."zero zero zero one"
->1
.
Предположения
Представленные материалы могут предполагать, что:
- Входная строка состоит из разделенных пробелами цифровых слов.
- Все слова действительны (в диапазоне «ноль» .. «девять») и строчные. Поведение для пустого ввода не определено.
- Входная строка всегда представляет число без знака в пределах диапазона
int
и никогда не является пустой строкой.
счет
Ответы будут оцениваться в байтах, причем меньшее количество байтов будет лучше.
code-golf
string
number
conversion
бенгальский огонь
источник
источник
range "zero".."nine"
не полностью определено.Interpreter@"SemanticNumber"
делает именно это в Mathematica, за исключением того, что он терпит неудачу в строках, начинающихся сzero zero
.Ответы:
PHP , 74 байта
Попробуйте онлайн!
Попытка получить решение, которое не копирует существующие ответы. Я получаю полином от контрольной суммы циклической избыточности 32-битной длины ( crc32 ) для каждого слова, а затем делаю мод 20 и мод 11, чтобы получить смешанные уникальные значения от 0 до 10 (пропущенные 6) для каждой цифры. Затем, используя это уникальное значение, я нахожу фактическую цифру.
Еще одна 74-байтовая альтернатива CRC32
%493%10
: попробуйте онлайн!Еще одна 74-байтовая альтернатива CRC32
%2326%11
: попробуйте онлайн!PHP , 74 байта
Попробуйте онлайн!
Другая альтернатива с такой же длиной принимает 22-й символ
md5
слова (единственный символ, который дает уникальное значение для каждого слова), а затем использует этот символ для сопоставления с цифрой.источник
Python 2 ,
7170 байт-1 благодаря ovs (используйте
find
вместоindex
)Попробуйте онлайн!
источник
JavaScript (ES6),
70 67 6662 байтаСохранено 3 байта благодаря @ovs
Попробуйте онлайн!
источник
'2839016547'[parseInt(s,36)%204%13]
на 3 байта короче.Желе ,
1917 байтМонадическая ссылка, принимающая список символов с целым числом.
Попробуйте онлайн!
В значительной степени порт моего ответа Python 2.
предыдущий
Попробуйте онлайн!
Существует
вполне возможноболее короткий путь, но это путь , который первым пришел на ум.источник
Python 3 ,
107,91,77, 90 байтов-16 байтов от Sriotchilism О'Зайк
+13 байт для удаления начальных нулей
Попробуйте онлайн!
источник
lstrip
Метод удаляет все символы в строке , которая дана как аргумент, так что «восемь два» становится «IGHT два», как «е» получают раздели. Также «ноль ноль ноль» должен выводить «0», а не выдавать ошибку.Perl 6 ,
3532 байтаПопробуйте онлайн!
объяснение
источник
C (gcc) , 89 байт
Попробуйте онлайн!
Благодаря умным трюкам @Ceilingcat:
источник
05AB1E ,
1816 байтПопробуйте онлайн.
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжимать строки, не являющуюся частью словаря? ), Чтобы понять, почему
.•ƒ/ÿßÇf•
это так"rothuvsein"
.источник
05AB1E ,
1716 байтПопробуйте онлайн!
Идеальная связь с другим ответом 05AB1E , но с совершенно другим подходом.
источник
Сетчатка 0.8.2 ,
4645 байтПопробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Поместите каждое слово в отдельную строку и продублируйте его.
Транслитеруйте 7-й символ каждой строки, используя строку @ UnrelatedString.
Удалите все оставшиеся нецифровые символы.
Удалить начальные нули (но оставить хотя бы одну цифру).
Предыдущее 46-байтовое более традиционное решение:
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Слова
zero
,two
,four
,six
иeight
однозначно содержат буквыzwuxg
. Транслитеруйте их в четные цифры.Для нечетных цифр, просто сопоставьте первые две буквы каждого слова в отдельности.
Удалите все оставшиеся нецифровые символы.
Удалить начальные нули (но оставить хотя бы одну цифру).
источник
Желе ,
201817 байтПопробуйте онлайн!
-2 байта от запуска "rothuvsein" через строковый компрессор user202729 .
-1 байт от кражи строки enklact Джонатана Аллана без нуля и помещения ее в несколько иначе структурированную программу.
источник
C ++ (gcc) ,
478218142 байта- (очень) благодаря Джо Кингу
Попробуйте онлайн!
источник
Japt , 13 байт
Попытайся
Похоже, что все остальные опровергли мою идею - я мог бы избавить себя от необходимости писать сценарий для грубой силы оптимальной строки для сжатия, только чтобы найти это, вплоть до индекса
1,000,000
(это было рано, у меня не было моего кофеина пока нет!) "rothuvsein" - единственно возможная нить!Сжатый строка содержит символы в кодовых
206
,168
,117
,118
,160
и136
.источник
Рубин ,
63 байта,52 байта, 50 байтов-2 благодаря ценному наконечнику чернил
источник
$*
это псевдонимARGV
, так что не стесняйтесь использовать его, чтобы сэкономить дополнительные байты.T-SQL, 110 байт
Разрыв строки предназначен только для удобства чтения.
Ввод осуществляется через таблицуя , В соответствии с нашими правилами ввода - вывода . Я мог бы сохранить 14 байтов, предварительно заполнив строковую переменную, но это допустимо, только если у языка нет других методов ввода.
Объяснение:
STRING_SPLIT
берет входную строку и разделяет ее в пробелахCHARINDEX
берет первые 2 символа и возвращает (основанную на 1) позицию в строке'_ontwthfofisiseeini'
.'ze'
для нуля нет в строке и возвращает 0 для "не найден". Подчеркивание гарантирует, что мы получим кратные только два.STRING_AGG
разбивает цифры обратно без разделителя0+
вызывает неявное преобразование в INT и удаляет все начальные нули.1*
также будет работать.источник
машинный код x86, 46 байт
HexDump:
Это
fastcall
функция - получает указатель на строку вecx
и возвращает результат вeax
.Функция хеширования умножается на магическое число
1856645926
, выполняетXOR
ввод входного байта и сдвигает вправо на 2 бита.Сохранение и восстановление регистров noclobber (
edi
иebx
) заняло 4 байта, но я не нашел более эффективного способа реализовать это. Хранение постоянной 10 вebx
было особенно раздражающим!Разборка с соответствующими байтами кода:
Эквивалентный код C:
источник
Чисто , 88 байт
Попробуйте онлайн!
Тяжело основанный на ответе Джонатана Аллана .
Использует понимание для индексации вместо
indexOf
/elemIndex
.источник
J , 38 байт
Попробуйте онлайн!
источник
Древесный уголь , 19 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Порт @ KevinCruijssen's 05AB1E ответа. Объяснение:
источник
PowerShell , 48 байт
Попробуйте онлайн!
Использует тот же
rothuvsein
трюк, что и другие, благодаря Джонатану Аллану. Ожидает входные аргументы через splatting, который в TIO проявляется как отдельные аргументы командной строки.источник
Котлин, 83 байта
+1 байт, если вы хотите поддерживать длинные
toLong()
Тот же трюк rothuvsein, как и у других, экономя некоторые драгоценные байты благодаря Kotlin's nice
toInt()
иfold()
. Я просто не могу избавиться от ощущения, что можно сбрить еще несколько байтов ...источник
sed -re , 78 байт
источник
Пакет Windows, 169 байт
источник
Perl 6 , 45 байт
Попробуйте онлайн!
источник
VBA, 160 байт
Соответствует первым двум символам в строке, исключая ноль.
источник
Бакон ,
8372 байтаПредполагая, что строка указана в w $, этот код ищет индекс в «zeontwthfofisiseeini», используя регулярное выражение, основанное на уникальных первых 2 символах каждого слова. Индекс затем делится на 2, обеспечивая правильный результат.
источник