Autorisations de fichier
Adapté de la question à réponse gratuite "Carla" de l'UIL - Programmation en informatique pour le district 2018.
introduction
Dans les systèmes d'exploitation de type UNIX, chaque fichier, répertoire ou lien est "détenu" par un "utilisateur", qui est membre d'un "groupe", et possède certaines "autorisations" représentées par une chaîne de dix caractères telle que " drwxrwxrwx ". Le premier caractère est 'd', '-' ou 'l' (répertoire, fichier ou lien), suivi de trois ensembles de valeurs "rwx", indiquant les autorisations "lecture, écriture, exécution". Le premier ensemble est les droits de l'utilisateur, le milieu définit les droits du groupe et le troisième les droits de tous les autres sur cet objet.
L'autorisation refusée pour l'un de ces droits est représentée par un «-» à la place du «r», du «w» ou du «x». Par exemple, un exemple de chaîne d'autorisation de répertoire serait "drwxr - r--", indiquant les droits de répertoire complets pour l'utilisateur, mais les droits en "lecture seule" pour le membre du groupe et tous les autres.
Chaque combinaison "rwx" peut également être représentée par une valeur octale (0-7) avec le bit le plus significatif représentant la permission de lecture, le bit le plus significatif suivant représentant la permission d'écriture et le bit le moins significatif représentant la permission d'exécution.
Défi
Étant donné une chaîne de code à quatre caractères composée d'un caractère: «D», «F» ou «L», suivi d'une valeur entière octale à trois chiffres, comme 664, sortez la chaîne de 10 caractères résultante qui représente la valeur d'autorisation indiqué.
Contribution
Votre programme ou fonction peut soit lire l'entrée de la norme en (quatre caractères seront entrés, éventuellement suivis d'une nouvelle ligne), soit passer l'entrée en argument.
Votre programme peut accepter des entrées en majuscules ou en minuscules mais doit être cohérent (soit toutes les entrées sont en majuscules, soit toutes les entrées sont en minuscules).
Sortie
Votre programme doit imprimer la chaîne de dix caractères résultante qui représente la valeur d'autorisation indiquée dans le format exact spécifié ci-dessus. Un espace blanc est autorisé.
Cas de test
Entrée: F664
Sortie: -rw-rw-r--
Entrée: D775
Sortie: drwxrwxr-x
Entrée: L334
Sortie: l-wx-wxr--
Entrée: F530
Sortie: -r-x-wx---
Entrée: D127
Sortie:d--x-w-rwx
Scoring et règles
- Les trous de boucle standard sont interdits.
- Des règles standard s'appliquent.
- Veuillez fournir un lien pour tester votre code ainsi qu'une explication.
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte!
Réponses:
Gelée , 19 octets
Essayez-le en ligne!
Comment ça marche
la source
bash,
5953 octetsLe bon outil pour le travail?
Merci à Dennis pour avoir sauvé 5 octets et HTNW pour en avoir sauvegardé un.
Essayez-le en ligne!
la source
chmod ${1:1} a>a;stat -c%A a|sed "s/-/\L${1:0:1}/;s/f/-/"
enregistre deux octets.tr
au lieu dey
:chmod ${1:1} a>a;stat -c%A a|sed s/./\\L${1:0:1}/|tr f -
a
et que l'utilisateur est autorisé à le créer ou qu'il existea
et qu'il est accessible en écriture par l'utilisateur? Parce que s'il existe un fichiera
appartenant àroot
avec des autorisations700
, cela ne devrait pas fonctionner.Python 2 , 78 octets
Prend l'entrée en tant que caractère et trois pouces.
Essayez-le en ligne!
Explication
[a,'-'][a=='f']
prend le caractère d'entrée ou-
, si le caractère estf
.'-r'[x/4]+'-w-w'[x/2]+'-x'[x%2]
est essentiellement une conversion octale pour obtenir larwx
chaîne.la source
Perl 5 avec
-p
, 37 octetsPrend l'entrée en minuscules.
Essayez-le en ligne!
la source
Retina 0.8.2 , 43 octets
Essayez-le en ligne! Le lien inclut des cas de test. Prend l'entrée en minuscules. Explication:
Chaque chiffre en trois exemplaires, avec suffixant
r
,w
etx
.Remplacez toutes les lettres incorrectes par
-
s.Supprimez tous les chiffres restants.
la source
Rétine , 51 octets
Essayez-le en ligne!
Je ne sais pas comment utiliser Retina, alors faites-moi savoir comment faire mieux. Je pensais juste que j'essaierais d'apprendre au moins une langue qui n'est pas Pyth.
Explication:
Remplacez
f
par-
(laissantd
etl
inchangé), puis remplacez chaque chiffre par le chiffre appropriérwx
.la source
JavaScript (ES6), 63 octets
Attend la chaîne d'entrée en minuscules.
Essayez-le en ligne!
Commenté
la source
Fusain , 27 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Haskell ,
848381 octetsEssayez-le en ligne!
A fini par être assez similaire dans son concept à la réponse Python 2 de Mnemonic. f crée le type de fichier, le reste est le obtient les autorisations du nombre octal. Celui-ci m'a vraiment fait souhaiter et était un opérateur au niveau du bit et inclus dans le prélude.
la source
div
place dequot
.Java 8, 100 octets
Essayez-le en ligne.
Réponse de Port of @Neil Retina .
Explication:
la source
.replaceAll
soient encore moins d'octets qu'une boucle avec.replaceAll
et ajoutésreturn
et String-array .. Mais le mérite revient bien sûr à Neil , qui est la réponse Retina que j'ai utilisée comme base de portage.Gelée , 21 octets
Un programme complet d'impression sur STDOUT. (En tant que lien monadique, la valeur de retour est une liste contenant un caractère et une liste de trois listes de caractères.)
Essayez-le en ligne!Ou consultez la suite de tests .
Comment?
la source
Perl 6
-p
, 37 octetsEssayez-le en ligne!
Solution Perl 5 du port de Dom Hastings.
la source
Rétine , 38 octets
Inspiré par un commentaire de ASCII uniquement .
Essayez-le en ligne!
L'idée est de convertir chaque chiffre en unaire (le chiffre unaire par défaut dans Retina est
_
) avec trois interlignes-
, puis de convertir les chiffres binaires du plus grand au moins significatif.la source
Python 3 , 71 octets
Essayez-le en ligne!
Python 3.3+ a une fonction intégrée pour cela, bien qu'en raison de la nécessité d'une importation et des différences de format d'entrée attendues, il n'est pas très adapté au golf.
la source
Tcl , 139 octets
Essayez-le en ligne!
Tcl , 144 octets
Essayez-le en ligne!
Tcl , 149 octets
Essayez-le en ligne!
Tcl , 150 octets
Essayez-le en ligne!
Tcl , 180 octets
Essayez-le en ligne!
Encore très peu golfé!la source
Java (JDK 10) , 118 octets
Essayez-le en ligne!
Crédits
la source
fdl
, vous pouvez changer lavar r=s[0]<70?"d":s[0]<72?"-":"l";
pourvar r=s[0]=='f'?"-":s[0]+"";
sauver 6 octets. En outre,.toCharArray()
peut consister.split("")
à enregistrer 4 octets supplémentaires.""+
plus tard pour "transtyper" unchar
en aString
);) Merci!Excel, 224 octets
Fait en 4 étapes:
Et 3 fois:
Essayer d'être plus intelligent, ajoute
25 bytes
par ensemble de droits, 75 au total:la source
05AB1E ,
3427 octetsEssayez-le en ligne!
Golfé 7 octets par @MagicOctopusUrn
la source
ćls8βbvyi…rwx3*Nèë'-}J'f'-:
pour 7 de moins ...f
je remplace simplement tousf
les éléments de la chaîne finale par-
.i <CODE FOR TRUE> ë <CODE FOR FALSE> }
Python 2 , 238 octets
Essayez-le en ligne!
J'avais supposé que ce serait une goutte d'eau, mais j'avais vraiment tort. J'aurais probablement dû réaliser qu'un lambda n'était pas la meilleure idée à un moment donné.
la source
APL + WIN, 55 octets
Invite à saisir une chaîne en minuscules:
Explication:
la source
Python 3 , 77 octets
Essayez-le en ligne!
la source
J ,
5752 octets5 octets économisés grâce à FrownyFrog!
Essayez-le en ligne!
Encore une autre longue solution ... Je ne sais pas comment faire
}
fonctionner les verbes tacites et c'est pourquoi j'ai utilisé le plus longtemps{"0 1&.|:
pour la sélection.Explication:
@}.
Déposez le premier symbole et,.&.":
convertir le reste en une liste de chiffres décimaux]:#:
convertir chaque chiffre en une liste de chiffres binaires (et coiffer la fourche)('-',:'rwx')
crée un tableau à 2 lignes et utilisez 0 pour sélectionner dans sa première ligne / 1 - dans sa seconde{"0 1&.|:~
utilise les chiffres binaires pour sélectionner dans le tableau ci-dessus[:,
aplatit le résultat('d-l'{~'DFL'i.{.)
formate le premier symbole,
ajoute le premier symbole à la liste des autorisationsla source
1#:@}."."0
('d-l'{~'DFL'i.{.)
→-&.('-DLld'i.{.)
i.
et&.
merci beaucoup! Au fait, pouvez-vous m'expliquer comment utiliser select}
dans les verbes tacites?2 2 2&#:`('-',:'rwx'"_)}@"."0@}.
est exactement de la même longueur333
:)PHP, 68 octets
traduit
f
en entrée minuscule pour souligner et chaque nombre octal à sonrwx
équivalent, en utilisant des traits de soulignement au lieu de tirets (pour économiser le besoin de guillemets), puis remplace le_
avec-
.Exécuter en tant que pipe avec
-nF
ou l' essayer en ligne .la source
C (gcc) ,
109104octetsAu moins C peut convertir une entrée octale .... :-)
Edit: j'ai réalisé que le modificateur de taille n'était pas strictement requis, et c'est
putchar()
plus court queprintf()
dans ce cas!Essayez-le en ligne!
Original:
Essayez-le en ligne!
la source