Sebuah string dapat digeser oleh angka n
dengan mendapatkan nilai byte c
dari setiap karakter dalam string, menghitung (c + n) mod 256
, dan mengubah hasilnya kembali ke karakter.
Sebagai contoh, bergeser "ABC123"
1 menghasilkan "BCD234"
, bergeser 10 masuk "KLM;<="
, dan bergeser 255 masuk "@AB012"
.
Tugas
Memilih sebanyak angka n
dengan 0 < n < 256
Anda berani dan menulis sebuah program atau fungsi yang mengambil string sebagai masukan dan
- mengembalikan string tidak berubah ketika kode sumber tidak berubah, tetapi
- mengembalikan string yang digeser
n
saat kode sumber digeser olehn
.
Aturan
- Skor kiriman Anda adalah jumlah yang didukung
n
, dengan skor yang lebih tinggi lebih baik. Skor maksimumnya adalah 255. - Kiriman Anda harus mendukung setidaknya satu shift, sehingga skor minimalnya adalah 1.
- Dalam kasus seri, program yang lebih pendek menang.
- Semua program yang dipindahkan harus dalam bahasa yang sama.
string
code-challenge
source-layout
Laikoni
sumber
sumber
\r
?Jawaban:
Brainfuck, skor: 31 (2208 bytes)
Program yang disandikan Base64:
Bekerja untuk shift 0, 4, 8, 12, 32, 36, 40, 44, 64, 68, 72, 76, 96, 100, 104, 108, 128, 132, 136, 140, 140, 160, 164, 168, 168, 172 , 192, 196, 200, 204, 224, 228, 232 dan 236.
Untuk setiap nilai antara 0 dan 255, ada persis satu dari pergeseran yang mengirim karakter itu ke instruksi brainfuck yang valid.
Program ini bergantung pada sel 8-bit dengan pembungkus overflow. Ini mungkin bisa golf sedikit, karena shift hanya terdiri dari yang diulang
+
atau-
(mana yang lebih pendek).Kode python digunakan untuk menghasilkan ini:
sumber
+[>,.<]
?),[+.,]
, di mana+
jumlah+
s atau-
slHaskell, Skor 255 (27.026 bytes)
Program ini bekerja tetapi meletakkannya di clipboard saya tampaknya menghancurkannya jadi di sini adalah kode yang menampilkan program saya.
Verifikasi
Jadi, jika menyalin sesuatu ke clipboard memecahnya bagaimana cara saya memverifikasi bahwa itu berfungsi?
Anda dapat menggunakan ini di sini . Anda dapat menyesuaikan
N
dan string (saat iniBig ol' egg
) untuk melihat bahwa itu berfungsi sendiri.Ini akan menguji semua N pada satu input berturut-turut tetapi cenderung waktu habis.
Penjelasan
Pelanggaran ini melek huruf notasi komentar Haskell. Dalam melek huruf Haskell setiap baris yang tidak dimulai
>
adalah komentar. Jadi untuk membuat kode kita berfungsi, kita membuat 255 salinan dari program masing-masing bergesern
dan kemudian kita menggeser setiap salinan individu-n
.sumber
C, skor: 1 (73 byte)
Cobalah online!
Digeser oleh 1:
Cobalah online!
sumber
05AB1E , Nilai: 3 (24 byte)
Cobalah online!
Penjelasan
Bergeser satu kali:
Cobalah online!
Penjelasan
Bergeser dua kali:
Cobalah online!
Penjelasan
Bergeser tiga kali:
Cobalah online!
Penjelasan
sumber
Javascript, skor:
14 (94346 bytes)Cukup mudah, memiliki bagian yang berbeda berkomentar ketika diputar, bagian yang sulit adalah menemukan nama variabel yang dapat digunakan dan bagian komentar yang tidak merusak sintaksis Javascript.
Tidak diputar:
Diputar oleh 5:
Diputar oleh 10:
Diputar oleh 14: hal-hal akhirnya menjadi menarik di sini, harus menyalahgunakan sistem tipe Javascript.
Diputar oleh 199:
Untuk menemukan solusinya, saya membuat alat kecil untuk menunjukkan kepada saya potongan yang berbeda ketika diputar dengan jumlah variabel, saya kemudian menemukan pola tertentu yang dapat saya gunakan sebagai blok bangunan yang bermanfaat.
Inti utama dari itu adalah bahwa
a/**/=>a
masih definisi fungsi yang valid, yang memungkinkan Anda untuk menanamkan fungsi yang diputar terbalik di bagian komentar. Dari situ, dapat diulang beberapa kali, jika dilakukan dengan benar.Karena sebagian besar bagian komentar bersarang, dimungkinkan untuk menemukan hasil lain, tetapi membuatnya bekerja menjadi semakin sulit dengan setiap jawaban ditambahkan karena tabrakan dan karakter kontrol.
Mengganti semua penggunaan
charCodeAt(0)
dengancharCodeAt``
akan mencukur 4 byte dari seluruh solusi, tetapi terlalu banyak pekerjaan yang harus dilakukan dari awal.sumber
charCodeAt()
untuk menyimpan 2 byte?PHP dengan
-d output_buffering=on -d short_open_tag=on
, skor: 255 (25.731 bytes)Mirip dengan solusi Haskell, menyalin dan menempelkan jeda ini, jadi saya membuat ini menggunakan skrip Perl ini .
Verifikasi untuk bergeser 1, 16, 32 dan 255 kali.
Penjelasan
Menggunakan PHP
<?
pembatas membuat ini cukup mudah, tapi aku harus menghindari string yang bisa berakhir sebagai<?
tempat lain dalam kode, ini pada dasarnya berarti03
,14
,25
,36
,47
,58
dan69
. Mengatasi itu cukup mudah menggunakan aritmatika. Mungkin juga untuk mengurangi jumlah byte dalam program aslinya juga.sumber
Derek-Flak , Skor 3 (252 byte)
Cobalah online!
(Tidak cukup bekerja di Brain-Hack karena hanya mod Crane-Flak sebesar 256)
Digeser oleh 1
Cobalah online!
Digeser oleh 2
Cobalah online!
Digeser 3
Cobalah online!
Penjelasan
Kode utama yang bekerja di sini adalah
di mana
n
nomor sewenang-wenang. Ini memindahkan semuanya ke offstack, menambahn
setiap item (modulo 256 tersirat pada output), dan kemudian memindahkan semuanya kembali.Namun untuk program pertama (yaitu bergeser 0) kita tidak perlu melakukan ini karena menggeser nol adalah program kucing. Jadi kita mulai dengan kode ini:
dan geser ke bawah sebanyak 1
Ini tidak seimbang sehingga kami harus memperbaikinya. Ada beberapa cara kita bisa melakukan ini dengan metode pilihan saya (untuk alasan yang akan menjadi jelas) adalah sebagai berikut:
Menggeser ini sebanyak 2 kita dapatkan
Karena
()
lebih mudah untuk ditangani daripada{}
kita akan menggunakan}
s untuk menyelesaikan program yang kita inginkan. Itu berarti bahwa)
bisa diseimbangkan dengan cara yang cukup jelas. Dengan sedikit mengutak-atik kita dapat mengubahnya menjadi:Menggesernya kembali, kita dapatkan
Langkah hingga 3 begitu rumit sehingga saya tidak benar-benar memahaminya lagi. Saya menggunakan teknik yang sama dan hanya mengotak-atiknya sampai akhirnya saya berhasil 4 semuanya sekaligus. Tekniknya hampir sama, hanya ada lebih banyak mengutak-atik.
sumber
Python 3, Skor 1, 76 byte
Shift 0: tidak ada perubahan
Shift 1:
Mulai bekerja pada shift 2, tetapi "" menjadi $$ dan Anda tidak dapat memulai garis dengan itu.
Ketika Anda menyimpannya ke file, pastikan itu tidak berakhir dengan baris baru. (vim -b file.py + set noeol)
sumber
Jelly , skor
12815 byteShift 0:
Cobalah online!
Shift 2:
Coba 2 online!
Shift 3:
Coba 3 online!
sumber