Hintergrund:
Die aktuelle Herausforderung für perfekte Zahlen ist ziemlich fehlerhaft und kompliziert, da Sie aufgefordert werden, in einem komplexen Format auszugeben, das die Faktoren der Zahl berücksichtigt. Dies ist eine rein entscheidungsbedingte Neuauflage der Herausforderung.
Herausforderung
Unterscheiden Sie bei einer positiven Ganzzahl durch jedes Standardeingabeformat , ob es perfekt ist oder nicht.
Eine perfekte Zahl ist eine Zahl, die der Summe aller ihrer richtigen Teiler entspricht (ihre positiven Teiler sind kleiner als sie selbst). Zum Beispiel ist eine perfekte Zahl, da ihre Teiler , die sich zu summieren , während keine perfekte Zahl ist, da ihre Teiler ( ) sich zu summieren nicht .
Testfälle:
Imperfect:
1,12,13,18,20,1000,33550335
Perfect:
6,28,496,8128,33550336,8589869056
Regeln
- Ihr Programm muss die größeren Testfälle nicht abschließen, wenn es Speicher- oder Zeitbeschränkungen gibt, aber es sollte theoretisch in der Lage sein, wenn es mehr Speicher / Zeit erhält.
- Die Ausgabe kann aus zwei unterschiedlichen und konsistenten Werten in jedem zulässigen Ausgabeformat bestehen . Wenn nicht sofort ersichtlich ist, was für Perfect / Imperfect steht, geben Sie dies bitte in Ihrer Antwort an.
1
perfekt, da jede Zahl für sich teilbar ist1
. Die Summe der richtigen Teiler von1
ist0
Antworten:
Brachylog , 4 Bytes
Probieren Sie es online!
Das Prädikat ist erfolgreich für perfekte Eingaben und schlägt fehl für fehlerhafte Eingaben, Drucken
true.
oderfalse.
wenn es als vollständiges Programm ausgeführt wird (mit Ausnahme des letzten Testfalls, der mehr als eine Minute für TIO dauert).quelle
fk
: xNeim , 3 Bytes
Probieren Sie es online!
(Eigentlich kann ich nicht alle Testfälle auf einmal ausführen, da ich vor ungefähr fünfzehn Minuten angefangen habe, Neim zu lernen, aber ich habe sie einzeln überprüft.)
Druckt 0 für nicht perfekt, 1 für perfekt.
quelle
𝔼
1 Byte? Verwendet Neim nur 128 solcher nicht standardmäßigen Zeichen?R ,
3329 BytesProbieren Sie es online!
Gibt
TRUE
für perfekte undFALSE
für unvollständige Zahlen zurück .quelle
0
(perfekt)FALSE
und nicht auf null abgebildet ,TRUE
aber ich habe einen davon entfernt, um die Zuordnung umzukehren. Es ist ein nützlicher Golftrick, vonnumeric
zu zu werfenlogical
, oft in Verbindung mitwhich
oder[
.Gelee , 3 Bytes
Probieren Sie es online!
quelle
Japt
-!
, 4 BytesAus irgendeinem Grund
¦
funktioniert tio nicht und ich muss stattdessen das-!
Flag und¥
verwendenProbieren Sie es online!
quelle
U
wird vorher nicht automatisch eingefügt!
.Python 3 , 46 Bytes
Probieren Sie es online!
Brute Force, summiert die Faktoren und prüft auf Gleichheit.
quelle
lambda x:sum(i for i in range(1,x)if x%i<1)^x
sollte das auch funktionieren.Python , 45 Bytes
True
für perfekt;False
für andere (schalte dies mit==
->!=
)Probieren Sie es online!
44 4241 Bytes (-2 dank Ovs), wenn wir mit "truthy vs falsey" ausgeben dürfen:(falsey (
0
)) für perfekt; sonst wahr (eine ganze Zahl ungleich Null)quelle
Oktave , 25 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript, 38 Bytes
Probieren Sie es online!
(Letztes Testfall-Timeout bei TIO.)
quelle
f=
nach der Konvertierung von einer rekursiven Funktion zu entfernen .C # (Visual C # Interactive Compiler) , 46 Byte
Gibt 0 zurück, wenn es perfekt ist, andernfalls wird eine positive Zahl zurückgegeben. Ich weiß nicht, ob die Ausgabe verschiedener Arten von Ganzzahlen anstelle von zwei unterschiedlichen Wahrheits - und Falschwerten zulässig ist, und konnte keine Diskussion über Meta darüber finden. Wenn dies ungültig ist, werde ich es entfernen.
Probieren Sie es online!
C # (Visual C # Interactive Compiler) ,
4947 ByteProbieren Sie es online!
quelle
Ruby , 33 Bytes
Probieren Sie es online!
quelle
TI-BASIC (TI-84),
3023 BytesSchrecklich ineffizient, aber es funktioniert.Die Reduzierung des Bytecount beschleunigte das Programm um ein Vielfaches.
Eingang ist in
Ans
.Die Ausgabe erfolgt in
Ans
und wird automatisch ausgedruckt, wenn das Programm abgeschlossen ist.Erläuterung:
(TI-BASIC hat keine Kommentare, nehmen Sie also einfach an,
;
dass dies ein Kommentar ist.)Beispiel:
Hinweis: Die Byteanzahl eines Programms wird anhand des Werts in [MEM] > [2] > [7] (36 Bytes) ausgewertet, wobei die Länge des Programmnamens abgezogen wird.
CDGF2
(5 Bytes) und zusätzliche 8 Bytes für Speichern des Programms:36 - 5 - 8 = 23 Bytes
quelle
Java (JDK) , 54 Byte
Probieren Sie es online!
Bei einer strengen Übereinstimmung von Zahl zu Zahl werden im Folgenden dieselben Werte zurückgegeben, jedoch nur 40 Byte.
Probieren Sie es online!
quelle
Your program doesn't have to complete the larger test cases, if there's memory or time constraints, but it should be theoretically able to if it were given more memory/time.
int
, sondern einBigInteger
? Weil Java hatBigIntegers
, aber es wird nieint
mehr als 31 Bit als vorzeichenbehaftet haben, die keinen anderen Wert als die hier dargestellten enthalten können ...int
Typ unbegrenzt warx86-Assembly,
4543 Bytes.Erklärung (Intel Syntax):
Die Eingabe sollte in erfolgen
EAX
.Funktion setzt
EAX
auf1
perfekt und auf0
unvollkommen.BEARBEITEN : Reduziert die Anzahl der Bytes um zwei durch Ersetzen
MOV EAX, $1
durchXOR EAX, EAX
undINC EAX
quelle
Labyrinth , 80 Bytes
Die lateinischen Zeichen
perfect puts zero else neg I
sind eigentlich nur Kommentare *.dh wenn die Eingabe perfekt
0
ist, wird a gedruckt, andernfalls-1
.Probieren Sie es online!
* also das oder das klappt auch ...
Wie?
Nimmt als Eingabe eine positive ganze Zahl
n
und platziert eine Akkumulatorvariable von-n
auf den Hilfsstapel, führt dann einen Teilbarkeitstest für jede ganze Zahl vonn-1
unten bis einschließlich durch1
und fügt alle hinzu, die sichn
zum Akkumulator teilen . Ist dies abgeschlossen, wenn die Speichervariable nicht Null-1
ist, wird a ausgegeben, andernfalls a0
ist a.Das
?::`}:(
wird zu Beginn der Ausführung nur einmal ausgeführt:Die nächste Anweisung,
"
ist ein No-Op, aber wir haben drei benachbarte Befehle, sodass wir entsprechend dem Wert oben auf Main verzweigen. Null bringt uns vorwärts, während Nicht-Null uns nach rechts bringt.Wenn die Eingabe war
1
, gehen wir vorwärts, weil die Spitze von Main Null ist:Aber wenn die Eingabe größer war als
1
wir nach rechts abbiegen, weil die Spitze von Main ungleich Null ist:Zu diesem Zeitpunkt haben wir einen Zweig mit drei Nachbarn, aber wir wissen, dass er
n-1
nicht Null ist, also biegen wir rechts ab ...Wir sind jetzt in einer anderen Filiale mit drei Nachbarn in
%
.Wenn das Ergebnis von
%
ungleich Null ist, dekrementieren wir nach links unseren potenziellen Divisorp=p-1
und lassen den Akkumulatora
wie folgt:... aber wenn das Ergebnis von
%
Null war (für den ersten Durchgang nur, wennn=2
), gehen wir direkt zu BEIDEM, fügen Sie den Divisor zu unserem Akkumulator hinzua=a+p
, UND dekrementieren Sie unseren potenziellen Divisorp=p-1
:An dieser Stelle, wenn
p-1
immer noch nicht Null ist, biegen wir links ab:... aber wenn
p-1
wir Null treffen, gehen wir direkt zum:
zweiten Zeile des Labyrinths (Sie haben alle Anweisungen schon einmal gesehen, also lasse ich ihre Beschreibungen aus und gebe nur ihre Wirkung):Jetzt das
{
drei benachbarte Anweisungen, so ...... wenn
a
Null ist, was es für perfekt sein wirdn
, dann gehen wir geradeaus:... wenn
a
nicht null ist, was für nicht perfekt istn
, dann biegen wir links ab:quelle
CJam , 17 Bytes
Probieren Sie es online!
quelle
Javascript, 62
Erklärung (obwohl es ziemlich einfach ist)
Danke an Jo King für die Verbesserung!
quelle
05AB1E , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Powershell,
46 Bytes43 BytesProbieren Sie es online!
Edit: -3 Bytes dank @AdmBorkBork
quelle
2*$i
die Subtraktions-Parens entfernt wurden.C (gcc) , 41 Bytes
Probieren Sie es online!
Lassen Sie mich wissen, ob dieses Scheitern im letzten Fall ein Problem ist.
quelle
n=!s;
anstattreturn!s;
5 Bytes zu sparen.s=s
höchstwahrscheinlich optimiert.Smalltalk, 34 Bytes
quelle
Viertens (gviertens) , 45 Bytes
Probieren Sie es online!
Erläuterung
Durchläuft jede Zahl von 1 bis n-1 und summiert alle Werte, die n perfekt teilen. Gibt true zurück, wenn sum gleich n ist
Code-Erklärung
quelle
Pyth , 9
13BytesProbieren Sie es online!
Vielen Dank an die Kommentatoren für die Golfhilfe
Findet alle Faktoren der Eingabe, summiert sie und vergleicht sie mit der ursprünglichen Eingabe.
quelle
q0
können durch ersetzt!
werden undSQ
produzieren die Reichweite[1-Q]
, sodass die Reichweite[1-Q)
mit generiert werden kannStQ
. Da sich dieQ
s nun am Ende des Programms befinden, können beide weggelassen werden. Fettled Version, 9 Bytes -qsf!%QTSt
Batch, 81 Bytes
Nimmt
n
als Befehlszeilenparameter und gibt ,1
wenn es eine perfekte Zahl ist. Bei der Brute-Force-Methode beginnt die Summe bei,-n
sodass sie sichn
selbst in die Schleife einschließen kann.quelle
Kohle , 13 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ausgänge
-
für perfekte Zahlen. Verwendet rohe Gewalt. Erläuterung:quelle
Wolfram Language (Mathematica) , 14 Byte
Probieren Sie es online!
quelle
Pyth, 8 Bytes
Probieren Sie es hier online aus .
quelle
Retina 0.8.2 , 44 Bytes
Probieren Sie es online! Verwendet Brute Force, sodass Link nur die schnelleren Testfälle enthält. Erläuterung:
In Unary konvertieren.
Passen Sie alle Faktoren der Eingabe an. Dies verwendet den Überlappungsmodus, bei dem in Retina 0.8.2 alle Übereinstimmungen an verschiedenen Positionen beginnen müssen, sodass die Übereinstimmungen tatsächlich in absteigender Reihenfolge zurückgegeben werden, beginnend mit der ursprünglichen Eingabe.
Subtrahieren Sie die richtigen Faktoren von der Eingabe.
Testen Sie, ob das Ergebnis Null ist.
quelle
Java 8, 66 Bytes
Irgendwann muss jemand die Stream-API verwenden, auch wenn es einen kürzeren Weg gibt
Probieren Sie es online!
quelle
cQuents , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle