Desafio:
Na linguagem de programação de sua escolha, aceite um número inteiro como entrada na base 10 e envie-o na notação negadecimal , também conhecida como base -10
Exemplo de algoritmo:
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, você pode usar qualquer algoritmo, desde que cumpra o desafio
Exemplos de entradas / saídas:
Entrada:
12
Resultado:
192
Outro exemplo:
Entrada:
2048
Resultado:
18168
Regra:
Você não deve usar nenhum método interno que resolva esse problema existente na sua linguagem de programação
Este é um código de golfe , então o código mais curto vence!
code-golf
math
base-conversion
P. Ktinos
fonte
fonte
[0, 1, 8, 1, 6, 8]
uma saída aceitável para entrada2048
?Respostas:
JavaScript (ES6),
514537 bytesCasos de teste
Mostrar snippet de código
fonte
Japonês , 11 bytes
Teste online!
Explicação
fonte
Lote, 82 bytes
A divisão do lote é truncada para zero; portanto, se o restante for negativo, preciso adicionar 1 (e também adicionar 10 ao restante) para compensar. Os dígitos são acumulados
%2
até o resultado se tornar zero.fonte
Geléia , 9 bytes
Esta é uma inversão de força bruta da conversão negadecimal em número inteiro.
Experimente online!
Como funciona
fonte
Pitão - 9 bytes
Lel tem o emoji chorando nele.
Conjunto de Teste .
fonte
Python 3, 35 bytes
Porta Python do algoritmo de Arnauld .
Como alternativa, para 102 bytes, uma função genérica usando o algoritmo da postagem original:
fonte
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
.k
oun
em outro lugar do código?-n//10
faz-(n//10)
: negarn
, depois divide-se o piso por10
, que se aproxima do infinito negativo, e não 0. Em contraste,0-n//10
faz-se0-(n//10)
, que primeiro divide o andar por 10 e depois nega. Por qualquer motivo, o Python trata a negação unária com uma precedência mais alta que o menos binário. Veja esta tabela de precedência . Eu já tive essa mesma situação antes no golfe.Gelatina , 10 bytes
Experimente online!
fundo
A conversão de uma lista de não-negativos da base b para o número inteiro pode ser obtida dobrando-se à esquerda pela função x, y ↦ bx + y . Para converter e inteiro para base b , devemos simplesmente reverter essa função, ou seja, encontrar uma expressão para bx + y ↦ x, y .
No Python (e, por extensão, Jelly), o resultado do operador módulo é sempre negativo, portanto (bx + y)% | b | = y .
Além disso, a divisão inteira sempre arredonda para baixo, certificando-se de que, se q = n / d e r = n% d , a igualdade n = qd + r detém. Se s é o sinal de b , então (sx) | b | + y = bx + y , então sx = (bx + y) / | b | e, portanto, s ((bx + y) / | b |) = x.
Como funciona
fonte
SimpleTemplate , 147 bytes
Esta é uma linguagem de modelo em que estou trabalhando.
De maneira alguma é para o golfe.
Até falta matemática básica completa, mas permite escrever pequenos trechos de PHP diretamente.
Isso funciona em torno desse problema.
Isso lança um monte de avisos.
O código é "compilado" no PHP.
Sem golfe, com espaço em branco no lixo:
Se necessário, uma explicação passo a passo pode ser adicionada, mas acredito que seja bem direta.
Isenção de responsabilidade :
O último commit, no momento da redação desta resposta, era em 07-01-2017 20:36 UTC + 00: 00.
Isso funciona no commit 140e56ff38f45fa4fd40fd3ec382094e707b1bad de 06-01-2017 23:27 UTC + 00: 00.
Essa é a versão usada para executar esta resposta.
O código PHP está disponível em https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707b1bad/SimpleTemplate.php
Eu recomendo executar isso com a última versão, mas essa funciona bem para esta pergunta.
Como correr?
Crie um arquivo com o código e execute-o assim:
O valor será exibido na tela.
fonte
PHP,
7167 bytesou 62 bytes para uma porta da resposta de Arnauld :
fonte
Mathematica, 49 bytes
Define uma função
d
usando um argumento inteiro e retornando uma sequência. Um algoritmo recursivo - parece o mesmo algoritmo na resposta de Arnauld . Funciona também com números negativos. (Retorna a string vazia no cabeçalho de "0" se a entrada for 0.) Nota para jogadores do Mathematica: o uso±
requer um conjunto extra de parênteses e, portanto, parece não ser mais curto.fonte
C, 68 bytes
Em vez de imprimir o número resultante, o programa apenas o retorna. Obviamente, essa é a resposta de Arnauld , a única diferença é que, como C não é uma linguagem interpretada, senti que deveria torná-lo um programa completo, em vez de apenas uma função.
fonte
f
fica fora do escopo quando a função retorna, a menos que eu esteja sendo realmente burro.Ferrugem, 88 bytes
Esta é apenas uma versão recursiva do algoritmo fornecido na pergunta.
fonte