Programowanie zorientowane na zmianę

41

Ciąg można przesuwać o liczbę n, uzyskując wartość bajtu ckażdego znaku w ciągu, obliczając (c + n) mod 256i przekształcając wynik z powrotem na znak.

Na przykład przesunięcie "ABC123"o 1 powoduje "BCD234"przesunięcie o 10 "KLM;<="cali i przesunięcie o 255 cali "@AB012".

Zadanie

Odebrać jako wiele numerów nz 0 < n < 256jak śmiesz i napisać program lub funkcję, która pobiera ciąg jako wejście i

  • zwraca ciąg znaków bez zmian, gdy kod źródłowy pozostaje niezmieniony, ale
  • zwraca ciąg przesunięty o, nkiedy przesunięty jest kod źródłowy n.

Zasady

  • Wynik Twojego zgłoszenia to liczba obsługiwanych n, przy czym wyższy wynik jest lepszy. Maksymalny wynik to zatem 255.
  • Twoje zgłoszenie musi obsługiwać co najmniej jedną zmianę, więc minimalny wynik to 1.
  • W przypadku remisu wygrywa krótszy program.
  • Wszystkie przesunięte programy muszą być w tym samym języku.
Laikoni
źródło
Związane z.
Martin Ender
Związane z.
jimmy23013
Czy dopuszczalne jest posiadanie wyjścia przed żądanym wyjściem, które jest usuwane przez sekwencje specjalne ANSI lub ukryte przez \r?
Dom Hastings
4
@DomHastings Ponieważ 0x0D i 0x1B są potencjalnie częścią rzeczywistego ciągu wyjściowego, nie sądzę.
Martin Ender

Odpowiedzi:

24

Brainfuck, wynik: 31 (2208 bajtów)

Program zakodowany w standardzie 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 / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8K / WR / Cv8OCw4DDscKsw5vCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvCq8KrwqvC/ CocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqHCocKhwqLCoMORwozCu8KNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKNwo3CjcKOwozCvcKIwrfCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJwonCicKJworCiMK5woTCs8KFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXChcKFwoXC==

Działa na zmiany 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 i 236.

Dla każdej wartości z zakresu od 0 do 255 istnieje dokładnie jedna z tych przesunięć, która wysyła ten znak do prawidłowej instrukcji skoku mózgu.

Program opiera się na 8-bitowych komórkach z zawijaniem w przypadku przepełnienia. Prawdopodobnie można by to trochę pograć w golfa, ponieważ zmiana składa się z powtórzenia +lub -(w zależności od tego, co jest krótsze).

Kod Python użyty do wygenerowania tego:

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
źródło
Czy możesz pokazać niektóre z faktycznie działającego kodu, który został zakodowany i dostosowany do zmiany? (tj. +[>,.<]?)
Stan Strum
@StanStrum To tylko przesunięte wersje ,[+.,], gdzie +jest ilość +s lub -s
Jo King
20

lHaskell, wynik 255 (27 026 bajtów)

Program działa, ale umieszczenie go w moim schowku wydaje się go niszczyć, więc oto kod, który wypisuje mój program.

Weryfikacja

Więc jeśli kopiowanie rzeczy do schowka psuje to, jak mogę sprawdzić, czy to działa?

