Wenn Sie eine binäre Ganzzahl einschließlich zwischen 0
und 1111111111111111
(dh eine 16-Bit-Ganzzahl ohne Vorzeichen) als Eingabe angeben , geben Sie dieselbe Ganzzahl in negabinärer Form aus .
Die Eingabe kann in einem für Ihre Sprache am besten geeigneten Format erfolgen. Wenn es für das Programm beispielsweise einfacher ist, Eingaben mit 16 Ziffern zu verarbeiten, 0000000000000101
als einfach 101
, können Sie das Programm so schreiben, dass Eingaben nur auf diese Weise akzeptiert werden.
Beispiel-E / A
> 1
1
> 10
110
> 1010
11110
> 110111001111000
11011001110001000
> 1001001
1011001
Hier ist ein Beispielprogramm, das ich geschrieben habe und das Basisumwandlungen ausführt, einschließlich negativer und nicht ganzzahliger Basen. Sie können es verwenden, um Ihre Arbeit zu überprüfen.
code-golf
binary
base-conversion
Peter Olson
quelle
quelle
0
s und1
s. Sieht für mich klar aus, aber eine Antwort lässt mich leicht zweifeln ...Antworten:
APL, 21 Zeichen
Ich habe dafür Dyalog APL mit dem Wert
⎕IO
0 verwendet, um Arrays zu indizieren, die bei 0 anstatt bei 1 beginnen.Erklärung von rechts nach links:
⍞
gibt uns die Eingabe des Benutzers als Zeichenvektor.⍎¨
Wendet die Ausführungsfunktion (⍎
) auf jedes (¨
) der oben genannten Zeichen an, was zu einem Vektor aus ganzzahligen Einsen und Nullen führt.2⊥
decodiert den Vektor von der Basis 2 in eine Dezimalzahl.-
negiert die resultierende Dezimalzahl.(16/¯2)⊤
kodiert die Dezimalzahl in Basis¯2
(negativ 2). (16/¯2
Replikaten¯2
,16
Zeiten, wodurch man 16 Stellen in unserer negabinary Nummer.)-
negiert jedes Element unserer neu codierten Zahl (vorher besteht es aus -1 und 0), damit wir damit unseren Zeichenvektor indizieren können.'01'[ ... ]
Indiziert das Zeichenarray ('01'
) mit den Nullen und Einsen des negierten Negabinärvektors. Dadurch erhalten wir eine schönere Ausgabe.Beispiel:
quelle
Ruby,
3231 ZeichenVerwendet die Negabinary-Berechnungsverknüpfung .
quelle
gets
Schlüsselwort, das von STDIN abgerufen wird.GolfScript,
342927 ZeichenEin geradliniger Ansatz. Es ist ziemlich interessant, dass die kürzeste Version diejenige ist, die zuerst in Zahl und dann wieder in Basis -2 konvertiert wird (zumindest die kürzeste Version, die ich bisher finden konnte). Aber das Schöne an diesem ist, dass es fast 15% enthält
%
.Edit 1: Für Base 2 können wir eine Modulo-Operation speichern und auch beide Loops verbinden.
Edit 2: Ich habe einen noch kürzeren Code gefunden, um eine Binärzeichenfolge in eine Ganzzahl umzuwandeln.
quelle
Haskell,
8683 BytesRufen Sie mit c und dann ein ganzzahliges Array für Ziffern auf, z
PS: Ich bin neu, habe ich das richtig eingereicht?
BEARBEITEN: Einige Bytes wurden dank Laikoni gespeichert und einige Tippfehler behoben
EDIT2: Alternativ c :: String -> String:
Für 114 Bytes (aber Sie nennen es mit einem String: c "11")
quelle
undigits 2 n
, da die Funktionsanwendung stärker bindet als die+m
. Sie können auch durch Bindung einige Bytes speichernm
in einer Wache:c n|m<-0xAAAAAAAA= ...
.Python (2.x), 77 Zeichen
(Nicht so kurz wie die anderen Lösungen, da die Basis manuell gewechselt werden muss ...) Sollte die Anforderungen erfüllen.
Vorschläge für weitere Verbesserungen sind willkommen!
Füttere es mit folgenden Startwerten:
0b1001001
quelle
JavaScript, 68 Bytes
In ES6 wären es 52 Byte, aber das ist die Herausforderung nach dem Datum:
quelle
Jelly , 4 Bytes, Sprachnachstellung
Probieren Sie es online!
Übernimmt die Eingabe und erzeugt die Ausgabe als Ziffernliste.
Erläuterung
Dies ist so ziemlich nur eine direkte Übersetzung der Spezifikation.
quelle
k, 17 Bytes nicht konkurrierend
Einige der verwendeten Funktionen stellen die Herausforderung wahrscheinlich nach.
Die Eingabe ist eine Liste von Einsen und Nullen, und die Ausgabe ist auch eine Liste von Einsen und Nullen.
quelle
PHP, 69 Bytes
Online Version
quelle
ES8, 54B
quelle
05AB1E , 4 Bytes
Probieren Sie es online!
quelle
Japt , 4 Bytes
Eingabe als Binärzeichenfolge, Ausgabe als negabinäres Ziffernfeld.
Versuch es
Oder nehmen Sie die Eingabe als binäres Ziffernfeld:
Versuch es
quelle