Lors de l'exécution, continuez à demander une ligne d'entrée jusqu'à ce que l'entrée utilisateur ne soit pas le nom d'un fichier ou d'un répertoire existant ou d'un autre élément du système de fichiers, par rapport au répertoire de travail actuel. Puis retournez / imprimez le dernier nom de fichier entré. Vous pouvez supposer que toutes les entrées utilisateur seront des noms de fichiers valides.
Pseudo-code 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)
Pseudo-code 2
LET TEXT = "."
WHILE HASFILE(TEXT) DO
TEXT = PROMPT("")
ENDWHILE
RETURN TEXT
Exemples de saisie utilisateur qui entraîneront une nouvelle invite lorsque sur TIO:
.
..
.env.tio
/
/bin/[
/lost+found
Exemples d'entrées utilisateur qui seront renvoyées sur TIO:
...
env.tio
../../bin/]
/lost/found
Réponses:
Lot, 37 octets
(Pour une raison quelconque, Windows 10 actuel
CMD.EXE
corrompt le titre lorsqu'il exécute le%0
.)la source
Mathematica,
3328 octetsCela suppose l'environnement de bloc-notes de Mathematica dans lequel nous pouvons interroger les entrées de l'utilisateur avec
Input[]
. L'entrée utilisateur doit être un littéral de chaîne réel , par exemple"ab/cd.ef"
au lieu de simplementab/cd.ef
. L'avantage est que l'entrée peut être une expression Mathematica arbitraire qui calcule la chaîne d'entrée.Ceci définit un symbole
f
qui, une fois évalué, effectue le calcul requis et évalue finalement la première entrée utilisateur inexistante. C'est essentiellement une fonction nulle, où nous n'avons pas à l'inclure...[]
pour l'appeler.Nous pouvons également enregistrer un tas d'octets sur une
If
expression traditionnelle en utilisant l'opérateur de substitution de modèle/.
.la source
Perl 5
-ln
,1210 octets-2 octets grâce à @DomHastings
Essayez-le en ligne!
la source
-e
fonctionne sans précision$_
, peut ne pas fonctionner dans certains cas, bien que je suppose ...-e
c'était une exception, mais bien sûr que ce n'est pas le casBash, 29
la source
.code.tio
qui contient le corps du script, mais aucune information sur la façon de l'exécuter. Je ne sais pas s'il existe une bonne façon de contourner le shebang ou si ce script doit être sur votre chemin, cependant.$0
à. $0
. Essayez-le en ligne! . Depuis.
utilise des noms de chemin relatifs et le shell actuel.*
comme entrée?PowerShell 2 (jusqu'à 6), 35 octets
Read-Host
attend l'entrée (si une chaîne est donnée en paramètre, utilise la chaîne comme invite). Si l'entrée fournie est un nom de fichier (ou un nom de dossier) pour celui qui existe,Test-Path
retourne$true
et le bloc de ne rien faire{}
s'exécute, et il ré-invite à entrer. SiTest-Path
renvoie$false
car l'entrée n'est pas un fichier ou un dossier existant, le bloc ne rien faire ne s'exécute pas et le nom de l'entrée est imprimé.la source
C (gcc) , 62 octets
Essayez-le en ligne!
la source
while(gets(b),!access(b,0));
pour enregistrer 7 octets.Funky , 40 octets
Dans un véritable style funky, cela utilise des mots clés coincés les uns contre les autres, des crochets inégalés et des mots clés implicites. Nettoyé, cela ressemble à:
Panne
la source
Haskell , 76 octets
Essayez-le en ligne!
Renvoie
IO x
oùx
est le nom entré du fichier qui n'existe pas.Non golfé
la source
R ,
6651 octets-15 octets grâce à plannapus
Exécute une boucle potentiellement infinie, où à chaque itération
s
a=T
option pourlist.files()
doit être utilisée pour ramasser des choses comme..
)s
est dans cette liste, nous passons à l'itération suivante; sinon, nous rompons la boucle et imprimonss
.la source
while((s=readline())%in%list.files(a=T)){};print(s)
?list.files
etdir
sont des synonymes, vous pouvez donc le remplacer pardir
ici.readline()
parscan(,'')
print
aveccat
Python 3 , 55 octets
Essayez-le en ligne!
-4 octets grâce à ManfP
-6 octets grâce à Rick Rongen
la source
input()
par"."
import os
etos.path.exists
est de trois octets plus court.import glob
etwhile glob.glob(s):...
dans une édition.C #, 101 octets
Pour chacune des 4 valeurs de retour valides:
Essayez-le en ligne! (Retour '...')
Essayez-le en ligne! (retourne 'env.tio')
Essayez-le en ligne! (renvoie '../..bin/])
Essayez-le en ligne! (retourne / perdu / trouvé)
Non golfé
Explication
repose sur le fait que File.GetAttributes () lève une exception si l'objet du système de fichiers spécifié dans son argument n'existe pas.
la source
Powershell 3.0, 75 octets
Premier essai; Je suis sûr qu'il y a quelques optimisations que je pourrais faire.
Une forme un peu plus lisible:
la source
$PSScriptRoot\
?for
boucle à la place, ce qui vous permet de déplacer l'initialisation dans le constructeur de la bouclefor($x=1;$x){...}
. Deuxièmement, vous pouvez vous débarrasser duWrite-Host
car il y a un impliciteWrite-Output
à la fin du programme pour tout ce qui reste sur le pipeline, donc il suffit de le laisser$i
.Java 9, 87 octets
Non golfé
La JVM de TIO n'a apparemment pas de système
Console
, elle n'est donc pas testable (voirSystem.console()
).la source
JavaScript (Node.js) ,
158118 octetsEssayez-le en ligne!
Nous remercions @ ConorO'Brien d'avoir proposé une version plus courte. Objets alignés au lieu d'utiliser des consts et d'utiliser une condition de sortie d'erreur au lieu de quitter explicitement.
la source
const
, et vous pouvez également remplacer chaque variable par sa définition. Ensuite, au lieu d'utilisers=>{if(...){...}}
, vous pouvez utilisers=>require('fs').existsSync(s)||process.exit(console.log(s))
. De plus, vous pouvez quitter avec une erreur, vous pouvez donc écrire le lambda en tant ques=>require('fs').existsSync(s)||--console.log(s)
. Essayez-le en ligne!Nettoyer ,
10094 octetsEssayez-le en ligne!
version à expression simple:
Essayez-le en ligne!
la source
Perl 6, 39 octets
Cela fonctionne dans le REPL, mais il ne semble pas fonctionner correctement dans TIO.
la source
say first !*.IO.e,lines
(23 octets)?{}while ($_=get).IO.e;.say
devrait fonctionner.PHP, 43 octets
Exécuter en tant que CLI. Assez facile à comprendre.
la source
Rubis ,
40 3937 octetsEssayez-le en ligne!
la source
APL (Dyalog) , 17 octets
Essayez-le en ligne!
la source
the_prev_wasnt_filename
au lieu deenv.tio
). Changez⍵
→⍺
et vous pourrez vous en débarrasser'.'
aussi.Kotlin , 67 octets
Essayez-le en ligne!
la source
Attaché , 35 octets
Essayez-le en ligne!
Solutions alternatives
35 octets
{If[FileExists[x:=Prompt[]],$[],x]}
:, fonction récursive.37 octets
{NestWhile[p:=Prompt,p[],FileExists]}
:, fonction itérative.la source
Min , 38 octets
Laisse le dernier nom de fichier entré sur la pile.
Explication
la source
SmileBASIC, 27 octets
la source