Pemrograman Berorientasi Pergeseran

41

Sebuah string dapat digeser oleh angka ndengan mendapatkan nilai byte cdari 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 ndengan 0 < n < 256Anda 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 nsaat kode sumber digeser oleh n.

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.
Laikoni
sumber
Terkait
Martin Ender
Terkait
jimmy23013
Apakah dapat diterima untuk memiliki keluaran sebelum keluaran yang diinginkan yang dihapus melalui urutan pelarian ANSI, atau disembunyikan melalui \r?
Dom Hastings
4
@HomHastings Karena 0x0D dan 0x1B berpotensi menjadi bagian dari output string aktual, saya tidak akan berpikir begitu.
Martin Ender

Jawaban:

24

Brainfuck, skor: 31 (2208 bytes)

Program yang disandikan Base64:

LFsuLF0oVycnJycqKFkkUyMjIyMjIyMjJiRVIE8fHx8fHx8fHx8fHx8iIFEMOwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLDgw9CDcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcKCDkEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGBDUAL8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w7 / Dv8O / w78CADHDrBvDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Orw6vDq8Ouw6wdw6gXw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Onw6fDp8Oqw6gZw6QTw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6bDpBXDoA / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 / Dn8Ofw5 /w4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4PDg8ODw4bDhMO1w4DDr8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / C / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8K / wr / Cv8OCw4DDscKsw5vCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvC/ CocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwHHocwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqLCoMORwozCu8KNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKOwozCvcKIwrfCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJworCiMK5woTCs8KFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXC==

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:

l = [0, 4, 8, 12, 32, 36, 40, 44, 64, 68, 72, 76, 96, 100, 104, 108, 128, 132, 136, 140, 160, 164, 168, 172, 192, 196, 200, 204, 224, 228, 232, 236]
shift = lambda s,n:"".join(chr((ord(i)+n)%256) for i in s)
code = ""
for i in l:
    code += shift(",[{}.,]".format(i*"+" if i<=128 else (256-i)*"-"),-i)
ManfP
sumber
Bisakah Anda menunjukkan beberapa kode kerja aktual yang dikodekan dan tahan-geser? (yaitu +[>,.<]?)
Stan Strum
@StanStrum Hanya versi bergeser ,[+.,], di mana +jumlah +s atau -s
Jo King
20

lHaskell, 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 Ndan string (saat ini Big 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 bergeser ndan kemudian kita menggeser setiap salinan individu -n.

Wisaya Gandum
sumber
20

C, skor: 1 (73 byte)

aZ0;/*0\:..*/f(s){puts(s);}//	e'bg`q)r(zenq':)r:**r(otsbg`q'')r*0($145(:|

Cobalah online!

Digeser oleh 1:

b[1<0+1];//+0g)t*|qvut)t*<~00
f(char*s){for(;*s;++s)putchar((*s+1)%256);}

Cobalah online!

Steadybox
sumber
7

05AB1E , Nilai: 3 (24 byte)

¶Ä0(ä.g){n·Å0)åH*oHÆ0*æI

Cobalah online!

Penjelasan

¶Ä0(ä.g){n·Å0)åH*oHÆ0*æ  # Doesn't matter
                       I # Push the original input to the stack, implicit display

Bergeser satu kali:

·Å1)å/h*|o¸Æ1*æI+pIÇ1+çJ

Cobalah online!

Penjelasan

·Å1)å/h*|o¸Æ1*æI+p       # Doesn't matter    
                  IÇ     # Push the ASCII values of the input 
                    1+   # Increment by 1
                      çJ # Push the chars of the ASCII values, join, implicit display

Bergeser dua kali:

¸Æ2*æ0i+}p¹Ç2+çJ,qJÈ2,èK

Cobalah online!

Penjelasan

Æ2*æ0i+}p         # Doesn't matter    
         ¹Ç       # Push the ASCII values of the input 
           2+     # Increment by 2
             çJ   # Push the chars of the ASCII values, join
               ,q # Print and terminate

Bergeser tiga kali:

¹Ç3+ç1j,~qºÈ3,èK-rKÉ3-éL

Cobalah online!

Penjelasan

¹Ç        # Push the ASCII values of the input 
  3+      # Increment by 3
    ç1j   # Push the chars of the ASCII values, join
       ,q # Print and terminate
