Все слышали о фразе "будь там или будь квадратным". Поэтому я подумал, что пришло время испытать это.
вход
Вы будете использовать полный абсолютный адрес каталога как текст как ввод через STDIN или эквивалентный.
Выход
Если адрес каталога существует и является действительным, ваша программа переместится в эту папку на вашем компьютере. Если нет, он выведет через STDOUT или эквивалентный следующий квадрат:
+-+
| |
+-+
Требования
- Стандартные лазейки запрещены.
- Вы можете вывести один завершающий символ новой строки, если это невозможно.
- Ваша программа не должна выдавать никаких результатов, если она была перемещена.
- Ваша программа должна иметь возможность запускаться снова, куда бы она ни была перемещена.
Предположения
- Вы можете предположить, что ввод никогда не бывает пустым.
- Вы можете предположить, что каталог никогда не имеет имени файла, добавленного в конец.
- Вы можете предположить, что входной каталог никогда не является текущим.
- Вы можете предположить, что у вас есть права на запись и выполнение везде.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
c:\users\Joe\program.txt
) или нет (c:\users\Joe\
)? В последнем случае должно ли имя создаваемого файла совпадать с исходным?Ответы:
Bash + coreutils,
4342 байтаЭто позволяет избежать вывода завершающей строки через флаг -n для вывода.
Я не совсем уверен, что означает OP, допуская завершающий символ новой строки, если он «неизбежен».
Если допустимо включить завершающий перевод новой строки, измените
в
и сохранить 3 байта, всего 39 байтов.
источник
PowerShell ,
59626160 байтПопробуйте онлайн!
объяснение
Move-Item
Командлет PowerShell (mv
) также переименовывает файл, поэтому ему присваивается каталог, который не существует, поскольку место назначения просто переименовывает файл в этот последний компонент (пока существует родительский), так что это было бесполезно.Я мог бы использовать,
Test-Path
чтобы определить, что место назначения существует и является каталогом, но это слишком долгоTest-Path $d -PathT C
.Поэтому вместо этого я использую
Get-ChildItem
(ls
) с (сокращенным)-Directory
параметром и проверяю,$?
был ли он успешным. Выход, если он есть, присваивается,$z
так что он не виден.Это делается в виде массива с 2 элементами, затем выполняется индексация в массиве с логическим значением
$?
, которое будет объединено с0
или1
, поэтому первый элемент массива выбирается, если каталог назначения не существует, и второй, если он делает.Первый элемент массива представляет собой строку, содержащую поле (в кавычках); переводы строки разрешены в строках, даже если они не являются наследниками. Второй элемент - это строка, содержащая команду перемещения.
Результат этого выбора массива передается в
Invoke-Expression
(iex
) для выполнения. Это необходимо, потому что я просто оставляю фактическую команду перемещения в массиве, она выполняется независимо от того, что (для заполнения массива), что противоречит цели.источник
.code.tio.ps1
, а неb.ps1
. Это работает Кажется, что есть какой-то случайный вывод в STDOUT. Не уверен, что вызывает это.gci
моих каталогов тестов, которые не показывали, потому что они не содержали дочерние элементы, поэтому это выявило этот недостаток. Это исправлено, просто назначив вывод. Спасибо @Dennis!ls
это более короткое сокращение дляgci
ls
все время, а затем в гольфе, как правило, забываю об этом. Спасибо.$?
играл в гольф здесь.Октава,
605752 байта8 байтов сохранено благодаря @Stewie
Это скрипт, который находится в файле с именем
f.m
. При запуске он предложит пользователю папку для перемещения файла. Если папка не существует и операция перемещения завершается неудачей,movefile
возвращаетсяfalse
(или0
), в противном случае она возвращаетtrue
(или1
). Если это такfalse
, мы отображаем строку"+-+\n| |\n+-+"
.источник
Пакетная, 80 байтов
Пакету не нравится, если вы перемещаете пакетный файл во время его работы, поэтому, вызывая
%1\%~nx0
(что является новым именем пакетного файла) Пакетный перестанет искать старый пакетный файл.источник
Bash + coreutils, 54 байта
Достаточно просто. Он проверяет, существует ли первый аргумент, если он существует, программа сама перемещается в аргумент, иначе печатает квадрат.
Не работает в Windows, однако работает в Bash в Ubuntu в Windows / WSL. Буква диска не принимает, однако, я думаю, что это было уточнено, чтобы быть в порядке.
Этот аккаунт принадлежит Менделееву.
источник
echo -n
чтобы вы не печатали завершающий символ новой строки.Python 3, 71 байт
Это должно быть в файле с именем
f
Довольно просто. Он пытается переместиться в любой каталог, который ему дан на STDIN, и, если происходит ошибка, он печатает поле.
источник
C 137 байт
Безголовая версия:
f
принимает имя файла иz
принимает имя каталога. Строка назначения - это конкатенацияz
иf
.rename()
используется для перемещения файла в новое место.Это
main()
будет выглядеть так:Можно точно как-то укоротить!
источник
Рубин, 58 + 12 = 70 байт
Использует флаги
-nrfileutils
. Ввод осуществляется из файла без перевода строки в STDIN.источник
Minecraft ComputerCraft Lua , 74 байта
Имя файла жестко закодировано как "f". Это выполняется на игровом компьютере и работает относительно структуры каталогов этого компьютера. Использует встроенный
fs
API CC Lua .Ungolfed:
источник