Напишите программу или функцию, которая, учитывая положительное целое число в качестве входных данных, выводит представление этого целого числа в числах майя .
Цифры майя
Цифры майя - это образная система (основание 20), использующая только 3 символа:
< >
для нуля (правильный символ - это своего рода оболочка, которую трудно представить с помощью ASCII)..
для одного----
для пяти
Числа записаны вертикально в степенях 20, а числа от 0 до 19 написаны как стеки по пять и единицы . Вы должны обратиться к статье Википедии для более подробной информации.
Например, вот цифры от 0 до 25, разделенные запятыми:
. .. ... ....
. .. ... .... ---- ---- ---- ---- ---- . . . . . .
. .. ... .... ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
< >, . , .. ,... ,....,----,----,----,----,----,----,----,----,----,----,----,----,----,----,----,< >, . , .. ,... ,....,----
входные
- Входные данные всегда являются положительными целыми числами от 0 до 2147483647 (2 ^ 31 - 1).
- Вы можете использовать входные данные из STDIN в качестве аргумента командной строки, параметра функции или чего-либо подобного.
Выходы
- Каждая строка длиной не более 4 символов.
< >
и----
всегда должен быть напечатан, как указано здесь (4 символа каждый). - Ones (
.
) должен быть центрирован на линии. Если их 1 или 3.
, поскольку идеальное горизонтальное выравнивание невозможно, не имеет значения, находятся ли они на один столбец слева или на один столбец справа или по центру. Должна быть ровно одна пустая строка между различными степенями 20, независимо от высоты стеков в степени 20 с. Например, правильные выходные данные для 25 и 30:
. . ---- ---- ----
Не допускаются ни ведущие, ни конечные линии.
Выходные данные должны быть напечатаны точно так же, как в приведенных примерах.
Контрольные примеры
Каждое отдельное число от 0 до 25 приведено в качестве примера выше.
Входные данные:
42
Выход:
..
..
- Входные данные:
8000
Выход:
.
< >
< >
< >
- Входные данные:
8080
Выход:
.
< >
....
< >
- вход:
123456789
Выход:
.
...
----
----
----
.
----
----
..
----
----
.
....
----
----
----
....
----
- Входные данные:
31415
Выход:
...
...
----
----
----
----
----
----
----
----
- Входные данные:
2147483647
Выход:
.
...
----
----
.
----
----
.
----
----
----
....
----
..
..
----
счет
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
источник
Ответы:
Pyth, 41 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
Perl,
125117 байтСпасибо Dom Hastings за помощь в экономии 8 байтов.
источник
redo,if(int($i/=20))
ты можешь использовать~~($i/=20)&&redo
.~~
преобразует в int - вы также можете использовать0|
в начале (или|0
в конце). Кроме того, заменаsubstr(".... ... .. . ",20-$i%5*5,5)
на,(' .', ' ..','...','.'x4)[$i%5-1].$/
кажется, работает нормально, но я не проверял все контрольные примеры ... Если они сработают, вы упадете до 114 ... Если я подумаю о чем-нибудь еще, чтобы поделиться, я дам вам знать!$-
которая всегда будет усечена до целого ... может сэкономить еще несколько!JavaScript ES6, 143 байта
Нагрузка байтов добавлена, потому что нужно
console.log
, может сохранить еще 23 байта без него.источник
Mathematica
185 182 171153Благодаря сохранению 18 байтов благодаря предложению Arcinde использовать анонимные функции,
пример
проверка
Десятичное число 31415, выраженное в базе 20. Mathematica использует строчные буквы для этого.
Десятичные цифры, соответствующие вышеуказанному основанию 20 числа.
Другой пример
источник
c=Column;c[If[#>0,{q,r}=#~QuotientRemainder~5;c@{{""," ."," .."," ...","...."}[[r+1]],c@{{""},{d="----"},{d,d},{d,d,d}}[[q+1]]},"< >"]&/@#~IntegerDigits~20]&
используя анонимные функции.JavaScript (ES6), 157 байт
Новые строки значимы и считаются по 1 байту каждая. Поскольку печать в STDOUT обязательна,
console.log
стоит мне несколько байтов.демонстрация
Для демонстрации я напишу версию ES5, чтобы она работала во всех браузерах:
источник
.join
скобка?Python 2.x, 142 байта:
Пример:
Редактировать: завершающая линия ...
источник
[n%20==0]
на[n%20<1]
. Во-вторых, измените[[""," "*(2-n%5/2)+"."*(n%5)+"\n"][n%5!=0]
наh=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1]
witha=n%5
, что перемещает всеn%5
s и изменяет условное*(a>0)
выражение, в которое возвращается пустая строкаa==0
для того же эффекта.a
,h
иn
на одной линии, например , так:a=n%5;h=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1];n/=20
. Все это должно оставить у вас 131 байт.CJam,
8276 байтМоя первая программа CJam, в основном, просто транслитерация моего Perl-ответа на CJam.
Попробуй онлайн
Многострочный с комментариями:
источник
PHP, 220 байт
Такой же подход, как мой ответ JavaScript. PHP имеет встроенные функции для всего.
Принимает 1 ввод из командной строки (т.е. STDIN), как видно с
$argv[1]
:источник
С - 149
Использует рекурсию для печати наиболее значимых чисел в первую очередь. Затем либо печатает ноль, либо печатает все точки одним умным
printf
и всеми пятерками в цикле. Я не уверен, смогу ли я избежать использования if-else здесь.Недостатком умного printf является то, что 1 и 3 не выровнены друг с другом:
Результат для 23 это:
119неправильное решение - завершающий перевод строкиисточник
PHP,
202192 байтаОн получает входные данные из первого аргумента командной строки.
Полный исходный код с комментариями и тестами доступен на github .
источник
\n
это два символа - но новая строка в середине строки - только один.Python 2, 114 байт
Этот ответ основан на ответе Pyak Якуба и ответе Python 2 Locoluis.
источник
Желе ,
504947 байтПопробуйте онлайн!
...
теперь выровнен по левому краю благодаря точке user202729.Когда вы обманываете себя мышлением
< >
, это палиндром ...источник
...
.
и..
должен быть пробел, поэтому я поставил один для...
. Есть ли более короткий путь?...
не должно быть правильное выравнивание. Просто поменять<4
на<3
?