En tiempo de ejecución, sigue solicitando una línea de entrada hasta que la entrada del usuario no sea el nombre de un archivo o directorio existente u otro elemento del sistema de archivos, en relación con el directorio de trabajo actual. Luego devuelva / imprima el último nombre de archivo ingresado. Puede suponer que todas las entradas del usuario serán nombres de archivo válidos.
Pseudocódigo 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)
Pseudocódigo 2
LET TEXT = "."
WHILE HASFILE(TEXT) DO
TEXT = PROMPT("")
ENDWHILE
RETURN TEXT
Ejemplos de entrada del usuario que provocarán una nueva solicitud cuando esté en TIO:
.
..
.env.tio
/
/bin/[
/lost+found
Ejemplos de entrada del usuario que regresará cuando esté en TIO:
...
env.tio
../../bin/]
/lost/found
Respuestas:
Lote, 37 bytes
(Por alguna razón, Windows 10 actual
CMD.EXE
corrompe el título cuando ejecuta el%0
.)fuente
Mathematica,
3328 bytesEsto supone el entorno del cuaderno de Mathematica donde podemos consultar la entrada del usuario con
Input[]
. La entrada del usuario debe ser un literal de cadena real , por ejemplo, en"ab/cd.ef"
lugar de soloab/cd.ef
. Lo bueno es que la entrada puede ser una expresión arbitraria de Mathematica que calcula la cadena de entrada.Esto define un símbolo
f
que, cuando se evalúa, realiza el cálculo requerido y, en última instancia, se evalúa hasta la primera entrada de usuario inexistente. Es esencialmente una función nular, donde no tenemos que incluir...[]
para llamarla.También podemos guardar un montón de bytes sobre una
If
expresión tradicional haciendo uso del operador de sustitución de patrones/.
.fuente
Perl 5
-ln
,1210 bytes-2 bytes gracias a @DomHastings
Pruébalo en línea!
fuente
-e
funciona sin especificar$_
, podría no funcionar para algunos casos, aunque supongo ...-e
era una excepción, pero por supuesto que no lo esBash, 29
fuente
.code.tio
que contiene el cuerpo del script, pero no hay información sobre cómo ejecutarlo. Sin embargo, no estoy seguro de si hay una buena manera de evitar el shebang o si este script debe estar en tu camino.$0
a. $0
. Pruébalo en línea! . Dado que.
utiliza nombres de ruta relativos y el shell actual.*
como entrada?PowerShell 2 (hasta 6), 35 bytes
Read-Host
espera la entrada (si se le da una cadena como parámetro, usa la cadena como indicador). Si la entrada proporcionada es un nombre de archivo (o nombre de carpeta) para uno que existe, seTest-Path
devuelve$true
, y el bloque de no hacer nada se{}
ejecuta y vuelve a solicitar la entrada. Si seTest-Path
devuelve$false
porque la entrada no es un archivo o carpeta existente, el bloque de no hacer nada no se ejecuta y se imprime el nombre de la entrada.fuente
C (gcc) , 62 bytes
Pruébalo en línea!
fuente
while(gets(b),!access(b,0));
para guardar 7 bytes.Funky , 40 bytes
En un verdadero estilo funky, esto utiliza palabras clave atascadas entre sí, paréntesis inigualables y palabras clave implícitas. Limpiado, esto se ve así:
Descompostura
fuente
Haskell , 76 bytes
Pruébalo en línea!
Devuelve
IO x
dondex
está el nombre ingresado del archivo que no existe.Sin golf
fuente
R ,
6651 bytes-15 bytes gracias a plannapus
Ejecuta un bucle potencialmente infinito, donde en cada iteración
s
a=T
opción paralist.files()
debe usarse para recoger cosas como..
)s
está en esa lista, pasamos a la siguiente iteración; si no, rompemos el ciclo e imprimimoss
.fuente
while((s=readline())%in%list.files(a=T)){};print(s)
?list.files
ydir
son sinónimos, por lo que puede reemplazarlodir
aquí.readline()
conscan(,'')
print
concat
Python 3 , 55 bytes
Pruébalo en línea!
-4 bytes gracias a ManfP
-6 bytes gracias a Rick Rongen
fuente
input()
con"."
import os
yos.path.exists
es tres bytes más corto.import glob
ywhile glob.glob(s):...
en una edición.C #, 101 bytes
Para cada uno de los 4 valores de retorno válidos:
Pruébalo en línea!(devoluciones '...')
Pruébalo en línea!(devuelve 'env.tio')
Pruébalo en línea!(devuelve '../..bin/])
Pruébalo en línea!(devuelve '/ perdido / encontrado)
Sin golf
Explicación
se basa en el hecho de que File.GetAttributes () produce una excepción si el objeto del sistema de archivos especificado en su argumento no existe.
fuente
Powershell 3.0, 75 bytes
Primer intento; Estoy seguro de que hay algunas optimizaciones que podría hacer.
Una forma ligeramente más legible:
fuente
$PSScriptRoot\
?for
lugar, puede usar un bucle, que le permite mover la inicialización al constructor del buclefor($x=1;$x){...}
. En segundo lugar, puede deshacerse de élWrite-Host
ya que hay un implícitoWrite-Output
en la finalización del programa para cualquier cosa que quede en la tubería, por lo que basta con irse de$i
allí.Java 9, 87 bytes
Sin golf
La JVM de TIO aparentemente no tiene sistema
Console
, por lo que no es comprobable allí (verSystem.console()
).fuente
JavaScript (Node.js) ,
158118 bytesPruébalo en línea!
Gracias a @ ConorO'Brien por proponer una versión más corta. Objetos en línea en lugar de usar consts y utilizar la condición de salida de error en lugar de salir explícitamente.
fuente
const
y también puede reemplazar cada variable con su definición. Luego, en lugar de usars=>{if(...){...}}
, puedes usars=>require('fs').existsSync(s)||process.exit(console.log(s))
. Además, puede salir con un error, por lo que puede escribir el lambda comos=>require('fs').existsSync(s)||--console.log(s)
. Pruébalo en línea!Limpio ,
10094 bytesPruébalo en línea!
versión de una sola expresión:
Pruébalo en línea!
fuente
Perl 6, 39 bytes
Esto funciona en REPL, pero no parece funcionar correctamente en TIO.
fuente
say first !*.IO.e,lines
(23 bytes)?{}while ($_=get).IO.e;.say
debería funcionar.PHP, 43 bytes
Ejecutar como CLI. Muy fácil de entender.
fuente
Ruby ,
40 3937 bytesPruébalo en línea!
fuente
APL (Dyalog) , 17 bytes
Pruébalo en línea!
fuente
the_prev_wasnt_filename
lugar deenv.tio
). Cambie⍵
→⍺
y luego puede deshacerse de él'.'
también.Kotlin , 67 bytes
Pruébalo en línea!
fuente
Adjunto , 35 bytes
Pruébalo en línea!
Soluciones alternativas
35 bytes:
{If[FileExists[x:=Prompt[]],$[],x]}
función recursiva.37 bytes:,
{NestWhile[p:=Prompt,p[],FileExists]}
función iterativa.fuente
Min , 38 bytes
Deja el último nombre de archivo ingresado en la pila.
Explicación
fuente
SmileBASIC, 27 bytes
fuente