Ich habe in einer Reihe von PHP - Code Golf teilnehmend Herausforderungen vor kurzem und einige der Techniken , die verwendet werden , um Daten aus einer Datei zu lesen, wie fopen()
und fread()
oder file_get_contents()
meinem Code auf der char Zählung ein Schlagen wirklich geben. Insbesondere die Methoden zum Einlesen der Befehlszeileneingabe.
Meine Frage ist, was ist der schnellste Weg (am wenigsten Tastenanschläge), um den Inhalt einer Datei zu lesen und zu schreiben, und was ist der schnellste Weg (am wenigsten Tastenanschläge), um eine Zeile von der Eingabeaufforderung zu lesen?
(Hinweis: Da dies Code Golf ist, kann ich keine externen Bibliotheken verwenden.)
quelle
Je nach Eingabeformat können fgetcsv und fscanf häufig auch Byte-Sparer sein.
Angenommen, jede Zeile Ihrer Eingabe besteht aus zwei durch Leerzeichen getrennten Ganzzahlen. Um diese Werte in ein Array einzulesen, können Sie Folgendes verwenden:
Oder wenn Sie jeden von ihnen in eine andere Variable einlesen möchten:
quelle
Nicht-physische Dateien lesen (Eingabe lesen)
Wenn Sie einen einzeiligen Eingang haben, verwenden Sie
-F
und$argn
, um aus STDIN zu lesen. Dies ist nur 5 Bytes und viel kürzer als andere Methoden.Beispiel: Probieren Sie es online aus!
Grundsätzlich wird
-F
Ihr Code einmal für jede einzelne Zeile der Eingabe ausgeführt und$argn
mit einer Zeichenfolge dieser Eingabezeile gefüllt. Weitere Informationen: https://www.php.net/manual/en/features.commandline.options.phpWenn Sie einen mehrzeiligen Eingang haben, verwenden Sie
$argv
.$argv
ist ein Array, das ausgehend vom Index1
alle Argumente enthält, die Sie an Ihren Code übergeben. Sie können also$argv[1]
usw. verwenden, was nur 8 Bytes entspricht. Sie können auch mehrere Argumente übergeben und diese durchlaufen,for(;$a=$argv[++$i];)
was normalerweise kürzer als bei anderen Methoden ist.Beispiel 1: Probieren Sie es online aus!
Beispiel 2: Probieren Sie es online aus!
Weitere Informationen: https://www.php.net/manual/en/reserved.variables.argv.php
quelle