Dateiberechtigungen
Angepasst von der UIL - Computer Science Programming kostenlose Antwort Frage "Carla" für 2018 District.
Einführung
In UNIX-ähnlichen Betriebssystemen gehört jede Datei, jedes Verzeichnis oder jeder Link einem "Benutzer", der Mitglied einer "Gruppe" ist, und verfügt über bestimmte "Berechtigungen", die durch eine zehnstellige Zeichenfolge dargestellt werden, z. drwxrwxrwx ". Das erste Zeichen ist "d", "-" oder "l" (Verzeichnis, Datei oder Verknüpfung), gefolgt von drei Sätzen von "rwx" -Werten, die die Berechtigungen "Lesen, Schreiben, Ausführen" angeben. Der erste Satz enthält die Rechte des Benutzers, der mittlere Satz die Rechte der Gruppe und der dritte die Rechte aller anderen für dieses Objekt.
Die Verweigerung der Berechtigung für eines dieser Rechte wird durch ein '-' anstelle des 'r', 'w' oder 'x' dargestellt. Ein Beispiel für eine Verzeichnis-Berechtigungszeichenfolge wäre beispielsweise "drwxr - r--", was vollständige Verzeichnisrechte für den Benutzer, aber "Nur-Lese" -Rechte für das Gruppenmitglied und alle anderen angibt.
Jede "rwx" -Kombination kann auch durch einen Oktalwert (0-7) dargestellt werden, wobei das höchstwertige Bit die Leseberechtigung darstellt, das nächsthöhere Bit die Schreibberechtigung darstellt und das niedrigstwertige Bit die Ausführungsberechtigung darstellt.
Herausforderung
Bei einer vierstelligen Code-Zeichenfolge, die aus folgenden Zeichen besteht: 'D', 'F' oder 'L', gefolgt von einem dreistelligen oktalen Ganzzahlwert, wie z. B. 664, wird die resultierende 10-stellige Zeichenfolge ausgegeben, die den Berechtigungswert darstellt angezeigt.
Eingang
Ihr Programm oder Ihre Funktion kann entweder die Standardeingabe einlesen (es werden vier Zeichen eingegeben, optional gefolgt von einer neuen Zeile) oder die Eingabe als Argument übergeben.
Ihr Programm akzeptiert möglicherweise Eingaben in Groß- oder Kleinbuchstaben, muss jedoch konsistent sein (entweder sind alle Eingaben in Großbuchstaben oder alle Eingaben in Kleinbuchstaben).
Ausgabe
Ihr Programm muss die resultierende zehnstellige Zeichenfolge drucken, die den Berechtigungswert darstellt, der im oben angegebenen genauen Format angegeben ist. Leerzeichen dürfen angefügt werden.
Testfälle
In: F664
Out: -rw-rw-r--
In: D775
Out: drwxrwxr-x
In: L334
Out: l-wx-wxr--
In: F530
Out: -r-x-wx---
In: D127
Out:d--x-w-rwx
Wertung und Regeln
- Standard-Schlupflöcher sind verboten.
- Es gelten Standardregeln .
- Bitte geben Sie einen Link zum Testen Ihres Codes sowie eine Erklärung an.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
Antworten:
Jelly , 19 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Bash,
5953 BytesRichtiges Werkzeug für den Job?
Vielen Dank an Dennis für das Speichern von 5 Bytes und HTNW für das Speichern von einem.
Probieren Sie es online!
quelle
chmod ${1:1} a>a;stat -c%A a|sed "s/-/\L${1:0:1}/;s/f/-/"
spart zwei Bytes.tr
anstatt mity
:chmod ${1:1} a>a;stat -c%A a|sed s/./\\L${1:0:1}/|tr f -
a
und der Benutzer die Berechtigung hat, diese zu erstellen, oder ist die Datei vorhandena
und der Benutzer kann sie beschreiben? Denn wenn es eine Dateia
von Besitzroot
mit Berechtigungen700
, sollte dies nicht funktionieren.Python 2 , 78 Bytes
Nimmt die Eingabe als Zeichen und drei Ints.
Probieren Sie es online!
Erläuterung
[a,'-'][a=='f']
Nimmt entweder das eingegebene Zeichen oder-
, wenn das Zeichen istf
.'-r'[x/4]+'-w-w'[x/2]+'-x'[x%2]
ist im Wesentlichen eine oktale Umwandlung, um denrwx
String zu erhalten.quelle
Perl 5 mit
-p
37 BytesNimmt Eingaben in Kleinbuchstaben vor.
Probieren Sie es online!
quelle
Retina 0.8.2 , 43 Bytes
Probieren Sie es online! Link enthält Testfälle. Übernimmt die Eingabe in Kleinbuchstaben. Erläuterung:
Verdreifachen jede Ziffer, suffixing mit
r
,w
undx
.Ändern Sie alle falschen Buchstaben in
-
s.Löschen Sie alle verbleibenden Ziffern.
quelle
Netzhaut , 51 Bytes
Probieren Sie es online!
Keine Ahnung, wie man Retina benutzt, also lass es mich wissen, wie ich das besser machen kann. Ich dachte nur, ich würde versuchen, mindestens eine Sprache zu lernen, die nicht Pyth ist.
Erläuterung:
Ersetzen Sie
f
durch-
(belassend
undl
unverändert), und ersetzen Sie dann jede Ziffer durch die entsprechenderwx
.quelle
JavaScript (ES6), 63 Byte
Erwartet die Eingabezeichenfolge in Kleinbuchstaben.
Probieren Sie es online!
Kommentiert
quelle
Kohle , 27 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Haskell ,
848381 BytesProbieren Sie es online!
Hat sich im Konzept der Antwort von Python 2 von Mnemonic ziemlich ähnelt. Wenn Sie den Dateityp erstellen, erhalten Sie die Berechtigungen der Oktalzahl. Dieser hat mich wirklich zum Wünschen verleitet und war ein bitweiser und im Vorspiel enthaltener Operator.
quelle
div
anstelle von verwendenquot
.Java 8, 100 Bytes
Probieren Sie es online aus.
Port of @Neils Retina Antwort .
Erläuterung:
quelle
.replaceAll
ist immer noch weniger Bytes als eine Schleife mit.replaceAll
und fügte hinzu ,return
und String-Array .. Aber Kredit natürlich geht an Neil , der Retina ist Antwort , die ich als Basis - Port verwendet aus.Jelly , 21 Bytes
Ein vollständiges Programm zum Drucken nach STDOUT. (Als monadischer Link ist der Rückgabewert eine Liste mit einem Zeichen und einer Liste mit drei Zeichenlisten.)
Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie?
quelle
Perl 6
-p
, 37 BytesProbieren Sie es online!
Port of Dom Hastings Perl 5-Lösung.
quelle
Retina , 38 Bytes
Inspiriert von einem Kommentar von nur ASCII .
Probieren Sie es online!
Die Idee ist, jede Ziffer in eine unäre Zahl umzuwandeln (die standardmäßige unäre Ziffer in Retina ist
_
), wobei drei vorangestellt sind-
, und dann Binärziffern von den meisten in die niedrigstwertige Zahl umzuwandeln.quelle
Python 3 , 71 Bytes
Probieren Sie es online!
Python 3.3+ verfügt über eine integrierte Funktion, die jedoch aufgrund der Notwendigkeit eines Imports und der Unterschiede im erwarteten Eingabeformat nicht sehr golffreundlich ist.
quelle
Tcl , 139 Bytes
Probieren Sie es online!
Tcl , 144 Bytes
Probieren Sie es online!
Tcl , 149 Bytes
Probieren Sie es online!
Tcl , 150 Bytes
Probieren Sie es online!
Tcl , 180 Bytes
Probieren Sie es online!
Immer noch sehr ungolfed!quelle
Java (JDK 10) , 118 Byte
Probieren Sie es online!
Credits
quelle
fdl
, können Sie die Änderungvar r=s[0]<70?"d":s[0]<72?"-":"l";
aufvar r=s[0]=='f'?"-":s[0]+"";
6 Bytes zu speichern. Auch.toCharArray()
lassen sich.split("")
weitere 4 Bytes einsparen.""+
später entfernen konnte, um achar
in a "umzuwandeln"String
;) Danke!Excel, 224 Bytes
In 4 Schritten erledigt:
Und 3 mal:
Der Versuch, schlauer zu sein, fügt
25 bytes
pro Satz von Rechten insgesamt 75 hinzu:quelle
05AB1E ,
3427 BytesProbieren Sie es online!
7 Bytes von @MagicOctopusUrn abgespielt
quelle
ćls8βbvyi…rwx3*Nèë'-}J'f'-:
für 7 weniger ...f
ersetze ich einfach allef
in der letzten Zeichenfolge durch-
.i <CODE FOR TRUE> ë <CODE FOR FALSE> }
Python 2 , 238 Bytes
Probieren Sie es online!
Ich hatte angenommen, das wäre ein Tropfen auf den heißen Stein, aber ich habe mich geirrt. Wahrscheinlich hätte man feststellen müssen, dass ein Lambda irgendwann nicht mehr die beste Idee war.
quelle
APL + WIN, 55 Bytes
Fordert zur Eingabe einer Zeichenfolge mit vorangestelltem Kleinbuchstaben auf:
Erläuterung:
quelle
Python 3 , 77 Bytes
Probieren Sie es online!
quelle
J ,
5752 Bytes5 Bytes gespart dank FrownyFrog!
Probieren Sie es online!
Noch eine lange Lösung ... Ich weiß nicht, wie man mit
}
stillschweigenden Verben arbeitet, und deshalb habe ich die viel länger verwendet{"0 1&.|:
für die Auswahl verwendet.Erläuterung:
@}.
Lassen Sie das erste Symbol und los,.&.":
wandle den Rest in eine Liste von Nachkommastellen um]:#:
wandle jede Ziffer in eine Liste von Binärziffern um (und verschließe die Gabel)('-',:'rwx')
Erstellt eine 2-zeilige Tabelle und wählt mit 0 aus der ersten Zeile / 1 - aus der zweiten Zeile{"0 1&.|:~
Verwendet die Binärziffern, um aus der obigen Tabelle auszuwählen[:,
verflacht das Ergebnis('d-l'{~'DFL'i.{.)
formatiert das erste Symbol,
Hängt das fisrt-Symbol an die Liste der Berechtigungen anquelle
1#:@}."."0
('d-l'{~'DFL'i.{.)
→-&.('-DLld'i.{.)
i.
und&.
vielen Dank! Können Sie mir übrigens erklären, wie man select}
in stillschweigenden Verben verwendet?2 2 2&#:`('-',:'rwx'"_)}@"."0@}.
ist genau die gleiche Länge333
:)PHP, 68 Bytes
Wird
f
in Kleinbuchstaben in einen Unterstrich und jede Oktalzahl in einenrwx
entsprechenden Wert übersetzt. Dabei werden Unterstriche anstelle von Bindestrichen verwendet (um Anführungszeichen zu vermeiden). Anschließend wird der Wert_
durch ersetzt-
.Als Rohr mit laufen lassen
-nF
oder probieren Sie es online aus .quelle
C (gcc) ,
109104 BytesMindestens C kann Oktaleingaben konvertieren .... :-)
Bearbeiten: Ich habe festgestellt, dass der Größenmodifikator nicht unbedingt erforderlich ist, und das
putchar()
ist kürzer alsprintf()
in diesem Fall!Probieren Sie es online!
Original:
Probieren Sie es online!
quelle