W przeciwieństwie do wielu wyzwań C&R, nie wymaga to osobnego stanowiska rabusiów; celem złodziei jest złamanie poprzedniej odpowiedzi, a następnie opublikowanie nowej jako policjant.
Jako osoby odpowiadające napiszesz serię poliglotów, które wyglądają tak (każda kolumna jest językiem, a każda pozycja jest wynikiem odpowiedzi w tym języku):
Language: 1 2 3 4 5 6 7 8 ...
Answer 1: 0 1 2
Answer 2: 1 2 3
Answer 3: 2 3 4
Answer 4: 3 4 5
Answer 5: 4 5 6
Answer 6: 5 6 7
...
(puste miejsca oznaczają, że w tym przypadku nie jest wymagane zachowanie).
Każda odpowiedź powinna pracować w 3 językach i wydrukować 3 różne kolejne numery, które są więcej niż każdy z numerów drukowanych przez poprzednią odpowiedź (pierwsze odbitki odpowiedź 0
, 1
i 2
). Każda odpowiedź używa dwóch języków z poprzedniego zgłoszenia i trzeciego nowego języka. Odpowiadający powinien spróbować zaciemnić ten trzeci język.
Aby opublikować nową odpowiedź, powinieneś:
- Złam najnowszą odpowiedź, znajdując jej trzeci język.
- Najlepiej dodaj wyjaśnienie swojego cracka i powiadom plakat o odpowiedzi. Gdy twoje zgłoszenie zostanie złamane, powinieneś również dodać wyjaśnienie.
- Napisz poliglotę składającą się z drugiego i trzeciego języka tej odpowiedzi oraz innego wybranego przez siebie języka. Ujawnij swoje pierwsze dwa języki, ale nie ujawniaj swojego nowego. Kolejnym celem plakatu będzie znalezienie tego języka (lub innego języka, w którym on działa), więc powinieneś spróbować go zaciemnić.
Dane techniczne
Kryteria prawidłowego języka programowania są takie same, jak kryteria z The Programming Language Quiz, Mark II - Cops :
- Ma artykuł angielski Wikipedia , artykuł esolangs lub artykuł Code Rosetta w momencie opublikowania to wyzwanie, czy na Try It Online! . Posiadanie tłumacza na dowolnej z tych stron sprawia, że jest on całkowicie legalny.
- Musi spełniać nasze zasady dotyczące języka programowania .
- Musi mieć bezpłatnego tłumacza (jak w przypadku piwa). Bezpłatny tutaj oznacza, że każdy może korzystać z programu bez konieczności płacenia za to.
Każda odpowiedź musi zostać uruchomiona w niecałą minutę na rozsądnym komputerze.
- Państwo może ponownie użyć języków programowania, ale nie musi być co najmniej dwie odpowiedzi pomiędzy (tak indywidualna odpowiedź nie może ponownie użyć języka).
- Złamanie zgłoszenia polega na znalezieniu dowolnego języka programowania, który drukuje poprawny wynik, a nie tylko zamierzonego. Jeśli przesyłanie jest uruchamiane w dowolnym języku, który nie został zadeklarowany lub nie działa, nie ma żadnych wymagań.
- Nie możesz publikować dwa razy (lub więcej) z rzędu.
Zwycięskie kryterium
Zwycięską odpowiedzią jest ta, która odpowiedź zajęła najwięcej czasu. Wyzwanie nigdy się nie skończy, dlatego zawsze można zmienić zwycięską odpowiedź.
źródło
Odpowiedzi:
Hexagony, Klein (101) i ???
To drukuje
7
w Hexagony ,8
w Klein (101) i9
w ???.9
Nie działa, jeśli znak nowej linii jest dodawany na końcu kodu. Zachowaj ostrożność, jeśli testujesz lokalnie.Edycja: Bycie na żywo przez 20 godzin jest już rekordem, więc odtąd dam kilka wskazówek. (Również dlatego, że dany język to IMO, który nie jest jeszcze dobrze znany.)
Poradnik
9
nie działa, jeżeli nowej linii dodaje się na końcu” jest bardzo istotne, jak również dwa pierwsze obszary (które są ignorowane zarówno Hexagony Klein).v
polecenie kończy program.Wyjaśnienie ( cracked post )
W kodzie źródłowym
Odpowiednie instrukcje w Klein (101) to:
Klein to zabawny język 2D, w którym przekroczenie granicy obszaru kodu (który jest kwadratem) zależy od topologii Kleina.
/
i\
są zwierciadłami.Adres IP zaczyna się w lewym górnym rogu, w prawo. Spotyka lustro w kierunku górnej granicy i ponownie wchodzi w obszar kodu po prawej stronie, jak pokazano powyżej. Następnie uderza ponownie w lustro, 8 zostaje popchnięte, a następnie (po kilkakrotnym przejściu przez granicę) zatrzymuje się na
@
. Następnie zawartość stosu jest drukowana na standardowym wyjściu, czyli pojedynczym 8.źródło
Befunge-96, Hexagony i ???
Drukuje się
6
w Befunge-96 ,7
w heksagonii i8
???.Wyjaśnienie
Kod sześciokątny, gdy „prettified” to:
Ścieżka egzekucji rozpoczyna się w lewym górnym rogu, kierując się na wschód. Górny rząd niewiele robi.
-
zmienia bieżące zbocze pamięci, więc wartość w nim jest0
. Wykonanie jest kontynuowane, kierując się na wschód do środkowego rzędu, gdzie7!
ładuje7
się bieżącą krawędź pamięci i drukuje jako liczbę całkowitą.[
zmienia wskaźnik instrukcji na North East, zaczynając od7
. Następnie7+3
wykonanie osiąga,[
który zmienia wskaźnik instrukcji na północno-zachodni, zaczynając od południowo-wschodniego rogu. Wreszcie ścieżka jest miejscem, w..@
którym@
kończy się program.źródło
Lua, pieprzony mózg, ???
Drukuje 3 w Lua, 4 w pieprzony mózg i 5 w ???.
Wyjaśnienie dotyczące pękniętego postu :
3--(-1)
jest 2, więcprint(f)
wypisuje 2 (inne rzeczy są niepotrzebne)--
ponownie jest komentarzem,3--(-1)
podobnie jak 3, więcprint(f)
drukuje 3 (inne rzeczy są znowu niepotrzebne).
znak wyjściowy 52, który jest 4.źródło
Wyzwalacz , JavaScript i ???
Drukuje
11
w wyzwalacz ,12
w JavaScript , a13
wREDACTED
.Ponieważ nie zostało to złamane dłużej niż jakakolwiek inna odpowiedź, oto kilka wskazówek:
Т
aе
na pierwszej linii są znaki wielobajtowe.[ //
i\\ ][ //
nie ma operacji.-²52
martwy kod.²6
tworzy nieskończoną pętlę.²
, wraz z6
, tworzy nieskończoną pętlę./!'!/
Wyjaśnienie
Cóż, zajęło mi to trochę czasu. Zobaczmy, jak wygląda kod:
Oznacza to, że chociaż wiele dostępnych emulatorów zachowuje się poprawnie, implementacja reguł jest podana w drugim zdaniu strony Wikipedii . Oczywiście nie można go uruchomić bezpośrednio na przeciętnym komputerze, ale znalazłem emulator Emma 02, do którego link na stronie COSMAC VIP działa najlepiej.
źródło
Python 2, Python 3, ???
Wyświetla 1 w Python 2, 2 w Python 3 i 3 w ???.
Wyjaśnienie pęknięcia (pęknięty post) :
0
: C: Pierwszy wiersz definiuje makro podobne do funkcji,print
które ignoruje pojedynczy argument i ocenia namain(){puts("0");}
pełny program, który drukuje0
i wychodzi. Całe wyrażenie1+bool(1/2)
jest ignorowane, gdyprint( )
makro w drugim wierszu jest rozwinięte domain(){puts("0");}
.1
: Python 2: Pierwszy wiersz to komentarz.1/2
używa dzielenia liczb całkowitych w Pythonie 2, dając 0. Ta wartość jest następnie interpretowana jako wartość logiczna (bool(0)
->False
), a następnie dodawana do1
(1+False
->1
), a następnie drukowana.2
: Python 3: Pierwszy wiersz to komentarz.1/2
używa podziału zmiennoprzecinkowego w Pythonie 3, dając 0,5. Ta wartość jest następnie interpretowana jako wartość logiczna (bool(0.5)
->True
), a następnie dodawana do1
(1+True
->2
), a następnie drukowana.źródło
JavaScript , CHIP-8 i ???
12
w JavaScript ,13
CHIP-8 i14
???Mam zamiar wyjść na kończynę i nazwać ją złamaną, chociaż nie jestem w stanie sprawić, by zadziałała, jestem pewien języka (który wydaje się być tym, o co proszą reguły).
Oto niedoskonałe wyjaśnienie pękniętego postu
Kod w systemie szesnastkowym „to” (mogę być nieco wyłączony):
Możesz przejść tutaj , kliknąć „Narzędzia binarne” i wkleić to do pola tablicy bajtów. Kliknij „Dekompiluj”.
Kluczowymi elementami kodu są: instrukcje mówienia, gdzie jest „liczba”,
sprite
polecenie, które wypisuje liczbę, poprawna ilość śmieci tutaj i tam oraz następujące:Aby zobaczyć, co to reprezentuje, możesz kliknąć „Edytor duszka” i wkleić te wartości szesnastkowe w polu poniżej. Zobaczysz odpowiedź:
Jestem prawie pewien, że możesz umieścić na końcu wszystko, co chcesz, a wynik CHIP-8 się nie zmieni, stąd nowy wpis.
Byłbym zachwycony, gdyby ktoś mógł sprawić, by to w pełni działało, zamiast „dowodu” odpowiedzi, którą tutaj podałem.
źródło
C, Python 2, ???
Drukuje się
0
w C,1
w Pythonie 2 i2
???.Będzie to bardzo łatwe do złamania dla osób znających Pythona, ale chciałem zacząć od innych odpowiedzi. Kolejne odpowiedzi powinny próbować zaciemnić trzeci język (nie zrobiłem tego).
źródło
Python 3, Lua, ???
Drukuje 2 w Pythonie 3, 3 w Lua i 4 w ???.
Wyjaśnienie dotyczące pękniętego postu :
źródło
> <>, Befunge-96 i ???
To drukuje 5
><>
cali , 6Befunge-96
7
cali i na ???.Wiem, że zamierzonym rozwiązaniem było Befunge-93, ale nie mogłem się oprzeć.
Wyjaśnienie:
Befunge-96 podąża tą samą ścieżką co
><>
, ale ignoruje nieznane instrukcje, w końcu dodając jedną do 5 i mnożąc ją przez 9, aby uzyskać 54, kod ascii6
.źródło
Komentator , Beatnik , ???
Wykazuje 15 w Komentatorze , 16 w Beatnik i 17 w miejmy nadzieję jednym języku, który powinieneś znaleźć.
Dobra, czas na wskazówki:
źródło
fn main()
między innymi), ale tak naprawdę nie działa w Rust (explicit lifetime required in the type of 's'
), ani w TIO, ani w innym znalezionym przeze mnie tłumaczu. I nie mogę znaleźć żadnego innego języka, który byłby używanyfn
jako identyfikator funkcji.Brainfuck,> <> i ???
Drukuje
4
w Brainfuck,5
w> <> i6
w ???v
przekierowuje przepływ programu w dół.n
Jest n wyjście umeric.;
kończy wykonanie.źródło
Klein (101), Z80Golf, ???
Drukuje
8
w Klein (101) ,9
w Z80Golf i10
w ??? .źródło
Beatnik , Rust , ???
Drukuje 16 w Beatnik, 17 w Rust i 18 w ???.
�
Znaków na linii 4 należy zastąpić znak ASCII 18 (to nie zostało zrobione w linkach Tio ponieważ nie jest istotne, aby jedno z nich).Objaśnienie ( pęknięty ):
Językiem poprzedniej odpowiedzi był Rust: konkretnie Rust skompilowany z mrustc . mrustc jest eksperymentalnym kompilatorem, a ponieważ jest przeznaczony głównie do ładowania prawidłowej wersji
rustc
, ignoruje sprawdzanie pożyczenia i sprawdzanie zmienności, umożliwiając kompilację fragmentu @ NieDzejkob bez błędów.Ten program będzie działał z normalnym kompilatorem Rust, więc nie musisz instalować mrustc, aby go przetestować.
Poradnik
Ponieważ ta odpowiedź minęła najdłużej i nie została złamana, zostawię wskazówkę i będę to robić regularnie, dopóki nie zostanie złamana:
�
postać jest czerwonym śledziem i ma bardzo małe znaczenie. Większość bajtów można zastąpić na swoim miejscu, a program nadal będzie działał.źródło
@
,P
,{
, lubm
uruchamia znak literalny i coś potem drukuje swoje kodowy w systemie dziesiętnym, ale to nie wyjaśnia wszystkich++
s ...Z80Golf , Somme , ???
Drukuje 9 w Z80Golf , 10 w Somme i 11 w ??? .
Podziękowania dla Bubblera za złamanie poprzedniego postu jako Somme, który przyjmuje sumę kolumny jako instrukcje. Pierwsze trzy kolumny oceniają na
Który popycha 10, drukuje i wychodzi.
źródło
Somme , Trigger and ???
To drukuje
10
w Somme ,11
w Trigger i12
w ???.Ponieważ ostatnie dwa języki są łatwe do poliglota, postanowiłem wymieszać , że język w.
Wyjaśnienie ( cracked post )
Trigger widzi cały kod jako ciąg tokenów (tokenizacja jest zachłanna):
A
)AAB
)AAA
)AAAA
)W kodzie źródłowym
znaczącymi żetonami są
((1
11+
111
111
, gdzie pierwsze dwa nic nie robią, a ostatnie dwa drukują po 1 - a więc 11.źródło
CHIP-8 , Klein (100) , ???
Wyjścia 13 w CHIP-8 (zakładam), 14 w Klein i 15 w ???.
Kolejna topologia Kleina, tsk tsk. Zachowałem kod przed
@
, ponieważ nie wiem, co wpłynie na CHIP-8.Wskazówki
Przepraszam, jestem trochę za opóźniony. Spróbuję dodać jeden dziennie.
not
S isay
mogą być usunięte bez wpływu na programDla porównania, program bez tych rzeczy wygląda następująco:
Wypróbuj online!
źródło
1
a ciąg znaków, który składa się z pierwszego wiersza i idzie „to nie jest wartość” i odrzuca je, aktualizacja będzie konkatować, chociaż mam do tego operatora, ale konkat działa na znakach i liczbach, a także na ciągach znaków, gdzie+
traktuje je jak liczby ). Ale to było strasznie straszne: „Zastanawiam się, co… o Boże, można to pozostawić bez zmian i być następnym wpisem… gdybym tylko znał język ???…”Klein (100), komentator , ???
Wyjścia 14 w Klein (100) , 15 w Komentator , 16 w ???.
Jestem naprawdę zły w zaciemnianiu poliglotów.
Wyjaśnienie ( pęknięty post )
W Komentatorze popularne tokeny komentarzy i spacje są ważnymi poleceniami, a wszelkie inne znaki są ignorowane.
<#
robi XOR 1 na bieżącej komórce pamięci.%
służy do resetowania bieżącej komórki pamięci do zera.Czekaj, jest 16 miejsc po
%
, co się stało?To właściwie mały błąd (lub funkcja?) W tłumaczu.
/
jest traktowany jako początek polecenia 2-znakowego, więc miejsce po nim jest zużywane. Ale/<space>
jest niezdefiniowanym poleceniem (a więc nie ma opcji), więc przestrzeń jest skutecznie pomijana.źródło