Dies ist die Fortsetzung dieser Herausforderung von Adnan . Wenn Sie diese Herausforderung mögen, werden Sie wahrscheinlich auch die andere mögen. Hör zu!
Ein Multiple - Choice - Test mit 8 Fragen mit je 4 Entscheidungen könnten die Antworten haben: BCADBADA
. In vier verschiedene Arrays konvertiert, mit wahr und falsch, wenn der aktuelle Buchstabe die Antwort ist, sieht es so aus
Q#: 1 2 3 4 5 6 7 8
B C A D B A D A
A: [0, 0, 1, 0, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 0, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
D: [0, 0, 0, 1, 0, 0, 1, 0]
Dies kann mit ein bisschen Logik komprimiert werden. Jede der Entscheidungen A
, B
, C
und D
kann durch zwei Wahr / Falsch - Wert gezeigt unten dargestellt werden:
A: 1 0
B: 0 1
C: 0 0
D: 1 1
Mit dieser Logik können wir die vier obigen Vektoren auf nur zwei komprimieren:
1 2 3 4 5 6 7 8
B C A D B A D A
[0, 0, 1, 1, 0, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 1, 0]
Das heißt, die Lösung Ihren Test einfach: 00110111
, 10011010
. Wenn wir diese verketten, erhalten wir die Binärzahl
0011011110011010
oder eine 14234
Dezimalzahl. Verwenden Sie diesen Dezimalwert, um Ihren Test zu betrügen!
Herausforderung
Nehmen Sie eine Zahl N
im Bereich (einschließlich) [0, 65535]
und geben Sie eine Zeichenfolge mit der Antwort auf den Multiple-Choice-Test aus.
Testfälle:
14234
BCADBADA
38513
ABBDCAAB
0
CCCCCCCC
120
CBBBBCCC
65535
DDDDDDDD
39253
ABCDABCD
Die Ausgabe kann in Groß- oder Kleinbuchstaben erfolgen, Sie können jedoch keine anderen Symbole verwenden.
quelle
A=10, B=01
wurdeC=nor(A,B)
und michD=and(A,B)
von Adnans Herausforderung inspirieren ließ. Im Nachhinein wäre es vielleicht besser gewesen, es anders herum zu machen, aber gut ... Jetzt zu spät ...Antworten:
Jelly , 14 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
05AB1E ,
191816 BytesCode:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
Erläuterung:
Zuerst addieren wir
65536
die Zahl (žH
ist eine Konstante, die definiert ist65536
), die ebenfalls10000000000000000
binär ist. Hiermit wird die Zahl mit Nullen aufgefüllt. Nehmen wir die Nummer14234
als Beispiel.14234 + 65536
ist gleich79770
. Was in binär ist:Wir entfernen das erste Zeichen, was zur Folge hat:
Wir teilen die Saite in zwei Teile mit
2ä
:Danach zippen wir das Array mit
ø
:Das Zurückkonvertieren in Dezimalzahlen (mit
C
) führt zu:Jetzt müssen wir es nur noch mit der Zeichenkette indizieren
cbad
. Die komprimierte Version für diesen String ist’c‰±’
, die auch hier getestet werden kann . Schließlich erhalten wir die Zeichen am Index des obigen Arrays. Für das obige Beispiel führt dies zu:quelle
JavaScript (ES6),
5548 ByteNicht rekursive Version (55 Bytes)
Mit einem regulären Ausdruck können wir Folgendes tun:
quelle
Python 2, 53 Bytes
Teste es auf Ideone .
quelle
(n&257)%127
aber es ist länger. Schade, 127 ist Prime. Vielleicht können Sie sich einen Weg überlegen, um es zu optimieren.CP-1610- Assembly, 24 DECLEs (30 Byte)
Dieser Code soll auf einer Intellivision ausgeführt werden . (1)
Ein CP-1610-Opcode wird mit einem 10-Bit-Wert codiert, der als "DECLE" bezeichnet wird. Die eigentliche Funktion ist 24 DECLE lang und beginnt um
$4809
und endet um$4820
.Die CPU-Register sind jedoch 16 Bit breit, sodass sie jeden Eingabewert in
0x0000
... unterstützen0xFFFF
.Ausgabe
(1) Zugegeben, dass mindestens ein Compiler, mehrere Emulatoren und urheberrechtsfreie Ersatz-ROM-Dateien frei verfügbar sind, verstößt meiner Meinung nach nicht gegen eine PPCG-Übermittlungsregel. Aber bitte lassen Sie mich wissen, wenn ich falsch liege.
quelle
CJam , 22 Bytes
Probieren Sie es online!
Erläuterung
Angetrieben von Magie ...
Die Zuordnung von Bitpaaren zu Buchstaben in dieser Herausforderung ist etwas willkürlich. Wenn wir
ABCD
durch darstellen0, 1, 2, 3
(damit wir sie nur zum Zeichen hinzufügen könnenA
), möchten wir die folgende Zuordnung:Diese Zuordnung kann mit einer magischen kleinen Formel berechnet werden:,
((i1 == i2) + 1) ^ i1
wobei die Gleichheitsprüfung0
oder zurückgibt1
. Sehen Sie sich die folgende Tabelle an, in der jede Spalte einer Eingabe entspricht, jede Zeile einer Operation entspricht und in jeder Zelle der Stapel zu diesem Zeitpunkt angezeigt wird:In diesem Sinne finden Sie hier die vollständige Aufschlüsselung des Quellcodes:
Eine alternative Lösung mit der gleichen Anzahl von Bytes, die entschieden weniger magisch ist:
Und für den Fall ist es sinnvoll , für jeden, wenn Sie das drehen
i1
undi2
Bits zurück in eine einzelne Zahl (dh , wenn Sie die Zuordnung wollen0 -> 2, 1 -> 1, 2 -> 0, 3 -> 3
) kann diese noch berechnet werden leicht wie(~n - 1) & 3
oder(~n - 1) % 4
ob Ihre Sprache wird Modulo auf negative Werte richtig. Ich denke, das kann prägnant wie3&~-~n
in vielen Sprachen geschrieben werden. In CJam ist dies aufgrund der zusätzlichen Konvertierung von Basis 2 ein Byte länger.quelle
PHP, 57 Bytes
Version ohne bitweise Operatoren 70 Bytes
quelle
$i
definiert?Mathematica,
75736866 BytesVielen Dank an @MartinEnder für das Speichern von 2 Bytes.
quelle
#+##
undInfix
Arbeit, aber mitStringPart
ist unvermeidlich, weil der Kopf"C"["B","A","D"][[#+##]]
ist"C"
, nichtList
;StringJoin
funktioniert nicht#
und das#2
waren die ganzen Listen.Perl, 42 Bytes
Beinhaltet +1 für
-n
Geben Sie Input auf STDIN:
Nur der Code:
quelle
JavaScript,
113939088 BytesEin großes Dankeschön an @Neil, der mir geholfen hat, 20 Bytes zu sparen!
-3 Bytes dank @Cyoce
Leider fehlt JavaScript - Funktionen wie
decbin
,bindec
undstr_pad
dass PHP hat.quelle
(65536+n).toString(2).slice(1)
und[+b[i+8]+2*b[i]]
wäre zum Beispiel kürzer.padStart
Sollte es in eine zukünftige Version von ECMAscript aufgenommen werden, würde dies zu einer größeren Einsparung führen.{…;return }
Verwendeneval("…")
padStart
jetzt in ECMAScript existiert.MATL, 16 Bytes
Probieren Sie es online!
oder Überprüfen Sie alle Testfälle
Erläuterung
quelle
Julia, 73 Bytes
Gibt eine Funktion f an, die N als Eingabe nimmt und die Antwort als Zeichenfolge zurückgibt.
Versuch es
Abhängig davon, ob ein Char-Array als String zählt, kann der Join weggelassen werden ( 67 Bytes ).
Versuch es
quelle
R, 110 Bytes
Fand eine vektorisierte Lösung in R vor. Dies sollte wahrscheinlich durch eine intelligentere Umwandlung von int in binäre Umwandlung möglich sein.
quelle