Défi:
Dans le langage de programmation de votre choix, acceptez un entier comme entrée dans la base 10 et sortez-le dans la notation négadécimale , également connue sous le nom de base -10
Exemple d'algorithme:
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
De toute évidence, vous pouvez utiliser n'importe quel algorithme, tant qu'il répond au défi
Exemples d'entrées / sorties:
Contribution:
12
Production:
192
Un autre exemple:
Contribution:
2048
Production:
18168
Règle:
Vous ne devez pas utiliser de méthodes intégrées pour résoudre ce problème qui existent dans votre langage de programmation
C'est un code-golf , donc le code le plus court gagne!
code-golf
math
base-conversion
P. Ktinos
la source
la source
[0, 1, 8, 1, 6, 8]
une sortie acceptable pour l'entrée2048
?Réponses:
JavaScript (ES6),
514537 octetsCas de test
Afficher l'extrait de code
la source
Japt , 11 octets
Testez-le en ligne!
Explication
la source
Lot, 82 octets
La division de Batch est tronquée à zéro, donc si le reste est négatif, je dois ajouter 1 (et également ajouter 10 au reste) pour compenser. Les chiffres sont ensuite accumulés
%2
jusqu'à ce que le résultat devienne nul.la source
Gelée , 9 octets
Il s'agit d'un inverse de force brute de la conversion de nombres négatifs en nombres entiers.
Essayez-le en ligne!
Comment ça fonctionne
la source
Pyth - 9 octets
Lel, il y a des emoji qui pleurent.
Suite de tests .
la source
Python 3, 35 octets
Port Python de l' algorithme d' Arnauld .
Alternativement, pour 102 octets une fonction générique utilisant l'algorithme du poste d'origine:
la source
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
.k
oun
ailleurs dans le code?-n//10
ne-(n//10)
: nien
, puis divise le plancher par10
, qui arrondit vers l'infini négatif, pas 0. En revanche,0-n//10
fait0-(n//10)
, qui divise le premier étage par 10, puis nie. Pour une raison quelconque, Python traite la négation unaire avec une priorité plus élevée que le moins binaire. Voir ce tableau de priorité . J'ai déjà rencontré cette même situation avant de jouer au golf.Gelée , 10 octets
Essayez-le en ligne!
Contexte
La conversion d'une liste de valeurs non négatives de la base b en nombre entier peut être obtenue en repliant vers la gauche par la fonction x, y ↦ bx + y . Pour convertir un entier en base b , nous devons simplement inverser cette fonction, c'est-à-dire trouver une expression pour bx + y ↦ x, y .
En Python (et, par extension, Jelly), le résultat de l'opérateur modulo est toujours non négatif, donc (bx + y)% | b | = y .
De plus, la division entière arrondit toujours vers le bas, en s'assurant que si q = n / d et r = n% d , l'égalité n = qd + r est vérifiée . Si s est le signe de b , alors (sx) | b | + y = bx + y , donc sx = (bx + y) / | b | et, par conséquent, s ((bx + y) / | b |) = x.
Comment ça fonctionne
la source
SimpleTemplate , 147 octets
Il s'agit d'un langage de modèle sur lequel je travaille.
En aucun cas, il est destiné au golf.
Il manque même des mathématiques de base complètes, mais il permet d'écrire directement de minuscules extraits de PHP.
Cela fonctionne autour de ce problème.
Cela lance un tas d'avertissements.
Le code est "compilé" en PHP.
Non golfé, avec un espace pour les déchets:
Si nécessaire, une explication par étape peut être ajoutée, mais je pense que c'est assez simple.
Clause de non - responsabilité :
Le dernier commit, au moment de la rédaction de cette réponse, était le 2017-01-07 20:36 UTC + 00: 00.
Cela fonctionne sur commit 140e56ff38f45fa4fd40fd3ec382094e707b1bad du 2017-01-06 23:27 UTC + 00: 00.
C'est la version utilisée pour exécuter cette réponse.
Le code PHP est disponible sur https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707b1bad/SimpleTemplate.php
Je recommande de l'exécuter avec la dernière version, mais celle-ci fonctionne bien pour cette question.
Comment courir?
Créez un fichier avec le code et exécutez-le comme ceci:
La valeur sera alors affichée à l'écran.
la source
PHP,
7167 octetsou 62 octets pour un port de la réponse d'Arnauld :
la source
Mathematica, 49 octets
Définit une fonction
d
prenant un argument entier et retournant une chaîne. Un algorithme récursif - ressemble au même algorithme dans la réponse d'Arnauld . Cela fonctionne également sur les nombres négatifs. (Il retourne la chaîne vide au lieu de "0" si l'entrée est 0.) Remarque pour les golfeurs Mathematica: l'utilisation±
requiert un jeu de parenthèses supplémentaire et ne semble donc pas être plus courte.la source
C, 68 octets
Au lieu d'imprimer le numéro résultant, le programme le renvoie simplement. Évidemment, c'est la réponse d'Arnauld , la seule différence est que, puisque C n'est pas un langage interprété, je pensais que je devrais en faire un programme complet plutôt qu'une simple fonction.
la source
f
sort de la portée lorsque la fonction revient à moins que je sois vraiment stupide.Rouille, 88 octets
Ceci est juste une version récursive de l'algorithme fourni dans la question.
la source