Diberikan string Anda harus memindahkan setiap huruf (mulai dari huruf pertama) dengan posisinya di alfabet. Jika Anda mencapai ujung tali, Anda harus membungkusnya. Non-surat tidak perlu dipindahkan.
Contoh:
Dog
D
adalah huruf keempat dalam alfabet jadi kami memindahkannya empat tempat ke kanan. Setelah membungkus, itu mengubah string ke oDg
. o
adalah huruf ke-15, (15 mod 3) = 0, sehingga tidak bergerak. g
adalah huruf ke 7 - (7 mod 3) = 1, jadi string menjadi goD
.
hi*bye
h
adalah huruf ke 8, pindahkan 8 titik -hi*bye
=>i*hbye
i
adalah huruf ke-9, pindahkanlah 9 titik -i*hbye
=>*hbiye
b
adalah huruf ke-2, pindahkan 2 tempat -*hbiye
=>*hiybe
y
adalah huruf ke 25, pindahkan 25 titik -*hiybe
=>*hibye
e
adalah huruf ke-5, pindahkan 5 tempat -*hibye
=>*hibey
Non-huruf tidak perlu dipindahkan, tetapi masih membutuhkan ruang.
cat
=>tca
F.U.N
=>.F.NU
mississippi
=>msiisppssii
Jawaban:
CJam,
444240 byteOutput berisi linefeed tambahan.
Uji di sini.
Penjelasan
Alih-alih memindahkan surat melalui string, saya berulang kali menghapus surat, memutar string yang sesuai, dan kemudian memasukkan kembali surat itu. Ada satu tangkapan untuk melakukan ini: kita harus bisa membedakan awal string dari ujung string (yang tidak bisa kita lakukan setelah rotasi sederhana). Itu sebabnya kami menyisipkan linefeed di bagian akhir sebagai penjaga (surat sebelum linefeed adalah akhir dari string, huruf setelah itu adalah awal). Bonus adalah bahwa ini secara otomatis mengembalikan string akhir rotasi yang benar mana linefeed sebenarnya adalah pada akhir string.
Untuk melihat mengapa ini berakhir di posisi yang tepat, pertimbangkan iterasi terakhir dari
hi*bye
contoh. Setelah kami memprosese
, string yang dihitung ada di posisi ini:Pertama, kami membagi linefeed dan menggabungkan bagian-bagian dalam urutan terbalik:
Linefeed sekarang akan berada di awal atau di akhir string ini. Tetapi karena linefeed hanyalah penjaga yang menandai akhir string, ini berarti bahwa karakter sebenarnya dalam urutan yang benar. Sekarang linefeed bukan huruf, sehingga array tidak diputar sama sekali. Jadi, ketika kita menambahkan umpan baris, ia masuk ke tempatnya, dan semuanya dalam urutan yang kami cari:
Beberapa hasil tambahan jika seseorang ingin membandingkan kasus pengujian yang lebih lama:
Saya suka yang terakhir. :)
sumber
Ruby 125
130 132 139 139byteDemo online dengan tes: http://ideone.com/GYJm2u
Awal (versi yang tidak disatukan): http://ideone.com/gTNvWY
Sunting: Terima kasih banyak untuk manatwork atas sarannya!
Sunting 2 : jumlah karakter tetap (saya awalnya menghitung akhir baris CRLF.)
sumber
c.upcase.ord-64
→c.ord%32
.a.join
??? Siapa kamu dan apa yang telah kamu lakukan dengan w0lf? Dia pasti akan menuliskannya sebagaia*''
.while ... end
kode saya sehingga saya lupa melakukannya. Terima kasih telah memperhatikan!while ... end
menjadi(...)while ...
?Python 3,
278275273270260258249248243238 byteSaya harus benar-benar bermain golf ini lebih baik, tapi di sini adalah solusi saya, dengan terima kasih kepada katenkyo untuk bantuannya dengan logika, dan untuk Cyoce dan Mego atas bantuan mereka dengan golf.
Sunting: Akhirnya, saya sampai pada satu pernyataan perbandingan. MERAYU! (Dan ya, saya bisa memindahkannya
z=-z
ke dalama,m=m,a
bit, tetapi itu tidak menghemat byte dan itu mengacaukan kode lebih dari yang saya pikir perlu)Sunting: Jumlah byte tidak aktif.
Tidak Disatukan:
sumber
p[j][0]
dapat dikurangi dengan menetapkanJ=p[j];
di awal, kemudian mengganti contohp[j][0]
denganP[0]
p
secara langsung, dan bukan variabel yangp[j]
ditugaskan untuk itu. Juga, jika Anda melihat riwayat revisi saya, saya memang memiliki variabelk = p[j][0]
untuka<=k<=m
perbandingan, tetapi ternyata menjatuhkank
lebih baik karena saya menyimpan lebih banyak byte pada indentasi dari garis ekstra untuk ditetapkank
daripada yang saya simpan dengan menggunakank
.