Pada saat runtime, teruslah meminta jalur input sampai input pengguna bukan nama file atau direktori yang ada atau item sistem file lainnya, relatif terhadap direktori kerja saat ini. Kemudian kembalikan / cetak nama file yang terakhir dimasukkan. Anda dapat mengasumsikan bahwa semua input pengguna akan menjadi nama file yang valid.
Kode semu 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)
Kode semu 2
LET TEXT = "."
WHILE HASFILE(TEXT) DO
TEXT = PROMPT("")
ENDWHILE
RETURN TEXT
Contoh input pengguna yang akan menyebabkan permintaan kembali saat di TIO:
.
..
.env.tio
/
/bin/[
/lost+found
Contoh input pengguna yang akan kembali ketika di TIO:
...
env.tio
../../bin/]
/lost/found
Jawaban:
Batch, 37 byte
(Untuk beberapa alasan Windows 10 saat ini
CMD.EXE
merusak judul ketika mengeksekusi%0
.)sumber
Mathematica,
3328 byteIni mengasumsikan lingkungan notebook Mathematica tempat kami dapat meminta input dari pengguna
Input[]
. Input pengguna harus berupa string literal aktual , jadi misal"ab/cd.ef"
alih-alih adilab/cd.ef
. Sisi positifnya adalah input dapat berupa ekspresi Mathematica yang berubah-ubah yang menghitung string input.Ini mendefinisikan simbol
f
yang, ketika dievaluasi melakukan perhitungan yang diperlukan dan akhirnya mengevaluasi ke input pengguna pertama yang tidak ada. Ini pada dasarnya fungsi nullary, di mana kita tidak harus memasukkan...[]
untuk memanggilnya.Kita juga dapat menyimpan banyak byte pada
If
ekspresi tradisional dengan memanfaatkan operator substitusi pola/.
.sumber
Perl 5
-ln
,1210 byte-2 byte terima kasih kepada @DomHastings
Cobalah online!
sumber
-e
bekerja tanpa menentukan$_
, mungkin tidak bekerja untuk beberapa kasus meskipun saya kira ...-e
itu pengecualian tapi tentu saja tidakBash, 29
sumber
.code.tio
yang berisi isi skrip, tetapi tidak ada informasi tentang cara menjalankannya. Saya tidak yakin apakah ada cara yang bagus untuk bekerja di sekitar shebang atau skrip ini perlu berada di jalur Anda.$0
ke. $0
. Cobalah online! . Karena.
menggunakan nama jalur relatif dan shell saat ini.*
sebagai input?PowerShell 2 (hingga 6), 35 byte
Read-Host
menunggu input (jika diberi string sebagai parameter, gunakan string sebagai prompt). Jika input yang disediakan adalah nama file (atau nama folder) untuk yang ada,Test-Path
kembali$true
, dan blok do-nothing{}
dieksekusi, dan ia kembali meminta input. JikaTest-Path
kembali$false
karena input bukan file atau folder yang masih ada, blok do-nothing tidak mengeksekusi, dan nama input dicetak.sumber
C (gcc) , 62 byte
Cobalah online!
sumber
while(gets(b),!access(b,0));
untuk menyimpan 7 byte.Funky , 40 byte
Dalam gaya funky yang sebenarnya, ini menggunakan kata kunci yang macet terhadap satu sama lain, tanda kurung yang tidak cocok dan kata kunci tersirat. Dibersihkan, ini terlihat seperti:
Kerusakan
sumber
Haskell , 76 byte
Cobalah online!
Mengembalikan
IO x
tempatx
nama nama file yang dimasukkan tidak ada.Tidak disatukan
sumber
R ,
6651 byte-15 byte terima kasih kepada plannapus
Menjalankan loop berpotensi tak terbatas, di mana pada setiap iterasi
s
a=T
opsi untuklist.files()
harus digunakan untuk mengambil hal-hal seperti..
)s
ada dalam daftar itu, kita pergi ke iterasi berikutnya; jika tidak, kita putuskan loop dan cetaks
.sumber
while((s=readline())%in%list.files(a=T)){};print(s)
?list.files
dandir
sinonim, jadi Anda bisa menggantinya dengan didir
sini.readline()
denganscan(,'')
print
dengancat
Python 3 , 55 byte
Cobalah online!
-4 bytes berkat ManfP
-6 bytes berkat Rick Rongen
sumber
input()
dengan"."
import os
danos.path.exists
tiga byte lebih pendek.import glob
danwhile glob.glob(s):...
mengedit.C #, 101 byte
Untuk masing-masing dari 4 nilai pengembalian yang valid:
Cobalah online! (mengembalikan '...')
Cobalah online! (mengembalikan 'env.tio')
Cobalah online! (pengembalian '../..bin/])
Cobalah online! (pengembalian '/ hilang / ditemukan)
Tidak disatukan
Penjelasan
bergantung pada kenyataan bahwa File.GetAttributes () melempar pengecualian jika objek sistem file yang ditentukan dalam argumennya tidak ada.
sumber
Powershell 3.0, 75 byte
Percobaan pertama; Saya yakin ada beberapa optimasi yang bisa saya lakukan.
Bentuk yang sedikit lebih mudah dibaca:
sumber
$PSScriptRoot\
?for
loop, yang memungkinkan Anda untuk memindahkan inisialisasi ke konstruktor loopfor($x=1;$x){...}
. Kedua, Anda dapat menyingkirkannyaWrite-Host
karena ada implisitWrite-Output
pada penyelesaian program untuk apa pun yang tersisa di dalam pipa, jadi hanya meninggalkannya saja$i
sudah cukup.Java 9, 87 byte
Tidak disatukan
JVM TIO tampaknya tidak memiliki sistem
Console
, jadi tidak dapat diuji di sana (lihatSystem.console()
).sumber
JavaScript (Node.js) ,
158118 byteCobalah online!
Kredit ke @ ConorO'Brien untuk versi yang lebih pendek. Objek yang disorot bukannya menggunakan const dan memanfaatkan kondisi keluar kesalahan alih-alih keluar secara eksplisit.
sumber
const
, dan Anda juga dapat mengganti setiap variabel dengan definisi itu. Kemudian, alih-alih menggunakans=>{if(...){...}}
, Anda bisa menggunakans=>require('fs').existsSync(s)||process.exit(console.log(s))
. Selain itu, Anda dapat keluar dengan kesalahan, sehingga Anda dapat menulis lambda sebagais=>require('fs').existsSync(s)||--console.log(s)
. Cobalah online!Bersih ,
10094 byteCobalah online!
versi ekspresi tunggal:
Cobalah online!
sumber
Perl 6, 39 byte
Ini berfungsi di REPL, tetapi sepertinya tidak berfungsi dengan baik di TIO.
sumber
say first !*.IO.e,lines
(23 byte)?{}while ($_=get).IO.e;.say
seharusnya berfungsi.PHP, 43 byte
Jalankan sebagai CLI. Cukup mudah dimengerti.
sumber
Ruby ,
40 3937 byteCobalah online!
sumber
APL (Dyalog) , 17 byte
Cobalah online!
sumber
the_prev_wasnt_filename
bukanenv.tio
) Ubah⍵
→⍺
lalu Anda bisa menyingkirkannya'.'
juga.Kotlin , 67 byte
Cobalah online!
sumber
Attache , 35 byte
Cobalah online!
Solusi alternatif
35 byte:
{If[FileExists[x:=Prompt[]],$[],x]}
:, fungsi rekursif.37 byte
{NestWhile[p:=Prompt,p[],FileExists]}
:, fungsi berulang.sumber
Min , 38 byte
Meninggalkan nama file yang terakhir dimasukkan pada tumpukan.
Penjelasan
sumber
SmileBASIC, 27 byte
sumber