W czasie wykonywania monituj o wiersz danych wejściowych, dopóki dane wejściowe użytkownika nie będą nazwą istniejącego pliku lub katalogu lub innego elementu systemu plików w stosunku do bieżącego katalogu roboczego. Następnie zwróć / wydrukuj ostatnio wprowadzoną nazwę pliku. Możesz założyć, że wszystkie dane wejściowe użytkownika będą poprawnymi nazwami plików.
Pseudokod 1
myform = new form("GUI")
myform.mytxt = new editfield("")
myform.ok = new button("OK")
repeat
waitfor(myform.ok,"click")
until not filesystem.exists(myform.mytxt.content)
return(myform.mytxt.content)
Pseudokod 2
LET TEXT = "."
WHILE HASFILE(TEXT) DO
TEXT = PROMPT("")
ENDWHILE
RETURN TEXT
Przykłady danych wejściowych użytkownika, które spowodują ponowne monitowanie w TIO:
.
..
.env.tio
/
/bin/[
/lost+found
Przykłady danych wprowadzanych przez użytkownika, które powrócą podczas korzystania z TIO:
...
env.tio
../../bin/]
/lost/found
Odpowiedzi:
Partia, 37 bajtów
(Z jakiegoś powodu obecny system Windows 10
CMD.EXE
uszkadza tytuł podczas wykonywania%0
.)źródło
Mathematica,
3328 bajtówTo zakłada środowisko notebooka Mathematica, w którym możemy sprawdzać dane wejściowe od użytkownika
Input[]
. Dane wejściowe użytkownika powinny być dosłowne ciągiem literalnym , więc np."ab/cd.ef"
Zamiast po prostuab/cd.ef
. Plusem jest to, że dane wejściowe mogą być dowolnym wyrażeniem Mathematica, które oblicza łańcuch wejściowy.Definiuje to symbol,
f
który po ocenie wykonuje wymagane obliczenia i ostatecznie ocenia na pierwszym nieistniejącym danych wejściowych użytkownika. Zasadniczo jest to funkcja zerowa, w której nie musimy uwzględniać...[]
jej wywołania.Możemy również zapisać wiązkę bajtów nad tradycyjnym
If
wyrażeniem, korzystając z operatora podstawienia wzorca/.
.źródło
Perl 5
-ln
,1210 bajtów-2 bajty dzięki @DomHastings
Wypróbuj online!
źródło
-e
działa bez sprecyzowania$_
, ale może nie działać w niektórych przypadkach, ale chyba ...-e
był wyjątkiem, ale oczywiście nie jestBash, 29
źródło
.code.tio
, który zawiera korpus skryptu, ale brak informacji o tym, jak go uruchomić. Nie jestem jednak pewien, czy istnieje dobry sposób na obejście shebang, czy ten skrypt musi być na twojej drodze.$0
na. $0
. Wypróbuj online! . Ponieważ.
używa względnych nazw ścieżek i bieżącej powłoki.*
za wkład?PowerShell 2 (do 6), 35 bajtów
Read-Host
czeka na dane wejściowe (jeśli podano ciąg jako parametr, używa go jako zachęty). Jeśli podanym wejściem jest nazwa pliku (lub nazwa folderu) dla istniejącego, zostanieTest-Path
zwrócony$true
, a blok „nic nie rób” zostanie{}
wykonany i zostanie ponownie wyświetlony monit o podanie. JeśliTest-Path
zwraca,$false
ponieważ dane wejściowe nie są zachowanym plikiem lub folderem, blok „nic nie rób” nie jest wykonywany, a nazwa wejścia jest drukowana.źródło
C (gcc) , 62 bajty
Wypróbuj online!
źródło
while(gets(b),!access(b,0));
aby zapisać 7 bajtów.Funky , 40 bajtów
W prawdziwym stylu funky używa słów kluczowych zaciętych względem siebie, niepasujących nawiasów i ukrytych słów kluczowych. Oczyszczone wygląda to następująco:
Awaria
źródło
Haskell , 76 bajtów
Wypróbuj online!
Zwraca
IO x
gdziex
jest wprowadzona nazwa pliku, który nie istnieje.Nie golfił
źródło
R ,
6651 bajtów-15 bajtów dzięki plannapusowi
Uruchamia potencjalnie nieskończoną pętlę, w której na każdej iteracji
s
a=T
opcji dla,list.files()
aby odebrać takie rzeczy..
)s
jest na tej liście, przechodzimy do następnej iteracji; jeśli nie, zrywamy pętlę i drukujemys
.źródło
while((s=readline())%in%list.files(a=T)){};print(s)
?list.files
idir
są synonimami, więc możesz jedir
tutaj zastąpić .readline()
zscan(,'')
print
zcat
Python 3 , 55 bajtów
Wypróbuj online!
-4 bajty dzięki ManfP
-6 bajtów dzięki Rickowi Rongenowi
źródło
input()
z"."
import os
ios.path.exists
jest trzy bajty krótszy.import glob
i dokonałwhile glob.glob(s):...
edycji.C #, 101 bajtów
Dla każdej z 4 prawidłowych wartości zwracanych:
Wypróbuj online! (zwroty '...')
Wypróbuj online! (zwraca „env.tio”)
Wypróbuj online! (zwraca „../..bin/])
Wypróbuj online! (zwraca / zgubił / znaleziono)
Nie golfił
Wyjaśnienie
polega na tym, że File.GetAttributes () zgłasza wyjątek, jeśli obiekt systemu plików określony w jego argumencie nie istnieje.
źródło
Powershell 3.0, 75 bajtów
Pierwsze podejscie; Jestem pewien, że mogę dokonać kilku optymalizacji.
Nieco bardziej czytelna forma:
źródło
$PSScriptRoot\
?for
zamiast tego możesz użyć pętli, która pozwala przenieść inicjalizację do konstruktora pętlifor($x=1;$x){...}
. Po drugie, możesz się tego pozbyć,Write-Host
ponieważWrite-Output
po zakończeniu programu istnieje domniemane zakończenie wszystkiego, co pozostanie w potoku, więc samo wyjście$i
tam wystarczy.Java 9, 87 bajtów
Nie golfił
JVM TIO najwyraźniej nie ma systemu
Console
, więc nie można go tam przetestować (patrzSystem.console()
).źródło
JavaScript (Node.js) ,
158118 bajtówWypróbuj online!
Podziękowania dla @ ConorO'Brien za opracowanie krótszej wersji. Obiekty wstawiane zamiast używać stałych i wykorzystywać warunek wyjścia z błędu zamiast jawnego wychodzenia.
źródło
const
, a także zastąpić każdą zmienną jej definicją. Następnie zamiast używaćs=>{if(...){...}}
, możesz użyćs=>require('fs').existsSync(s)||process.exit(console.log(s))
. Dodatkowo możesz wyjść z błędem, więc możesz zapisać lambda jakos=>require('fs').existsSync(s)||--console.log(s)
. Wypróbuj online!Czysty ,
10094 bajtówWypróbuj online!
wersja z jednym wyrażeniem:
Wypróbuj online!
źródło
Perl 6, 39 bajtów
Działa to w REPL, ale wydaje się, że nie działa poprawnie w TIO.
źródło
say first !*.IO.e,lines
(23 bajtami)?{}while ($_=get).IO.e;.say
powinno działać.PHP, 43 bajty
Uruchom jako CLI. Dość łatwy do zrozumienia.
źródło
Rubinowy ,
40 3937 bajtówWypróbuj online!
źródło
APL (Dyalog) , 17 bajtów
Wypróbuj online!
źródło
the_prev_wasnt_filename
zamiastenv.tio
). Zmień⍵
→⍺
i wtedy możesz się też pozbyć'.'
.Kotlin , 67 bajtów
Wypróbuj online!
źródło
Attache , 35 bajtów
Wypróbuj online!
Alternatywne rozwiązania
35 bajtów:
{If[FileExists[x:=Prompt[]],$[],x]}
funkcja rekurencyjna.37 bajtów
{NestWhile[p:=Prompt,p[],FileExists]}
:, funkcja iteracyjna.źródło
Min. 38 bajtów
Pozostawia ostatnio wprowadzoną nazwę pliku na stosie.
Wyjaśnienie
źródło
SmileBASIC, 27 bajtów
źródło