Wszyscy słyszeli o wyrażeniu „bądź tam albo bądź kwadratowy”. Pomyślałem więc, że nadszedł czas na wyzwanie.
Wejście
Weź absolutny adres katalogu jako tekst jako dane wejściowe przez STDIN lub równoważny.
Wynik
Jeśli adres katalogu istnieje i jest prawidłowy, program przeniesie się do tego folderu na komputerze. Jeśli nie, wyświetli za pośrednictwem STDOUT lub odpowiednika następującego kwadratu:
+-+
| |
+-+
Wymagania
- Standardowe luki są niedozwolone.
- Możesz wygenerować jeden końcowy znak nowej linii, jeśli jest to nieuniknione.
- Twój program nie może generować danych wyjściowych, jeśli został przeniesiony.
- Twój program musi być w stanie uruchomić się ponownie, gdziekolwiek został przeniesiony.
Założenia
- Możesz założyć, że dane wejściowe nigdy nie są puste.
- Możesz założyć, że do katalogu nigdy nie dołączono nazwy pliku na końcu.
- Możesz założyć, że katalog wejściowy nigdy nie jest bieżący.
- Możesz założyć, że masz uprawnienia do pisania i wykonywania wszędzie.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
c:\users\Joe\program.txt
), czy nie (c:\users\Joe\
)? Czy w drugim przypadku nazwa utworzonego pliku musi być taka sama jak nazwa źródła?Odpowiedzi:
Bash + coreutils,
4342 bajtyPozwala to uniknąć drukowania końcowego znaku nowej linii za pomocą flagi -n do echa.
Nie jestem do końca pewien, co oznacza OP, pozwalając końcowemu znakowi nowej linii, jeśli jest to „nieuniknione”.
Jeśli dopuszczalne jest dodanie końcowego znaku nowej linii, zmień
do
i zapisz 3 bajty, w sumie 39 bajtów.
źródło
PowerShell ,
59626160 bajtówWypróbuj online!
Wyjaśnienie
Polecenie
Move-Item
cmdlet (mv
) programu PowerShell również zmienia nazwę pliku, więc nadanie mu katalogu, który nie istnieje, ponieważ miejsce docelowe po prostu zmienia nazwę pliku na ostatni komponent (o ile istnieje element nadrzędny), więc nie było dobrze.Mógłbym użyć
Test-Path
do ustalenia, czy miejsce docelowe istnieje i jest katalogiem, ale jest za długieTest-Path $d -PathT C
.Zamiast tego używam
Get-ChildItem
(ls
) z parametrem (skróconym)-Directory
i sprawdzam,$?
czy się udało. Dane wyjściowe, jeśli takie istnieją, są przypisane, aby$z
nie były widoczne.Odbywa się to w postaci tablicy z 2 elementami, a następnie indeksowania do tablicy o wartości logicznej
$?
, która zostanie połączona z0
lub1
, więc pierwszy element tablicy jest wybierany, jeśli katalog docelowy nie istnieje, a drugi, jeśli on nie istnieje robi.Pierwszy element tablicy jest ciągiem zawierającym pole (cytowane); znaki nowej linii są dozwolone w ciągach, nawet jeśli nie są heredokami. Drugi element to ciąg znaków zawierający polecenie przenoszenia.
Wynik tego wyboru tablicy jest przesyłany do
Invoke-Expression
(iex
) w celu wykonania. Jest to konieczne, ponieważ po prostu zostawiam rzeczywistą komendę move w tablicy, jest ona wykonywana bez względu na wszystko (aby zapełnić tablicę), co nie spełnia celu.źródło
.code.tio.ps1
, a nieb.ps1
. To działa Wygląda jednak na to, że do STDOUT dochodzi jakiś zbłąkany wynik. Nie jestem pewien, co to powoduje.gci
moich katalogów testowych, ale nie wykazywały tego, ponieważ nie zawierały żadnych elementów potomnych, więc to ujawniło tę wadę. Zostało to teraz naprawione przez przypisanie wyjścia. Dzięki @Dennis!ls
jest to krótszy skrótgci
ls
cały czas, a potem w golfa zapominam o tym. Dziękuję Ci.$?
tutaj w golfa.Oktawa,
605752 bajtów8 bajtów zapisanych dzięki @Stewie
To jest skrypt, który znajduje się w pliku o nazwie
f.m
. Po uruchomieniu poprosi użytkownika o folder do przeniesienia pliku. Jeśli folder nie istnieje, a operacja przenoszenia nie powiedzie się,movefile
zwracafalse
(lub0
) w przeciwnym razie zwracatrue
(lub1
). Jeśli takfalse
, wyświetlamy ciąg"+-+\n| |\n+-+"
.źródło
Partia, 80 bajtów
Batch nie podoba się, jeśli przenosisz plik wsadowy w trakcie działania, więc przez wywołanie
%1\%~nx0
(która jest nową nazwą pliku wsadowego) Batch przestaje szukać starego pliku wsadowego.źródło
Bash + coreutils, 54 bajty
Wystarczająco proste. Wykonuje test, aby sprawdzić, czy pierwszy argument istnieje, jeśli istnieje, program przenosi się do argumentu, w przeciwnym razie drukuje kwadrat.
Nie działa w systemie Windows, jednak działa w Bash na Ubuntu w systemie Windows / WSL. Nie wymaga litery napędu, ale myślę, że wyjaśniono, że jest OK.
To konto jest własnością Mendelejewa.
źródło
echo -n
, aby nie drukować końcowego nowego wiersza.Python 3, 71 bajtów
Musi znajdować się w pliku o nazwie
f
Dość proste. Próbuje przenieść się do dowolnego podanego mu katalogu na STDIN, a jeśli wystąpi błąd, drukuje to pole.
źródło
C 137 bajtów
Wersja bez golfa:
f
akceptuje nazwę pliku iz
akceptuje nazwę katalogu. Ciąg docelowy jest połączeniemz
if
.rename()
służy do przeniesienia pliku do nowej lokalizacji.Wyglądałoby
main()
to tak:Zdecydowanie jakoś skrócić!
źródło
Rubin, 58 + 12 = 70 bajtów
Używa flag
-nrfileutils
. Dane wejściowe są przesyłane z pliku bez znaków nowej linii do STDIN.źródło
Minecraft ComputerCraft Lua , 74 bajty
Nazwa pliku jest zakodowana na stałe jako „f”. Działa na komputerze w grze i działa względem struktury katalogów tego komputera. Używa wbudowanego
fs
interfejsu API CC Lua .Nie golfowany:
źródło