Objetivo
Você deve escrever um programa que receba um número inteiro n
como entrada (da linha de comando) e incorpore os próprios n
diretórios (o programa) na árvore de diretórios. Exemplo com n=5
:
Os nomes das pastas podem ser o que você desejar. Os únicos requisitos são que a profundidade esteja correta e que o programa possa ser executado novamente a partir de seu novo local na árvore de diretórios, e que o novo arquivo de origem mantenha o mesmo nome de arquivo.
Bônus:
- Pontuação * 0,9 Se todos os diretórios tiverem um nome diferente (deve ser verdadeiro pelo menos até 1 000 000 de profundidade)
- Pontuação * 0.5 Se você não ler, direta ou indiretamente, mover o arquivo fonte, ou acessar o código fonte do programa
code-golf
file-system
globby
fonte
fonte
ln
comando em * nix? Se não me engano, é apenas criar outra entrada para o inode do arquivo e nenhum conteúdo é lido.Respostas:
Bash, 30 * 0,9 * 0,5 = 13,5
Toma profundidade como o primeiro argumento. Cria um link físico para ele mesmo na seguinte estrutura de diretórios:
O script pode ser executado a partir do novo local, mesmo se
rm
for executado no script antigo.Explicação:
seq -s/ $1
gera os números de 1 a$1
(o primeiro argumento), separados por uma barra.mkdir -p `seq -s` $1
cria o diretório especificado porseq
, com a-p
criação de todos os diretórios intermediários.ln $0 $_
crie um link físico para o script atual em execução no diretório recém-criado.Antigo (30 * 0,9 = 27):
Exemplo de execução (com ln):
Obrigado a @DigitalTrauma pela sugestão de substituição
$(..)
por`..`
Obrigado a @hjk pela sugestão de uso
ln
.fonte
$_
!$( )
: codegolf.stackexchange.com/a/25572/11259cp
comln
para obter o bônus de 0,5 também ...mv
também está restrito a esse bônus de 0,5. Isso ainda deixaln
claro, sim?ln
(você não precisa-s
) colocaria o programa no novo diretório, para que ele possa ser executado a partir daí, sem nunca ler, mover ou acessar sua fonte original. Eu digo que vá para a pontuação FALCON PUNCH de 13,5!C, 225 * 0,9 * 0,5 = 101,25
Minha solução em C:
Aqui de uma forma um pouco mais legível:
A verificação se funciona:
Provavelmente existe muito potencial de golfe no código fonte.
fonte
Lote - 48 * 0,9 = 43,2
Este script simplesmente cria um novo diretório e move o arquivo de origem para ele -
n
vezes.fonte
Zsh,
63605852 * 0,9 =56,75452,246,8Exemplo:
fonte
s=$(<$0)
(Apenas para constar, ele falha para mim com obash
4.3.11: “erro de sintaxe próximo ao token inesperado`; '”. Mas funciona bem com ozsh
5.0.2)d
antes$i
?1
. Obrigadofor i in {1..$1};{mkdir $i;cd $i};echo $s>f
.Rebol - 114 * 0,9 * 0,5 = 51,3
Ungolfed:
Versão original não quine - 90 * 0.9 = 81
Ungolfed:
fonte
Bash 167 * 0,5 * 0,9 = 75,15
Tomando emprestado da ótima resposta de @ es1024 , mas essa é uma verdadeira solução, por isso se qualifica para os dois bônus.
Além disso, técnicas de shell quine a partir daqui .
fonte
AutoIt3, 106 * 0,9 = 95,4 bytes
Um pouco longo, mas não posso ajudar com esses nomes longos de função / variável:
Basta chamá-lo com,
<script/.exe name> <depth>
por exemplo.script.exe 5
.Funcionará para qualquer quantidade de diretórios; talvez até mais do que seu sistema de arquivos possa suportar. : D
Como funciona:
É apenas um loop simples que adiciona o índice a uma string. Em seguida, o diretório (e todos os diretórios pai também) são criados e o arquivo se copia para esse diretório.
fonte
Node.js,
136133 * 0,9 * 0,5 =61,259,85fs.linkSync
mapeia para o link de chamada POSIX , que cria um link físico. Um argumento inválido fará com que o programa falhe.fonte
J, 82 * 0,9 = 73,8
Esta é principalmente uma porta da resposta mais votada.
Salvar como
skittish.ijs
ou o que quiser, e chamá-lo a partir da linha de comando usando a sua versão dojconsole
. O meu está vinculado ajc
:fonte
Zsh , 55 * 0,9 * 0,5 = 24,75 bytes
Eu estava de olho nesse desafio por um longo tempo, mas queria concluí-lo no Zsh sem chamar nenhum programa externo como
mkdir
eln
(caso contrário, seria idêntico à solução do bash). Acontece que o Zsh pode fornecer suas próprias versões desses programas!Experimente online!
fonte