Desafío:
En el lenguaje de programación que elija, acepte un número entero como entrada en la base 10 y emítalo en la notación negadecimal , que también se conoce como base -10
Algoritmo de ejemplo:
Function toNegativeBase(Number As Integer , base As Integer) As System.Collections.Generic.List(Of Integer)
Dim digits As New System.Collections.Generic.List(Of Integer)
while Number <> 0
Dim remainder As Integer= Number Mod base
Number = CInt(Number / base)
if remainder < 0 then
remainder += system.math.abs(base)
Number+=1
end if
digits.Insert(0, remainder)
end while
return digits
end function
Obviamente, puede usar cualquier algoritmo, siempre que cumpla el desafío
Ejemplo de entradas / salidas:
Entrada:
12
Salida:
192
Otro ejemplo:
Entrada:
2048
Salida:
18168
Regla:
No debe usar ningún método incorporado que resuelva este problema que exista en su lenguaje de programación
Este es un código de golf , por lo que gana el código más corto.
code-golf
math
base-conversion
P. Ktinos
fuente
fuente
[0, 1, 8, 1, 6, 8]
Sería una salida aceptable para la entrada2048
?Respuestas:
JavaScript (ES6),
514537 bytesCasos de prueba
Mostrar fragmento de código
fuente
Japt , 11 bytes
¡Pruébalo en línea!
Explicación
fuente
Lote, 82 bytes
La división de Batch se trunca a cero, por lo que si el resto es negativo, necesito agregar 1 (y también agregar 10 al resto) para compensar. Los dígitos se acumulan
%2
hasta que el resultado sea cero.fuente
Jalea , 9 bytes
Esta es una inversa de fuerza bruta de conversión de negadecimal a entero.
Pruébalo en línea!
Cómo funciona
fuente
Pyth - 9 bytes
Lel tiene el emoji llorando.
Test Suite .
fuente
Python 3, 35 bytes
Puerto de Python del algoritmo de Arnauld .
Alternativamente, para 102 bytes, una función genérica que utiliza el algoritmo de la publicación original:
fuente
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
.k
on
en otra parte del código?-n//10
does-(n//10)
: niegan
, luego floor-divide entre10
, que se redondea hacia el infinito negativo, no 0. En contraste,0-n//10
does0-(n//10)
, que primero floor-divide por 10, luego niega. Por alguna razón, Python trata la negación unaria con mayor precedencia que el binario menos. Ver esta tabla de precedencia . Me he encontrado con esta misma situación antes en el golf.Jalea , 10 bytes
Pruébalo en línea!
Antecedentes
La conversión de una lista de no negativo de base b a entero se puede lograr doblando a la izquierda mediante la función x, y ↦ bx + y . Para convertir y un entero a base b , simplemente debemos invertir esa función, es decir, encontrar una expresión para bx + y ↦ x, y .
En Python (y, por extensión, Jelly), el resultado del operador de módulo siempre es no negativo, entonces (bx + y)% | b | = y .
Además, la división entera siempre se redondea hacia abajo, asegurándose de que si q = n / d y r = n% d , se mantenga la igualdad n = qd + r . Si s es el signo de b , entonces (sx) | b | + y = bx + y , entonces sx = (bx + y) / | b | y, por lo tanto, s ((bx + y) / | b |) = x.
Cómo funciona
fuente
SimpleTemplate , 147 bytes
Este es un lenguaje de plantilla en el que he estado trabajando.
De ninguna manera está destinado a jugar al golf.
Incluso carece de matemática básica completa, pero permite escribir pequeños fragmentos de PHP directamente.
Esto funciona alrededor de ese problema.
Esto arroja un montón de advertencias.
El código se "compila" en PHP.
Sin golf, con espacio en blanco de basura:
Si es necesario, se puede agregar una explicación paso a paso, pero creo que es bastante sencillo.
Descargo de responsabilidad :
La última confirmación, al momento de escribir esta respuesta, fue en 2017-01-07 20:36 UTC + 00: 00.
Esto funciona en commit 140e56ff38f45fa4fd40fd3ec382094e707b1bad desde 2017-01-06 23:27 UTC + 00: 00.
Esa es la versión utilizada para ejecutar esta respuesta.
El código PHP está disponible en https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707b1bad/SimpleTemplate.php
Recomiendo ejecutar esto con la última versión, pero esa funciona bien para esta pregunta.
¿Como correr?
Cree un archivo con el código y ejecútelo así:
El valor se mostrará en la pantalla.
fuente
PHP,
7167 byteso 62 bytes para un puerto de la respuesta de Arnauld :
fuente
Mathematica, 49 bytes
Define una función que
d
toma un argumento entero y devuelve una cadena. Un algoritmo recursivo: se parece al mismo algoritmo en la respuesta de Arnauld . Funciona también en números negativos. (Devuelve la cadena vacía entre comillas de "0" si la entrada es 0.) Nota para los golfistas de Mathematica: el uso±
requiere un conjunto adicional de paréntesis y, por lo tanto, no parece ser más corto.fuente
C, 68 bytes
En lugar de imprimir el número resultante, el programa simplemente lo devuelve. Obviamente, esta es la respuesta de Arnauld , la única diferencia es que, dado que C no es un lenguaje interpretado, sentí que debería convertirlo en un programa completo en lugar de solo una función.
fuente
f
sale del alcance cuando la función regresa a menos que sea realmente tonto.Óxido, 88 bytes
Esta es solo una versión recursiva del algoritmo proporcionado en la pregunta.
fuente