Dalam satu file, tulis sebuah program yang tidak memerlukan input dan tidak menghasilkan output. Ketika menjalankannya harus membalikkan nama file yang terkandung di dalamnya, terlepas dari apa namanya , tanpa mengubah kode atau menghasilkan efek samping yang bertahan lama.
Cara apa pun untuk mencapai ini baik-baik saja. Yang penting adalah bahwa begitu program dijalankan, satu-satunya perubahan yang bertahan lama adalah bahwa nama filenya telah dibalik. misalnya tidak ada file baru di direktori.
Menjalankan program lagi harus membalikkan nama kembali. Memang, program harus dapat dijalankan secara sewenang-wenang berkali-kali.
Untuk keperluan tantangan ini:
- Anda dapat menganggap nama file selalu terdiri dari huruf kecil (az) dengan panjang antara 1 dan 127 karakter. (Jika bahasa Anda memerlukan file untuk menjalankan ekstensi, balikkan saja bagian sebelum ekstensi, mis .
mycode.bat
→edocym.bat
.) - Anda dapat menganggap file kode berada dalam direktori dengan sendirinya sehingga tidak akan ada konflik penamaan (kecuali dengan dirinya sendiri).
- Anda mungkin tidak menganggap nama file bukan palindrom, yaitu sama ketika terbalik. Nama file yang merupakan palindrom harus bekerja sama baiknya dengan yang tidak.
- Anda dapat membaca konten atau metadata file Anda. Tidak ada batasan quine di sini.
- Anda dapat mengasumsikan program Anda akan dijalankan pada sistem operasi tertentu, modern, dan umum (misalnya Windows / Linux), karena tidak semua shell memiliki set perintah yang sama.
Sebagai contoh konkret, katakan Anda memiliki program Python dalam file yang disebut
mycode
di direktori sendiri. Laripython mycode
di terminal harus menghasilkan nama file yang dibalik
edocym
. File tersebutedocym
harus sendirian di direktori - tidak ada file bernamamycode
harus ada lagi. Laripython edocym
akan membalikkan nama kembali ke
mycode
, di mana titik proses dapat diulang tanpa batas waktu.Jika file Python yang sama diganti namanya
racecar
(tanpa mengubah kode) dan kemudian jalankanpython racecar
tidak ada yang terlihat berubah karena "mobil balap" adalah palindrom. Hal yang sama berlaku jika nama file itu, katakanlah,
a
atauxx
.
Kode terpendek dalam byte menang. Tiebreaker adalah jawaban dengan suara lebih tinggi.
sumber
Jawaban:
Bash + utilitas linux umum, 13 byte
Metode saya mirip dengan @ DigitalTrauma tetapi sedikit lebih pendek karena pipa dengan
ls
:sumber
C #, 153 byte
OO keren dan semua sampai Anda memiliki variabel yang ditentukan:
System.Reflection.Assembly.GetExecutingAssembly (). ManifestModule.Name
itu hanya berarti
sumber
Bash + utilitas linux umum, 15
Diasumsikan bahwa skrip berada dalam direktori dengan sendirinya.
sumber
$0
dapat diganti dengan*
.$0
daripada yang terakhir*
.<<<
.Julia, 51 byte
Program ini harus merupakan sistem operasi agnostik, meskipun hanya diuji pada OS X.
Tidak Disatukan:
sumber
cd
. Dalam hal inif=readdir()[]
akan lebih pendek.MATLAB,
5046 byteTerima kasih kepada @Suever untuk menghapus 4 byte dan untuk pengujian!
Diuji pada OS X El Capitan dan Debian Jessie, keduanya dengan versi Matlab R2014a.
Di Windows diperlukan bendera
'f'
(e='.m';x=mfilename;movefile([x e],[flip(x) e]),'f'
) untuk mengubah nama file saat file sedang digunakan.Bagaimana itu bekerja
sumber
'f'
?Ruby, 24 byte
Cukup jelas. (
$0
adalah nama file yang dieksekusi.)Jalankan dengan
ruby whatever
direktori kerja dari direktori yang berisi file tersebut.sumber
Batch, 109 byte
Catatan 1: File batch harus diakhiri
.bat
; diasumsikan bahwa file batch dijalankan dengan namanya tanpa ekstensi, dan bahwa file.bat
tersebut tidak dapat dibalik. Misalnya,reverse
akan mencoba mengubah namareverse.bat
menjadiesrever.bat
.Catatan 2:
CMD.EXE
kesalahan keluar setelah mengganti nama file batch. (COMMAND.COM
tidak akan, kecuali bahwa itu tidak mampu memanipulasi string di tempat pertama.)Sunting: Disimpan 2 byte dengan menggunakan jaminan bahwa nama file itu alfabet (berdasarkan komentar @ CᴏɴᴏʀO'Bʀɪᴇɴ).
sumber
if ]%f% NEQ ] goto l
C, 102 byte
Kerusakan:
Akhirnya sebuah tantangan di mana C tidak (sangat putus asa) tidak kompetitif!
Jika kita mengambil "Anda dapat menganggap direktori kerja shell akan menjadi folder file tersebut di" berarti bahwa program ini akan selalu dipanggil sebagai
./myexecutable
, kita dapat menyederhanakan*n=strrchr(*v,47)
untuk*n=*v+1
menyimpan 10 karakter, tapi ini tidak sepenuhnya valid ( itu bisa dipanggil sebagai././myexecutable
, misalnya).Juga jika Anda ingin mempertahankan ekstensi file (mis. ".Out"), Anda dapat mengubahnya
*t=strchr(b,0)
menjadi*t=strrchr(b,46)
, dengan biaya 2 byte. Namun tidak diperlukan.sumber
rename
terjadi jika src == dest; tampaknya Anda memenuhi batasan palindrome secara gratis./
dalam kasus sudut?)oldpath
dannewpath
ada tautan keras yang merujuk ke file yang sama, makarename()
tidak melakukan apa-apa, dan mengembalikan status keberhasilan" - jika string identik, mereka merujuk ke file yang sama.Vitsy + * sh, 15 byte
Penjelasan
Perhatikan bahwa pengajuan ini harus menggunakan versi Vitsy yang tidak aman (tidak dapat dilakukan di Try It Online!)
sumber
Perl 5, 18 byte
Sedikit seperti yang Ruby (jalankan
perl nameofscript
):Memperhatikan kemungkinan jalur ke akun lebih buruk (47 byte)
sumber
V ,
2926 byteKarena ini mengandung unsintables, berikut adalah hex dump:
Catatan: ini tidak akan berjalan di v.tryitonline.net karena TIO tidak mengizinkan akses file.
Penjelasan:
sumber
Python 3, 105 byte
-Alex.A dihapus 1 byte.
-Digital Trauma menunjukkan saya os.rename () yang mengambil 62 byte.
-muddyfish dihapus 7 byte.
sumber
import
import os,sys;f=sys.argv[0];os.rename(f,f[::-1])
harus melakukan trik selama 48 bytesys.argv[0]
hanya mengembalikan nama file saja tanpa path ketika skrip dijalankan secara langsung. Helka mengindikasikan ini tidak masalahPHP,
84,70, 54 byteEDIT: dihapus 14 byte terima kasih
insertusernamehere
di komentarEDIT: dihapus 16 bytes berkat
Martijn
komentarsumber
rename($f=__FILE__,__DIR__."/".strrev(pathinfo($f)[filename]).".php");
.rename($f=__FILE__,"./".strrev(pathinfo($f)[filename]).".php");
rename(__FILE__,strrev(basename(__FILE__,'.php')).'.php');
PowerShell, 39 byte
sumber
Python 2 , 41 byte
Demo di Bash.
Python benar-benar tidak peduli dengan ekstensi file, jadi kita bisa membalik seluruh nama file.
sumber
PHP, 31 byte
Tidak banyak yang bisa saya jelaskan:
sumber
Perl 6 ,
7027 byteJika perlu bekerja di direktori kerja yang berbeda, Anda akan membutuhkan sesuatu seperti ini:
Karena direktori kerja akan menjadi direktori yang sama dengan program, maka dapat disederhanakan menjadi:
Penjelasan:
sumber
JavaScript (Node),
10810468 byte36 byte disimpan, terima kasih untuk Downgoat!
Versi Windows:
Versi lain:
sumber
js
di akhir filepath, didahului oleh karakter. Ini akan selalu menjadi.
.JavaScript ES6 (Node.js) 70 Bytes
Tidak Regex Yay!
Bantuan apa pun dihargai
sumber
PowerShell v4 +, 68 byte
Hanya berfungsi karena skrip dijamin berada dalam direktori dengan sendirinya. Melakukan suatu
ls
(alias untukGet-ChildItem
) dan mengambil.Name
objek yang dihasilkan. Kami menyimpannya di$c
dan kemudian-split
pada periode literal untuk mendapatkan nama file dan ekstensi, dan menyimpannya di$a
dan$b
, masing-masing.Berikutnya adalah perintah
mv
(alias untukMove-Item
), tempat kami pindah$c
ke$a
(terbalik).$b
.Contoh
sumber
Python (2,7 atau 3,4+),
6149 byteSaya percaya ini dekat dengan solusi Python optimal:
Terinspirasi oleh
s4b3r6
jawaban, tetapi menggunakan pengiris daftar alih-alih terbalik, dan menyimpan__file__
ke variabel untuk menyimpan byte saat menggunakannya dua kali.Catatan: Ini mengasumsikan bahwa nama file selalu
*.py
. Solusi yang sedikit lebih umum yang dapat menangani ekstensi file dua karakter apa pun akan digunakana[-3:]
untuk menggantikan".py"
, dengan biaya 1 byte tambahan.Pembaruan: Disimpan 12 byte dengan menggunakan trik pengiris daftar
a[-4::-1]
untuk menghapus ekstensi file, alih-alih membelah dan kemudian membalik dengana.split(".")[0][::-1]
.sumber
Powershell, 112 byte
Saya tidak akan mengalahkan cmds unix, hanya menambahkan dua pence saya untuk bersenang-senang :-)
sumber
{}
, atau dengan menambahkan 4 spasi sebelum kode Anda.PowerShell, 50 byte
Hanya ada satu file, jadi
mv *
shell wildcard hanya akan memiliki satu hasil. Nama tujuan adalah(ls).basename
yang mencantumkan semua file (alias untuk 'dir'), panggilan untuk properti BaseName - dan karena hanya ada satu file, PowerShell akan membongkar array 1-item ke dalam sebuah string. Simpan nama file itu$f
, kemudian indekskan dengan hitung mundur dan-join
karakter yang terbalik dicadangkan menjadi string. Tambahkan.ps1
akhiran wajib .sumber
Otomatis, 45 byte
sumber
Python 2.7, 68 byte
Ini mungkin yang terbaik yang bisa saya dapatkan.Saya hanya membuktikan diri saya salah.sumber
Python (2 & 3),
8878 byteMengeksploitasi fakta bahwa nama file diberikan oleh sys.argv (karena direktori kerja adalah folder tempat file berada), dan menggunakan os.rename. Yang menjengkelkan, membalikkan mengembalikan iterator, jadi kita harus menggunakan gabungan.
Sunting: Disimpan 10 byte dengan menggunakan __file__ alih-alih sys.argv [0], seperti yang disarankan oleh @muddyfish ke @DigitalTrauma.
sumber
tcl, 42
sumber
Visual Basic Script, 44 Bytes
Contoh output untuk file bernama
reverse.vbs
(Jalankan dengan cscript):sumber
sfk , 83 byte
Cobalah online!
sumber
SmileBASIC 60 byte
Alternatif:
sumber