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 xund yderart , dass x > y > 0, ergibt die richtige Antwort als eine ganze Zahl ist , wobei die Antwort der Ziffern sind die Ziffern x * yvon den Ziffern , gefolgt von x + yder 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:
sxundsyPop ein Element aus dem Stapel und speichern Sie es auf den Registernxundysind.lxundlyein Element aus den Registern geladenxundyjeweils und schiebt es auf den Stapel.ddupliziert das letzte Element im Stapel.^berechnet die Potenz zweier Zahlen.ZGibt eine Zahl aus und gibt die Anzahl der Stellen zurück. Dies geschieht, weildces keine Logarithmusfunktion gibt.[...]saSpeichert ein Makro im Registera.lalädt es.xFührt das Makro oben im Stapel aus.
Beispiele:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153