Możesz użyć tego tutaj . Możesz dostosować Ni ciąg (obecnie Big ol' egg), aby zobaczyć, że działa sam.

Spowoduje to przetestowanie wszystkich N na pojedynczym wejściu z rzędu, ale zwykle upływa limit czasu.

Wyjaśnienie

Nadużywają piśmienność notacji komentarza Haskella. W piśmie Haskell każdy wiersz, który się nie zaczyna, >jest komentarzem. Aby nasz kod działał, tworzymy 255 kopii programu, na następnie przesuwamy każdą kopię -n.

Kreator pszenicy
źródło
20

C, wynik: 1 (73 bajty)

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

Wypróbuj online!

Przesunięty o 1:

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

Wypróbuj online!

Steadybox
źródło
7

05AB1E , wynik: 3 (24 bajty)

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

Wypróbuj online!

Wyjaśnienie

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

Przesunięty raz:

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

Wypróbuj online!

Wyjaśnienie

·Å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

Przesunięty dwukrotnie:

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

Wypróbuj online!

Wyjaśnienie

Æ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

Przesunięty trzy razy:

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

Wypróbuj online!

Wyjaśnienie

¹Ç        # 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
źródło
6

JavaScript, ocena: 1 4 ( 94 346 bajtów)

Całkiem proste, ma różne sekcje komentowane po obróceniu, trudnym zadaniem było znalezienie użytecznych nazw zmiennych i sekcji komentarzy, które nie łamią składni Javascript.

Niechroniony:

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£¨¢§

Obrócono o 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¨­§¬

Obrócono o 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­²¬±££

Obrócono o 14: w końcu sprawy stały się tutaj interesujące, nadużyły systemu typu 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±¶°µ§§

Obrócono o 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``

Aby znaleźć rozwiązania, zbudowałem małe narzędzie do pokazywania różnych fragmentów po obróceniu o zmienną wartość, a następnie znalazłem pewne wzory, które mogłem wykorzystać jako przydatne elementy składowe.

Główną jego istotą jest to, że a/**/=>awciąż jest poprawną definicją funkcji, która pozwala osadzić funkcję odwróconej rotacji w sekcji komentarzy. Odtąd można to powtórzyć kilka razy, jeśli zostanie to wykonane poprawnie.

Ponieważ większość sekcji komentarzy jest zagnieżdżona, może być możliwe znalezienie innego wyniku, ale sprawienie, by działało, staje się coraz trudniejsze z każdą dodaną odpowiedzią z powodu kolizji i znaków kontrolnych.


Wymiana wszystkie zwyczaje charCodeAt(0)z charCodeAt``zmniejszyłoby 4 bajty off całego rozwiązania, ale to zbyt wiele do zrobienia od podstaw.

Gnida
źródło
Próbowałem tego samego podejścia z inną konfiguracją początkową, ale było również ograniczone do 4 punktów, wydaje się prawdopodobne, że to podejście nie daje wyższego wyniku.
Nit
Czy możesz przynajmniej użyć, charCodeAt()aby zapisać 2 bajty?
Neil
5

PHP z -d output_buffering=on -d short_open_tag=on, wynik: 255 (25 731 bajtów)

<?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
...

Podobnie jak w przypadku rozwiązania Haskell, kopiowanie i wklejanie tych przerw, więc wygenerowałem to za pomocą tego skryptu Perla .

Weryfikacja dla przesuniętych 1, 16, 32 i 255 razy.

Wyjaśnienie

Używanie PHP <?separator wykonany to dość łatwe, ale musiałem uniknąć łańcuchów, które może skończyć się jak <?w innym miejscu w kodzie, to w zasadzie oznacza 03, 14, 25, 36, 47, 58i 69. Obejście ich było dość łatwe przy użyciu arytmetyki. Możliwe jest również zmniejszenie liczby bajtów w oryginalnym programie.

Dom Hastings
źródło
4

Crane-Flak , wynik 3 (252 bajtów)

%&'()%&%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[]'(){}::<><>

Wypróbuj online!

(Nie całkiem działa w Brain-Hack, ponieważ tylko mod Crane-Flak o 256)

Przesunięty o 1

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

Wypróbuj online!

Przesunięty o 2

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

Wypróbuj online!

Przesunięty o 3

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

Wypróbuj online!

Wyjaśnienie

Główny kod działający tutaj to

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

gdzie njest dowolną liczbą. To przenosi wszystko do offstacka dodając ndo każdego elementu (modulo 256 jest niejawne przy wyjściu), a następnie przenosi je wszystkie z powrotem.

Jednak w przypadku pierwszego programu (tzn. Przesuniętego o 0) nie musimy tego robić, ponieważ przesunięcie o zero jest programem cat. Zacznijmy od tego kodu:

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

i zmniejsz go o 1

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

Jest to niezrównoważone, więc musimy to naprawić. Istnieje kilka sposobów, w jaki możemy to zrobić za pomocą mojej metody wyboru (z powodów, które staną się oczywiste):

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

Zwiększając to o 2, otrzymujemy

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

Ponieważ ()łatwiej jest sobie z tym poradzić {}, będziemy używać }s do ukończenia pożądanego programu. Oznacza to, że )można to zrównoważyć całkiem oczywistymi środkami. Przy odrobinie zabawy możemy zmienić to w:

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

Przenosimy to z powrotem w dół

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

Krok do 3 jest tak złożony, że tak naprawdę już go nie rozumiem. Użyłem tej samej techniki i po prostu bawiłem się nią, aż w końcu wszystkie 4 z nich pracowały jednocześnie. Technika jest prawie taka sama, jest tylko o wiele więcej majstrowania.

Kreator pszenicy
źródło
3

Python 3, wynik 1, 76 bajtów

Shift 0: bez zmian

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

Przesunięcie 1:

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

Rozpoczął pracę na zmianie 2, ale „” staje się $$ i nie można od tego zacząć linii.

Kiedy zapisujesz go do pliku, upewnij się, że nie kończy się na nowej linii. (vim -b plik.py + set noeol)

Rick Rongen
źródło