Czy to się zatrzyma? (Gliny)


94

To jest wątek gliniarzy. Wątek rabusiów jest tutaj .

Wyzwanie polega na stworzeniu programu, który będzie działał wiecznie bez zatrzymywania 1 , chyba że otrzyma określone wejście lub wejście 2 . Jeśli otrzyma ten wkład, musi zakończyć się w skończonym czasie 3 . To jest , więc wygrywa najkrótsza odpowiedź, która nie została złamana przez złodzieja w ciągu tygodnia od opublikowania. Po upływie tygodnia zaznacz swoją odpowiedź jako bezpieczną i pokaż wejście zatrzymania (w a > ! spoiler quote). Jeśli złodziej złamie twoje zgłoszenie, zaznacz je jako pęknięte i pokaż wejście zatrzymania (in a > ! spoiler quote).

Preferowane są zgłoszenia, które można uruchamiać i krakować na TIO . Zgłoszenia, których nie można uruchomić ani nie można ich krakować w TIO, są dozwolone, ale prosimy o dołączenie instrukcji ich pobrania / uruchomienia.

Wprowadź deterministyczny i jednolity wkład we wszystkich przebiegach. Zobacz ten meta post, aby uzyskać szczegółowe informacje.

Proszę, nie „implementuj RSA” ani niczego innego dla rabusiów. Używaj niejasnych języków i funkcji, a nie nudnego szyfrowania i mieszania. Nie mogę tego egzekwować za pomocą reguł, ale możesz spodziewać się ulewnych głosów negatywnych, jeśli wszystko, co robisz, to sha(input) === "abcd1234".


1 Zakładając, że komputer się nie wyłącza, nie pęka, nie daje się pochłonąć słońcu, przegrzewa się w wyniku śmierci cieplnej wszechświata ani nie przekroczył limitu czasu TIO z lat 60.

2 Program musi zatrzymać się na co najmniej jednym wejściu. Tak długo, jak zapętla się na zawsze na jednym wejściu i zatrzymuje na innym, działa.

3 Musi to być <60 sekund, aby kod mógł zostać przetestowany na TIO.


Szukasz nieskradzionych zgłoszeń?

