Задача
Вы должны написать программу, которая получает целое число в n
качестве входных данных (из командной строки) и встраивает себя (программу) n
в каталоги дерева каталогов. Пример с n=5
:
Имена папок могут быть любыми. Единственными требованиями являются правильность глубины и возможность повторного запуска программы из нового места в дереве каталогов, а также в том, что новый исходный файл сохраняет то же имя файла.
Бонусы:
- Оценка * 0,9 Если все каталоги имеют разные имена (должно быть верно, по крайней мере, до глубины 1 000 000)
- Оценка * 0,5 Если вы не можете прямо или косвенно прочитать или переместить исходный файл или получить доступ к исходному коду программы
code-golf
file-system
globby
источник
источник
ln
команды в * nix? Если я не ошибаюсь, это просто создание другой записи в файле inode, и никакой контент вообще не читается.Ответы:
Баш, 30 * 0,9 * 0,5 = 13,5
Принимает глубину в качестве первого аргумента. Создает жесткую ссылку на себя в следующую структуру каталогов:
Затем сценарий может быть запущен из нового места, даже если
rm
он запущен на старом сценарии.Объяснение:
seq -s/ $1
выводит числа от 1 до$1
(первый аргумент), разделенные косой чертой.mkdir -p `seq -s` $1
создает каталог, указанныйseq
с-p
созданием всех промежуточных каталогов.ln $0 $_
создать жесткую ссылку на текущий запущенный скрипт во вновь созданном каталоге.Старый (30 * 0,9 = 27):
Пример выполнения (с ln):
Спасибо @DigitalTrauma за предложение заменить
$(..)
на`..`
Спасибо @hjk за предложение использовать
ln
.источник
$_
!$( )
: codegolf.stackexchange.com/a/25572/11259cp
на,ln
чтобы получить бонус 0.5 тоже ...mv
оно также ограничено этим 0,5 бонусом. Это все еще остаетсяln
открытым, да?ln
(вам не нужно-s
) фактически поместит программу в новый каталог, чтобы ее можно было выполнить оттуда, даже не читая, не перемещая и не обращаясь к исходному источнику. Я говорю, пойти на счет FALCON PUNCH 13,5!С 225 * 0,9 * 0,5 = 101,25
Мое решение в C:
Здесь в несколько более читаемой форме:
Проверьте, работает ли он:
Вероятнее всего, в исходном коде большой потенциал для игры в гольф.
источник
Партия - 48 * 0,9 = 43,2
Этот скрипт просто создает новый каталог и перемещает в него исходный файл -
n
раз.источник
Zsh,
63605852 * 0,9 =56,75452,246,8Пример:
источник
s=$(<$0)
(Просто для записи, у меня не получается сbash
4.3.11: «синтаксическая ошибка рядом с неожиданным токеном`; '». Но отлично работает сzsh
5.0.2)d
ранее$i
?1
. Спасибоfor i in {1..$1};{mkdir $i;cd $i};echo $s>f
.Реболь - 114 * 0,9 * 0,5 = 51,3
Ungolfed:
Оригинальная версия без Quine - 90 * 0,9 = 81
Ungolfed:
источник
Баш 167 * 0,5 * 0,9 = 75,15
Сильно заимствует из отличного ответа @ es1024 , но этот - настоящий квин, поэтому он претендует на оба бонуса.
Кроме того, приемы оболочки Куайн отсюда .
источник
AutoIt3, 106 * 0,9 = 95,4 байта
Немного длинно, но я не могу помочь с этими длинными именами функций / переменных:
Просто позвоните с помощью,
<script/.exe name> <depth>
например.script.exe 5
,Это будет работать для любого количества каталогов; может быть, даже больше, чем может справиться ваша файловая система. : D
Как это устроено:
Это простой цикл, который добавляет индекс в строку. Затем создается каталог (и все родительские каталоги), и файл копирует себя в этот каталог.
источник
Node.js,
136133 * 0,9 * 0,5 =61,259,85fs.linkSync
отображается на ссылку вызова POSIX , которая создает жесткую ссылку. Неверный аргумент вызовет сбой программы.источник
J 82 * 0,9 = 73,8
В основном это порт ответа с наибольшим количеством голосов.
Сохраните как
skittish.ijs
или как хотите, и вызовите его из командной строки, используя вашу версиюjconsole
. Моя связана сjc
:источник
Zsh , 55 * 0,9 * 0,5 = 24,75 байт
Я долго смотрел на этот вызов, но хотел завершить его на Zsh, не вызывая никаких внешних программ, таких как
mkdir
иln
(в противном случае он был бы идентичен решению bash). Оказывается, Zsh может предоставить свои версии этих программ!Попробуйте онлайн!
источник