Die Compiler-Sprache ohne aussprechbares Akronym, kurz INTERCAL , ist eine sehr einzigartige Programmiersprache. Zu seinen nicht reproduzierbaren Eigenschaften zählen die binären Operatoren.
Die beiden binären Operatoren von INTERCAL sind Interleave (auch als Mingle bezeichnet ) und Select . Interleave wird mit einer Änderung (¢) dargestellt, und Select wird mit einem Rechteck (~) dargestellt.
Interleave funktioniert, indem zwei Zahlen im Bereich von 0 bis 65535 abwechselnd verwendet werden. Zum Beispiel:
234 ¢ 4321
234 = 0000011101010
4321 = 1000011100001
Result: 01000000001111110010001001
Output: 16841865
Wählen Sie Werke aus, indem Sie zwei Zahlen im Bereich 0-65535 nehmen, die Bits im ersten Operanden nehmen, die sich an der gleichen Position befinden wie 1s im zweiten Operanden, und diese Bits rechts packen.
2345 ~ 7245
2345 = 0100100101001
7245 = 1110001001101
Taken : 010 0 10 1
Result: 0100101
Output: 37
In dieser Herausforderung erhalten Sie einen binären Ausdruck, der entweder die Interleave- oder die Select-Operation verwendet. Sie müssen das Ergebnis mit möglichst wenigen Bytes berechnen.
Der Ausdruck wird als durch Leerzeichen getrennte Zeichenfolge angegeben, die aus einer Ganzzahl in 0-65535, einem Leerzeichen ¢
oder ~
einem Leerzeichen und einer Ganzzahl in 0-65535 besteht.
Die Ein- und Ausgabe kann über ein beliebiges Standardsystem (STDIN, Funktion, Befehlszeile usw.) erfolgen. Standardlücken verboten.
Beispiele:
5 ¢ 6
54
5 ~ 6
2
51234 ¢ 60003
4106492941
51234 ~ 60003
422
Dies ist Code Golf - die wenigsten Bytes gewinnen. Viel Glück.
BEARBEITEN: Da einige Sprachen das INTERCAL-Änderungssymbol (¢) nicht unterstützen, können Sie stattdessen das Big-Money-Symbol ($) mit einer 5-Byte-Strafe verwenden.
$
.FIVE ONE TWO THREE FOUR
? Und sollte die Ausgabe nicht in römischen Ziffern erfolgen?Antworten:
Pyth,
323129 BytesProbieren Sie es online aus: Regular Input / Test Suite
Vielen Dank an @isaacg für das Abschlagen eines Bytes.
Erläuterung:
quelle
hMfeT
zu machensmmFd
und dann das Duplikat zu bewegens
außerhalb der ternären. Außerdem ist Ihr aktueller Code 32 Bytes, nicht 33.Python 2,
115112 BytesDie Zeichenfolge in der zweiten Zeile enthält ein einzelnes nicht druckbares Zeichen
\x7d
, das nächste Zeichen danach~
.Alle Hoffnungen auf ein schönes, einzelnes Lambda werden durch das Eingabeformat zunichte gemacht. Es gibt wahrscheinlich eine bessere Möglichkeit, Eingaben einzulesen. Eingabe wie
"51234 ¢ 60003"
über STDIN.Die Funktion
f
kombiniert die folgenden zwei rekursiven Funktionen:(-3 Bytes mit Hilfe von @xnor)
quelle
(a%2*2+b%2)/3**d
speichert 3 Zeichen, verwendet jedoch das Komplementd=1-c
. Haben Sie eine Möglichkeit,-~(3*c|b%2)
mit der Ergänzung umzugehen? Im schlimmsten Fall verliert es 2 Zeichen mit3-3*d
. Das Formatand-~x+y
kann auchandy-~x
so lang sein, wie esy
mit einem Symbol oder einer Zahl beginnt.(b%2+5&4-d)
. Vielen Dank!CJam, 31 Bytes
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
JavaScript (ES6), 103
117 119 124Bearbeiten Sie jetzt, indem Sie mit Zahlen anstatt mit Zeichenfolgen arbeiten
(ohne führende Leerzeichen, Zeilenumbrüche und Kommentare)
Testlauf des Snippets in jedem EcmaScript 6-kompatiblen Browser (insbesondere nicht in Chrome und nicht in MSIE. Ich habe es in Firefox getestet, Safari 9 könnte funktionieren)
quelle
Matlab,
119113 BytesUngolfed:
Beispiele:
quelle
R, 145 Bytes
Ungolfed + Erklärung:
quelle
Python 3,
174166148126Ziemlich unkomplizierte Zeichenfolgeoperationen, die dann wieder in eine Ganzzahl umgewandelt werden.
Beschränkt auf Zahlen mit 99 Ziffern (max. 2 ^ 99-1 = 633825300114114700748351602687).
Danke, Sp3000 und Vioz!
Oder 165 Zeichen, ohne Limit:
Ungolfed:
quelle
zfill
anstelle vonrjust
zum Auffüllen mit Nullen verwendena,b
, setzen Sie es einfach in diezip
mit einem*
Splat, 2)(i if j=='1'else'') -> i[:j>'0']
3) Sie können diesen Tipp verwenden , um auf der anderenif/else
Pyth, 43 Bytes
Ein Teil von mir ist nervös, eine so lange Pyth-Antwort auf Isaacs Frage zu posten ...: oP
Erklärung:
quelle
C,
127123Bytes + 5 Strafen = 128scanf
Zählt das Unicode-Symbol als mehr als ein Zeichen, was die Dinge sehr kompliziert macht. Daher wende ich die 5-Byte-Strafe für die Verwendung an$
.Die Änderungen gegenüber der Originalversion sind:
-Der Test für $ oder ~ wurde von
q&2
bis überarbeitetq%7
. Dies kehrt die Wahr / Falsch-Werte um, so dass der Code für den $ -Operator vor dem steht,:
wodurch ein Satz von Klammern entfernt werden kann.-Die
i
Schleife zählt jetzt in Potenzen von 2 herunter, was länger ist, aber erlaubt>>
, durch/
Klammern ersetzt zu werden und einige zu speichern.Ursprüngliche Version 127 Bytes
Ich ging mit einer einzigen Schleife mit den Bedingungen im Inneren, um den Aufwand von zwei Schleifen zu vermeiden. In beiden Fällen verschiebe ich die Bits der Operanden mit der rechten Maustaste auf das Bit der 1 und baue das Ergebnis vom höchstwertigen zum niedrigstwertigen Bit auf, wobei ich das Ergebnis nach links verschiebe (multipliziere mit 2 oder 4).
quelle
main
Ursachenq
anzugeben, die auf meinem Computer beschädigt werden. Ich gehe davon aus, dass das eigentliche Problem darin bestehtscanf
, aber aus diesem Grund habe ich sie als normale Erklärungen zurückgelassen.q
ist garantiert Null, aber bei der Deklaration als Funktionq
enthält der Parameter 32-Bit-Garbage. Das wäre kein Problem, wenn ich zugewiesen einen Wertq
, aberscanf
mit"%c"
nur überschreibt die am wenigsten signifikanten 8 Bits des Mülls, undefiniert die anderen 24 zu verlassen. Ich könnte Glück auf einem anderen Compiler bekommen!K5,
5352 Bytes53-Byte-Version:
Benötigt noch ein bisschen mehr Golf.
quelle
CJam,
6150464134 BytesVielen Dank an @Dennis für den Hinweis auf ein 4-Byte-Golf.
Probieren Sie es online aus .
quelle
]{}/
ist ein Noop.Haskell, 77
Die Eingabe erfolgt durch Anwenden der Eingabe auf die Funktionen / Operatoren
?
und¢
definiert im Code (Haskell kann nicht definieren einen Operator~
aus technischen Gründen).Grundsätzlich funktioniert der alte rekursive Ansatz.
quelle
J 173
erwartet eine Eingabezeile
Eingabe wird voraussichtlich nach neuer Zeile mit EOF beendet
quelle
Javascript ES6 (3 Argumente)
141138136121119 BytesPrüfung:
Javascript ES6 (1 Argument)
135133 BytesPrüfung:
PS: Neue Zeile wird als 1 Byte gezählt, da sie durch ersetzt werden kann
;
.quelle
Python 3, 157 Bytes
Die vollständige und erklärende Version finden Sie in meinem Pastebin .
quelle
e
einmal zu verwenden , können Sie es nicht einfach einbinden?Mathematica, 155 Bytes
Wird zu einer anonymen Funktion ausgewertet, die die Zeichenfolge als Eingabe verwendet. Zeilenumbrüche zur Verdeutlichung hinzugefügt.
f
undg
konvertiere zu / von Basis 2.Riffle
macht genau das, was Interleave soll. Ich wollteSelect
für select verwenden ist aberCases
leider besser. Die letzte Zeile ist etwas trickreich; Die Leerzeichen werden in~
den Infix-Operator von Mathematica geändert. Anschließend wird die Zeichenfolge ausgewertet.quelle