Herausforderung:
In den sozialen Netzwerken kursiert ein albernes Rätsel, das lautet:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Implementieren einer Funktion oder Bediener , daß bei gegebenen zwei positive ganze Zahlen sind x
und y
derart , dass x > y > 0
, ergibt die richtige Antwort als eine ganze Zahl ist , wobei die Antwort der Ziffern sind die Ziffern x * y
von den Ziffern , gefolgt von x + y
der durch die Ziffern gefolgt x - y
. Sehr einfach.
Regeln:
- Standardlücken sind nicht zulässig.
- Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes.
- Eine Validierung der Eingabedaten ist nicht erforderlich. Dieses Programm kann abstürzen oder bei ungültiger Eingabe Müll zurückgeben.
- Sie dürfen numerische Funktionen und Operatoren verwenden (einschließlich Ganzzahl und Gleitkomma, mathematische Bibliotheksfunktionen und andere Funktionen, die Zahlen akzeptieren und zurückgeben).
- Sie dürfen eine Funktion verwenden, die gegebenenfalls die Anzahl der Ziffern einer Zahl zurückgibt.
- Sie sind nicht in Ihrem Code zu verwenden , Strings oder irgendeine Art von Verkettung überall erlaubt.
- Das Ergebnis kann zurückgegeben oder in den Stapel verschoben werden, je nachdem, was in der Sprache gilt. Das Ergebnis muss eine Ganzzahl sein, keine Zeichenfolge.
Beispielcode:
Der folgende Code erstellt einen dyadischen Operator mit dem Namen X
.
X ← {(⍺-⍵) + ((⍺ + ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}
Erläuterung:
In APL werten Sie von rechts nach links aus.
⍺ and ⍵
sind der linke und der rechte Operand⌊10⍟⍺-⍵
lautet:floor of log10(⍺-⍵)
. Führt zuerst eine Subtraktion durch, dann einen Logarithmus und dann einen Floor. Von rechts nach links. log10 wird ausgeführt, um die Ziffern von zu zählen⍺-⍵
(danach muss 1 summiert werden).⍺×⍵×10*(...)
liest:10 to the (...)th power, multiplied by ⍵, multiplied by ⍺
Somit
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵
ist das Produkt um die Summe aus der Anzahl der Stellen der Summe und der Differenz nach links verschoben. Das Multiplizieren mit einer Zehnerpotenz verschiebt eine ganze Zahl nach links.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)
ist die um die Anzahl der Stellen der Differenz nach links verschobene Summe.(⍺-⍵)
ist der Unterschied. Hier ist kein Schalten notwendig.X←{...}
So definieren Sie einen Operator in APL.
Beispiele:
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU dc:
Der folgende Code erstellt ein Makro mit dem Namen a
:
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
Erläuterung:
sx
undsy
Pop ein Element aus dem Stapel und speichern Sie es auf den Registernx
undy
sind.lx
undly
ein Element aus den Registern geladenx
undy
jeweils und schiebt es auf den Stapel.d
dupliziert das letzte Element im Stapel.^
berechnet die Potenz zweier Zahlen.Z
Gibt eine Zahl aus und gibt die Anzahl der Stellen zurück. Dies geschieht, weildc
es keine Logarithmusfunktion gibt.[...]sa
Speichert ein Makro im Registera
.la
lädt es.x
Führt das Makro oben im Stapel aus.
Beispiele:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153