Jeder hat von der Phrase "dort sein oder quadratisch sein" gehört. Also dachte ich, es sei Zeit für eine Herausforderung.
Eingang
Sie nehmen eine vollständige absolute Verzeichnisadresse als Text als Eingabe über STDIN oder eine gleichwertige Adresse.
Ausgabe
Wenn die Verzeichnisadresse existiert und gültig ist, verschiebt sich Ihr Programm in diesen Ordner auf Ihrem Computer. Wenn nicht, wird über STDOUT oder gleichwertig das folgende Quadrat ausgegeben:
+-+
| |
+-+
Bedarf
- Standardlücken sind nicht zulässig.
- Sie können eine einzelne nachgestellte Zeile ausgeben, wenn dies unvermeidbar ist.
- Ihr Programm darf keine Ausgabe erzeugen, wenn es verschoben wurde.
- Ihr Programm muss wieder ausgeführt werden können, egal wohin es verschoben wurde.
Annahmen
- Sie können davon ausgehen, dass die Eingabe niemals leer ist.
- Sie können davon ausgehen, dass an das Verzeichnis niemals ein Dateiname angehängt wurde.
- Sie können davon ausgehen, dass das Eingabeverzeichnis niemals das aktuelle ist.
- Sie können davon ausgehen, dass Sie Berechtigungen zum Schreiben und Ausführen überall haben.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
c:\users\Joe\program.txt
) oder nicht (c:\users\Joe\
)? Muss im letzteren Fall der Name der erstellten Datei mit dem Namen der Quelle übereinstimmen?Antworten:
Bash + Coreutils,
4342 BytesAuf diese Weise wird vermieden, dass die nachgestellte Newline über das Flag -n zum Echo ausgegeben wird.
Ich bin mir nicht ganz sicher, was das OP bedeutet, wenn es "unvermeidlich" ist, eine nachgestellte Zeile zuzulassen.
Wenn es akzeptabel ist, eine nachgestellte Zeile einzufügen, ändern Sie diese
zu
und sparen Sie 3 Bytes für insgesamt 39 Bytes.
quelle
PowerShell ,
59626160 ByteProbieren Sie es online!
Erläuterung
Das PowerShell-
Move-Item
Cmdlet (mv
) benennt eine Datei ebenfalls um. Wenn Sie ein Verzeichnis angeben , das nicht als Ziel existiert, wird die Datei stattdessen in die letzte Komponente umbenannt (sofern die übergeordnete Komponente vorhanden ist).Ich könnte
Test-Path
feststellen, dass das Ziel existiert und ein Verzeichnis ist, aber es ist zu langTest-Path $d -PathT C
.Also benutze ich stattdessen
Get-ChildItem
(ls
) mit dem (verkürzten)-Directory
Parameter und überprüfe$?
, ob es erfolgreich war. Der Ausgang, falls vorhanden, wird zugewiesen,$z
damit er nicht gesehen wird.Dies geschieht in Form eines Arrays mit 2 Elementen und anschließender Indizierung in das Array mit dem booleschen Wert von
$?
, der zu0
oder verschmolzen1
wird. Das erste Array-Element wird also ausgewählt, wenn das Zielverzeichnis nicht vorhanden ist, und das zweite, wenn es vorhanden ist tut.Das erste Array-Element ist eine Zeichenfolge, die die Box enthält (in Anführungszeichen gesetzt). Zeilenumbrüche sind in Strings erlaubt, auch wenn sie keine Heredocs sind. Das zweite Element ist eine Zeichenfolge, die den Befehl move enthält.
Das Ergebnis dieser Array-Auswahl wird zur Ausführung an
Invoke-Expression
(iex
) übergeben. Dies ist notwendig, weil ich nur den eigentlichen Befehl move im Array belasse, er wird ausgeführt, egal was (um das Array zu füllen), was den Zweck zunichte macht.quelle
.code.tio.ps1
, nichtb.ps1
. Das funktioniert. Es scheint jedoch einige Streuausgaben für STDOUT zu geben. Nicht sicher, was das verursacht.gci
, meine Testverzeichnisse wiesen dies nicht auf, da sie keine untergeordneten Elemente enthielten, sodass dies diesen Fehler aufdeckte. Es wird jetzt behoben, indem nur der Ausgang zugewiesen wird. Vielen Dank @Dennis!ls
ist eine kürzere Abkürzung fürgci
ls
ganze Zeit und dann beim Golfen neige ich dazu, es zu vergessen. Vielen Dank.$?
hier Golfspielen gesehen habe.Oktave,
605752 Bytes8 Bytes gespart dank @Stewie
Dies ist ein Skript, das in einer Datei namens lebt
f.m
. Beim Ausführen wird der Benutzer aufgefordert, den Ordner anzugeben, in den die Datei verschoben werden soll. Wenn der Ordner nicht vorhanden ist und der Verschiebevorgang fehlschlägt, wirdmovefile
zurückgegebenfalse
(oder0
), andernfalls wird zurückgegebentrue
(oder1
). Wenn jafalse
, zeigen wir den String an"+-+\n| |\n+-+"
.quelle
Batch, 80 Bytes
Batch gefällt nicht, wenn Sie die Batch-Datei während der Ausführung verschieben. Durch Aufrufen von
%1\%~nx0
(dies ist der neue Name der Batch-Datei) sucht Batch nicht mehr nach der alten Batch-Datei.quelle
Bash + Coreutils, 54 Bytes
Einfach genug. Es führt einen Test durch, um festzustellen, ob das erste Argument vorhanden ist. Wenn es vorhanden ist, verschiebt sich das Programm in das Argument. Andernfalls wird das Quadrat gedruckt.
Funktioniert nicht unter Windows, jedoch unter Bash unter Ubuntu unter Windows / WSL. Nimmt keinen Laufwerksbuchstaben, aber ich denke, das wurde geklärt, um in Ordnung zu sein.
Dieser Account gehört Mendeleev.
quelle
echo -n
damit Sie keine nachgestellte Zeile drucken.Python 3, 71 Bytes
Es muss sich in einer Datei mit dem Namen befinden
f
Relativ einfach. Es versucht, sich in das Verzeichnis zu verschieben, das ihm auf STDIN zugewiesen ist, und druckt die Box, wenn ein Fehler auftritt.
quelle
C 137 Bytes
Ungolfed-Version:
f
Akzeptiert den Dateinamen undz
den Verzeichnisnamen. Zielzeichenfolge ist eine Verkettung vonz
undf
.rename()
wird verwendet, um die Datei an den neuen Speicherort zu verschieben.Das
main()
würde so aussehen:Kann auf jeden Fall irgendwie verkürzt werden!
quelle
Ruby, 58 + 12 = 70 Bytes
Verwendet Flags
-nrfileutils
. Die Eingabe wird aus einer Datei ohne Zeilenumbrüche in STDIN weitergeleitet.quelle
Minecraft ComputerCraft Lua , 74 Bytes
Der Dateiname ist fest mit "f" codiert. Dies läuft auf einem In-Game-Computer und relativ zur Verzeichnisstruktur dieses Computers. Verwendet die integrierte
fs
API von CC Lua .Ungolfed:
quelle