Basierend auf einer Chatnachricht
Die Herausforderung
n > 9
Konstruieren Sie bei einer gegebenen Eingabenummer die Umkehrung und ignorieren Sie führende Nullen. Dann konstruiere eine Liste aller Primfaktoren, die die Zahl und ihre Umkehrung nicht gemeinsam haben. Multiplizieren Sie diese Faktoren, um die ungewöhnliche Faktornummer der Eingabe zu erhalten.
Oder anders ausgedrückt: Wenn rev(n)
die dezimale Umkehrung der Ganzzahl bezeichnet n
, berechnen Sie das Produkt von n
und rev(n)
dividieren Sie es durch das Quadrat von gcd(n, rev(n))
.
Gib diese Nummer aus.
Arbeitsbeispiele
Beispiel: 2244
kehrt zu um 4422
. Die Primfaktoren der ersten sind [2, 2, 3, 11, 17]
und die Primfaktoren der umgekehrten sind [2, 3, 11, 67]
. Die Zahlen, die keine gemeinsamen Multiplizitäten sind [2, 17, 67]
, 2278
sind auch die Ausgabe.
In einem anderen Beispiel wird 1234
umgekehrt zu 4321
. Das Produkt ist 5332114
und der GCD ist 1
, so ist die Ausgabe 5332114
.
Weitere Erläuterungen
Offensichtlich hat eine palindromische Zahl alle ihre Faktoren mit ihrer Umkehrung gemeinsam. In diesem Fall ist die Ausgabe also 1
( n*n/n^2
). Offensichtlich ist es auch möglich, dass der Ausgang die Multiplikation aller Faktoren ist (dh der gcd ist 1 - der Eingang und seine Umkehrung sind Co-Prime), wie im Fall des 1234
Beispiels.
Regeln
- Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den systemeigenen Ganzzahltyp Ihrer Sprache passen.
- Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen .
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
in
out
17
1207
208
41704
315
1995
23876
101222302
quelle
1995
(glaube ich)Antworten:
05AB1E , 6 Bytes
Code
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung
quelle
J, 18 Bytes
Probieren Sie es online!
Alternativ (Dank an @ Adnans Ansatz für den zweiten),
J, 15 Bytes (@miles Lösung)
Erläuterung
Dies ist nur eine einfache Implementierung des vom OP vorgegebenen Algorithmus.
Erklärung, @miles Lösung
Sehr schlau.
quelle
*/@(,%+.)|.&.":
Mathematica, 33 Bytes
Probieren Sie es online!
quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle
DU
stattṚ
)Ṛ
bei einer Ganzzahl werden die Ziffern umgekehrt, aber nicht zurück in eine Ganzzahl konvertiert.JavaScript (ES7),
6764 BytesSo viele Bytes, nur um die Zahl umzukehren :(
Übernimmt die Eingabe als Zeichenfolge.
Versuch es
quelle
Haskell, 44 Bytes
Probieren Sie es online!
quelle
R ,
10889 Bytes-19 bytes dank plannapus für seinen gcd algorithmus
Dies wird versuchen, mindestens einen Vektor mit einer Größe von
4*n
Bytes zuzuweisen (und ich denke, es sind bis zu 4), so dass dies einen Speicherfehler für ausreichend große auslöstn
.Probieren Sie es online!
quelle
Python 3 ,
7368 Bytes-5 Bytes dank Mr. Xcoder.
Probieren Sie es online!
quelle
MATL ,
131211 BytesProbieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Neim , 11 Bytes
Probieren Sie es online!
Kein GCD eingebaut. ; -;
quelle
Schale , 10 Bytes
Probieren Sie es online!
-1 danke an H.PWiz .
-1 danke an Zgarb .
quelle
Japt ,
131211 BytesVersuch es
Erläuterung
Implizite Eingabe einer Ganzzahl
U
. Die leere Zeile am Anfang verhindert, dass die folgende Zeile überschrieben wirdU
Konvertieren Sie
U
in einen String (s
), kehren Sie ihn um (w
), konvertieren Sie zurück in eine Ganzzahl und weisen Sie der Variablen zuV
.Multiplizieren
U
durchV
.Teilen.
GCD von
V
undU
.Kariert. Implizite Ausgabe der resultierenden Ganzzahl.
Alternative, 13 Bytes
Nur weil ich es gerne nutzen kann
N
.Versuch es
quelle
Pyth , 13 Bytes
Probieren Sie es hier aus!
Pyth , 15 Bytes
Hierbei wird der Ansatz von Adnan verwendet und die Eingabe als Zeichenfolge verwendet.
Probieren Sie es hier aus
quelle
x86-Maschinencode, 39 Byte
Die obige Funktion berechnet die "ungewöhnliche Faktornummer" des angegebenen Eingabeparameters. Der Parameter wird gemäß der registrierungsbasierten __fastcall-Aufrufkonvention im
ECX
Register übergeben. Das Ergebnis wird in der zurückgegebenEAX
wie bei allen x86-Aufrufkonventionen Register zurückgegeben.Probieren Sie es online!
Es hat unglaublich lange gedauert, bis ich so kompakt geschrieben habe, aber es hat Spaß gemacht. Viele Verzerrungen, um die bestmögliche Registerplanung im Rahmen der
DIV
impliziten Operanden des x86- Befehls zu erzielenMUL
undXCHG
möglichst kurze Codierungen und Befehle zu verwenden. Ich wäre sehr gespannt, ob sich jemand einen anderen Weg ausdenken kann, um ihn weiter zu verkürzen. Mein Gehirn war am Ende ziemlich durchgebraten. Vielen Dank, dass Sie das nächste Mal einen Compiler sehen! (Obwohl dies ein viel besserer Code ist als der, den ein Compiler generieren würde ... Insbesondere, wenn Sie ihn ohne Größenbeschränkungen leicht angepasst und Dinge wie entfernt habenXCHG
.)quelle
Perl 5 , 72 Bytes
71 Byte Code + 1 Flag (
-p
)Probieren Sie es online!
quelle
Pyke , 8 Bytes
Probieren Sie es hier aus!
Übernimmt die Eingabe als Zeichenfolge.
quelle
Python 2 , 70 Bytes
Danke an i cri everytim .
Probieren Sie es online!
Python 2 , 77 Bytes
Beachten Sie, dass Sie in Python 2 die
math.gcd()
Methode nicht verwenden können und sie "von Hand" ausführen müssen.Probieren Sie es online!
quelle
gcd
alsfractions.gcd
.math.gcd
.Ohm , 9 Bytes
Probieren Sie es online!
quelle
Java 8,
158150148138125123116107+ 19BytesProbieren Sie es online!
quelle
t!=0
durcht>0
, da t nie negativ sein wird.f*r/(i*i)
ist das gleiche wief/i*r/i
. Sie können fallenf=t;
undr=i;
wenn Sie die Zuordnung voni
und verkettent
.while(t>0)t=i%(i=t);
(-11 Byte) geschrieben werden.