Zielsetzung
Sie müssen ein Programm schreiben, das eine Ganzzahl n
als Eingabe empfängt (von der Befehlszeile) und sich selbst (das Programm) n
Verzeichnisse im Verzeichnisbaum einbettet . Beispiel mit n=5
:
Die Ordnernamen können beliebig sein. Die einzigen Voraussetzungen sind, dass die Tiefe korrekt ist und dass das Programm an seiner neuen Stelle im Verzeichnisbaum erneut ausgeführt werden kann und dass die neue Quelldatei denselben Dateinamen behält.
Boni:
- Punktzahl * 0.9 Wenn die Verzeichnisse alle einen anderen Namen haben (muss mindestens bis zur Tiefe 1 000 000 zutreffen)
- Punktzahl * 0,5 Wenn Sie die Quelldatei nicht direkt oder indirekt lesen, verschieben oder auf den Quellcode des Programms zugreifen
code-golf
file-system
schelmisch
quelle
quelle
ln
befehl in * nix? Wenn ich mich nicht irre, wird nur ein weiterer Eintrag für die Datei inode erstellt, und es wird überhaupt kein Inhalt gelesen.Antworten:
Bash, 30 × 0,9 × 0,5 = 13,5
Nimmt Tiefe als erstes Argument. Erstellt eine feste Verknüpfung zu sich selbst in der folgenden Verzeichnisstruktur:
Das Skript kann dann am neuen Speicherort ausgeführt werden, auch wenn
rm
es mit dem alten Skript ausgeführt wird.Erläuterung:
seq -s/ $1
gibt die Zahlen von 1 bis$1
(das erste Argument) aus, getrennt durch einen Schrägstrich.mkdir -p `seq -s` $1
erstellt das von angegebene Verzeichnisseq
,-p
wobei alle Zwischenverzeichnisse erstellt werden.ln $0 $_
Erstellen Sie eine feste Verknüpfung zum aktuell ausgeführten Skript im neu erstellten Verzeichnis.Alt (30 * 0,9 = 27):
Beispiellauf (mit ln):
Vielen Dank an @DigitalTrauma für den Vorschlag zum Ersetzen
$(..)
durch`..`
Danke an @hjk für den Vorschlag
ln
.quelle
$_
!$( )
: codegolf.stackexchange.com/a/25572/11259cp
mitln
, um auch den 0,5-Bonus zu erhalten ...mv
gibt jetzt das Update vom OP und der Bonus von 0,5 ist ebenfalls eingeschränkt. Das bleibt dochln
klar, ja?ln
(Sie brauchen es nicht-s
) würde das Programm tatsächlich in das neue Verzeichnis stellen, so dass es von dort ausgeführt werden kann, ohne jemals seine ursprüngliche Quelle zu lesen, zu verschieben oder darauf zuzugreifen. Ich sage, gehen Sie für den FALCON PUNCH Score von 13,5!C 225 × 0,9 × 0,5 = 101,25
Meine Lösung in C:
Hier in etwas besser lesbarer Form:
Die Prüfung, ob es funktioniert:
Im Quellcode steckt höchstwahrscheinlich viel Potenzial zum Golfen.
quelle
Charge - 48 × 0,9 = 43,2
Dieses Skript erstellt einfach ein neues Verzeichnis und verschiebt die Quelldatei in dieses Verzeichnis
n
.quelle
Zsh,
63605852 * 0,9 =56,75452,246,8Beispiel:
quelle
s=$(<$0)
(Nur zurbash
Veranschaulichung , es schlägt für mich mit 4.3.11 fehl: "Syntaxfehler in der Nähe von unerwartetem Token"; ". Funktioniert aber gut mitzsh
5.0.2)d
vor$i
?1
. Dankefor i in {1..$1};{mkdir $i;cd $i};echo $s>f
.Rebol - 114 * 0,9 * 0,5 = 51,3
Ungolfed:
Ursprüngliche nicht quine Version - 90 * 0.9 = 81
Ungolfed:
quelle
Bash 167 * 0,5 * 0,9 = 75,15
Ich habe mir viel von der tollen Antwort von @ es1024 geliehen , aber diese ist eine echte Quine, daher ist sie für beide Boni qualifiziert.
Auch Muschelquintechniken von hier aus .
quelle
AutoIt3, 106 * 0,9 = 95,4 Bytes
Ein bisschen lang, aber ich kann nicht mit diesen langen Funktions- / Variablennamen helfen:
Rufen Sie es einfach mit
<script/.exe name> <depth>
zB.script.exe 5
.Es funktioniert für eine beliebige Anzahl von Verzeichnissen. Vielleicht sogar mehr, als Ihr Dateisystem verarbeiten kann. : D
Wie es funktioniert:
Es ist nur eine einfache Schleife, die den Index zu einer Zeichenfolge hinzufügt. Dann wird das Verzeichnis (und auch alle übergeordneten Verzeichnisse) erstellt und die Datei kopiert sich in dieses Verzeichnis.
quelle
Node.js,
136133 * 0,9 * 0,5 =61,259,85fs.linkSync
Karten zu dem POSIX Anruf Link , der eine feste Verbindung schafft. Ein ungültiges Argument führt zum Absturz des Programms.quelle
J 82 * 0,9 = 73,8
Dies ist größtenteils ein Port der am häufigsten gewählten Antwort.
Speichern
skittish.ijs
Sie die Datei wie gewünscht und rufen Sie sie über die Befehlszeile mit Ihrer Version von aufjconsole
. Meins ist verbunden mitjc
:quelle
Zsh , 55 × 0,9 × 0,5 = 24,75 Bytes
Ich hatte diese Herausforderung lange im Auge, aber ich wollte sie in Zsh abschließen, ohne externe Programme wie
mkdir
und aufzurufenln
(ansonsten wäre sie identisch mit der Bash-Lösung). Es stellte sich heraus, dass Zsh seine eigenen Versionen dieser Programme zur Verfügung stellen kann!Probieren Sie es online!
quelle