Objectif
Vous devez écrire un programme qui reçoit un entier n
en entrée (à partir de la ligne de commande) et qui s'incorpore (le programme) n
dans l'arborescence des répertoires. Exemple avec n=5
:
Les noms de dossier peuvent être ceux que vous souhaitez. Les seules conditions requises sont que la profondeur soit correcte et que le programme puisse ensuite être exécuté à nouveau à partir de son nouvel emplacement dans l'arborescence de répertoires, et que le nouveau fichier source conserve le même nom de fichier.
Bonus:
- Score * 0,9 Si les répertoires ont tous un nom différent (doit être vrai au moins à 1 000 000 de profondeur)
- Score * 0,5 Si vous ne lisez pas ou ne déplacez pas directement ou indirectement le fichier source, ou n'accédez pas au code source du programme
code-golf
file-system
globby
la source
la source
ln
commande dans * nix? Si je ne me trompe pas, cela crée simplement une autre entrée dans l'inode du fichier, et aucun contenu n'est lu du tout.Réponses:
Bash, 30 * 0,9 * 0,5 = 13,5
Prend la profondeur comme premier argument. Crée un lien dur vers lui-même dans la structure de répertoires suivante:
Le script peut ensuite être exécuté à partir du nouvel emplacement, même s'il
rm
est exécuté sur l'ancien script.Explication:
seq -s/ $1
renvoie les nombres de 1 à$1
(le premier argument), séparés par une barre oblique.mkdir -p `seq -s` $1
crée le répertoire spécifié parseq
, en-p
créant tous les répertoires intermédiaires.ln $0 $_
créer un lien dur vers le script en cours d'exécution dans le répertoire nouvellement créé.Ancien (30 * 0,9 = 27):
Exemple d'exécution (avec ln):
Merci à @DigitalTrauma pour la suggestion de remplacer
$(..)
par`..`
Merci à @hjk pour la suggestion d'utilisation
ln
.la source
$_
!$( )
: codegolf.stackexchange.com/a/25572/11259cp
parln
pour obtenir le bonus de 0,5 aussi ...mv
est également limité à ce bonus de 0,5. Cela laisse toujoursln
en clair, oui?ln
(vous n'avez pas besoin-s
) placerait en fait le programme dans le nouveau répertoire, afin qu'il puisse être exécuté à partir de là, sans jamais lire, déplacer ou accéder à sa source d'origine. Je dis go pour le score FALCON PUNCH de 13,5!C, 225 * 0,9 * 0,5 = 101,25
Ma solution en C:
Ici sous une forme un peu plus lisible:
La vérification si ça marche:
Il y a très probablement beaucoup de potentiel de golf dans le code source.
la source
Lot - 48 * 0,9 = 43,2
Ce script crée simplement un nouveau répertoire et y déplace le fichier source -
n
fois.la source
Zsh,
63605852 * 0,9 =56,75452,246,8Exemple:
la source
s=$(<$0)
(Juste pour mémoire, il échoue pour moi avecbash
4.3.11: "erreur de syntaxe près du jeton inattendu"; "". Mais fonctionne très bien aveczsh
5.0.2)d
avant$i
?1
. Mercifor i in {1..$1};{mkdir $i;cd $i};echo $s>f
.Rebol - 114 * 0,9 * 0,5 = 51,3
Non golfé:
Version originale non quine - 90 * 0,9 = 81
Non golfé:
la source
Bash 167 * 0,5 * 0,9 = 75,15
Empruntant fortement à la grande réponse de @ es1024 , mais celle-ci est une vraie quine, donc elle se qualifie pour les deux bonus.
En outre, les techniques de shell quine d' ici .
la source
AutoIt3, 106 * 0,9 = 95,4 octets
Un peu long mais je ne peux pas m'empêcher avec ces longs noms de fonction / variable:
Appelez-le simplement avec
<script/.exe name> <depth>
par exemple.script.exe 5
.Cela fonctionnera pour n'importe quelle quantité de répertoires; peut-être même plus que ce que votre système de fichiers peut gérer. :RÉ
Comment ça fonctionne:
C'est juste une simple boucle qui ajoute l'index à une chaîne. Ensuite, le répertoire (et tous les répertoires parents également) est créé et le fichier se copie dans ce répertoire.
la source
Node.js,
136133* 0,9 * 0,5 =61,259,85fs.linkSync
correspond au lien d' appel POSIX , ce qui crée un lien dur. Un argument non valide entraînera le plantage du programme.la source
J, 82 * 0,9 = 73,8
Il s'agit principalement d'un port de la réponse la plus votée.
Enregistrez sous
skittish.ijs
ou comme vous voulez, et appelez-le à partir de la ligne de commande en utilisant votre version dejconsole
. Le mien est lié àjc
:la source
Zsh , 55 * 0,9 * 0,5 = 24,75 octets
J'avais les yeux sur ce défi depuis longtemps, mais je voulais le terminer dans Zsh sans appeler de programmes externes comme
mkdir
etln
(sinon, ce serait identique à la solution bash). Il s'avère que Zsh peut fournir ses propres versions de ces programmes!Essayez-le en ligne!
la source