Если задано целое число n ≥ 0, выведите его в непозиционной записи base-3, используя цифры 139ABCDE…
и разделитель из 1 символа. Каждая цифра является последовательной степенью 3, а цифры на левой стороне разделителя обнуляются , например, A931 | B → 81– (1 + 3 + 9 + 27) → 41 . Цифра может появиться только один раз.
Строго говоря, пусть значение цифры будет:
- его значение, если цифра 1, 3 или 9
- 27, если цифра
A
- 3 раза значение цифры прямо перед ней для
B
..Z
Ваш вывод должен удовлетворять sum (значение цифр справа от |
) - sum (значение цифр слева от |
) == input .
Примеры
input output
----------------
0 |
1 |1
7 3|91
730 |D1
9999 FEDC|GA9
Вы можете использовать другой непробельный символ в качестве разделителя. Вам также разрешено не иметь разделителя, и в этом случае наибольшая цифра начинает положительную последовательность. Вам не нужно обрабатывать что-либо больше, чем 2 32 -1 ( PMIGDCBA9|RQNLH3
).
Вы можете написать полную программу или функцию, а ввод и вывод могут быть предоставлены на любом из обычных каналов.
Это код-гольф , поэтому чем короче ваш ответ, тем лучше!
источник
|
а позитивы справа от него.Ответы:
Java 10,
120113112109107102 байта-3 байта, используя часть хитрости ответа @Arnauld 's JavaScript (ES6) ,
изменяя
i=0
иi++<1?49:i<3?51:i<4?57:i+61
наi=4
и++i>9?i+55:i>8?57:++i+43
.-6 байт благодаря @Arnauld напрямую, избавившись от
i
.Порядок вывода: от наивысшего к низшему,
|
-делимитер, от низшего к высшему.Объяснение:
Попробуйте онлайн.
источник
r
в тело цикла. Благодарность!i
и когда вы снова использовалиc
)?p=1
и не включать*1
его, хотя это и не приводит к лучшей формуле в этом случае.)Python 3 ,
1039991 байт4 байта благодаря Линн.
8 байт благодаря овс.
Попробуйте онлайн!
Кредиты для XNOR для логики.
источник
JavaScript (ES6),
828079 байтВывод в нижнем регистре, который, надеюсь, будет в порядке.
Попробуйте онлайн!
Похоже на ответ прохудшего «Мастера ниндзя», а также на основе ответа xnor .
Цифровое преобразование
Начнем с к = 4 . Хотя k меньше 9 , мы увеличиваем его дважды на каждой итерации и вычитаем 5 . После этого мы увеличиваем его только один раз и конвертируем в base-36.
источник
Желе , 26 байт
Попробуйте онлайн!
Используйте новую строку в качестве разделителя.
источник
Perl 6 , 80 байт
Попробуйте онлайн!
Нет разделителя. Основано на ответе xnor .
источник
Stax ,
3029 байтЗапустите и отладьте его
Порт моего Stax ответа в Balanced Ternary Converter .
объяснение
Использует распакованную версию для объяснения.
источник
C # .NET, 103 байта
Порт моего Java 10 ответа . Если бы был возможен прямой порт (кроме
n->
ton=>
), я бы отредактировал свой ответ на Java с помощью этого полиглота. К сожалению, однако,c+=
на символах или не иметьc=49
возможности в C #, следовательно, этот свободный портированный ответ.Попробуйте онлайн.
источник
Perl 5
-p
,7169 байтне использует разделитель. Отрицательные и положительные части находятся в «римском порядке» (наибольшая цифра первая)
Попробуйте онлайн!
источник
Рубин ,
878482 байтаСохранено 2 байта благодаря @ benj2240.
Попробуйте онлайн!
источник
redo
хитростью: попробуйте онлайн!J , 129 байт
Попробуйте онлайн!
Слишком долго, особенно для программы J ...
Объяснение:
источник
C
int
:138123 байтаlong
:152131 байтаЯ создал две версии этого, так как предел трудностей при максимальном рабочем входе
0x100000000
казался немного странным. Одна версия работает с 32-битными целыми числами (что по понятным причинам выходит за пределы ограничения), другая версия работает с 64-битными значениями (что выходит за рамки заданного ограничения за счет148 дополнительных байтов).32-битная версия:
64-битная версия:
Это идентично, за исключением того, что оно объявляет целочисленную переменную
long
(которая в Linux равна 64 битам).Негольфированная
long
версия:Как вы можете видеть, это работает по принципу рекурсивного приличия: если остаток равен 1, соответствующий символ добавляется к выходной строке после рекурсивного вызова. Если остаток равен 2, вывод выполняется перед рекурсией. В этом случае я также увеличиваю значение на единицу, чтобы правильно обрабатывать отрицательную цифру. Это имеет дополнительное преимущество, заключающееся в изменении остатка на ноль, что позволяет мне использовать его
value%3
как условие для пострекурсии if.Результат преобразования помещается в глобальный буфер.
g()
Обертка имеет работу нуля завершающие получившуюся строку правильно, и чтобы сброситьresult
указатель на его начало (что и какg()
«возвращает» результат).Проверьте
long
версию с этим кодом:Возможно дальнейшее, но деструктивное гольфирование:
-4 байта: сделать функцию однократной, удалив сброс указателя в
g()
.-5 байт: заставить вызывающего выполнить завершение строки, возвращая строку без завершения в
buffer
и конец строки вresult
.источник
Древесный уголь , 36 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите значение.
Переместите три пустых списка в предварительно определенный пустой список.
Переберите символы
139
и заглавные буквы.Циклически индексируйте список списков со значением и вставляйте в него текущий символ.
Разделите значение на 3, но округлите его, сначала добавив 1.
Цикл дважды. Второй раз выведите a
|
.В каждом цикле мы выскакиваем последнюю запись из списка; в первый раз это дает нам записи, у которых есть остаток от
2
(который соответствует сбалансированной троичной цифре-1
), в то время как во второй раз это дает нам записи, соответствующие сбалансированной троичной цифре в1
. Результирующий массив обычно печатается вертикально, но поворот направления печати вверх отменяет это.источник
J ,
69 6458 байтПопробуйте онлайн!
источник
Perl 5 ,
9289 байтВдохновленный ответами Java и Python.
Попробуйте онлайн!
С некоторым пробелом:
источник
PHP, 73 байта
порт ответа xnor , 53 байта
Запустите как трубу с
-nr
или попробуйте их онлайн .источник