To wątek złodziei. Wątek gliniarzy jest tutaj .
Wyzwanie polega na pobraniu nieprzetartego materiału z wątku gliniarzy i próbie znalezienia oryginalnego niezreagowanego programu. Skomentuj przesłanie gliniarza, gdy złamiesz jego kod.
To wątek złodziei. Wątek gliniarzy jest tutaj .
Wyzwanie polega na pobraniu nieprzetartego materiału z wątku gliniarzy i próbie znalezienia oryginalnego niezreagowanego programu. Skomentuj przesłanie gliniarza, gdy złamiesz jego kod.
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[█<█<]++++++++++<]>[-]>>██[>█>>█>]+[<]<<[<]>█<<+>>[>]█>[>]█+[<]<<[<]>-█>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<█]>]>[>]<[[█]<]<<<<<[<]<<██>>[>]<█[->+<]<█>>[>]<[-[[<]<]++++++++++<]>███>[<<]>[[[>]>████[<]<[-[[<]<]++++++++++<]>[-]>[█<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>███████>[[█]>]<]<[[<]<]<[█]>]>>>[[>]<->>]]>[[>]>]<<[[[█]<]<]<<<[█]<<█>>>[>]█[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[[<]<]++++++++++<]>[-]>>[[[>]>>[>]+[<]<<[<]>[<<+>>[>]>>[>]<+[<]<<[<]>-]>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]<]<<<<<[<]<<[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>[[-]+>]>[[>]>]<]<[[<]<]<[<]>]>>>[[>]<->>]]>[[>]>]<<[[[-]<]<]<<<[<]<<]>>>[>]<[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
To realizuje sito Eratostenesa.
Początkowa >>>>>+>,[>++++++[-<-------->]<+>,]
wprowadza każdą cyfrę jako kod znakowy i odejmuje 47, aby umieścić ją w zakresie 1-10. Umożliwia to wartości komórki 0 oznaczenie odstępów między liczbami. +>
Blisko początku tego rozdziału sił liczba powinna wynosić co najmniej dwie cyfry, które będą ważne wkrótce.
Następnie, i jedną z pierwszych rzeczy, które wymyśliłem, jest sekcja <[-[[<]<]++++++++++<]>[-]>
. Pojawia się to kilkakrotnie w kodzie, każdy z innym wzorcem redakcji, ale nietrudno było zgadnąć, że wszystkie te wystąpienia były prawdopodobnie tym samym kodem. Ten kod wymaga trzech zer po lewej stronie liczby dziesiętnej na taśmie, a jego efektem jest zmniejszenie liczby. Ostatnia iteracja pętli umieści wartość 10 dwie komórki po lewej stronie liczby, ale [-]
wyczyści ją.
Jeśli liczba dziesiętna wynosiła 0, nie jest tworzone żadne dodatkowe 10, a komórka zerowana przez [-]
jest najbardziej znaczącą cyfrą. Głowica taśmy znajduje się wtedy na drugiej najbardziej znaczącej cyfrze (dlatego potrzebne są co najmniej dwie cyfry). Po większości przypadków tego fragmentu kodu następuje natychmiast [<<]>
, co umieszcza głowę na niezerowej komórce w normalnych warunkach i komórce zerowej, jeśli pierwotna liczba dziesiętna wynosiła zero. Wygląda na to, że w tym programie dziesiętna reprezentacja n-1
jest używana do oznaczenia n
, tak że 0
przechwytywanie do jest wychwytywane zamiast zmniejszania do -1
.
Następna część umieszcza na taśmie liczby od n-1 (n) do 0 (1):
>[ until the number reaches zero:
[ for each digit:
[>]>>[>]+[<]<<[<]> create a placeholder for the next copy
[ while the original value of the digit is nonzero:
<<+ add 1 to copy two cells left (to keep one copy)
>>[>]>>[>]<+ go to new copy and increment that cell
[<]<<[<]>- go back to original digit and decrement
] (this is effectively the same as [<+>>+<-] but with the cells at variable locations)
>] next digit
>>[->] cancel the placeholder 1s that were used for the new copy
<[-[[<]<]++++++++++<]>[-]>[<<]> decrement
]
>[>]<[[-]<] clean up the trash 10s on the tape while ending at a known location relative to the last number
Teraz wszystkie te liczby znajdują się na taśmie, oddzielając je dwoma zerowymi komórkami. <<<<<[<]<<
umieszcza nas w ostatniej komórce przedostatniego numeru na taśmie, czyli tam, gdzie będziemy w każdej iteracji pętli. Pętla kończy się, gdy wszystkie liczby oprócz oryginału zostaną obsłużone.
Na początku pętli przesuwamy bieżącą liczbę (ostatnią wciąż na taśmie) o jedną komórkę w prawo, aby mieć miejsce na zmniejszenie, a następnie kontynuujemy i zmniejszamy:
[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>
Jeśli to zmniejszenie się nie wyczerpało, przystępujemy do konwersji liczby na unary:
[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]
Pamiętaj, że ten wycięty ma niezamknięty [
. W rezultacie reszta tej pętli jest pomijana, jeśli liczba wynosiła 0 (co oznacza 1). Po przejściu na jedność usuwamy pozostałe 10s, przeciągając z nami jednoargumentację w lewo:
>[>]<[[-]>+[>]<-<[<]<]+
Dopiero teraz zauważyłem, że to piszę, ale +
na końcu tego fragmentu oddzielony jest od jednostkowej reprezentacji pojedynczym 0. Jest to również część jedności: sekwencja 1011...11
będzie reprezentować 0 mod k. Poniżej <<<<<[<]>
umieszczamy nas na początku numeru k+1
, rozpoczynając nową pętlę.
Wewnętrzna pętla tutaj „zaznacza” każdą liczbę na taśmie cyfrą 1 bezpośrednio w komórce i wykorzystuje jednoargumentową reprezentację jako zegar do ustalenia, które liczby są wielokrotnościami k
.
[
[>]+ mark the current decimal number
[[>]>] move to end of decimal part of tape
>[>] move to 0 in middle of unary "clock"
>[-<+>] move the following 1 to the left if possible
<[<]< if a 1 was moved this will bring us back to a zero before the start of this "clock";
otherwise the looped move command doesn't move us at all and we are at the final 1
[ if there was no gap (happens every kth iteration):
>+[<]>>- reset to original position
<<<<<[[<]<]>> go to number that was just marked
[[-]+>] replace digits with 0s (cell value 1)
>[[>]>]< go back to where we would be without this conditional
]
<[[<]<]<[<]> return to first unmarked number
]
Ta [[-]+>]
sekcja była ostatnią częścią, którą wymyśliłem. Wcześniej zakładałem, że program robi tylko podziały próbne, ale nie mogłem zobaczyć, gdzie wykorzystano wynik.
Ta pętla kończy dwie komórki na lewo od skrajnie lewej cyfry i >>>[[>]<->>]]
usuwa markery umieszczone na taśmie i ponownie prowadzi nas do końca taśmy. Następnie >[[>]>]<<[[[-]<]<]
usuwa jeden zegar lub, jeśli cały segment został pominięty, pozostałe 10s. Pętla jest ustawiona w stan początkowy za pomocą <<<[<]<<]
.
Po tym czytam tylko, czy numer wejściowy został zastąpiony przez 1 w dowolnym momencie:
>>>[>]<[-[[<]<]++++++++++<]>> do the check
[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>] conditionally print "not "
>[>]+[------->++<]>++.++.---------.++++.--------. unconditionally print "prime"
Na szczęście rzeczywista produkcja nie została w ogóle zredagowana.
Wolfram Language (Mathematica)
Łamie tę odpowiedź .
Wypróbuj online!
źródło
Boole
niePrimeQ
.Brain-Flak, MegaTom
Wypróbuj online!
Ten program wykonuje próbne podziały od n-2 do 1, a następnie wyprowadza 1 wtedy i tylko wtedy, gdy zakończy się to współczynnikiem 1.
źródło
8086 DOS COM Joshua
xxd
reprezentacja, z powodu kodowania i pustych bajtów i innych przerażających rzeczy:Najpierw zdemontowałem gliniarza ręcznie, a następnie zmontowano za pomocą yasm. Niektóre bajty zostały uszkodzone przez konwerter Joshua, ale właśnie potraktowałem je jak zredagowane bajty. Jestem 99,72% pewien ich rzeczywistej zawartości. Naprawdę nie powinno to zająć dużo czasu, jeśli się mylę. Cieszyć się:
źródło
bx < 2
wykończenie, a nie kompozyt. FYI uszkodzenie było spowodowane pierwotnym użyciem X jako postaci maski i niepoprawnym naprawieniem wszystkiego po przełączeniu na █.Galareta
Łamie tę odpowiedź.
Wypróbuj online!
Wyjaśnienie:
Patrząc na
ị
iv
myślę o zbudowaniu listy liczb,ị
dodaj ją do jakiejś listy i oceń.„Trywialny” sposób sprawdzania pierwotności w galaretce jest
ÆP
taki, że (jeśli może złamać przesłanie):Æ
iP
.256
z modulo[14, 81]
.Więc ... lista na początku programu przystająca do
[14, 81, 49]
mod 256 ( TIO ) iṖ
wyskakuje ostatni element.źródło
sh + coreutils
Łamie tę odpowiedź .
Nie Wypróbuj online! tym razem z powodu niektórych problemów . Możesz jednak użyć jdoodle .
Zwraca kod zakończenia.
0
(sukces) dla liczby pierwszej,1
(błąd) dla kompozytu.Rzeczywiste wykonane polecenie to
Jak złamać
base64
polecenia.+
jest to prawidłowy znak base64.sh -c "`echo ...|base64 -d`"
do oryginalnego programu .źródło
tail +n
. Kiedy próbowałem twojego pęknięcia na maszynie w pracy, narzekało na to. Zdemaskowałeś poprawny kod, więc ... :(Oktawa , 86 bajtów, Stewie Griffin .
Wypróbuj online!
To była świetna zabawa! Walczyłem z tym przez dobre kilka dni.
Pierwszą wskazówką był uznając
eval([...,'(x)'])
jako konstrukcja tworząc połączenie doisprime
funkcji, jak konkatenacjiints
ichar
niejawnie przekonwertować tablicę dochar
, więc...
musiał byćisprime
albo tablicą, która miała wartości ASCIIisprime
,[105, 115, 112, 114, 105, 109, 101]
.Reszta po prostu przeglądała dokumentację, aby dowiedzieć się, że
reshape
można wziąć jeden nieznany wymiar[]
, chociaż przypuszczam, że mógłbym to zrobićreshape(...,2, 7)
przy tej samej liczbie bajtów.Używanie
+'e'
(101) zamiast+'d'
(100) było miłym akcentem, który rzucił mnie na kolejne kilka minut, aż zauważyłem, że ostatnie cyfry (nieobjawione) były00
raczej01
, a przy tym było łatwe.źródło
JavaScript
Wypróbuj online!
W jakiś sposób wątpię, aby dokładnie to miałeś na myśli, ale działa.
źródło
> <> , Esolanging fruit
do
Wypróbuj online!
Sprytne użycie redagowania nowej linii nieco mnie zdezorientowało. Wydaje się jednak, że nie działa dla 1 lub 2.
źródło
^
,v
,/
, lub\
dla drugiego wykroju mogło tam pracowali. Teraz żałuję, że nie*
pokryłem/
.Java (OpenJDK 8) , Magic Octopus Urn
Wypróbuj online!
Kod pochodzi z RosettaCode i wyjaśniono na SO .
źródło
Python 3 , 44 bajty, osuka_
Wypróbuj online!
Nie działa, gdy x <2.
or 0
Można zastąpić>0{2 spaces}
lub nawet 4 obowiązujeW przypadku problemu x <2, ponieważ
i>=x
należy go umieścić z przodu (w przeciwnym razie pojawi się nieskończona pętla), ai>=x
zwroty będą prawdziwe natychmiast, gdy x <2, więc myślę, że to nie jest poprawne.źródło
M, dylnan
Prawdopodobnie nie było to zamierzone rozwiązanie.
Wypróbuj online!
Jak to działa
ÆP
jest wbudowanym testem pierwszeństwa.ø
jest nowym, niladycznym łańcuchem. Ponieważ poprzednia zwracana wartość (wynikÆP
) wykracza poza zakres, powoduje to jej niejawne wydrukowanie.“;;“»
sprawdza listę ciągów["< Aalst" ""]
iV
próbuje je ewaluować .s
próbuje podzielić swój argument na części o długości 0 , co powoduje awarię interpretera M, co tłumi dalsze dane wyjściowe.źródło
Pyth, Mr. Xcoder
źródło
Python 3 , user71546
Wypróbuj online!
źródło