Herausforderung:
Akzeptieren Sie in der Programmiersprache Ihrer Wahl eine Ganzzahl als Eingabe in Basis 10 und geben Sie sie in negadezimaler Notation aus , die auch als Basis -10 bezeichnet wird
Beispielalgorithmus:
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
Natürlich können Sie jeden Algorithmus verwenden, solange er die Herausforderung erfüllt
Beispiel Ein- / Ausgänge:
Eingang:
12
Ausgabe:
192
Ein anderes Beispiel:
Eingang:
2048
Ausgabe:
18168
Regel:
Sie dürfen keine in Ihre Programmiersprache integrierten Methoden verwenden, die dieses Problem lösen
Dies ist ein Code-Golf , also gewinnt der kürzeste Code!
code-golf
math
base-conversion
P. Ktinos
quelle
quelle
[0, 1, 8, 1, 6, 8]
eine akzeptable Ausgabe für die Eingabe2048
?Antworten:
JavaScript (ES6),
514537 BytesTestfälle
Code-Snippet anzeigen
quelle
Japt , 11 Bytes
Online testen!
Erläuterung
quelle
Batch, 82 Bytes
Die Teilung des Stapels wird auf Null gekürzt. Wenn der Rest negativ ist, muss ich zum Ausgleich 1 addieren (und auch 10 zum Rest addieren). Die Ziffern werden dann akkumuliert,
%2
bis das Ergebnis Null wird.quelle
Gelee , 9 Bytes
Dies ist eine Brute-Force-Umkehrung der Negadezimal-Ganzzahl-Umwandlung.
Probieren Sie es online!
Wie es funktioniert
quelle
Pyth - 9 Bytes
Lel es hat das Weinen Emoji drin.
Test Suite .
quelle
Python 3, 35 Bytes
Python-Port von Arnauld's Algorithmus.
Alternativ für 102 Bytes eine generische Funktion unter Verwendung des Algorithmus des ursprünglichen Posts:
quelle
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
.k
oder ann
anderer Stelle im Code?-n//10
does-(n//10)
: negaten
, then floor-divide by10
, was zur negativen Unendlichkeit abrundet, nicht 0.0-n//10
does0-(n//10)
, which first floor-divided by 10, then negates. Aus irgendeinem Grund behandelt Python unäre Negation mit einer höheren Priorität als binäres Minus. Siehe diese Rangfolge-Tabelle . Ich bin schon beim Golfen auf die gleiche Situation gestoßen.Gelee , 10 Bytes
Probieren Sie es online!
Hintergrund
Das Konvertieren einer Liste nicht negativer Werte von der Basis b in eine Ganzzahl kann durch Linksfaltung mit der Funktion x, y ↦ bx + y erfolgen . Um eine Ganzzahl in die Basis b umzuwandeln , müssen wir diese Funktion einfach umkehren, dh einen Ausdruck für bx + y ↦ x, y finden .
In Python (und damit Jelly) ist das Ergebnis des Modulo-Operators immer nicht negativ, also (bx + y)% | b | = y .
Außerdem wird die Ganzzahldivision immer abgerundet, um sicherzustellen, dass bei q = n / d und r = n% d die Gleichheit n = qd + r gilt. Wenn s das Vorzeichen von b ist , dann (sx) | b | + y = bx + y , also sx = (bx + y) / | b | und deshalb ist s ((bx + y) / | b |) = x.
Wie es funktioniert
quelle
SimpleTemplate , 147 Byte
Dies ist eine Vorlagensprache, an der ich gearbeitet habe.
Es ist keineswegs zum Golfen gedacht.
Es fehlt sogar die komplette Grundrechenart, aber es erlaubt winzige PHP-Ausschnitte direkt zu schreiben.
Dies funktioniert um dieses Problem herum.
Dies wirft eine Reihe von Warnungen.
Der Code wird in PHP "kompiliert".
Ungolfed, mit Trash Whitespace:
Bei Bedarf kann eine schrittweise Erklärung hinzugefügt werden, aber ich glaube, dass dies ziemlich einfach ist.
Haftungsausschluss :
Das letzte Commit war zum Zeitpunkt des Schreibens dieser Antwort am 2017-01-07 20:36 UTC + 00: 00.
Dies funktioniert bei Commit 140e56ff38f45fa4fd40fd3ec382094e707b1bad vom 2017-01-06 23:27 UTC + 00: 00.
Dies ist die Version, die zum Ausführen dieser Antwort verwendet wird.
Der PHP-Code ist unter https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707b1bad/SimpleTemplate.php verfügbar
Ich empfehle dies mit der letzten Version auszuführen, aber diese funktioniert gut für diese Frage.
Wie läuft man?
Erstellen Sie eine Datei mit dem Code und führen Sie sie folgendermaßen aus:
Der Wert wird dann auf dem Bildschirm angezeigt.
quelle
PHP,
7167 Bytesoder 62 Bytes für einen Port von Arnauld's Antwort :
quelle
Mathematica, 49 Bytes
Definiert eine Funktion,
d
die ein ganzzahliges Argument verwendet und eine Zeichenfolge zurückgibt. Ein rekursiver Algorithmus - sieht aus wie der gleiche Algorithmus in Arnauld's Antwort . Es funktioniert auch mit negativen Zahlen. (Es gibt die leere Zeichenfolge intsead von "0" zurück, wenn die Eingabe 0 ist.) Hinweis für Mathematica-Golfer: Die Verwendung±
erfordert einen zusätzlichen Satz von Klammern und scheint daher nicht kürzer zu sein.quelle
C 68 Bytes
Anstatt die resultierende Zahl zu drucken, gibt das Programm sie einfach zurück. Offensichtlich ist dies die Antwort von Arnauld. Der einzige Unterschied besteht darin, dass C keine interpretierte Sprache ist. Ich hatte das Gefühl, dass ich es zu einem vollständigen Programm machen sollte, anstatt nur zu einer Funktion.
quelle
f
verlässt den Gültigkeitsbereich, wenn die Funktion zurückkehrt, es sei denn, ich bin wirklich dumm.Rust, 88 Bytes
Dies ist nur eine rekursive Version des in der Frage angegebenen Algorithmus.
quelle