Todo mundo já ouviu falar da frase "esteja lá ou seja quadrado". Então eu pensei que era hora de um desafio sobre isso.
Entrada
Você receberá um endereço de diretório absoluto completo como texto e entrada via STDIN ou equivalente.
Resultado
Se o endereço do diretório existir e for válido, seu programa se moverá para essa pasta no seu computador. Caso contrário, ele produzirá via STDOUT ou equivalente o seguinte quadrado:
+-+
| |
+-+
Exigências
- As brechas padrão não são permitidas.
- Você pode gerar uma única linha nova à direita, se inevitável.
- Seu programa não deve produzir saída se tiver sido movido.
- Seu programa deve poder executar novamente onde quer que tenha sido movido.
Suposições
- Você pode assumir que a entrada nunca está vazia.
- Você pode supor que o diretório nunca tenha um nome de arquivo anexado ao final.
- Você pode supor que o diretório de entrada nunca seja o atual.
- Você pode assumir que tem permissão para escrever e executar em qualquer lugar.
Isso é código-golfe , então a resposta mais curta em bytes vence.
c:\users\Joe\program.txt
) ou não (c:\users\Joe\
)? Neste último caso, o nome do arquivo criado deve ser o mesmo que a origem?Respostas:
Bash + coreutils,
4342 bytesIsso evita a impressão da nova linha à direita através do sinalizador -n para ecoar.
Não sei bem o que significa o OP, permitindo uma nova linha à direita, se for "inevitável".
Se for aceitável incluir uma nova linha à direita, altere
para
e salve 3 bytes, para um total de 39 bytes.
fonte
PowerShell ,
59626160 bytesExperimente online!
Explicação
O
Move-Item
cmdlet do PowerShell (mv
) também renomeia um arquivo, fornecendo a ele um diretório que não existe, pois o destino apenas renomeia o arquivo para o último componente (desde que o pai exista), o que não é bom.Eu poderia usar
Test-Path
para determinar que o destino existe e é um diretório, mas é muito longoTest-Path $d -PathT C
.Então, em vez disso, estou usando
Get-ChildItem
(ls
) com o-Directory
parâmetro (reduzido) e verificando$?
se foi bem-sucedido. A saída, se houver alguma, é atribuída para$z
que não seja vista.Isso é feito na forma de uma matriz com 2 elementos e, em seguida, é indexada na matriz com o valor booleano de
$?
, que será coalescido em0
ou1
, portanto, o primeiro elemento da matriz é escolhido se o diretório de destino não existir e o segundo se ele faz.O primeiro elemento da matriz é uma sequência que contém a caixa (entre aspas); novas linhas são permitidas em strings, mesmo quando não são heredocs. O segundo elemento é uma sequência que contém o comando move.
O resultado dessa seleção de matriz é canalizado para
Invoke-Expression
(iex
) para ser executado. Isso é necessário porque, apenas deixei o comando de movimentação real na matriz, ele é executado independentemente do que (preencher a matriz), o que anula o objetivo.fonte
.code.tio.ps1
, nãob.ps1
. Isso funciona. Parece haver alguma saída perdida para STDOUT. Não tenho certeza do que causa isso.gci
, meus diretórios de teste não exibiam isso porque não continham itens filhos, então isso expunha essa falha. É corrigido agora, apenas atribuindo a saída. Obrigado @Dennis!ls
é uma abreviação mais curta paragci
ls
o tempo todo e depois no golfe eu tendem a esquecê-lo. Obrigado.$?
aqui no golfe.Oitava,
605752 bytes8 bytes salvos graças a @Stewie
Este é um script que vive dentro de um arquivo chamado
f.m
. Quando executada, solicita ao usuário que a pasta mova o arquivo para. Se a pasta não existir e a operação de movimentação falhar,movefile
retornaráfalse
(ou0
) caso contrário, retornarátrue
(ou1
). Se forfalse
, exibimos a string"+-+\n| |\n+-+"
.fonte
Lote, 80 bytes
O lote não gosta se você mover o arquivo em lotes enquanto está em execução; portanto, invoque
%1\%~nx0
(que é o novo nome do arquivo em lotes) o lote para de procurar o arquivo em lotes antigo.fonte
Bash + coreutils, 54 bytes
Simples o suficiente. Ele faz um teste para verificar se o primeiro argumento existe, se o programa se move para o argumento, caso contrário, imprime o quadrado.
Não funciona no Windows, no entanto, funciona no Bash no Ubuntu no Windows / WSL. Não leva uma letra de unidade, no entanto, acho que foi esclarecido para estar OK.
Esta conta é de propriedade de Mendeleev.
fonte
echo -n
para não imprimir uma nova linha à direita.Python 3, 71 bytes
Ele deve estar em um arquivo chamado
f
Relativamente simples. Ele tenta se mover para qualquer diretório que lhe seja dado no STDIN e, se ocorrer um erro, ele imprime a caixa.
fonte
C 137 bytes
Versão não destruída:
f
aceita o nome do arquivo ez
aceita o nome do diretório. A cadeia de destino é uma concatenação dez
ef
.rename()
é usado para mover o arquivo para o novo local.O
main()
seria assim:Definitivamente pode ser reduzido de alguma forma!
fonte
Ruby, 58 + 12 = 70 bytes
Usa sinalizadores
-nrfileutils
. A entrada é canalizada de um arquivo sem novas linhas para o STDIN.fonte
Minecraft ComputerCraft Lua , 74 bytes
O nome do arquivo é codificado como "f". Isso é executado em um computador no jogo e é executado em relação à estrutura de diretórios do computador. Usa a
fs
API incorporada do CC Lua .Ungolfed:
fonte