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
quelle
Antworten:
JavaScript (ES7),
636159 Bytes4 Bytes gespart dank Neil .
quelle
10**-~Math.log10(c)
. (Aberreduce
natürlich +1 für die Verwendung .)async
/await
und den Potenzierungsoperator**
**
ist wirklich nützlich, da stimme ich zu. Das hätte in ES6 sein sollen.C
7975 BytesVielen Dank an @GB für das Speichern von 4 Bytes!
Probieren Sie es online!
quelle
Bash, 66
Probieren Sie es online aus .
quelle
$[...]
unterliegen einer Parametererweiterung ohne die explizite$
(z. B.d
statt$d
) Speicherung von zwei Zeichen.((s=$1+$2,d=$1-$2))
, um die beiden Variablen zu initialisieren.EXCEL, 61 Bytes
Excel, 18 Bytes nicht gültig
quelle
Gestapelt , 36 Bytes
Probieren Sie es online!
Vorher:
,@A$(-+*){!A...n!}"!:inits$#'"!$summap:[email protected]\^1\,\*sum
Ich werde versuchen, ein oder zwei Bytes herauszuholen, bevor ich eine Erklärung schreibe. (
#'
= Größe von und"
ist "do on each", hier ohne Bedingungen.)Noncompeting bei 26 Bytes
$(*+-)#!!:{%y#'10\^x*y+}#\
.quelle
TI-Basic,
3433 Bytesquelle
Prompt A,B
sollte auch funktionierenGNU DC, 36
Definiert ein Makro
m
, das die beiden obersten Elemente des Stapels einnimmt, das Makro anwendet und das Ergebnis auf dem Stapel belässt (wie im Beispiel in der Frage gezeigt):Probieren Sie es online aus .
quelle
Perl 6 ,
81 6158 BytesVersuch es
Versuch es
Versuch es
quelle
x-y
festzustellen , dass dies eine gültige Kennung ist.Gelee , 27 Bytes
Definiert eine dyadische Verknüpfung / Funktion, die mit aufgerufen werden kann
ç
. Nimmt zwei Ganzzahlen als Eingabe und gibt eine Ganzzahl zurück. Es hat den zusätzlichen Vorteil, dass man x<
y oder x>
y nehmen kann, indem man die absolute Differenz verwendet.Probieren Sie es online!
Erläuterung:
Einzelheiten:
quelle
PHP,
7975 Byteszwei Versionen:
Nimmt Eingaben von Befehlszeilenargumenten entgegen. renn mit
-r
.Ich vermute,
strlen
qualifiziert als "Funktion, die die Anzahl der Stellen zurückgibt",obwohl es die Nummer als Zeichenfolge verwendet. Lass es mich wissen, wenn nicht.
quelle
strlen
das für ungültig.C (gcc) , 70 Bytes
Probieren Sie es online!
basierend auf der Antwort von Steadybox , alles in ein Makro einfügen , um ein bisschen mehr Golf zu spielen.
(Hinweis: Das Ergebnis
d
zuzuweisen,a
funktioniert unerwartet. Ich habe mir den generierten Assembly-Code angesehen und es scheint in Ordnung zu sein.)quelle
Haskell, 54 Bytes
Das Puzzle wird über eine Infix-Funktion implementiert
#
, z8#2 = 16106
. Die andere Funktion%
definiert die Verkettung der Basis 10 (vorausgesetzt, die RHS ist größer als 0).quelle
Dyalog APL, 31 Bytes
{a⊥⍨10*1+⌊10⍟a←(⍺×⍵)(⍺+⍵)(⍺-⍵)}
basierend auf dem Beispiel-APL-Code aus der Problembeschreibung
quelle
PHP, 87 Bytes
und eine ungültige Lösung für 37 Bytes
quelle
Ruby, 61 Bytes
Was verdächtig nach dieser Javascript-Antwort aussieht , aber ohne einen Logarithmus zu verwenden.
quelle
Python,
9291 ZeichenDanke an Wizards Vorschlag;)
quelle
)
undif
.R (3.3.1), 104 Bytes
Gibt eine anonyme Funktion zurück.
Dies ist mein erster Golfversuch, daher ist jedes Feedback willkommen.
quelle
REXX, 70 Bytes
Natürlich wäre der native Weg viel kürzer:
quelle
PowerShell, 88 Bytes
PowerShell hat keinen an den Netzbetreiber, der nicht hilft. Kann auch die Länge einer Ganzzahl nicht zählen, es sei denn, Sie zählen sie als Zeichenfolge, was wir nicht können. Daher überprüfe ich, ob es
-gt
9 ist, um die Länge zu ermitteln. Könnte vielleicht knapper sein, aber ich muss mich wieder an die Arbeit machen.quelle
Python 2.7,
10996 BytesKorrigiert nach folgenden Wettbewerbsregeln. Dank an mbomb007 für die Reduzierung des Codes von 109 auf 96 Byte
quelle
•You're not allowed to use strings or any kind of concatenation anywhere in your code.
a
ein Lambda erstellen.a=lambda n:10**int(...
. Sie können dies auch tunb,c=input()
, indem Sie Ihre beiden Eingaben durch ein Komma trennen.J , 25 Bytes
*;+;-
Box die Ergebnisse jeder Operation.10#.inv&.>
Konvertieren Sie jedes Ergebnis in ein Array von 10-stelligen Zahlen. (inv
ist^:_1
)[:;
Entpacken und verbinden Sie die Arrays.10#.
Konvertiert ein Array von 10er-Stellen in eine Ganzzahl.X=.
Definieren Sie das Obige als OperatorX
.Ergebnisse:
quelle
X=.
Mathematica, 67 Bytes
Nimmt
x-y
, nimmt dann das log10 vonx-y
, rundet es auf, berechnet 10 zur Potenz davon und multipliziert es dann mitx+y
. Aber wir müssen auch berücksichtigenlog10(x-y)
, dass wir 0 sind, also ersetzen wir 0 durch 1. Dann nehmen wir das log10 von2x
, aufgerundet plus 1, und finden 10 zur Potenz davon. Multiplizieren Sie das mitxy
und fügen Sie das hinzu.quelle
05AB1E ,
232216 BytesProbieren Sie es online!
Wir hätten ein paar Bytes sparen können, wenn wir Strings im Programm hätten verwenden dürfen (aber nicht in Berechnungen), indem wir einen String durchlaufen, der die Operationen enthält
"-+*"
, da der für jede Operation ausgeführte Code derselbe ist.Wenn wir Verkettung hätten verwenden dürfen, hätten wir natürlich viel mehr gespart.
quelle
R, 64 Bytes
Verwendung:
quelle