Файловые права
Адаптировано из UIL - Computer Science Programming бесплатный ответ на вопрос «Карла» для 2018 округа.
Введение
В UNIX-подобных операционных системах каждый файл, каталог или ссылка «принадлежат» «пользователю», который является членом «группы» и имеет определенные «разрешения», представленные десятисимвольной строкой, такой как « drwxrwxrwx». Первый символ - это «d», «-» или «l» (каталог, файл или ссылка), за которым следуют три набора значений «rwx», указывающих разрешения «чтение, запись, выполнение». Первый набор - это права пользователя, средний - права группы, а третий - права всех остальных на этот объект.
Разрешение, в котором отказано для любого из этих прав, обозначается символом «-» вместо «r», «w» или «x». Например, примерная строка разрешений для каталога будет «drwxr - r--», указывая полные права на каталог для пользователя, но права «только для чтения» для члена группы и всех остальных.
Каждая комбинация "rwx" также может быть представлена восьмеричным значением (0-7), где старший значащий бит представляет разрешение на чтение, следующий старший значащий бит представляет разрешение на запись и младший значащий бит представляет разрешение на выполнение.
Вызов
При наличии четырехсимвольной кодовой строки, состоящей из символа: 'D', 'F' или 'L', за которым следует трехзначное восьмеричное целочисленное значение, например 664, выведите итоговую строку из 10 символов, которая представляет значение разрешения указано.
вход
Ваша программа или функция может либо читать входные данные из стандартного ввода (будут введены четыре символа, необязательно сопровождаемые символом новой строки), либо передавать входные данные в качестве аргумента.
Ваша программа может принимать прописные или строчные буквы, но они должны быть согласованными (либо все входы прописными, либо все строчные).
Выход
Ваша программа должна распечатать получившуюся десятисимвольную строку, которая представляет значение разрешения, указанное в точном формате, указанном выше. Хвостовой пробел разрешен.
Тестовые случаи
Вход: F664
Выход: -rw-rw-r--
Вход: D775
Выход: drwxrwxr-x
Вход: L334
Выход: l-wx-wxr--
Вход: F530
Выход: -r-x-wx---
Вход: D127
Выход:d--x-w-rwx
Подсчет очков и правила
- Стандартные лазейки запрещены.
- Стандартные правила применяются.
- Пожалуйста, предоставьте ссылку для проверки вашего кода, а также объяснение.
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
Ответы:
Желе , 19 байт
Попробуйте онлайн!
Как это работает
источник
bash,
5953 байтаПравильный инструмент для работы?
Спасибо Деннису за сохранение 5 байтов и HTNW за сохранение одного.
Попробуйте онлайн!
источник
chmod ${1:1} a>a;stat -c%A a|sed "s/-/\L${1:0:1}/;s/f/-/"
сохраняет два байта.tr
вместоy
:chmod ${1:1} a>a;stat -c%A a|sed s/./\\L${1:0:1}/|tr f -
a
и у пользователя есть разрешение на его создание, или файл существуетa
и доступен для записи пользователю? Потому что , если есть файлa
принадлежитroot
с разрешениями700
, это не должно работать.Python 2 , 78 байт
Принимает ввод как символ и три целых.
Попробуйте онлайн!
объяснение
[a,'-'][a=='f']
принимает либо входной символ, либо-
, если символ естьf
.'-r'[x/4]+'-w-w'[x/2]+'-x'[x%2]
по сути восьмеричное преобразование, чтобы получитьrwx
строку.источник
Perl 5 с
-p
, 37 байтПринимает ввод в нижнем регистре.
Попробуйте онлайн!
источник
Сетчатка 0.8.2 , 43 байта
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Принимает ввод в нижнем регистре. Объяснение:
Утроить каждую цифру с суффиксом
r
,w
иx
.Измените все неправильные буквы на
-
s.Удалите все оставшиеся цифры.
источник
Сетчатка , 51 байт
Попробуйте онлайн!
Не знаю, как использовать Retina, поэтому, пожалуйста, дайте мне знать, как сделать это лучше. Я просто решил, что постараюсь выучить хотя бы один язык, не являющийся Pyth.
Объяснение:
Заменить
f
с-
(оставивd
иl
без изменений), а затем заменить каждую цифру с подходящимrwx
.источник
JavaScript (ES6), 63 байта
Ожидает входную строку в нижнем регистре.
Попробуйте онлайн!
комментарии
источник
Древесный уголь , 27 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Haskell ,
848381 байтПопробуйте онлайн!
В итоге получилось довольно похоже на концепцию Mnemonic's Python 2. f создает тип файла, остальное получает права доступа из восьмеричного числа. Это действительно заставило меня пожелать и был побитовым и оператор включен в прелюдии.
источник
div
вместоquot
.Java 8, 100 байт
Попробуйте онлайн.
Порт ответа @Neil 's Retina .
Объяснение:
источник
.replaceAll
по-прежнему меньше байтов, чем цикл с.replaceAll
добавленнымreturn
и String-массивом. Но заслуга, конечно, принадлежит Нилу , ответу Retina, который я использовал в качестве базы для переноса.Желе , 21 байт
Полная программа печати на STDOUT. (В качестве монадической ссылки возвращаемое значение представляет собой список, содержащий символ и список из трех списков символов.)
Попробуйте онлайн! Или посмотрите набор тестов .
Как?
источник
Perl 6
-p
, 37 байтПопробуйте онлайн!
Решение Perl 5 для Dom Hastings.
источник
Сетчатка , 38 байт
Вдохновленный комментарий от ASCII-только .
Попробуйте онлайн!
Идея состоит в том, чтобы преобразовать каждую цифру в унарную (по умолчанию в Retina есть унарная цифра
_
) с тремя ведущими-
, а затем преобразовать двоичные цифры из самой младшей в младшую.источник
Python 3 , 71 байт
Попробуйте онлайн!
Python 3.3+ имеет встроенную функцию для этого, хотя из-за необходимости импорта и различий в ожидаемом формате ввода он не очень удобен для игры в гольф.
источник
Tcl , 139 байт
Попробуйте онлайн!
Tcl , 144 байта
Попробуйте онлайн!
Tcl , 149 байт
Попробуйте онлайн!
Tcl , 150 байт
Попробуйте онлайн!
Tcl , 180 байт
Попробуйте онлайн!
Все еще очень безразлично!источник
Java (JDK 10) , 118 байт
Попробуйте онлайн!
кредиты
источник
fdl
, вы можете изменить ,var r=s[0]<70?"d":s[0]<72?"-":"l";
чтобыvar r=s[0]=='f'?"-":s[0]+"";
спасти 6 байт. Также.toCharArray()
можно.split("")
сэкономить еще 4 байта.""+
позже, чтобы "привести" achar
в aString
);) Спасибо!Excel, 224 байта
Сделано в 4 этапа:
И 3 раза:
Пытаясь быть умнее, добавляет
25 bytes
за набор прав, всего 75:источник
05AB1E ,
3427 байтПопробуйте онлайн!
Гольф на 7 байтов от @MagicOctopusUrn
источник
ćls8βbvyi…rwx3*Nèë'-}J'f'-:
на 7 меньше ...f
я просто заменяю всеf
в последней строке на-
.i <CODE FOR TRUE> ë <CODE FOR FALSE> }
Python 2 , 238 байт
Попробуйте онлайн!
Я предполагал, что это будет капля в море, но я действительно ошибался. Вероятно, следовало бы понять, что лямбда не была лучшей идеей в какой-то момент.
источник
APL + WIN, 55 байт
Запрашивает ввод строки с начальным символом нижнего регистра:
Объяснение:
источник
Python 3 , 77 байт
Попробуйте онлайн!
источник
J ,
5752 байта5 байтов сохранено благодаря FrownyFrog!
Попробуйте онлайн!
Еще одно длинное решение ... Я не знаю, как заставить
}
работать в молчаливых глаголах, и поэтому я использовал гораздо больше{"0 1&.|:
для выбора.Объяснение:
@}.
Бросьте первый символ и,.&.":
преобразовать остаток в список десятичных цифр]:#:
преобразовать каждую цифру в список двоичных цифр (и ограничить разветвление)('-',:'rwx')
создает таблицу из двух строк и использует 0 для выбора из первой строки / 1 - из второй{"0 1&.|:~
использует двоичные цифры для выбора из таблицы выше[:,
выравнивает результат('d-l'{~'DFL'i.{.)
форматирует первый символ,
добавляет символ fisrt в список разрешенийисточник
1#:@}."."0
('d-l'{~'DFL'i.{.)
→-&.('-DLld'i.{.)
i.
и&.
большое спасибо! Кстати, вы можете объяснить мне, как использовать select}
в молчаливых глаголах?2 2 2&#:`('-',:'rwx'"_)}@"."0@}.
точно такой же длины333
:)PHP, 68 байт
переводит
f
в нижний регистр входных данных для подчеркивания и каждого восьмеричного числа в егоrwx
эквивалент, с помощью подчеркивания вместо дефиса (чтобы сохранить потребность в кавычках), затем заменяет_
с-
.Запустите как трубу с
-nF
или попробуйте онлайн .источник
C (gcc) ,
109104 байтаПо крайней мере, C может преобразовать восьмеричный ввод .... :-)
Изменить: я понял, что модификатор размера не был строго обязательным, и это
putchar()
короче, чемprintf()
в этом случае!Попробуйте онлайн!
Оригинал:
Попробуйте онлайн!
источник