Codegolf - Счет По Слогам

  • Автор темы CasoinCax
  • Обновлено
  • 20, Oct 2024
  • #1

Предыстория

Меня всегда раздражало, что некоторые числа в английском языке имеют разное количество слогов, хотя в них одинаковое количество цифр. Пример:

 
 Input -> Output
10 -> 1 2 3 4 5 6 7 9 10
7 -> 1 2 3 4 5 6 7
8 -> 1 2 3 4 5 6 7
25 -> 1 2 3 4 5 6 7 9 10 11 14 16 18 20 22 25
 
has 2 syllables whereas all of the other digits have one (other than one hundred one ).

Итак, когда я считаю время на что-то (например, ритм тренировок у курсантов или в армии), это звучит не так приятно, потому что у вас есть случайный дополнительный слог.

Но, похоже, я нашел решение этой проблемы!

Вместо того, чтобы считать обычным способом, мы опускаем число 101 . That way, the second syllable of and несет туда, куда n would have been. So, we get the following:

i > n

Но большие числа считать таким способом сложно, поэтому мне нужна ваша помощь, чтобы создать программу, которая поможет мне определить, какие числа считать!

Подробности испытания

Вход

Входные данные будут представлены как одно положительное целое число. Для целей этой задачи вы можете предположить, что все числа меньше или равны s - 1 ( s ) Это потому, что в слове «квадриллион» другое количество слогов, чем в «миллионе», «миллиарде» и «триллионе», и мне нужно было где-то указать верхнюю границу. Поскольку, как отметил @HelkaHomba, большинство языков имеют ограничение на i which is somewhere around 4 billion, you can use your language's integer bound as the limit (this must be at least 1 million to be considered valid).

Выход

Вывод будет представлен в виде списка целых чисел (которые будут указаны ниже). Точное форматирование не будет указано, но если список легко увидеть и он не содержит повсюду произвольных чисел, он довольно гибок.

Что в списке

Практически, начиная с i , append i = 1 в список. Затем определите количество слогов в 2^32 (let this be 1 quadrillion - 1 ) и опустить следующий 999 999 999 999 999 numbers. Keep doing this until 1 2 3 4 5 6 7 8 9 10 one two three four five six se - ven nine ten где eight is the input.

Для целей этой задачи предположим, что слово seven is never present (so eight является zero ).

Тестовые случаи

seven

Кроме того, поскольку мне нужно иметь возможность носить это с собой на карточке-подсказке при подсчете вещей во времени, ваша программа должна быть как можно короче (в байтах)!

#код-гольф #номер

CasoinCax


Рег
19 Feb, 2014

Тем
84

Постов
206

Баллов
626
  • 26, Oct 2024
  • #2

Математика, 117 байт

 t 

Чистая функция, принимающая на вход неотрицательное целое число; он по одному выводит соответствующие целые числа на стандартный вывод.

В Mathematica вполне могла бы быть более короткая реализация, но эта ленивая :) t gives the English name of the integer t ; затем t=1 divides this name into a list of individual words. (Mathematically annoyingly uses the 3-byte character Length[Join@@(...)] (U+2010) для дефиса в именах целых чисел.) #~WordData~"Hyphenation"&/@ splits each of those words into a list of its syllables, and считает эти слоги.

Таким образом, функция после инициализации StringSplit[...,{"‐",", "," "}] , loops as long as t не превышает входной; каждый раз он печатает t~IntegerName~"Words" and then augments it by the number of syllables in the English name of For[t=1,t<=#,t+=Length[Join@@(#~WordData~"Hyphenation"&/@StringSplit[Echo@t~IntegerName~"Words",{"‐",", "," "}])]]& . В принципе этот алгоритм работает до 1036–1, после чего в словаре переносов нет записи для «ундециллиона».

 

Albina_hh


Рег
02 Sep, 2008

Тем
71

Постов
183

Баллов
578
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно