Todo el mundo ha oído hablar de la frase "estar allí o ser cuadrado". Así que pensé que era hora de un desafío al respecto.
Entrada
Tomará una dirección de directorio absoluta completa como texto como entrada a través de STDIN o equivalente.
Salida
Si la dirección del directorio existe y es válida, su programa se moverá a esa carpeta en su computadora. De lo contrario, saldrá a través de STDOUT o equivalente al siguiente cuadrado:
+-+
| |
+-+
Requisitos
- Las lagunas estándar no están permitidas.
- Puede generar una nueva línea final si es inevitable.
- Su programa no debe producir ningún resultado si se ha movido.
- Su programa debe poder ejecutarse nuevamente donde sea que se haya movido.
Supuestos
- Puede suponer que la entrada nunca está vacía.
- Puede suponer que el directorio nunca tiene un nombre de archivo agregado al final.
- Puede suponer que el directorio de entrada nunca es el actual.
- Puede suponer que tiene permisos para escribir y ejecutar en todas partes.
Este es el código de golf , por lo que la respuesta más corta en bytes gana.
c:\users\Joe\program.txt
) o no (c:\users\Joe\
)? En el último caso, ¿el nombre del archivo creado debe ser el mismo que el de la fuente?Respuestas:
Bash + coreutils,
4342 bytesEsto evita imprimir la nueva línea final a través de la bandera -n para hacer eco.
No estoy muy seguro de lo que significa el OP al permitir una nueva línea final si es "inevitable".
Si es aceptable incluir una nueva línea al final, cambie
a
y guarde 3 bytes, para un total de 39 bytes.
fuente
PowerShell ,
59626160 bytesPruébalo en línea!
Explicación
El
Move-Item
cmdlet (mv
) de PowerShell también cambia el nombre de un archivo, por lo que darle un directorio que no existe como destino solo cambia el nombre del archivo a ese último componente (siempre que exista el padre), por lo que no fue bueno.Podría usar
Test-Path
para determinar que el destino existe y es un directorio, pero es demasiado largoTest-Path $d -PathT C
.Entonces, en su lugar, estoy usando
Get-ChildItem
(ls
) con el-Directory
parámetro (acortado) y comprobando$?
si fue exitoso. La salida, si hay alguna, se asigna para$z
que no se vea.Eso se hace en forma de una matriz con 2 elementos, luego se indexa en la matriz con el valor booleano de
$?
, que se fusionará con0
o1
, por lo que el primer elemento de la matriz se elige si el directorio de destino no existe, y el segundo si hace.El primer elemento de matriz es una cadena que contiene el cuadro (citado); las nuevas líneas están permitidas en cadenas, incluso cuando no son heredocs. El segundo elemento es una cadena que contiene el comando mover.
El resultado de esa selección de matriz se canaliza a
Invoke-Expression
(iex
) para su ejecución. Esto es necesario porque solo dejo el comando de movimiento real en la matriz, se ejecuta sin importar qué (para llenar la matriz), lo que anula el propósito.fuente
.code.tio.ps1
, nob.ps1
. Esto funciona Sin embargo, parece haber una salida perdida a STDOUT. No estoy seguro de qué causa eso.gci
, mis directorios de prueba no exhibieron eso porque no contenían elementos secundarios, por lo que esto expuso ese defecto. Ahora se soluciona simplemente asignando la salida. Gracias @ Dennis!ls
es una abreviatura más corta paragci
ls
todo el tiempo y luego en el golf tiendo a olvidarlo. Gracias.$?
en el golf aquí.Octava,
605752 bytes8 bytes guardados gracias a @Stewie
Este es un script que vive dentro de un archivo llamado
f.m
. Cuando se ejecute, solicitará al usuario la carpeta para mover el archivo. Si la carpeta no existe y la operación de mover falla, entoncesmovefile
devuelvefalse
(o0
) de lo contrario, devuelvetrue
(o1
). Si es asífalse
, mostramos la cadena"+-+\n| |\n+-+"
.fuente
Lote, 80 bytes.
A Batch no le gusta si mueve el archivo por lotes mientras se está ejecutando, por lo que invocando
%1\%~nx0
(que es el nuevo nombre del archivo por lotes) Batch deja de buscar el archivo por lotes anterior.fuente
Bash + coreutils, 54 bytes
Suficientemente simple. Hace una prueba para ver si existe el primer argumento, si existe el programa se mueve al argumento, de lo contrario imprime el cuadrado.
No funciona en Windows, sin embargo, funciona en Bash en Ubuntu en Windows / WSL. No toma una letra de unidad, sin embargo, creo que se ha aclarado que está bien.
Esta cuenta es propiedad de Mendeleev.
fuente
echo -n
para no imprimir una nueva línea final.Python 3, 71 bytes
Debe estar en un archivo llamado
f
Bastante sencillo. Intenta moverse a cualquier directorio que se le dé en STDIN, y si ocurre un error, imprime el cuadro.
fuente
C 137 bytes
Versión sin golf:
f
acepta el nombre del archivo yz
acepta el nombre del directorio. La cadena de destino es una concatenación dez
yf
.rename()
se usa para mover el archivo a la nueva ubicación.El
main()
se vería así:Definitivamente se puede acortar de alguna manera!
fuente
Ruby, 58 + 12 = 70 bytes
Banderas usos
-nrfileutils
. La entrada se canaliza desde un archivo sin líneas nuevas a STDIN.fuente
Minecraft ComputerCraft Lua , 74 bytes
El nombre del archivo está codificado como "f". Esto se ejecuta en una computadora del juego y se ejecuta en relación con la estructura de directorios de esa computadora. Utiliza la
fs
API incorporada de CC Lua .Sin golf:
fuente