Dado un número entero n ≥ 0, imprímalo en una notación de base-3 no posicional, usando dígitos 139ABCDE…
y un separador de 1 carácter. Cada dígito es una potencia consecutiva de 3 y los dígitos en el lado izquierdo del separador se niegan, por ejemplo, A931 | B → 81− (1 + 3 + 9 + 27) → 41 . Un dígito puede aparecer solo una vez.
Rigurosamente, deje que el valor de un dígito sea:
- su valor si el dígito es 1, 3 o 9
- 27 si el dígito es
A
- 3 veces el valor del dígito justo delante de él para
B
...Z
Su salida debe satisfacer la suma (valor de dígitos a la derecha de |
) - suma (valor de dígitos a la izquierda de |
) == entrada .
Ejemplos
input output
----------------
0 |
1 |1
7 3|91
730 |D1
9999 FEDC|GA9
Puede usar un carácter diferente que no sea espacio como separador. También se le permite no tener separador, en cuyo caso el dígito más grande comienza la secuencia positiva. No necesita manejar nada más grande que 2 32 −1 ( PMIGDCBA9|RQNLH3
).
Puede escribir un programa o función completa, y la entrada y la salida se pueden proporcionar en cualquiera de los canales habituales.
Este es el código de golf , así que cuanto más corta sea su respuesta, mejor.
fuente
|
y los positivos a la derecha.Respuestas:
Java 10,
120113112109107102 bytes-3 bytes usando parte del truco de la respuesta de JavaScript de @Arnauld (ES6) ,
cambiando
i=0
yi++<1?49:i<3?51:i<4?57:i+61
haciai=4
y++i>9?i+55:i>8?57:++i+43
.-6 bytes gracias a @Arnauld directamente, al deshacerse de él
i
.Orden de salida: de mayor a menor,
|
delimitador, de menor a mayor.Explicación:
Pruébalo en línea.
fuente
r
el cuerpo del bucle. ¡Gracias!i
y cuándo los reutilizasc
)?p=1
incluirlo y no incluirlo*1
en el código, aunque no conduzca a una mejor fórmula en ese caso.)Python 3 ,
1039991 bytes4 bytes gracias a Lynn.
8 bytes gracias a los ovs.
Pruébalo en línea!
Créditos a xnor por la lógica.
fuente
JavaScript (ES6),
828079 bytesSalidas en minúsculas, que con suerte deberían estar bien.
Pruébalo en línea!
Similar a la respuesta de Nun Leaky "Ninja Master" y también basada en la respuesta de xnor .
Conversión de dígitos
Comenzamos con k = 4 . Mientras k es menor que 9 , lo incrementamos dos veces en cada iteración y restamos 5 . Después de eso, lo incrementamos solo una vez y lo convertimos a base-36.
fuente
Jalea , 26 bytes
Pruébalo en línea!
Use una nueva línea como separador.
fuente
Perl 6 , 80 bytes
Pruébalo en línea!
Sin separador Basado en la respuesta de xnor .
fuente
Stax ,
3029 bytesEjecutar y depurarlo
El puerto de mi respuesta Stax en Balanced Ternary Converter .
Explicación
Utiliza la versión desempaquetada para explicar.
fuente
C # .NET, 103 bytes
Puerto de mi respuesta Java 10 . Si un puerto directo (excepto para
n->
an=>
) hubiera sido posible, habría editado mi respuesta Java con este políglota. Desafortunadamente,c+=
en caracteres o tenerc=49
no es posible en C #, por lo tanto, esta respuesta suelta portada.Pruébalo en línea.
fuente
Perl 5
-p
,7169 bytesno utiliza separador Las partes negativa y positiva están en "orden romano" (el dígito más grande primero)
Pruébalo en línea!
fuente
Rubí ,
878482 bytesGuardado 2 bytes gracias a @ benj2240.
Pruébalo en línea!
fuente
redo
truco: ¡ Pruébalo en línea!J 129 bytes
Pruébalo en línea!
Demasiado largo, especialmente para un programa J ...
Explicación:
fuente
C,
int
:138123 bytes,long
:152131 bytesHe creado dos versiones de esto, ya que el límite de los desafíos de una entrada máxima de trabajo de
0x100000000
parecía un poco extraño. Una versión funciona con enteros de 32 bits (que falla el límite por razones obvias), la otra versión funciona con 64 bits (que va mucho más allá del límite dado, a un costo de148 bytes adicionales).Versión de 32 bits:
Versión de 64 bits:
Esto es idéntico, excepto que declara que la variable entera es
long
(que es de 64 bits en Linux).La
long
versión sin golf :Como puede ver, esto funciona por recursivo decente: si el resto es 1, el carácter respectivo se agrega a la cadena de salida después de la llamada recursiva. Si el resto es 2, la salida se realiza antes del recursivo. En este caso, también incremento el valor en uno para manejar el dígito negativo correctamente. Esto tiene el beneficio adicional de cambiar el resto a cero, lo que me permite usarlo
value%3
como condición para el post-recursión if.El resultado de la conversión se coloca en el búfer global. El
g()
reiniciador tiene el trabajo de cero terminando la cadena resultante correctamente, y para restablecer elresult
puntero a su inicio (que también es cómog()
"devuelve" el resultado).Prueba la
long
versión con este código:Posible más, pero golf destructivo:
-4 bytes: haga que la función sea única eliminando el reinicio del puntero
g()
.-5 bytes: obligan al llamante a realizar la terminación de la cadena, devolviendo la cadena sin terminación
buffer
y el final de la cadenaresult
.fuente
Carbón , 36 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Ingrese el valor.
Empuje tres listas vacías a la lista vacía predefinida.
Recorre los caracteres
139
y el alfabeto en mayúsculas.Indice cíclicamente la lista de listas con el valor y envíele el carácter actual.
Divide el valor entre 3 pero redondea agregando 1 primero.
Bucle dos veces. La segunda vez, imprime a
|
.Cada bucle sacamos la última entrada de la lista; la primera vez esto nos da las entradas que tenían un resto de
2
(que corresponde a un dígito ternario balanceado de-1
), mientras que la segunda vez nos da las entradas correspondientes a un dígito ternario balanceado de1
. La matriz resultante normalmente se imprimiría verticalmente, pero al girar la dirección de impresión hacia arriba se cancela.fuente
J ,
69 6458 bytesPruébalo en línea!
fuente
Perl 5 ,
9289 bytesInspirado en las respuestas de Java y Python.
Pruébalo en línea!
Con algo de espacio en blanco:
fuente
PHP, 73 bytes
respuesta del puerto de xnor , 53 bytes
Ejecutar como tubería
-nr
o probarlos en línea .fuente