Bei dieser Herausforderung versuchen wir, zwei wichtige Probleme gleichzeitig zu lösen. Sie sind:
- Sagen Sie bei gegebenen ganzen Zahlen a und b , ob a b -1 eine Primzahl ist.
- Gegeben ganze Zahlen a und b , Rückkehr nCr (a, b).
Insbesondere müssen Sie zwei Programme schreiben, eines für die erste und eines für die andere Aufgabe. Da wir beide Probleme gleichzeitig lösen möchten, wird empfohlen, in beiden Programmen denselben Code zu verwenden.
Wertung
Die Punktzahl einer Antwort ist der Levenshtein-Abstand zwischen den beiden Programmen. Niedrigere Punktzahl ist besser. Bei einem Unentschieden gewinnt die Antwort mit dem kürzesten kombinierten Code der beiden Programme. Mit diesem Skript können Sie die Bewertung Ihrer Lösung berechnen.
Regeln
- Sie müssen zwei Programme in derselben Sprache schreiben, die die oben beschriebenen Aufgaben lösen. Sie können beliebige E / A-Methoden verwenden. Für Aufgabe 1 können Sie einen Wahrheits- / Falschwert zurückgeben oder zwei Werte auswählen, die "wahr" und "falsch" bedeuten, und sie entsprechend zurückgeben. Z.B. Sie können wählen, dass
"prime"
dies wahr und"not prime"
falsch bedeutet. - Die von Ihnen verwendeten Algorithmen müssen für alle möglichen Eingaben funktionieren, es ist jedoch in Ordnung, wenn der Code aufgrund der Einschränkungen des verwendeten Nummerntyps für große Nummern fehlschlägt. Sie können davon ausgehen, dass die Eingabe gültig ist.
Keine Untermenge des Programms darf das Problem lösen, dh. Der Code darf nicht funktionieren, wenn Zeichen entfernt werden. Der folgende Code ist zum Beispiel ungültig, da es möglich ist, den nicht verwendeten else-Block zu entfernen, ohne das Programm zu unterbrechen:
if (1) { /* change to 0 to get the second program*/ ... } else { ... }
Standardlücken sind nicht erlaubt.
Testfälle
a b -1 ist prime?
a b
1 1 false
2 3 true
5 2 false
2 5 true
4 3 false
2 7 true
nCr
a b nCr(a,b)
1 1 1
5 2 10
4 3 4
10 7 120
12 5 792
Antworten:
MATLAB, Abstand 10
Primalität:
nCr:
quelle
PHP, Abstand 29
a^b-1
Gibt 0 für wahr und einen beliebigen ganzzahligen Wert> 0 für falsch ausnCr(a,b)
PHP, Abstand 36
a^b-1
druckt 1 für wahr, nichts für falschnCr(a,b)
quelle
Ruby, Distance 1, kombinierte Länge 194
Prime Check:
Probieren Sie es online!
nCr:
Probieren Sie es online!
Wie in den Kommentaren vorhergesagt, muss ein Ruck immer gegen den Geist des Problems gehen. Es hat Spaß gemacht, einen Weg zu finden, um das Problem zu umgehen! So funktioniert es: Wir haben zwei separate Lösungen für die Probleme. Wir führen beide aus, fügen sie in ein Array ein und wählen dann entweder das 0. Element oder das 1. Element für einen Bearbeitungsabstand von 1. Dies wäre normalerweise unzulässig, da Sie nur alles löschen könnten, außer der von Ihnen gewünschten Berechnung, und es würde immer noch funktionieren . Jedes Codefragment ist jedoch so geschrieben, dass es vom Laden derselben Standardbibliothek abhängt
'mathn'
:prime?
mathn
darin,3/4
die Funktionsweise der Division zu ändern - vor dem Laden wird eine Bewertung in vorgenommen0
, während anschließend eine Bewertung in Form eines Bruchs erfolgt(3/4)
. Da das Zwischenergebnis von(a+1-i)/i
nicht immer eine ganze Zahl ist, ist das Gesamtergebnis ohne die Bibliothek falsch.Jetzt müssen wir nur das Laden der Bibliothek davon abhängig machen, dass der Rest des Codes unverändert bleibt. Wir erzeugen dazu den Namen mathn mit der Zeichenlänge des restlichen Hauptcodes: Die kombinierte Berechnung hat die Länge 55, die auf 110 verdoppelt wird, was dem ASCII-Wert von 'n' entspricht. Wenn Sie dies also auf die Zeichenfolge 'math' verketten, erhalten Sie die gewünschte Bibliothek.
Als Bonus sorgt die Einführung der Bibliotheksabhängigkeiten dafür, dass der Code in angemessener Zeit ausgeführt wird. Insbesondere würde die naive Herangehensweise an nCr keine gebrochenen Zwischenergebnisse erzeugen.
quelle
05AB1E , Abstand 3
nCr
Probieren Sie es online!
isPrime (a ^ b-1)
Probieren Sie es online!
quelle
Gestapelt , Abstand 13
Probieren Sie es online! Der erste berechnet nCr, die zweite Primalität, unter Verwendung des Wilson-Theorems.
(f g h) fork!
KnalltN
Argumente vom Stapel (ruft sie aufa0 ... aN
) und wendet sie ana0 ... aN f a0 ... aN h g
.Für das erste Programm:
Und zum zweiten:
quelle
Python 2 , Abstand 15 , Länge 172
Aufgabe 1
Aufgabe 2
Probieren Sie es online!
quelle
Mathematica, Abstand 10
Aufgabe 1:
PrimeQ[#2^#-1]&
Schritt 2:
Binomial[#2,#]&
Beide Funktionen übernehmen die Eingaben in der Reihenfolge
b,a
.quelle
Javascript ES7, Abstand 14
Vielen Dank an @Conor O'Brien für die Reduzierung der Distanz um 7
Primalität:
Gibt 1 zurück, wenn prime 0 zurückgibt, wenn prime nicht.
Unglaublich ineffiziente Primcheck, prüft die Zahl modulo jede Zahl kleiner als es und größer als 1 ...
nCr:
Multipliziert 1 mit jeder Zahl von y + 1 bis x und dividiert durch jede Zahl von 1 bis xy (x! / Y!) / (Xy)!
quelle
f=x=>y=>{t=x+1;s=1;for(i=1;i<t;i++){if(y<i)s*=i/(i-y)}return s}
Bearbeitungsentfernung 14. Probieren Sie es online aus!Oktave, Entfernung
171615nCr
Probieren Sie es online!
isprime(a^b-1)
Probieren Sie es online!
Ich beherrsche Octave nicht sehr fließend, daher weiß ich nicht, ob es eine integrierte Funktion zur Berechnung von nCr gibt.
quelle
MATL , Abstand 4, Länge 6
Sagen Sie, ob
a^b-1
Prime ist:Probieren Sie es online!
Berechnen
nCr(a,b)
:Probieren Sie es online!
Wie es funktioniert
Sagen Sie, ob
a^b-1
Prime ist:Berechnen
nCr(a,b)
:quelle
Pyth, Abstand 4, Gesamtlänge 8
Primalität von
a^b-1
Probieren Sie es online!
nCr (a, b)
Probieren Sie es online!
Beide nehmen Eingaben als Tupel / Listen von ganzen Zahlen (zB
(1,2)
) entgegen.quelle
PHP, Abstand 14
Ein Programm mit zwei Funktionen zu schreiben und nur eine davon aufzurufen, würde zu einem Abstand von 1 führen, aber es wäre zu lahm.
Prime Test, 100 Bytes:
nCr, 98 Bytes:
quelle
Gelee , Abstand 4, Länge 5
Aufgabe 1
Aufgabe 2
Probieren Sie es online!
Wie es funktioniert
Aufgabe 1
Aufgabe 2
quelle
JavaScript, Punktzahl: 1, Länge:
144142126117Funktion (a, b) {s = "a = Math.pow (a, b) -sLänge + 79; für (b = 2; a% b ++;); b> a1für (t = sLänge-79 ; b;) t = t * a - / b - "; return eval (s.split (1) [1])}Beide Unterprogramme verwenden die Länge des anderen zur Berechnung ihrer eigenen Konstante, sodass kein Zeichen entfernt werden kannquelle