Implementieren Sie den binären Suchalgorithmus so, wie er verwendet wird, um die Quellcode-Revision zu identifizieren, die ein Computersoftwareprogramm beschädigt. Ihr Tool sollte zwei Argumente verwenden, die die früheste und letzte nummerierte Revision für die Suche angeben (beide positive Ganzzahlen), und Sie haben zwei Möglichkeiten, Vergleiche anzustellen:
Führen Sie den Shell-Befehl aus
./test N
, wobei N die Revisionsnummer ist. Wenn der Test erfolgreich ist ( dh die Revision ist gut), wird der Exit-Code 0 zurückgegeben.Rufen Sie die Funktion auf
test(N)
, die andernfalls zurückgegeben wird,true
wenn der Test erfolgreich istfalse
.
Die Standardausgabe muss die Nummer der ersten fehlerhaften Revision sein. Versuchen Sie, den Quellcode Ihres Tools so kurz wie möglich zu halten. Genießen!
test(N)
Funktionsoption hauptsächlich hinzu, um den Programmiersprachen gerecht zu werden, ohne dass eine Standardmethode zum Ausführen von Shell-Befehlen wie JavaScript vorhanden ist.Antworten:
Ruby -
92 82 6260 ZeichenIterativ ist viel kürzer, aber bei weitem nicht so cool wie Schwanz rekursiv.
Die alte rekursive Schwanzmethode als Referenz
Skript testen
Verwendet ein wenig Magie, um die
test
Funktion einzufügen , und führt eine Datei aus, die nur aus dem obigen Code besteht.Ausgabe:
quelle
Python, 64 Zeichen
Dieser ist rekursiv, so dass der Stapel für wirklich große Eingaben überläuft
Testlauf
Ausgänge
quelle
Python - 77 Zeichen
Missbrauch des Python-Halbierungsmoduls. L ist der niedrige Wert, H ist der hohe Wert
Hier ist ein Testlauf
Ausgänge
Erläuterung:
So wird Halbierung definiert. Grundsätzlich erwartet es eine Liste und entscheidet basierend auf dem Wert, den es durch Betrachten findet, ob es nach oben oder unten halbiert werden soll
a[mid]
. Diese Anrufe__getitem__
aufa
, die stattdessen eine Liste der zu sein, eine Klasse ist , dass ich mich definiert haben.quelle
Python - 70 Zeichen
Testlauf
Ausgänge
quelle