Inspiriert von dieser Frage, die weiter von dieser inspiriert wurde , schreiben Sie ein Programm, das zwei Ganzzahlen verwendet und diese auf einzigartige Weise addiert, indem Sie eine ODER-Operation für die Segmente ausführen, die für die Anzeige in einer 7-Segment-Anzeige verwendet werden. Als Referenz werden die Ziffern folgendermaßen dargestellt:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Beachten Sie, dass die 1 die beiden Segmente rechts und nicht links verwendet. Es gibt zwei Sonderzeichen, die auf diese Weise erzeugt werden können und keine Zahlen sind. Siehe nachstehende Hinzufügungstabelle:
| 0 1 2 3 4 5 6 7 8 9
--+--------------------
0 | 0 0 8 8 8 8 8 0 8 8
1 | 0 1 a 3 4 9 8 7 8 9
2 | 8 a 2 a 8 8 8 a 8 8
3 | 8 3 a 3 9 9 8 3 8 9
4 | 8 4 8 9 4 9 8 Q 8 9
5 | 8 9 8 9 9 5 6 9 8 9
6 | 8 8 8 8 8 6 6 8 8 8
7 | 0 7 a 3 Q 9 8 7 8 9
8 | 8 8 8 8 8 8 8 8 8 8
9 | 8 9 8 9 9 9 8 9 8 9
Nützliche Beobachtungen:
- Jede Ziffer plus ist gleich sich
- 8 plus eine beliebige Ziffer entspricht 8
- 2 plus 1, 3 oder 7 entspricht dem Buchstaben 'a' (muss klein geschrieben sein)
- 4 plus 7 entspricht entweder "q" oder "Q", Ihre Wahl
- Zahlen sollten rechtsbündig sein, daher sollten die Ziffern von rechts nach links addiert werden. Wenn eine Nummer mehr Ziffern als die andere enthält, sollten die zusätzlichen Ziffern am Anfang unverändert bleiben. Es gibt keine führenden 0en, es sei denn, die Zahl ist genau 0.
- Alle Zahlen sind 0 oder höher. Sie müssen nicht mit einem '-' Zeichen umgehen. (Hauptsächlich, weil die Summe aus '-' und '1' oder '7' nicht passt.)
Ihr Programm sollte 2 Ganzzahlen in jedem von Ihnen gewählten Format akzeptieren und eine Zeichenfolge ausgeben, die deren "Summe" enthält, wenn Sie auf diese Weise berechnet werden. Das ist Code-Golf, also sollte Ihr Programm so klein wie möglich sein.
Beispiele:
- Eingabe: 12345, 123. Ausgabe: 12389
- Eingabe: 88888, 42. Ausgabe: 88888
- Eingabe: 0, 23. Ausgabe: 28
- Eingabe: 120, 240. Ausgabe: a80
- Eingabe: 270, 42. Ausgabe: 2Q8 (oder 2q8)
- Eingabe: 1234567890, 1234567890. Ausgabe: 1234567890
quelle
Q
nicht Kleinbuchstaben sein? Die tatsächliche Form siehtq
eher wie einQ
a
sollte aber unbedingt Kleinbuchstaben sein, daA
sieht das ganz anders aus.Antworten:
Bash + Gemeinsame Linux-Dienstprogramme, 80
Beachten Sie, dass
^?
in der Quelle das Zeichen 0x7f durch ein ASCII-Zeichen ersetzt werden sollte.Die Saite
s
ist jeweils eine 7-Segment-Ziffer0-9, a, Q
, die mit jedem Segment codiert ist, das einem Bit eines ASCII-Zeichens entspricht.Das
h()
Funktion setzt die eingegebene Zahl von dezimal in die von angegebene Kodierung ums
und gibt das Ergebnis als rohen Hex-String aus.Die beiden resultierenden rohen Hex-Zeichenfolgen sind
OR
mit regulärer Bash-Arithmetik zusammengefügt und dann mitdc
demP
Befehl 's als Bytestream ausgegeben. Dieser Bytestream wird dann zurück in das Dezimalzeichen + a + Q transkribiert und ausgegeben.Beachten Sie auch, dass bei Verwendung des
<<<
bash-Herestring-Konstrukts in functionh()
implizit eine neue Zeile an die umgeleitete Zeichenfolge angehängt wird. Das spielt keine Rolle - es wird einfach übersetzt0x0a
am Ende jeder Hex-Zeichenfolge übersetzt. Wenn die beiden HexadezimalzahlenOR
zusammengefügt werden, befindet sich das Ergebnis immer noch0x0a
im letzten Zeichen, das nicht transliteriert wird, und wird daher einfach in eine neue Zeile zurückübersetzt, die nach dem Ergebnis ausgegeben wird.Testausgang:
quelle
Python 2, 155 Bytes
Ersetze das
♥
durch einDEL
Zeichen (0x7F).Der Aufruf
f("12345", "123")
druckt12389
.quelle
%13
Trick funktioniert. Natürlich haben Sie sich für den Satz entschieden, der keine Zeichen unter 40 hatte, aber für meine JavaScript-Übersetzung habe ich den kürzesten Satz gewählt. Der dritte Satz ist der längste in JavaScript, wäre es gewesen111,5,118,117,29,121,123,37,127,125
.JavaScript (ES6),
158 -144 Byte14 Bytes durch schamlosen Diebstahl von @ Lynns
%13
Trick gerettet .quelle
Java, 170 Bytes
Das ist furchtbar lang ... aber das ist trotzdem Java.
Volles Programm mit ungolfed Code
Alle Ausgaben (alle einmal dupliziert)
quelle