Ciąg można przesuwać o liczbę n
, uzyskując wartość bajtu c
każdego znaku w ciągu, obliczając (c + n) mod 256
i 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 n
z 0 < n < 256
jak ś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,
n
kiedy przesunięty jest kod źródłowyn
.
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.
string
code-challenge
source-layout
Laikoni
źródło
źródło
\r
?Odpowiedzi:
Brainfuck, wynik: 31 (2208 bajtów)
Program zakodowany w standardzie Base64:
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:
źródło
+[>,.<]
?),[+.,]
, gdzie+
jest ilość+
s lub-
slHaskell, 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ć
N
i ciąg (obecnieBig 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,n
a następnie przesuwamy każdą kopię-n
.źródło
C, wynik: 1 (73 bajty)
Wypróbuj online!
Przesunięty o 1:
Wypróbuj online!
źródło
05AB1E , wynik: 3 (24 bajty)
Wypróbuj online!
Wyjaśnienie
Przesunięty raz:
Wypróbuj online!
Wyjaśnienie
Przesunięty dwukrotnie:
Wypróbuj online!
Wyjaśnienie
Przesunięty trzy razy:
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript, ocena:
14 (94346 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:
Obrócono o 5:
Obrócono o 10:
Obrócono o 14: w końcu sprawy stały się tutaj interesujące, nadużyły systemu typu Javascript.
Obrócono o 199:
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/**/=>a
wciąż 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)
zcharCodeAt``
zmniejszyłoby 4 bajty off całego rozwiązania, ale to zbyt wiele do zrobienia od podstaw.źródło
charCodeAt()
aby zapisać 2 bajty?PHP z
-d output_buffering=on -d short_open_tag=on
, wynik: 255 (25 731 bajtów)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 oznacza03
,14
,25
,36
,47
,58
i69
. Obejście ich było dość łatwe przy użyciu arytmetyki. Możliwe jest również zmniejszenie liczby bajtów w oryginalnym programie.źródło
Crane-Flak , wynik 3 (252 bajtów)
Wypróbuj online!
(Nie całkiem działa w Brain-Hack, ponieważ tylko mod Crane-Flak o 256)
Przesunięty o 1
Wypróbuj online!
Przesunięty o 2
Wypróbuj online!
Przesunięty o 3
Wypróbuj online!
Wyjaśnienie
Główny kod działający tutaj to
gdzie
n
jest dowolną liczbą. To przenosi wszystko do offstacka dodającn
do 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
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):
Zwiększając to o 2, otrzymujemy
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ół
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.
źródło
Python 3, wynik 1, 76 bajtów
Shift 0: bez zmian
Przesunięcie 1:
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)
źródło
Galaretka , zdobądź
12815 bajtówPrzesunięcie 0:
Wypróbuj online!
Przesunięcie 2:
Wypróbuj 2 online!
Przesunięcie 3:
Wypróbuj 3 online!
źródło