Tout le monde a entendu la phrase «être là ou être carré». J'ai donc pensé qu'il était temps de se lancer un défi à ce sujet.
Contribution
Vous prendrez une adresse de répertoire absolue complète sous forme de texte en entrée via STDIN ou équivalent.
Production
Si l'adresse du répertoire existe et est valide, votre programme se déplacera lui-même dans ce dossier sur votre ordinateur. Sinon, il affichera via STDOUT ou l'équivalent le carré suivant:
+-+
| |
+-+
Exigences
- Les failles standard ne sont pas autorisées.
- Vous pouvez sortir une seule nouvelle ligne de fin si cela est inévitable.
- Votre programme ne doit produire aucune sortie s'il a été déplacé.
- Votre programme doit pouvoir s'exécuter à nouveau là où il a été déplacé.
Hypothèses
- Vous pouvez supposer que l'entrée n'est jamais vide.
- Vous pouvez supposer que le répertoire n'a jamais de nom de fichier ajouté à la fin.
- Vous pouvez supposer que le répertoire d'entrée n'est jamais celui en cours.
- Vous pouvez supposer que vous avez les autorisations pour écrire et exécuter partout.
C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
c:\users\Joe\program.txt
) ou non (c:\users\Joe\
)? Dans ce dernier cas, le nom du fichier créé doit-il être le même que la source?Réponses:
Bash + coreutils,
4342 octetsCela évite d'imprimer la nouvelle ligne de fin via le drapeau -n pour faire écho.
Je ne suis pas tout à fait sûr de ce que signifie l'OP en autorisant une nouvelle ligne de fin si elle est "inévitable".
S'il est acceptable d'inclure une nouvelle ligne de fin, changez
à
et économisez 3 octets, pour un total de 39 octets.
la source
PowerShell ,
59626160 octetsEssayez-le en ligne!
Explication
La
Move-Item
cmdlet (mv
) de PowerShell renomme également un fichier, donc lui donner un répertoire qui n'existe pas comme destination renomme simplement le fichier à ce dernier composant à la place (tant que le parent existe), donc ce n'était pas bon.Je pourrais utiliser
Test-Path
pour déterminer que la destination existe et est un répertoire, mais c'est trop longTest-Path $d -PathT C
.Au lieu de cela, j'utilise
Get-ChildItem
(ls
) avec le-Directory
paramètre (raccourci) et vérifie$?
si cela a réussi. La sortie, s'il y en a, est affectée à$z
afin qu'elle ne soit pas vue.Cela se fait sous la forme d'un tableau avec 2 éléments, puis l'indexation dans le tableau avec la valeur booléenne de
$?
, qui sera fusionnée en0
ou1
, donc le premier élément du tableau est choisi si le répertoire de destination n'existe pas, et le second s'il le Est-ce que.Le premier élément du tableau est une chaîne contenant la boîte (citée); les sauts de ligne sont autorisés dans les chaînes, même lorsqu'ils ne sont pas des heredocs. Le deuxième élément est une chaîne contenant la commande de déplacement.
Le résultat de cette sélection de tableau est canalisé dans
Invoke-Expression
(iex
) pour être exécuté. Ceci est nécessaire car je laisse juste la commande de déplacement réelle dans le tableau, elle est exécutée n'importe quoi (pour remplir le tableau), ce qui va à l'encontre du but.la source
.code.tio.ps1
, nonb.ps1
. Ça marche. Il semble cependant y avoir une sortie parasite vers STDOUT. Je ne sais pas ce qui cause cela.gci
, mes répertoires de test ne montraient pas cela parce qu'ils ne contenaient aucun élément enfant, donc cela a révélé cette faille. Il est maintenant corrigé en affectant simplement la sortie. Merci @Dennis!ls
c'est une abréviation plus courte pourgci
ls
tout le temps et puis au golf j'ai tendance à l'oublier. Je vous remercie.$?
du golf ici.Octave,
605752 octets8 octets économisés grâce à @Stewie
Il s'agit d'un script qui réside dans un fichier appelé
f.m
. Une fois exécuté, il invitera l'utilisateur du dossier à déplacer le fichier. Si le dossier n'existe pas et que l'opération de déplacement échoue,movefile
retournefalse
(ou0
) sinon il retournetrue
(ou1
). Si c'est le casfalse
, nous affichons la chaîne"+-+\n| |\n+-+"
.la source
Lot, 80 octets
Batch ne l'aime pas si vous déplacez le fichier batch pendant son exécution, donc en invoquant
%1\%~nx0
(qui est le nouveau nom du fichier batch) Batch arrête de rechercher l'ancien fichier batch.la source
Bash + coreutils, 54 octets
Assez simple. Il fait un test pour voir si le premier argument existe, s'il existe le programme se déplace lui-même dans l'argument, sinon imprime le carré.
Ne fonctionne pas sur Windows, mais il fonctionne sur Bash sur Ubuntu sur Windows / WSL. Ne prend pas une lettre de lecteur, mais je pense que cela a été clarifié pour être OK.
Ce compte appartient à Mendeleev.
la source
echo -n
pour ne pas imprimer de nouvelle ligne de fin.Python 3, 71 octets
Il doit être dans un fichier nommé
f
Assez simple. Il essaie de se déplacer dans le répertoire qui lui est donné sur STDIN, et si une erreur se produit, il imprime la boîte.
la source
C 137 octets
Version non golfée:
f
accepte le nom de fichier etz
accepte le nom du répertoire. La chaîne de destination est une concaténation dez
etf
.rename()
est utilisé pour déplacer le fichier vers le nouvel emplacement.Le
main()
ressemblerait à ceci:Peut certainement raccourci en quelque sorte!
la source
Ruby, 58 + 12 = 70 octets
Utilise des drapeaux
-nrfileutils
. L'entrée est acheminée depuis un fichier sans saut de ligne vers STDIN.la source
Minecraft ComputerCraft Lua , 74 octets
Le nom de fichier est codé en dur comme "f". Cela s'exécute sur un ordinateur en jeu et s'exécute par rapport à la structure de répertoires de cet ordinateur. Utilise l'
fs
API intégrée de CC Lua .Non golfé:
la source