Ординарная линия


Еженедельная задача 179

Задача, мое решение

Задача 1: Правописание порядковых чисел

Задача

Вам дано положительное число $n. Напишите скрипт для написания порядкового номера.

Мое решение

Это оказалось немного сложнее, чем я думал, особенно в некоторых крайних случаях. Конечно, существуют модули Python и Perl, которые уже делают это, но это не в духе решения подобных задач.

Я начинаю с определения четырех списков (массивов в Perl). numbers содержит слова для первых 19 чисел, так что один, два, три и т.д. tens содержит слова для двадцати, тридцати и т.д. Список ordinal содержит порядковые слова для первых 19 чисел, например, first, second, third. Наконец, список thousands содержит слова, которые мы используем для тысяч, миллионов и миллиардов. Я не обрабатываю ничего 1012 или больше.

Далее я разбиваю числа на блоки по три справа. Так 12345 становится [345, 12].

Затем нужно вывести слова для каждого блока.

  1. Если число равно 0 (например, средний блок в числе 1,000,234), ничего не делайте.
  2. Если число равномерно делится на 100, выведите слова для этого числа.
  3. Если число больше 100, выведите слова для числа сотен и слова ‘ и ‘. Измените число так, чтобы оно было остатком от 100.
  4. Если число больше 19, напечатайте слова для десятков и измените число на остаток от 10.
  5. Выведите число от одного до девятнадцати. Если это первый блок, используйте список ordinal, в противном случае используйте список numbers.
  6. Наконец, если это не первый блок, добавьте соответствующее тысячное слово.

Существует также крайний случай, когда решение делится на 100. В этом случае мы никогда не используем список ordinal. Когда это происходит, я добавляю строку ‘th’ в конец строки.

Во время написания этого блога я также понял, что мы также не печатаем порядковое слово, если число делится на 10 (кроме ста десяти). Я добавил некоторый код, чтобы справиться и с этим. К счастью, для всех слов tens мы можем заменить ‘y’ на ‘ieth’, чтобы получить нужное слово.

Затем нужно соединить все кусочки вместе, чтобы получить конечную строку.

Примеры

$ ./ch-1.py 11
eleventh

$ ./ch-1.py 62
sixty second

$ ./ch-1.py 99
ninety ninth
Войти в полноэкранный режим Выход из полноэкранного режима

Задание 2: Строка Юникода

Задача

Вам дан список положительных чисел @n.

Напишите скрипт, который будет печатать sparkline в Unicode для заданного списка чисел.

Мое решение

Прежде всего, я передаю атрибуты решения Rosetta Code под лицензией CC BY-SA 4.0.

К счастью, и Python 3, и Perl поддерживают юникод из коробки, поэтому нам не нужно делать ничего особенного для его поддержки.

Код определяет следующие переменные:

Затем он перебирает каждое значение @n и использует уравнение (n - mn) / extent * barcount, чтобы определить, какой бар нужно отобразить.

Примеры

$ ./ch-2.py 1 2 3 4 5 6 7 8
▁▂▃▄▅▆▇█

$ ./ch-2.py 1 8 2 7 3 6 10
▁▇▁▆▂▅█
Войти в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий