Objetivo
Debe escribir un programa que reciba un número entero n
como entrada (desde la línea de comando) y que incorpore los n
directorios (el programa) en el árbol de directorios. Ejemplo con n=5
:
Los nombres de las carpetas pueden ser lo que desee. Los únicos requisitos son que la profundidad sea correcta, y que el programa pueda ejecutarse nuevamente desde su nuevo lugar en el árbol de directorios, y que el nuevo archivo fuente conserve el mismo nombre de archivo.
Bonificaciones:
- Puntuación * 0.9 Si todos los directorios tienen un nombre diferente (debe ser verdadero al menos hasta la profundidad de 1 000 000)
- Puntuación * 0.5 Si no lee o mueve directa o indirectamente el archivo fuente, o no accede al código fuente del programa
code-golf
file-system
globby
fuente
fuente
ln
comando en * nix? Si no me equivoco, solo está creando otra entrada al inodo del archivo, y no se lee ningún contenido.Respuestas:
Bash, 30 * 0.9 * 0.5 = 13.5
Toma profundidad como primer argumento. Crea un enlace rígido a sí mismo en la siguiente estructura de directorios:
El script se puede ejecutar desde la nueva ubicación, incluso si
rm
se ejecuta en el script anterior.Explicación:
seq -s/ $1
genera los números del 1 al$1
(primer argumento), separados por una barra diagonal.mkdir -p `seq -s` $1
crea el directorio especificado porseq
, con la-p
creación de todos los directorios intermedios.ln $0 $_
cree un enlace fijo al script actual en ejecución en el directorio recién creado.Viejo (30 * 0.9 = 27):
Ejemplo de ejecución (con ln):
Gracias a @DigitalTrauma por la sugerencia de reemplazar
$(..)
con`..`
Gracias a @hjk por su sugerencia de uso
ln
.fuente
$_
!$( )
: codegolf.stackexchange.com/a/25572/11259cp
conln
para obtener el bono 0.5 también ...mv
también está restringido de ese bono de 0.5. Eso todavía quedaln
en claro, ¿sí?ln
(no es necesario-s
) colocaría el programa en el nuevo directorio, de modo que se pueda ejecutar desde allí, sin leer, mover o acceder a su fuente original. ¡Digo ve por el puntaje FALCON PUNCH de 13.5!C, 225 * 0.9 * 0.5 = 101.25
Mi solución en C:
Aquí en una forma algo más legible:
El cheque si funciona:
Lo más probable es que haya mucho potencial de golf en el código fuente.
fuente
Lote - 48 * 0.9 = 43.2
Este script simplemente crea un nuevo directorio y mueve el archivo fuente a él, varias
n
veces.fuente
Zsh,
63605852 * 0.9 =56.75452.246.8Ejemplo:
fuente
s=$(<$0)
(Sólo para que conste, se produce un error para mí conbash
4.3.11: “error de sintaxis cerca inesperada símbolo`; '”Pero funciona bien con.zsh
5.0.2)d
antes$i
?1
. Graciasfor i in {1..$1};{mkdir $i;cd $i};echo $s>f
.Rebol - 114 * 0.9 * 0.5 = 51.3
Sin golf:
Versión original no quine - 90 * 0.9 = 81
Sin golf:
fuente
Bash 167 * 0.5 * 0.9 = 75.15
Tomando mucho de la gran respuesta de @ es1024 , pero esta es una verdadera quine, por lo que califica para ambos bonos.
Además, las técnicas de shell quine de aquí .
fuente
AutoIt3, 106 * 0,9 = 95,4 bytes
Un poco largo pero no puedo ayudar con esos nombres largos de funciones / variables:
Simplemente llámalo con
<script/.exe name> <depth>
eg.script.exe 5
.Funcionará para cualquier cantidad de directorios; tal vez incluso más de lo que su sistema de archivos puede manejar. :RE
Cómo funciona:
Es solo un bucle simple que agrega el índice a una cadena. Luego, se crea el directorio (y también todos los directorios principales) y el archivo se copia en ese directorio.
fuente
Nodo.js,
136133* 0,9 * 0,5 =61,259,85fs.linkSync
se asigna al enlace de llamada POSIX , que crea un enlace duro. Un argumento no válido hará que el programa se bloquee.fuente
J, 82 * 0.9 = 73.8
Esto es principalmente un puerto de la respuesta más votada.
Guarde como
skittish.ijs
o lo que quiera, y llámelo desde la línea de comandos usando su versión dejconsole
. El mío está vinculado ajc
:fuente
Zsh , 55 * 0.9 * 0.5 = 24.75 bytes
Estuve atento a este desafío durante mucho tiempo, pero quería completarlo en Zsh sin llamar a ningún programa externo como
mkdir
yln
(de lo contrario, sería idéntico a la solución bash). Resulta que Zsh puede proporcionar sus propias versiones de esos programas.Pruébalo en línea!
fuente