Kaldo
sumber
6

Javascript, skor: 1 4 ( 94 346 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:

hc/*% *%nnS/0S eb^[fRR _SbS/0Efd[`Y Xda_5ZSd5aVWS UZSd5aVW3f"#&$'( \a[`RR!! %34hc/*$ifb_jVV$cWfW34Ijh_d]$\hec9^Wh9eZ[W$Y^Wh9eZ[7j&!'&(+,$`e_dVV%%%*89hc/)nkgdo[[)h\k#\89Nomdib)amjh>c\m>j_`###\)^c\m>j_`<o#+$&0$ -01$$$)ejdi[[***/=>/*ch*/hc//chhcchvw*/g¬©¥¢­g¦©avw­«¢§ g«¨¦|¡«|¨aaag¡«|¨z­aibdjrrb^knobbbg£¨¢§

Diputar oleh 5:

mh4/*%$/*ssX45X%jgc`kWW%dXgX45Jki`e^%]ifd:_Xi:f[\X%Z_Xi:f[\8k' "(+ ),-   %af`eWW &&%*89mh4/)nkgdo[[)h\k#\89Nomdib)amjh>c\m>j_`###\)^c\m>j_`<o#+$&,+$ -01$$$)ejdi[[***/=>mh4.split``.map(a=>String.fromCharCode(((a.charCodeAt(0)+5)%256))).join``///4BC4/hm/4mh44hmmhhm{|/4l±®ª§²l«®f{|²°§¬¥l¤°­«¦°­¢£fffl¡¦°­¢£²fngiowwgcpstgggl¨­§¬

Diputar oleh 10:

rm94/*)4/xx$]9:]*olhep\\*i]l$]9:Opnejc*bnki?d]n?k`a$$$]*_d]n?k`a=p$,%'-0%!.12%%%*fkej\\%++*/=>rm94.split``.map(a=>String.fromCharCode(((a.charCodeAt(0)+10)%256))).join``///4BCrm93xuqnyee3rfu-fBCXywnsl3kwtrHmfwHtij---f3hmfwHtijFy-5.0:.*7:;...3otnsee4449GH94mr49rm99mrrmmr49q¶³¯¬·££q°¤³k¤·µ¬±ªq©µ²°«¤µ²§¨kkk¤q¦«¤µ²§¨·kslnt||lhuxylllq­²¬±££

Diputar oleh 14: hal-hal akhirnya menjadi menarik di sini, harus menyalahgunakan sistem tipe Javascript.

vq=83.-83||(a=>a.split``.map(a=>String.fromCharCode(((a.charCodeAt(0)+14)%256))).join``)//.3ABvq=82wtpmxdd2qet,eABWxvmrk2jvsqGlevGshi,,,e2glevGshiEx,4-/54-)69:---2nsmrdd3338FGvq=7|yur}ii7vjy1jFG\}{rwp7o{xvLqj{Lxmn111j7lqj{LxmnJ}1924>2.;>?2227sxrwii888=KL=8qv8=vq==qvvqqv8=uº·³°»§§u´¨·o¨»¹°µ®u­¹¶´¯¨¹¶«¬ooo¨uª¯¨¹¶«¬»owprxply|}pppu±¶°µ§§

Diputar oleh 199:

/*öñìçæñì55áö÷ç,)%"-ç&)áö÷-+"' ç+(&ü!+ü(áááç!+ü(ú-áéâäêíâÞëîïâââç#("'âèèçìúû/*öñë0-)&1ë*-åúû1/&+$ë#/,*%/,!"åååë %/,!"þ1åíæèîíæâïòóæææë',&+ìììñÿ/*öð52.+6""ð/#2ê#ÿ64+0)ð(41/*#41&'êêê#ð%*#41&'6êòëí÷ëçô÷øëëëð,1+0""ñññööñ*/ñö/*öö*//**/=>ñö.split``.map(a=>String.fromCharCode(((a.charCodeAt(0)+199)%256))).join``

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/**/=>amasih 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)dengan charCodeAt``akan mencukur 4 byte dari seluruh solusi, tetapi terlalu banyak pekerjaan yang harus dilakukan dari awal.

