Semua orang telah mendengar ungkapan "ada di sana atau menjadi persegi". Jadi saya pikir sudah waktunya untuk tantangan tentang hal itu.
Memasukkan
Anda akan mengambil alamat direktori absolut penuh sebagai teks sebagai input melalui STDIN atau yang setara.
Keluaran
Jika alamat direktori ada dan valid, program Anda akan memindahkan dirinya ke folder itu di komputer Anda. Jika tidak, itu akan dihasilkan melalui STDOUT atau setara dengan kuadrat berikut:
+-+
| |
+-+
Persyaratan
- Celah standar tidak diijinkan.
- Anda dapat mengeluarkan satu baris baru jika tidak dapat dihindari.
- Program Anda harus tidak menghasilkan keluaran jika sudah dipindahkan.
- Program Anda harus dapat dijalankan lagi di mana pun ia dipindahkan.
Asumsi
- Anda dapat berasumsi bahwa input tidak pernah kosong.
- Anda dapat menganggap direktori tersebut tidak pernah memiliki nama file yang ditambahkan sampai akhir.
- Anda dapat mengasumsikan bahwa direktori input tidak pernah menjadi yang sekarang.
- Anda mungkin menganggap Anda memiliki izin untuk menulis dan mengeksekusi di mana-mana.
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
c:\users\Joe\program.txt
) atau tidak (c:\users\Joe\
)? Dalam kasus terakhir, haruskah nama file yang dibuat sama dengan sumbernya?Jawaban:
Bash + coreutils,
4342 byteIni untuk menghindari pencetakan baris tambahan melalui flag -n ke echo.
Saya tidak begitu yakin apa arti OP dengan mengizinkan baris baru tertinggal jika "tidak dapat dihindari".
Jika dapat diterima untuk menyertakan baris tambahan, ubah
untuk
dan simpan 3 byte, untuk total 39 byte.
sumber
PowerShell ,
59626160 byteCobalah online!
Penjelasan
Move-Item
Cmdlet (mv
) PowerShell juga mengganti nama file, jadi memberikannya direktori yang tidak ada sebagai tujuan hanya mengganti nama file ke komponen terakhir itu (selama induknya ada), jadi itu tidak baik.Saya dapat menggunakan
Test-Path
untuk menentukan bahwa tujuan itu ada dan merupakan direktori, tetapi terlalu panjangTest-Path $d -PathT C
.Jadi alih-alih saya menggunakan
Get-ChildItem
(ls
) dengan-Directory
parameter (disingkat) , dan memeriksa$?
untuk melihat apakah itu berhasil. Output jika ada ditugaskan$z
sehingga tidak terlihat.Itu dilakukan dalam bentuk array dengan 2 elemen, kemudian mengindeks ke dalam array dengan nilai boolean
$?
, yang akan digabung menjadi0
atau1
, jadi elemen array pertama dipilih jika direktori tujuan tidak ada, dan kedua jika tidak.Elemen array pertama adalah string yang berisi kotak (dikutip); baris baru diizinkan dalam string, bahkan ketika itu bukan heredocs. Elemen kedua adalah string yang berisi perintah bergerak.
Hasil dari pemilihan array akan disalurkan ke
Invoke-Expression
(iex
) untuk dieksekusi. Ini diperlukan karena saya hanya meninggalkan perintah move yang sebenarnya di array, ia dieksekusi tidak peduli apa (untuk mengisi array), yang mengalahkan tujuannya.sumber
.code.tio.ps1
, bukanb.ps1
. Ini bekerja. Tampaknya ada beberapa keluaran menyimpang ke STDOUT. Tidak yakin apa penyebabnya.gci
, direktori pengujian saya tidak menunjukkan itu karena mereka tidak mengandung item anak, jadi ini memperlihatkan kelemahan itu. Sudah diperbaiki sekarang dengan hanya menetapkan output. Terima kasih @Dennis!ls
adalah singkatan yang lebih pendek untukgci
ls
semua waktu dan kemudian dalam golf saya cenderung melupakannya. Terima kasih.$?
golf digunakan di sini.Oktaf,
605752 byte8 byte disimpan berkat @Stewie
Ini adalah skrip yang hidup dalam file bernama
f.m
. Saat dijalankan, itu akan meminta pengguna untuk memindahkan folder ke file. Jika folder tidak ada dan operasi pemindahan gagal, makamovefile
kembalifalse
(atau0
) jika tidak mengembalikantrue
(atau1
). Jika itufalse
, kami menampilkan string"+-+\n| |\n+-+"
.sumber
Batch, 80 byte
Batch tidak menyukainya jika Anda memindahkan file batch saat sedang berjalan, jadi dengan memanggil
%1\%~nx0
(yang merupakan nama baru file batch) Batch berhenti mencari file batch lama.sumber
Bash + coreutils, 54 byte
Cukup sederhana. Itu melakukan tes untuk melihat apakah argumen pertama ada, jika ada program bergerak sendiri ke argumen, yang lain mencetak kuadrat.
Tidak bekerja di Windows, namun bekerja di Bash di Ubuntu di Windows / WSL. Tidak mengambil huruf drive, namun saya pikir sudah diklarifikasi baik-baik saja.
Akun ini dimiliki oleh Mendeleev.
sumber
echo -n
agar Anda tidak mencetak baris tambahan.Python 3, 71 byte
Itu harus dalam file bernama
f
Cukup sederhana. Ia mencoba untuk memindahkan dirinya ke direktori apa pun yang diberikan padanya di STDIN, dan jika terjadi kesalahan ia mencetak kotak.
sumber
C 137 byte
Versi tidak disatukan:
f
menerima nama file danz
menerima nama direktori. String tujuan adalah gabungan dariz
danf
.rename()
digunakan untuk memindahkan file ke lokasi baru.The
main()
akan terlihat seperti ini:Pasti bisa dipersingkat entah bagaimana!
sumber
Ruby, 58 + 12 = 70 byte
Menggunakan bendera
-nrfileutils
. Input disalurkan dari file tanpa baris baru ke STDIN.sumber
Minecraft ComputerCraft Lua , 74 byte
Nama file dikodekan sebagai "f". Ini berjalan pada komputer dalam gim dan berjalan relatif terhadap struktur direktori komputer itu. Menggunakan
fs
API bawaan Lua CC .Tidak Disatukan:
sumber