Zainspirowany przez tym komentarzem ...
Dziękujemy użytkownikom Step Hen , Wheat-Wizard i Dennis za pomoc w ugruntowaniu specyfikacji tego wyzwania przed jego opublikowaniem!
To jest wątek Rabusia! Przejdź do wątku gliniarzy tutaj
W tym wyzwaniu masz za zadanie uruchomić kod, który sprawia, że Twój język nie spełnia już naszych kryteriów bycia językiem programowania. W tym wyzwaniu oznacza to, że język nie może już ...
Weź numeryczne dane wejściowe i wyjściowe
Dodaj dwie liczby razem
Sprawdź, czy określona liczba jest liczbą pierwszą, czy nie.
Jest to wyzwanie dla gliniarzy i rabusiów , w którym istnieją dwa różne wyzwania o dwóch różnych celach: gliniarze spróbują napisać kod, który sprawi, że język będzie w większości bezużyteczny, oraz złodzieje spróbują znaleźć ukryte obejście, które pozwala glinom odzyskać swój język.
Policjanci napiszą dwa fragmenty kodu:
Taki, który sprawia, że ich język jest w większości bezużyteczny, np. Poprzez usunięcie wbudowanych funkcji do pobierania danych wejściowych / wyjściowych i operacji numerycznych. Ten kod nie może ulec awarii ani wyjść. Powinno być możliwe dodanie kodu na końcu tego fragmentu, a ten kod zostanie poddany ocenie . I
Fragment kodu, który przyjmuje dwie liczby jako dane wejściowe, dodaje je do siebie i generuje ich sumę. Ten fragment kodu musi nadal poprawnie działać, nawet po uruchomieniu pierwszego fragmentu kodu. Gdy oba fragmenty zostaną połączone razem, muszą one utworzyć pełny program, który dodaje dwie liczby lub zdefiniować funkcję, która dodaje dwie liczby. Ten fragment kodu prawdopodobnie będzie polegał na niejasnym zachowaniu i będzie trudny do znalezienia.
Gliniarze również wybiorą dowolne standardową metodę wprowadzania i wyprowadzania . Muszą jednak ujawnić dokładnie, jakiego formatu (wejścia i wyjścia) używają. Aby złamać ich odpowiedź, musisz postępować zgodnie z tym samym formatem wejścia / wyjścia, w przeciwnym razie twój crack się nie liczy.
Odpowiedź gliniarzy zawsze ujawni
pierwszy fragment (oczywiście nie sekundę).
Język (w tym niewielka wersja, ponieważ większość zgłoszeń prawdopodobnie będzie polegać na dziwnych przypadkowych przypadkach)
Format IO, w tym czy jest to funkcja czy pełny program. Rabusie muszą używać tego samego formatu, aby być poprawnym crackem.
Wszelkie dziwne przypadki brzegowe wymagane do odpowiedzi. Na przykład działa tylko na systemie Linux lub wymaga połączenia z Internetem .
Jako złodziej musisz spojrzeć na jedno z oświadczeń gliniarzy i spróbować je złamać. Możesz go złamać, pisząc dowolny prawidłowy fragment, który mógłby działać jako fragment 2 (dodanie dwóch liczb razem po tym, jak język stanie się w większości bezużyteczny). To nie musi być ten sam fragment, który pierwotnie napisał policjant. Gdy masz pękniętą odpowiedź, opublikuj kod jako odpowiedź w tym wątku i opublikuj link do swojej odpowiedzi jako komentarz do odpowiedzi policjanta. Następnie ten post zostanie edytowany, aby wskazać, że został złamany.
Oto przykład. W przypadku pierwszego fragmentu możesz zobaczyć następujący program w języku Python 3 jako odpowiedź gliniarzy:
Python 3
print=None
Pobiera dane wejściowe ze STDIN i dane wyjściowe do STDOUT
Prawidłowy drugi fragment może być
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Jest to ważne, ponieważ weźmie dwie liczby jako dane wejściowe i wyświetli ich sumę, nawet jeśli połączysz oba fragmenty razem, np.
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
To jest poprawny crack do ich odpowiedzi.
Jeśli odpowiedź gliniarza pozostaje nieprzetarta przez cały tydzień, może edytować w drugim fragmencie i wskazywać, że jego odpowiedź jest teraz bezpieczna . Po edycji jest bezpieczny, nie możesz już próbować go złamać. Jeśli nie będą go edytować jako bezpieczne, możesz próbować go złamać, dopóki nie zrobią tego.
Zwycięzcą wątku złodzieja jest użytkownik, który złamał najwięcej odpowiedzi, a rozstrzygnięciem był czas, w którym osiągnął N pęknięć. (więc jeśli dwóch różnych użytkowników ma na przykład 5 pęknięć, zwycięzcą jest użytkownik, który jako pierwszy opublikował 5. pęknięcie). Po upływie wystarczającego czasu zaakceptuję odpowiedź zwycięzcy największą liczbą głosów.
Baw się dobrze!
Wyjaśnienia zasad
Pierwszy fragment kodu musi działać poprawnie bez żadnych danych wejściowych . Może generować cokolwiek zechcesz, a to wyjście zostanie zignorowane. Tak długo, jak po wykonaniu fragmentu, drugi fragment działa poprawnie.
Drugi fragment musi zostać faktycznie wykonany, aby odpowiedź była poprawna. Oznacza to odpowiedź typu
import sys sys.exit()
nie jest poprawny, ponieważ nie łamie języka. Po prostu odchodzi.
Po zapewnieniu bezpieczeństwa twój wynik jest liczbą bajtów obu fragmentów .
Wróćmy do Proszę ujawnić wszelkie dziwne przypadki brzegowe wymagane do odpowiedzi na twoje pytanie ... Twoje zgłoszenie musi zawierać wystarczającą ilość informacji, zanim zostanie ujawnione, aby było odtwarzalne po ujawnieniu. Oznacza to, że jeśli Twoja odpowiedź stanie się bezpieczna, a następnie edytujesz: Oto moja odpowiedź. O tak, BTW to działa tylko wtedy, gdy uruchamiasz go na Solarisie, żarty na ciebie! Twoja odpowiedź jest nieprawidłowa i zostanie usunięta i nie zostanie uznana za kwalifikującą się do wygranej.
Drugi fragment kodu może ulec awarii po wygenerowaniu sumy. Tak długo, jak dane wyjściowe są nadal poprawne (na przykład, jeśli zdecydujesz się na wyjście do STDERR, a następnie otrzymasz kilka informacji o awarii, jest to nieprawidłowe)
Tabela liderów
Oto lista każdego użytkownika z co najmniej jednym pęknięciem, uporządkowana według wyniku, a następnie nazwy (alfabetycznie). Jeśli zgłosisz crack, zaktualizuj odpowiednio swój wynik.
#User #Score
Ilmari Karonen 8
Dennis 5
Olivier Grégoire 4
Sisyphus 3
Veedrac 3
Arnold Palmer 2
Bruce Forte 2
DJMcMayhem 2
Dom Hastings 2
ppperry 2
1bluston 1
2012rcampion 1
Ben 1
BlackCap 1
Christian Sievers 1
Cody Gray 1
HyperNeutrino 1
Joshua 1
Kaz 1
Mark 1
Mayube 1
Xnor 1
zbw 1
SecurityManager
w zasięgu ... Możesz również czytaćSystem.in
w tym momencie, ponieważ nie jest jeszcze zamknięty.