Nit
sumber
Saya mencoba pendekatan yang sama dengan pengaturan awal yang berbeda, tetapi juga dibatasi pada 4 poin, sepertinya pendekatan ini tidak menghasilkan skor yang lebih tinggi.
Nit
Bisakah Anda setidaknya menggunakan charCodeAt()untuk menyimpan 2 byte?
Neil
5

PHP dengan -d output_buffering=on -d short_open_tag=on, skor: 255 (25.731 bytes)

<?die($argv[1]);?>
=@pc`dmfbo)*<ejf)qsfh`sfqmbdf`dbmmcbdl)#0/0#-gvodujpo)%n*|sfuvso!dis)pSe)%n\1^*.2*<~-%bshw\2^**<@?>Aqdaengcp*+=fkg*rtgiatgrncegaecnndcem*$101$.hwpevkqp*&o+}tgvwtp"ejt*qTf*&o]2_+/4+=.&ctix]3_++=A@?Brebfohdq+,>glh+suhjbuhsodfhbfdooedfn+%212%/ixqfwlrq+'p,~uhwxuq#fku+rUg+'p^3`,06,>?/'dujy^4`,,>BA
@Csfcgpier,-?hmi,tvikcvitpegicgeppfego,&323&0jyrgxmsr,(q-vixyvr$glv,sVh,(q_4a-18-??0(evkz_5a--?CBADtgdhqjfs-.@inj-uwjldwjuqfhjdhfqqgfhp-'434'1kzshynts-)r.?wjyzws%hmw-tWi-)r`5b.2:.@?1)fwl{`6b..@DCBEuheirkgt./Ajok.vxkmexkvrgikeigrrhgiq.(545(2l{tizout.*s/?xkz{xt&inx.uXj.*sa6c/3</A?2*gxm|a7c//AEDCFvifjslhu/0Bkpl/wylnfylwshjlfjhssihjr/)656)3m|uj{pvu/+t0?yl{|yu'joy/vYk/+tb7d04>0B?3+hyn}b8d00BFEDGwjgktmiv01Clqm0xzmogzmxtikmgkittjiks0*767*4n}vk|qwv0,u1?zm|}zv(kpz0wZl0,uc8e15@1C?4,izo~c9e11CGFEHxkhlunjw12Dmrn1y{nph{nyujlnhljuukjlt1+878+5o~wl}rxw1-v2?{n}~{w)lq{1x[m1-vd9f26B2D?5-j{pd:f22DHGFIylimvokx23Enso2z|oqi|ozvkmoimkvvlkmu2,989,6pxm~syx2.w3?|o~|x*mr|2y\n2.we:g37;:3E?6.k|q?e;g33EIHGJzmjnwply34Fotp3{}prj}p{wlnpjnlwwmlnv3-:9:-7q?yntzy3/x4?}p?}y+ns}3z]o3/xf;h48<<4F?7/l}r?f<h44FJIHK{nkoxqmz45Gpuq4|~qsk~q|xmoqkomxxnmow4.;:;.8r?zo?u{z40y5?~q??~z,ot~4{^p40yg<i59=>5G?80m~s?g=i55GKJIL|olpyrn{56Hqvr5}rtlr}ynprlpnyyonpx5/<;</9s?{p?v|{51z6?r??{-pu5|_q51zh=j6:>@6H?91nt?h>j66HLKJM}pmqzso|67Irws6~?sum?s~zoqsmqozzpoqy60=<=0:t?|q?w}|62{7??s???|.qv?6}`r62{i>k7;?A;?7I?:2o?u?i?k77IMLKN~qnr{tp}78Jsxt7?tvn?t{prtnrp{{qprz71>=>1;u?}r?x~}73|8??t???}/rw?7~as73|j?l8<@D8J?;3p?v?j@l88JNMLOros|uq~89Ktyu8??uwo?u?|qsuosq||rqs{82?>?2<v?~s?y~84}9??u???~0sx?8bt84}k@m9=AF9K?<4q?w?kAm99KONMP?spt}vr9:Luzv9??vxp?v?}rtvptr}}srt|93@?@3=w?t?z?95~:??v???1ty?9?cu95~lAn:>BH:L?=5r?x?lBn::LPO
...

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 berarti 03, 14, 25, 36, 47, 58dan 69. Mengatasi itu cukup mudah menggunakan aritmatika. Mungkin juga untuk mengurangi jumlah byte dalam program aslinya juga.

Dom Hastings
sumber
4

Derek-Flak , Skor 3 (252 byte)

%&'()%&%X'Z&xx\()'()z%xz|%&'()%&'()%&'()9;=&'()9;=%XZ\&'z|%&'(9;=(9;=%&'XZ\(|xz|9;=%&'%&(%X'Z&\('()xxz%xz|9;=&'()9;=%XZ\&'z|9;=(9;=%&'XZ\(|9;=)))))))%&Y[]'()yy{}%&y{}%&'()%&'():<>'():<>%&Y[]'(){}y{}:<>%&Y[]'()yy{}::<><>:<>%&y{}:<>'():<>%&Y[]'(){}::<><>

Cobalah online!

(Tidak cukup bekerja di Brain-Hack karena hanya mod Crane-Flak sebesar 256)

Digeser oleh 1

&'()*&'&Y(['yy])*()*{&y{}&'()*&'()*&'()*:<>'()*:<>&Y[]'({}&'():<>):<>&'(Y[])}y{}:<>&'(&')&Y(['])()*yy{&y{}:<>'()*:<>&Y[]'({}:<>):<>&'(Y[])}:<>*******&'Z\^()*zz|~&'z|~&'()*&'()*;=?()*;=?&'Z\^()*|~z|~;=?&'Z\^()*zz|~;;=?=?;=?&'z|~;=?()*;=?&'Z\^()*|~;;=?=?

Cobalah online!

Digeser oleh 2

'()*+'('Z)\(zz^*+)*+|'z|~'()*+'()*+'()*+;=?()*+;=?'Z\^()|~'()*;=?*;=?'()Z\^*~z|~;=?'()'(*'Z)\(^*)*+zz|'z|~;=?()*+;=?'Z\^()|~;=?*;=?'()Z\^*~;=?+++++++'([]_)*+{{}'({}'()*+'()*+<>@)*+<>@'([]_)*+}{}<>@'([]_)*+{{}<<>@>@<>@'({}<>@)*+<>@'([]_)*+}<<>@>@

Cobalah online!

Digeser 3

()*+,()([*]){{_+,*+,}({}()*+,()*+,()*+,<>@)*+,<>@([]_)*}()*+<>@+<>@()*[]_+{}<>@()*()+([*])_+*+,{{}({}<>@)*+,<>@([]_)*}<>@+<>@()*[]_+<>@,,,,,,,()\^`*+,||~€()|~€()*+,()*+,=?A*+,=?A()\^`*+,~€|~€=?A()\^`*+,||~€==?A?A=?A()|~€=?A*+,=?A()\^`*+,~€==?A?A

Cobalah online!

Penjelasan

Kode utama yang bekerja di sini adalah

([]){{}({}n<>)<>([])}{}<>([]){{}({}<>)<>([])}<>

di mana nnomor sewenang-wenang. Ini memindahkan semuanya ke offstack, menambah nsetiap 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

'Z\(zz|'z|m;=(;='Z\(|z|;='Z\(zz|'z|;=(;='Z\(|;=

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:

'Z\(zz|'z|m;=(;='Z\(|z|;='Z\(zz|'z|;=(;='Z\(|;=)))))){}{}{}{}{}

Menggeser ini sebanyak 2 kita dapatkan

)\^*||~)|~o=?*=?)\^*~|~=?)\^*||~)|~=?*=?)\^*~=?++++++}}}}}

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

&'Z\(zz|&'z|&'(;=(;=&'Z\(|z|;=&'Z\(zz|&'z|;=(;=&'Z\(|;=)))))))&Y[]'()yy{}&y{}&'()&'():<>'():<>&Y[]'(){}y{}:<>&Y[]'()yy{}::<><>:<>&y{}:<>'():<>&Y[]'(){}::<><>

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.

Wisaya Gandum
sumber
3

Python 3, Skor 1, 76 byte

Shift 0: tidak ada perubahan

""!="";print(input());exit()#   oqhms'&&-inhm'bgq'nqc'i(*0(enq'i(hm'hmots'((((

Shift 1:

##">##<qsjou)joqvu)**<fyju)*$
print(''.join(chr(ord(j)+1)for(j)in(input())))

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)

Rick Rongen
sumber