No tempo de execução, continue solicitando uma linha de entrada até que a entrada do usuário não seja o nome de um arquivo ou diretório existente ou outro item do sistema de arquivos, relativo ao diretório de trabalho atual. Em seguida, retorne / imprima o último nome de arquivo digitado. Você pode assumir que todas as entradas do usuário serão nomes de arquivos válidos.
Pseudo-có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
Exemplos de entrada do usuário que causarão um novo aviso quando estiver no TIO:
.
..
.env.tio
/
/bin/[
/lost+found
Exemplos de entrada do usuário que retornarão quando estiver no TIO:
...
env.tio
../../bin/]
/lost/found
Respostas:
Lote, 37 bytes
(Por algum motivo, o Windows 10 atual
CMD.EXE
corrompe o título quando executa o%0
.)fonte
Mathematica,
3328 bytesIsso pressupõe o ambiente de notebook do Mathematica, onde podemos consultar as entradas do usuário
Input[]
. A entrada do usuário deve ser uma literal de cadeia de caracteres real , portanto, em"ab/cd.ef"
vez de apenasab/cd.ef
. A vantagem é que a entrada pode ser uma expressão arbitrária do Mathematica que calcula a sequência de entrada.Isso define um símbolo
f
que, quando avaliado, executa a computação necessária e, por fim, avalia a primeira entrada de usuário inexistente. É essencialmente uma função nula, na qual não precisamos incluir...[]
para chamá-lo.Também podemos salvar um monte de bytes em uma
If
expressão tradicional usando o operador de substituição de padrão/.
.fonte
Perl 5
-ln
,1210 bytes-2 bytes graças a @DomHastings
Experimente online!
fonte
-e
obras sem especificar$_
, pode não funcionar para alguns casos que eu acho ...-e
era uma exceção, mas é claro que não é #Bash, 29
fonte
.code.tio
que contém o corpo do script, mas nenhuma informação sobre como executá-lo. Não tenho certeza se existe uma boa maneira de contornar o shebang ou se esse script precisa estar no seu caminho.$0
para. $0
. Experimente online! . Desde.
usa nomes de caminho relativos e o shell atual.*
como entrada?PowerShell 2 (até 6), 35 bytes
Read-Host
aguarda a entrada (se for fornecida uma string como parâmetro, a usará como um prompt). Se a entrada fornecida for um nome de arquivo (ou nome de pasta) para um que exista,Test-Path
retornará$true
e o bloco do-nothing será{}
executado e solicitará novamente a entrada. SeTest-Path
retornar$false
porque a entrada não é um arquivo ou pasta existente, o bloco do-nothing não é executado e o nome da entrada é impresso.fonte
C (gcc) , 62 bytes
Experimente online!
fonte
while(gets(b),!access(b,0));
para salvar 7 bytes.Funky , 40 bytes
No verdadeiro estilo descolado, ele usa palavras-chave encravadas uma na outra, colchetes inigualáveis e palavras-chave implícitas. Limpo, parece com:
Demolir
fonte
Haskell , 76 bytes
Experimente online!
Retorna
IO x
ondex
é o nome inserido do arquivo que não existe.Ungolfed
fonte
R ,
6651 bytes-15 bytes graças ao plannapus
Executa um loop potencialmente infinito, em que em cada iteração
s
a=T
opçãolist.files()
deve ser usada para selecionar coisas como..
)s
estiver nessa lista, vamos para a próxima iteração; caso contrário, quebramos o loop e imprimimoss
.fonte
while((s=readline())%in%list.files(a=T)){};print(s)
?list.files
edir
é sinônimo, então você pode substituí-lo pordir
aqui.readline()
porscan(,'')
print
comcat
Python 3 , 55 bytes
Experimente online!
-4 bytes graças ao ManfP
-6 bytes graças ao Rick Rongen
fonte
input()
por"."
import os
eos.path.exists
é três bytes mais curto.import glob
ewhile glob.glob(s):...
em uma edição.C #, 101 bytes
Para cada um dos 4 valores de retorno válidos:
Experimente online! (retorna '...')
Experimente online! (retorna 'env.tio')
Experimente online! (retorna '../..bin/])
Experimente online! (retornos / perdidos / encontrados)
Ungolfed
Explicação
depende do fato de que File.GetAttributes () lança uma exceção se o objeto do sistema de arquivos especificado em seu argumento não existir.
fonte
Powershell 3.0, 75 bytes
Primeira tentativa; Tenho certeza de que há algumas otimizações que eu poderia fazer.
Uma forma um pouco mais legível:
fonte
$PSScriptRoot\
?for
loop, o que permite mover a inicialização para o construtor de loopfor($x=1;$x){...}
. Em segundo lugar, você pode se livrar do fato deWrite-Host
que há um implícitoWrite-Output
na conclusão do programa para qualquer coisa restante no pipeline, portanto, apenas sair$i
dali será suficiente.Java 9, 87 bytes
Ungolfed
A JVM da TIO aparentemente não tem sistema
Console
, portanto não pode ser testada lá (consulteSystem.console()
).fonte
JavaScript (Node.js) ,
158118 bytesExperimente online!
Os nossos agradecimentos a @ ConorO'Brien por ter apresentado a versão mais curta. Objetos embutidos em vez de usar consts e utilizar a condição de saída de erro em vez de sair explicitamente.
fonte
const
e também pode substituir cada variável por sua definição. Então, em vez de usars=>{if(...){...}}
, você pode usars=>require('fs').existsSync(s)||process.exit(console.log(s))
. Além disso, você pode sair com um erro, para poder escrever o lambda comos=>require('fs').existsSync(s)||--console.log(s)
. Experimente online!Limpo ,
10094 bytesExperimente online!
versão de expressão única:
Experimente online!
fonte
Perl 6, 39 bytes
Isso funciona no REPL, mas não parece funcionar corretamente no TIO.
fonte
say first !*.IO.e,lines
(23 bytes)?{}while ($_=get).IO.e;.say
deve funcionar.PHP, 43 bytes
Execute como CLI. Muito fácil de entender.
fonte
Ruby ,
40 3937 bytesExperimente online!
fonte
APL (Dyalog) , 17 bytes
Experimente online!
fonte
the_prev_wasnt_filename
vez deenv.tio
). Alterar⍵
→⍺
e depois você pode se livrar'.'
também.Kotlin , 67 bytes
Experimente online!
fonte
Anexo , 35 bytes
Experimente online!
Soluções alternativas
35 bytes:
{If[FileExists[x:=Prompt[]],$[],x]}
:, função recursiva.37 bytes
{NestWhile[p:=Prompt,p[],FileExists]}
:, função iterativa.fonte
Mínimo , 38 bytes
Deixa o último nome de arquivo digitado na pilha.
Explicação
fonte
SmileBASIC, 27 bytes
fonte