Fordern Sie zur Laufzeit so lange eine Eingabezeile an, bis die Benutzereingabe erfolgt nicht mehr der Name einer vorhandenen Datei oder eines vorhandenen Verzeichnisses oder eines anderen Dateisystemelements im Verhältnis zum aktuellen Arbeitsverzeichnis ist. Geben Sie dann den zuletzt eingegebenen Dateinamen zurück bzw. drucken Sie ihn aus. Sie können davon ausgehen, dass alle Benutzereingaben gültige Dateinamen sind.
Pseudocode 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)
Pseudocode 2
LET TEXT = "."
WHILE HASFILE(TEXT) DO
TEXT = PROMPT("")
ENDWHILE
RETURN TEXT
Beispiele für Benutzereingaben, die bei Aktivierung von TIO zu einer erneuten Aufforderung führen:
.
..
.env.tio
/
/bin/[
/lost+found
Beispiele für Benutzereingaben, die bei TIO zurückgegeben werden:
...
env.tio
../../bin/]
/lost/found
Antworten:
Batch, 37 Bytes
(Aus irgendeinem Grund
CMD.EXE
beschädigt aktuelles Windows 10 den Titel, wenn es das ausführt%0
.)quelle
Mathematica,
3328 BytesDies setzt die Notebook-Umgebung von Mathematica voraus, in der Eingaben des Benutzers abgefragt werden können
Input[]
. Die Benutzereingabe sollte ein tatsächliches String-Literal sein , also zB"ab/cd.ef"
statt nurab/cd.ef
. Der Vorteil ist, dass die Eingabe ein beliebiger Mathematica-Ausdruck sein kann, der die Eingabezeichenfolge berechnet.Dies definiert ein Symbol,
f
das bei der Auswertung die erforderliche Berechnung durchführt und letztendlich zur ersten nicht vorhandenen Benutzereingabe auswertet. Es handelt sich im Wesentlichen um eine Nullfunktion, bei der keine Einbeziehung erforderlich ist...[]
sie aufzurufen.Wir können auch eine Menge Bytes gegenüber einem herkömmlichen
If
Ausdruck sparen, indem wir den Operator für die Mustersubstitution verwenden/.
.quelle
Perl 5
-ln
,1210 Bytes-2 Bytes dank @DomHastings
Probieren Sie es online!
quelle
-e
funktioniert ohne Angabe$_
, könnte in einigen Fällen nicht funktionieren, obwohl ich denke ...-e
sei eine Ausnahme, aber das ist es natürlich nichtBash, 29
quelle
.code.tio
das den Hauptteil des Skripts enthielt, aber keine Informationen darüber, wie es ausgeführt werden sollte. Ich bin mir nicht sicher, ob es einen guten Weg gibt, um den Schebang zu umgehen, oder ob dieses Skript auf deinem Weg sein muss.$0
zu. $0
. Probieren Sie es online! . Da.
werden relative Pfadnamen und die aktuelle Shell verwendet.*
unter Input?PowerShell 2 (bis 6), 35 Byte
Read-Host
wartet auf Eingabe (wenn eine Zeichenfolge als Parameter angegeben wird, wird die Zeichenfolge als Eingabeaufforderung verwendet). Wenn die mitgelieferte Eingabe ein Dateiname (oder Ordnername) für eine ist , die vorhanden ist ,Test-Path
kehrt$true
, und die do-nothing - Block{}
ausgeführt wird , und es erneut Aufforderungen zur Eingabe. Wenn derTest-Path
Wert zurückgegeben wird,$false
weil die Eingabe keine vorhandene Datei oder kein vorhandener Ordner ist, wird der Nichtbearbeitungsblock nicht ausgeführt, und der Eingabename wird gedruckt.quelle
C (gcc), 62 bytes
Try it online!
quelle
while(gets(b),!access(b,0));
to save 7 bytes.Funky, 40 bytes
In true funky style, this uses keywords jammed against eachother, unmatching brackets and implicit keywords. Cleaned up, this looks like:
Breakdown
quelle
Haskell, 76 bytes
Try it online!
Returns
IO x
wherex
is the inputted name of the file that does not exist.Ungolfed
quelle
R,
6651 bytes-15 bytes thanks to plannapus
Runs a potentially infinite loop, where on each iteration
s
a=T
option forlist.files()
must be used to pick up things like..
)s
is in that list, we go to the next iteration; if not, we break the loop and prints
.quelle
while((s=readline())%in%list.files(a=T)){};print(s)
?list.files
anddir
are synonyms, so you can replace it withdir
here.readline()
withscan(,'')
print
withcat
Python 3, 55 bytes
Try it online!
-4 bytes thanks to ManfP
-6 bytes thanks to Rick Rongen
quelle
input()
with"."
import os
andos.path.exists
is three bytes shorter.import glob
andwhile glob.glob(s):...
in an edit.C#, 101 bytes
For each of the 4 valid return values:
Try it online! (returns '...')
Try it online! (returns 'env.tio')
Try it online! (returns '../..bin/])
Try it online! (returns '/lost/found)
Ungolfed
Explanation
relies on the fact that File.GetAttributes() throws an exception if file system object specified in its argument doesn't exist.
quelle
Powershell 3.0, 75 bytes
First attempt; I'm sure there are a few optimizations I could make.
A slightly more readable form:
quelle
$PSScriptRoot\
?for
loop instead, which allows you to move the initialization into the loop constructorfor($x=1;$x){...}
. Secondly, you can get rid of theWrite-Host
since there's an implicitWrite-Output
at program completion for anything left on the pipeline, so just leaving$i
there will suffice.Java 9, 87 Bytes
Ungolfed
Die JVM von TIO hat anscheinend kein System
Console
, daher kann sie dort nicht getestet werden (sieheSystem.console()
).quelle
JavaScript (Node.js) ,
158 -118 ByteProbieren Sie es online!
Dank an @ ConorO'Brien für die kürzere Version. Inline-Objekte anstelle der Verwendung von consts und der Verwendung der Fehler-Exit-Bedingung anstelle des expliziten Exits.
quelle
const
und jede Variable durch ihre Definition ersetzen. Danns=>{if(...){...}}
könnten Sie anstelle von verwenden verwendens=>require('fs').existsSync(s)||process.exit(console.log(s))
. Darüber hinaus können Sie mit einem Fehler beenden, so dass Sie das Lambda als schreiben könnens=>require('fs').existsSync(s)||--console.log(s)
. Probieren Sie es online!Sauber ,
10094 BytesProbieren Sie es online!
Version mit einem Ausdruck:
Probieren Sie es online!
quelle
Perl 6, 39 Bytes
Dies funktioniert in der REPL, aber in TIO scheint es nicht richtig zu funktionieren.
quelle
say first !*.IO.e,lines
(23 Bytes)?{}while ($_=get).IO.e;.say
sollte funktionieren.PHP, 43 Bytes
Als CLI ausführen. Ganz einfach zu verstehen.
quelle
Ruby ,
40 3937 BytesProbieren Sie es online!
quelle
APL (Dyalog) , 17 Bytes
Probieren Sie es online!
quelle
the_prev_wasnt_filename
anstelle vonenv.tio
). Ändern⍵
→⍺
und dann können Sie auch loswerden'.'
.Kotlin , 67 Bytes
Probieren Sie es online!
quelle
Attache , 35 Bytes
Probieren Sie es online!
Alternativlösungen
35 Bytes:
{If[FileExists[x:=Prompt[]],$[],x]}
rekursive Funktion.37 Bytes:
{NestWhile[p:=Prompt,p[],FileExists]}
iterative Funktion.quelle
Min , 38 Bytes
Lässt den zuletzt eingegebenen Dateinamen auf dem Stapel.
Erläuterung
quelle
SmileBASIC, 27 Bytes
quelle