fetch("https://api.stackexchange.com/2.2/questions/135363/answers?order=desc&sort=activity&site=codegolf&filter=!.Fjs-H6J36vlFcdkRGfButLhYEngU&key=kAc8QIHB*IqJDUFcjEF1KA((&pagesize=100").then(x=>x.json()).then(data=>{var res = data.items.filter(i=>!i.body_markdown.toLowerCase().includes("cracked")).map(x=>{const matched = /^ ?##? ?(?:(?:(?:\[|<a href ?= ?".*?">)([^\]]+)(?:\]|<\/a>)(?:[\(\[][a-z0-9/:\.]+[\]\)])?)|([^, ]+)).*[^\d](\d+) ?\[?(?:(?:byte|block|codel)s?)(?:\](?:\(.+\))?)? ?(?:\(?(?!no[nt][ -]competing)\)?)?/gim.exec(x.body_markdown);if(!matched){return;}return {link: x.link, lang: matched[1] || matched[2], owner: x.owner}}).filter(Boolean).forEach(ans=>{var tr = document.createElement("tr");var add = (lang, link)=>{var td = document.createElement("td");var a = document.createElement("a");a.innerHTML = lang;a.href = link;td.appendChild(a);tr.appendChild(td);};add(ans.lang, ans.link);add(ans.owner.display_name, ans.owner.link);document.querySelector("tbody").appendChild(tr);});});
<html><body><h1>Uncracked Submissions</h1><table><thead><tr><th>Language</th><th>Author</th></tr></thead><tbody></tbody></table></body></html>


1
@LuisMendo przy założeniu, że nieskończona pamięć jest w porządku
programista

1
@ programmer5000 Dziękujemy za wyjaśnienie. Powinieneś włączyć to wszystko do tekstu wyzwania. Odpowiedzi nie powinny czytać wszystkich komentarzy
Luis Mendo

6
Czy możemy ograniczyć dane wejściowe do, powiedzmy, liczby całkowitej? Rabuś może przekazać nieprawidłowe lub źle wpisane dane wejściowe, aby natychmiast zakończyć program. Musiałbym przeprowadzić wiele starannych weryfikacji danych wejściowych lub użyć języka, który może wykrywać dowolne błędy.
xnor

3
@ xnor Myślę, że powinieneś sprawdzić dane wejściowe.
Stephen

1
@StepHen Działa, jeśli zniekształcone dane wejściowe są w dalszym ciągu analizowane przez interpretera. Jeśli wprowadzę niedozwolony ciąg, Rnatychmiast błędy, nawet bez wchodzenia w funkcję pęknięcia. Twierdziłbym, że to nie liczy się jako zakończenie funkcji.
JAD

Odpowiedzi:


55

Malbolge, 128 bajtów, złamany przez KBRON111

(=&r:#o=~l4jz7g5vttbrpp^nllZjhhVfddRb`O;:('JYX#VV~jS{Ql>jMKK9IGcFaD_X]\[ZYXWVsN6L4J\[kYEhVBeScba%_M]]~IYG3Eyx5432+rpp-n+l)j'h%B0

Baw się dobrze!

(Tak, nauczyłem się Malbolge tylko z tego powodu. Tak, zajęło absurdalnie dużo czasu, aby w końcu zacząć działać. I tak, to było całkowicie tego warte.)

Owinięty, dzięki czemu można zobaczyć go w pełnej, er, „chwale”:

(=&r:#o=~l4jz7g5vttbrpp^nllZjhhV
fddRb`O;:('JYX#VV~jS{Ql>jMKK9IGc
FaD_X]\[ZYXWVsN6L4J\[kYEhVBeScba
%_M]]~IYG3Eyx5432+rpp-n+l)j'h%B0

Użyłem tego tłumacza do przetestowania go; Nie jestem pewien, czy to ma znaczenie, ale pomyślałem, że podam to na wszelki wypadek.


2
To interpreter TIO używa btw.
Dennis

2
och, „baw się dobrze” to dobry dodatek
Евгений Новиков

26
Jesteś gnojkiem. Malbolge jest wredny.
Draco18s,

1
Jestem wybity ... Najdalej dostałem: z 13 wejść przed zatrzymaniem, tylko pierwszy i trzeci mają jakikolwiek wpływ. Po dokładnym odwrotnym inżynierii, stwierdziliśmy, że pierwsze wejście musi być 6, a trzeci jest jednym z czterech: !, #, /i -. Ale kombinacja nie wydaje się zatrzymać. Przedstawiłem to tutaj, może ktoś mądrzejszy znajdzie rozwiązanie. Jeśli ktoś chce, opublikuję jutro, jak dostałem się do tych informacji. EDYCJA: Teraz, gdy o tym myślę, mój program napisany dla celów inżynierii wstecznej może mieć błąd, a pierwsze wejście może być czymś innym niż 6. Trzecia postać wciąż stoi.
Grzegorz Puławski


23

JavaScript (ES6), 17 bajtów, pęknięty

x=>{for(;x==x;);}

Na TIO, ponieważ nie wiem, jak zrobić Node.js readline na TIO, po prostu wstaw dane wejściowe w wywołaniu funkcji. Jest to oczywiste dla każdego, kto to wie, a nie dla każdego, kto nie wie.

Wypróbuj online!

Odpowiedź:

Odpowiedź jest NaN, ponieważ w JavaScripcie NaN != NaN.


2
Pęknięty . Ładne użycie dziwnego języka!
programator5000

3
Obstawiasz się :) Podoba mi się to, że byłeś tak pewny siebie, że to właśnie wybrałem, że dla mnie to edytowałeś: P
Stephen

12
NaN == NaNjest fałszywy w wielu językach innych niż JavaScript. Nie nazwałbym tego „dziwactwem językowym”.
Nayuki,

9
wierzę, że NaN != NaNjest to cecha liczb zmiennoprzecinkowych
metro

1
@undergroundmonorail: Zgadza się. Relacja między dwiema liczbami zmiennoprzecinkowymi IEEE może być wyższa, równa, niższa lub nieuporządkowana . Wynik porównania jest nieuporządkowany, jeśli jeden lub oba operandy są jakimkolwiek rodzajem NaN. (Binarny zmiennoprzecinkowy IEEE 754 ma wiele wzorców bitów NaN : wszystko z wykładnikiem all-one i niezerową mantysą jest NaN, niezależnie od bitu znakowego. Istnieją pewne reguły, dla których to, co wchodzi w „ładunek” NaN i za propagowanie tego poprzez operacje takie jak +lub max(), ale większości ludzi to nie obchodzi: P)
Peter Cordes

14

JS (ES6), 67 bajtów ( pęknięty )

(x,y)=>{while(x!==y||Object.is(x, y)||!isFinite(x)||!isFinite(y));}

Myślę, że się nie zepsułem, może to mieć łatwe rozwiązanie, którego nie widziałem.

Doceniam wszelkie opinie, jest to jeden z moich pierwszych postów

(+0, -0) Tak, js ma ujemne 0



Zdaję sobie sprawę, że teraz nie muszę sprawdzić, czy xi ysą skończone, ale nie będę zmieniać, ponieważ został już popękane. Mogło być 38 bajtów
Juan Tonina


9

JavaScript (NIE node.js)

x=>{while(x+"h");}

Żądane przesłanie nie używa rzutu.

Wskazówka dotycząca pożądanego pęknięcia:

Żądane przesłanie nie zastępuje .toString()ani nie korzysta z Set()żadnego z nich.

Pożądane pęknięcie:

Object.create(null)


Prawidłowy link do crack (nie mój, tylko link do odpowiedzi Dom Hasting)
Stephen

Cracked # 2 Cracked bez użycia throw(choć nadal daje błąd)
Grant Davis

Ponownie pęknięty bez użycia throw, tym razem wydaje mi się, że Grant Davis nie działał dla mnie. Nadal TypeErrors.
Haumed Rahmani,

2
Możesz to zrobić x=>{try{for(;x+"h";)}catch(e){for(;;)}}, aby wszelkie błędy skutkowały nieskończoną pętlą, więc brakujące błędy funkcji prototypu (lub jakiekolwiek błędy) spowodowałyby nieskończoną pętlę.
Grant Davis,

1
Ten działa tylko w przeglądarce, nie jestem pewien, dlaczego tak się dzieje: D
jadkik94

8

C (gcc) , 75 bajtów Cracked

#include<stdio.h>
int main(){char c[9];while(1){scanf("%8s",c);printf(c);}}

Wypróbuj online!

Nigdy wcześniej nie pisałem w policji i złodziejach. Mam nadzieję, że nie jest to zbyt oczywiste.

Rozwiązanie:

Wprowadzenie „% s” sprawia, że ​​segfault. Istnieje kilka innych, z których można korzystać; wszystkie z nich są printfspecyfikatorami typu „% n”.
Jest to klasyczna printfluka. Mówiąc najprościej, ciąg formatujący pochodzi prosto z danych wprowadzanych przez użytkownika, więc wszelkie printfspecyfikatory przechodzą nieoczekiwanie.



8

JavaScript (w przeglądarce), pęknięty 79 bajtów

x=>{try{for(;x||x!=null||x!=void 0||x===null||x===void 0;);}catch(e){for(;;);}}

Powinieneś uruchomić go w najnowszej przeglądarce (takiej jak najnowszy Firefox ESR, najnowszy Firefox, najnowszy Chromium). Działające na starych przeglądarkach (takich jak Netscape 2, IE 4) się nie liczą.

Uwaga: zatrzymane przez przeglądarkę z powodu przekroczenia limitu czasu nie liczą się tutaj.

Zawsze bądź ostrożny, aby nie upaść przeglądarki podczas testowania tych kodów i szczęśliwego rabowania ^ _ ^

document.all


Czy mogę użyć setTimeout?
Евгений Новиков

@ ЕвгенийНовиков Możesz wywołać tę funkcję z dowolnym parametrem. Wygląda jednak na to, że setTimeoutparametr nie działa.
tsh

pomysł jest zrobić, var key=(()=>{setTimeout(args);return null})()a następniecrackme(key)
Евгений Новиков

wygląda na oszukiwanie
Евгений Новиков



6

Łuska , 5 bajtów popękanych

↑ε∞←ø

Wypróbuj online!

Trochę wyjaśnienia, ponieważ ten język jest wciąż całkiem nowy:

←øpobiera pierwszy element pustej listy: zwraca wartość, która może przyjmować dowolny typ, czy to konkretny typ, czy funkcję, która zostanie następnie zastosowana do danych wejściowych. tworzy nieskończoną listę złożoną z kopii poprzedniego wyniku (co w większości przypadków będzie oznaczać listę nieskończonych zer). ↑εpobiera elementy z tej listy, o ile są one „małe”, tj. ich wartość bezwzględna wynosi ≤1; na nieskończonej liście zer nigdy się nie zatrzyma.


@ Veedrac, to właściwie było moje zamierzone rozwiązanie
Leo

Cóż, więc pęknięty!
Veedrac


5

Ruby , 31 bajtów ( cracked przez Eric Duminil )

0until(3.send(gets)==5rescue p)

Wypróbuj online!

Zauważ, że to musi być uruchomione w środowisku, w którym nie ma końca nowej linii, w przeciwnym razie getsnie jest możliwe, aby zatrzymać (myślę), ponieważ wszystko, co kończy się na nowej linii, popełni błąd i uderzy na ratunek.



Nawiasem mówiąc, fajnie! Żadna metoda nie 3.methodszwraca 5ani nie opuszcza pętli.
Eric Duminil,

Cerować! Znalazłem rozwiązanie również niezależnie, ale byłem zbyt skoncentrowany na tym, 5aby zrównoważyć go, aby pomyśleć, że poprawna odpowiedź wiązałaby się z funkcją, którą wykonał ...
Value Ink


5

Bash 4.2, 14 bajtów ( pęknięty )

Spróbujmy jeszcze raz.

let ${1,,}
yes

To nie działa w TIO, który używa Bash 4.3. Dane wejściowe są za pomocą argumentów wiersza polecenia.

W Linuksie i przy zainstalowanym gcc Bash 4.2.53 można pobrać i zbudować w następujący sposób.

curl -sSL https://ftp.gnu.org/gnu/bash/bash-4.2.53.tar.gz | tar xz
cd bash-4.2.53
./configure
make -j

Pęknięty. Zasadniczo skończyło się na czytaniu źródła.
Veedrac

4

Retina , 78 bajtów ( pęknięty ) ( pęknięty z zamierzonym rozwiązaniem )

^
1
+`^1(1+)
$1¶$&
s`(?<=^|¶)(1+)(?=¶)(?!.*¶\1+$)

¶(?!1+$)

^(1+)¶\1$

+`1
11

Pisanie było całkiem fajne, mam nadzieję, że łamanie jest fajne

Wypróbuj online!

Pęknięty niezamierzonym roztworem i zamierzonym rozwiązaniem w ciągu minuty od siebie. Jeden opublikowany jako pierwszy, drugi jako pierwszy.

Zamierzone rozwiązanie:

11111 lub jednostkowa reprezentacja n-1, gdzie n jest dowolną liczbą doskonałą




Więc czyje pęknięcie się liczy? (Najpierw opublikowałem crack, ale pierwszy skomentował mbomb007)
Cows quack

@Cowsquack oba
programista


4

Java 8, 99 bajtów, pęknięty

s->{try{Integer i=Integer.parseInt(s),c=i+32767;i+=32767;for(;i!=c;);}catch(Throwable t){for(;;);}}

To jest lambda tego typu Consumer<String>.

Nie golfowany:

s -> {
    try {
        Integer i = Integer.parseInt(s), c = i + Short.MAX_VALUE;
        i += Short.MAX_VALUE;
        while (i != c) ;
    } catch (Throwable t) {
        while (true) ;
    }
}

Wypróbuj online! (zwróć uwagę, że program testowy ulegnie awarii przy pustym wejściu, ale sama lambda nie!) (również użyj „argumentów”, a nie „danych wejściowych” na TIO, ponieważ program testowy używa argumentów, a nie STDIN)

Zamierzona odpowiedź:

-32767; Działa to, ponieważ Java Keep ma dwa typy liczb całkowitych inti Integer. Integerto obiekt, który się zawija int. Również Java trzyma się cache Integers tym polu -127poprzez 127. Do !=kontroli napędu do tożsamości, więc przez jakiś un-boxingu i boksu auto dowolną liczbę xgdzie x + 32767jest w [-127, 127]będzie w końcu jest taki sam Integerobiekt z pamięci podręcznej, a tym samym i != cbędzie fałszywa.



4

Bash 4.2, 10 bajtów ( pęknięty )

let $1
yes

To nie działa w TIO, który używa Bash 4.3. Dane wejściowe są za pomocą argumentów wiersza polecenia.

W Linuksie i przy zainstalowanym gcc Bash 4.2.53 można pobrać i zbudować w następujący sposób.

curl -sSL https://ftp.gnu.org/gnu/bash/bash-4.2.53.tar.gz | tar xz
cd bash-4.2.53
./configure
make -j

1
Pęknięty. Poprowadziłeś mnie w kółko, myśląc, że to jest związane z szokiem i łączysz mnie z łataną wersją: P. Licz niezamierzone pęknięcie jako drobną zemstę;).
Veedrac

Heh, niezupełnie o co mi chodziło. Opublikowałem utwardzoną wersję, jeśli chcesz spróbować.
Dennis

3

Java: 1760 ( Cracked )

Wydaje mi się, że gra w golfa jest zbyt wredna, więc po prostu zaciemniłem nazwy zmiennych i sprawiłem, że stały się „nieuporządkowane”. W rzeczywistości jest to tak wredne, że z czasem będę publikować podpowiedzi, tak że mogę zobaczyć, jak pękają.

Wskazówka 1: Teoretycznie ma nieskończenie ważne dane wejściowe, ale jest taka, która jest najbardziej „poprawna”


public class Main {

	public static void main(String[] a) {
		try {
			while (a.length < 2) {
				int i = 0;
			}
			boolean invalid = 1 < 0;
			char l = '_';
			char h = '-';
			char[] DATATWO = a[0].toCharArray();
			char[] DATATOW = a[1].toCharArray();
			int length = DATATOW.length;
			if (DATATWO.length != length) {
				invalid = 1 > 0;
			}
			int transmissionStartIndex = 0;
			for (int i = 0; i < length; i++) {
				if (DATATWO[i] == l && DATATOW[i] == l) {
					transmissionStartIndex = i;
					break;
				}
			}
			int DATAONE = 0, reg = 0;
			boolean read = 1 < 0, full = 0 < 1;
			int bytes_read = 0;
			for (int i = transmissionStartIndex; i < length; i++) {
				if (DATATOW[i] == l && DATATOW[i + 1] == h) {
					bytes_read++;

					if (bytes_read == 8) {
						read = DATATWO[i] == h;
					} else if (bytes_read == 9) {
						invalid = (DATATWO[i] == h || invalid);
						System.out.println(invalid);
					} else if (bytes_read == 18) {
						System.out.println(invalid);
						invalid = (DATATWO[i] == h || invalid);
						if (invalid) {
							System.out.println("i36 " + DATATWO[i] + " " + h);
						}
						full = 1 > 0;
					} else if (bytes_read < 8) {
						DATAONE += (DATATWO[i] == h ? 1 : 0) << (7 - bytes_read);
					} else if (bytes_read < 18) {
						reg += (DATATWO[i] == h ? 1 : 0) << (8 - (bytes_read - 9));
					} else if (bytes_read > 18) {
						invalid = 1 > 0;
					}
					System.out.println(a[0]);
					System.out.println(new String(new char[i]).replace("\0", " ") + "|");
					System.out.println(a[1]);
				}
			}

			while (!(Integer.toHexString(DATAONE).equals("0x2b") && (read)
					&& Integer.toHexString(reg).equals("0xa6"))) {

				System.out.println(System.currentTimeMillis());
				try {
					Thread.sleep(1);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		} catch (Exception e) {
			while (true) {
			}
		}

	}
}

Wypróbuj online!


Wydaje się, że działają dwa puste argumenty
Okx,

Chcesz dodać link tio? Myślę, że wszystko, co musisz zrobić, to zmienić główną na Main
Okx

1
Pęknięty , oprócz błędu.
user3033745,

Pęknięty - brak błędu specyficznego dla wersji.
Okx,

3

Braingolf , 18 bajtów Cracked

1+[#£-0!e>:$_1>|]

Wypróbuj online!

Liiiitle trochę trudniejszy niż ostatni, potem zacznę pisać prawdziwy

Odpowiedź to 163


Człowieku, to prawdopodobnie jedyny bankomat, który przetrwał. Uwaga: inie działa.
Erik the Outgolfer

Ostrzeżenie: w rzeczywistości jest to 19 bajtów ( £). A dlaczego nie -1działa? To trudne.
Erik the Outgolfer

@EriktheOutgolfer Ma 17 znaków i 18 bajtów.
całkowicie ludzki,

@ totalniehuman Przysięgam, że przeczytałem „19 bajtów UTF-8, 18 znaków” (skrypt użytkownika jest włączony) ...
Erik Outgolfer


3

JavaScript (ES7), 41 bajtów ( zhakowany i pęknięty )

Edycja: naprawiono, aby zapobiec awariom, gdy nie otrzymano żadnych danych wejściowych (dziękuję @ totalnie człowiekowi za zauważenie)


Prawdopodobnie istnieje kilka rozwiązań, ale oczekiwane jest stosunkowo proste.

(x=0)=>{for(;~x/x.length**3!=-2962963;);}

Zamierzone rozwiązanie:

„8e7” (liczba w notacji naukowej przekazywana jako ciąg znaków)
Ponieważ: ~ „8e7” / „8e7”. Długość ** 3 = -80000001 / 3 ** 3 = -80000001/27 = -2962963


2
Żadne dane wejściowe również nie działają na tym, ale nie chcę zawracać sobie tym głowy ... Chyba że takie jest zamierzone rozwiązanie. : P
totalnie ludzki,

@totallyhuman Cóż, to nie jest zamierzone rozwiązanie. :-)
Arnauld


2
Aktualizacja: otrzymałem zamierzone rozwiązanie o długości 3 bajtów
Евгений Новиков

3

Bash + Utils (Cracked by Dennis), 74 bajty

Mam nadzieję, że podoba ci się smoła, ponieważ jest to jedyne narzędzie, którego możesz użyć.

cp /bin/tar .
env -i PATH=$PWD I=$? /bin/bash -r -c "$1"
while :;do :;done

Wypróbuj online!

Zamierzony crack

tar -cf --checkpoint=1 --checkpoint-action=exec="/bin/kill $I" .



@Dennis Nice! Zamieściłem zamierzone crack, który był nieco bardziej złożony.
Syzyf

3

Mathematica, 36 26 bajtów ( pęknięty )

#0[#;$IterationLimit=∞]&

Bardzo krótka pętla, #0[#;∞]która będzie się uruchamiać w kółko, aż do awarii jądra ... (Chodzi o $IterationLimitto, aby utknąć na zawsze w przypadku większości danych wejściowych).

Wypróbuj na Wolfram Sandbox! - jeśli utkniesz w nieskończonej pętli, możesz poczekać, aż upłynie limit czasu lub możesz nacisnąć kwadratową ikonę „przerwać ocenę” po lewej stronie tytułu notesu (unnamed).

UWAGA : ta funkcja zmienia twoje $IterationLimitustawienia.




3

C #, 118 bajtów ( pęknięty )

using System;_=>{while(1>0){try{if(Nullable.GetUnderlyingType(Type.GetType(Console.ReadLine()))!=null)break;}catch{}}}

Nie spodziewam się, że to potrwa zbyt długo, ale jest bardziej niezręczne niż się wydaje.

Zasadniczo każda pełna nazwa klasy dopuszczającej wartości zerowe działa, ale jest to niewygodne, aby wyglądać tak, jak poniżej:
System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Łatwiejszym sposobem na znalezienie tego ciągu jest wykonanie typeof(int?).FullName.



3

C, 140 bajtów ( pęknięty )

n,i;f(){float x,y,z;for(scanf("%d %d",&n,&z,x=y=0);~((int)x-(int)(1/sqrt(y*2)));x*=(1.5-y*x*x))y=(x=z)/2,i=n-((*(int*)&x)/2),x=*(float*)&i;}

Mamy nadzieję, że nie ma zbyt wielu danych wejściowych, które nawet nie są tak bliskie zamierzonemu, ale zobaczmy.

Wypróbuj online!



3

JavaScript (ES7), 73 bajty ( Cracked !)

q=>{r=(n,i=0)=>i>1e3?n:r(n*16807%(2**31-1),i+1);while(r(q)!=627804986){}}

Nie poszukiwane rozwiązania: brutalna siła. Pożądany crack wymaga matematyki.

Zauważ, że istnieje wiele rozwiązań (4194304) z powodu modulo.



3

pieprzenie mózgu , 170 bajtów złamane!

>>,>,>,>,>,[-----------<-<+<--<--->>>>]<++<<+<++[----->+<]>[----------------->+++++++<]>[----->>+<<]>>[-<->]<[--->++++++<]>[--->+<]+>-[-----------------<+>]<[-->-<]>+[+-]

Wypróbuj online!


Witamy na stronie! Możesz zapisać 11 bajtów, usuwając znaki nowego wiersza ze swojego kodu.
Sriotchilism O'Zaic

Zapomniałem, że to kod golfowy, dzięki!
Jerry


Prawidłowe rozwiązanie! Szacuję, że jest ich całkiem sporo. Dla każdego, kto rozwiązuje / wymusza brutalne wymuszanie, jest to [az].
Jerry

Na każde 4 znaki przypada dokładnie 1 wartość ostatniego znaku, co powoduje zatrzymanie programu. Dlatego istnieje 256 ^ 4 = 4294967296 rozwiązań zakładających, że możesz wejść nulw bzdury. BTW, możesz usunąć dwa pierwsze dwa >bajty.
user202729,

3

JavaScript ES6 (Node.js> = 6.0) , 326 bajtów (bezpieczny)

((v,e=require('events').EventEmitter.prototype,l=_=>{while(1);},P=Proxy,p=process)=>(p.kill=p.exit,e.listeners=new P(e.listeners,{apply:(t,c,a)=>a[0]=='exit'?[]:t.apply(c,a)}),e.removeAllListeners=new P(e.removeAllListeners,{apply:(t,c,a)=>a[0]=='exit'?c:t.apply(c,a)}),p.on('exit',l),i=>{try{v(i)}catch(o){}l()}))(s=>eval(s))

O wiele bardziej uproszczone niż moje inne wyzwanie , nie próbuję już zaciemniać podejścia do rozwiązania, co zaoszczędziło mi dużo bajtów. Tym razem process.kill()nie zadziała.

"delete process._events.exit;process.exit()"

Wypróbuj online!


Łał! Dobra robota!
programista

Wygląda na to, że
wygrałeś

3

Swift 3, 14 bytes ( Cracked )

while !false{}

Aby rozwiązać ten problem, umieść kod przed lub po tej instrukcji.

  • Twoje rozwiązanie musi:
    • zachowaj tę instrukcję bez zmian, bez modyfikowania jej kodu
    • faktycznie pozwól uruchomić to polecenie
      • Po prostu komentowanie, dzwonienie fatalError()itp., Zanim się nie liczy.
    • zmodyfikuj zachowanie tej instrukcji, aby zapobiec jej zapętleniu na zawsze
  • Rozwiązanie nie obejmuje zawieszania się programu.

Nie znam Swift, ale myślę, że dodanie timera przed wyjściem tego kodu po kilku sekundach spełni kryteria.

@ Yimin heh, sprytny, ale nie zmienia semantyki tego stwierdzenia, czego tak naprawdę szukałem, kiedy powiedziałem „modyfikuje zachowanie tego oświadczenia”
Alexander

Czy jesteś pewien, że rozwiązanie działa? Tłumacz ambiguous semanticsna mnie krzyczy .
Daniel

@Dopapp właśnie tak myślałem podczas mojej poprzedniej próby. Z jakiegoś powodu legalne jest ponowne zdefiniowanie nowych operatorów infix z takimi samymi podpisami jak te, które już istnieją, ale próba zrobienia tego samego z operatorem jednoargumentowym powoduje błąd niejednoznaczności czasu kompilacji. Jest to celowe i jestem pewien, że mam działające rozwiązanie
Alexander


2

cQuents , 2 bajty ( Cracked 1 ) ( Cracked 2 )

:A

Zauważ, że szybko osiągnie limit wyjściowy 128 KiB w TIO, powodując jego zatrzymanie, ale po uruchomieniu lokalnym zapętla się na zawsze, z wyjątkiem wejścia, które go łamie. Znalezienie tego wkładu powinno być dość łatwe. Dopóki tego nie zrobisz, :Abędziesz nadal wystawiał do siebie swój trójkątny język.

Zauważ też, że powinno to być po prostu, Aale wczoraj złamałem tryby niejawne. Na starszych wersjach interpretera Adziałałoby dobrze.

Pęknięcia:

Puste wejście / nowa linia na wejściu jest poprawnym pęknięciem. Jednak z wyjątkiem tego, że przekazując do programu wiele (oddzielonych spacjami) danych wejściowych, zakończysz go (jeśli dasz 2) lub wyłączysz błąd (jeśli dasz 3 lub więcej).

Wypróbuj online!


Pęknięty? (Błędy przy pustych danych wejściowych)
Luis Mendo


@ crackers, tak, to jest poprawny crack. Udzielę głosu komuś, kto znajdzie pęknięcie niepustego wejścia.
Stephen

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.