Wyzwanie polega na znalezieniu ciągu znaków, który nie może pojawić się w żadnym legalnym programie w wybranym języku programowania. Obejmuje to komentarze, ciągi znaków lub inne części „niewykonywalne”.
Wyzwanie
- Twój program może być specyficzny dla konkretnej wersji lub implementacji kompilatora / interpretera / środowiska wykonawczego Twojego języka. Jeśli tak, proszę podać dane szczegółowe.
- Dozwolone są tylko standardowe opcje kompilatora / interpretera / środowiska wykonawczego. Nie można przekazać dziwnej flagi do kompilatora, aby uzyskać określony wynik (np. Przekazanie flagi w celu konwersji ostrzeżeń na błędy).
- Jeśli Twój język programowania wymaga specyficznego kodowania (np. UTF-8), łańcuch znaków również musi być poprawnie zakodowany (tzn. Łańcuchy, które zawodzą wyłącznie z powodu błędów dekodowania znaków, nie są dozwolone).
- Każda indywidualna postać w twoim zgłoszeniu musi być dopuszczalna w legalnym programie; to znaczy, nie możesz po prostu użyć postaci, która jest zawsze odrzucana.
- Kompilator / interpreter / środowisko wykonawcze musi dawać błąd, gdy podany zostanie dowolny kod źródłowy zawierający ciąg znaków jako podłańcuch. Błąd nie musi być taki sam we wszystkich programach - jedno osadzenie łańcucha może powodować błąd składniowy, a inne może powodować błąd w czasie wykonywania.
Punktacja
- Najkrótszy ciąg niedozwolony dla każdego języka wygrywa.
- Powinieneś wyjaśnić, dlaczego twój ciąg jest nielegalny (dlaczego nie może pojawić się nigdzie w legalnym programie).
- Spory dotyczące niewłaściwych rozwiązań w komentarzach. Mówiąc dokładniej, powinieneś podać link do TIO lub równoważnego programu demonstrującego legalny program (tj. Taki, który nie powoduje żadnych błędów), który zawiera proponowane podciągi.
- Niektóre języki (np. Bash, Batch, Perl) pozwalają na dołączanie dowolnych danych binarnych do programu bez wpływu na ważność (np. Używanie
__DATA__
w Perlu). W przypadku takich języków możesz przesłać rozwiązanie, które może pojawić się tylko w takiej końcowej sekcji. Zanotuj to w swojej odpowiedzi. (Definicja tej „końcowej sekcji” jest zależna od języka, ale ogólnie oznacza dowolny tekst po całkowitym zaprzestaniu czytania skryptu przez analizator składni).
Przykład
W Pythonie mogę się przesłać
x
"""
'''
ale można to osadzić w większym programie
"""
x
"""
'''
y
'''
więc nie jest to dopuszczalne.
code-challenge
restricted-source
nneonneo
źródło
źródło
Odpowiedzi:
Zmiana nazw , 2 bajty
To dwa kanały. Prawidłowe zmienianie nazw musi zawsze tworzyć idealny kwadrat drukowanych znaków ASCII, więc nie może zawierać dwóch wierszy wiersza z rzędu.
Błąd jest zawsze błędem analizatora składni i zawsze jest taki sam:
wraz z kodem wyjścia 1 .
Wypróbuj online!
źródło
Java, 4 bajty
Wypróbuj online!
Jest to niepoprawna sekwencja ucieczki Unicode i spowoduje błąd w kompilatorze.
źródło
"\\u;"
.\uXXXX
przed wykonaniem czegokolwiek innego, więc tak, zadziała to nawet w komentarzach.zaCOBOL (GNU) , 8 bajtów
Po pierwsze, podawanie wiersza, aby zapobiec wstawianiu mojego słowa w komentarzowym wierszu.
Następnie, historycznie, programy COBOL były drukowane na arkuszach kodujących, kompilator w dużej mierze opiera się na 80-znakowych ograniczonych liniach, nie ma komentarzy wielowierszowych, a pierwsze 6 znaków to komentarze (często używane jako edytowalne numery wierszy), możesz umieścić tam prawie wszystko , AFAIK. Wybrałem
THEGAM
na początku następnego wiersza.Następnie siódmy symbol w dowolnym wierszu akceptuje tylko bardzo ograniczoną listę znaków: spację (bez efektu), gwiazdkę (komentuje resztę wiersza), łącznik, ukośnik, mogą być inne, ale na pewno nie
E
.Na przykład błąd podany przez GnuCobol to:
Wypróbuj online!
Właśnie straciłeś grę.
źródło
Also, you just lost the game.
Prawie przegłosowałemJavaScript, 7 bajtów
Uwaga wiodący nowy wiersz.
\u)
jest niepoprawną sekwencją ucieczkową Unicode i dlatego ten ciąg jest nieprawidłowy//
na początku nadal nie będzie działać z powodu wiodącej nowej linii, pozostawiając drugą linię bez komentarza/*
nie spowoduje całkowitego odkomentowania łańcucha ze względu na zamknięcie,*/
które go dopełnia, pozostawiając\u)
odsłonięte/
łańcucha po, więc mając)
przed nim\u
możemy zapewnić, że literał wyrażenia regularnego zawsze będzie nieprawidłowy1||1(string)/
aby uniknąć konieczności oceny wyrażenia regularnego. Średnik na początku drugiej linii powstrzymuje to przed zakończeniem wyrażenia,1||1
zanim dotrze ono do drugiej linii, wymuszając w ten sposób błąd SyntaxError;*
.Spróbuj!
Pokaż fragment kodu
źródło
/* */\u0045 = 3
wydaje się prawidłowym kodem JavaScript.3 */\u;/
jest ciągle ważny./
(nie, że musisz to naprawić). (Poza tym;
, nie wymusza parsowania złego wyrażenia regularnego, wymusza błąd SyntaxError z*
.)#if 0
jak pokazano tutaj: Wypróbuj online!Python, 10 bajtów (nie cpython)
Uwaga wiodący nowy wiersz. Nie można go skomentować z powodu nowej linii i żadna kombinacja ciągów z potrójnymi cytatami nie powinna działać, jeśli pomyślałem o tym poprawnie.
@feersum w komentarzach wydaje się całkowicie zepsuć dowolny program cpython w systemie Windows, o ile mogę to stwierdzić, dodając znak 0x1A na początku pliku. Wydaje się, że być może (?) Wynika to ze sposobu, w jaki znak ten jest obsługiwany przez system operacyjny, najwyraźniej jest przetłumaczony na EOF, gdy przechodzi przez stdin z powodu jakiegoś starszego standardu DOS.
W bardzo realnym sensie nie jest to problem z Pythonem, ale z systemem operacyjnym. Jeśli utworzysz skrypt w języku Python, który czyta plik i korzysta z wbudowanego
compile
w niego pliku , daje bardziej oczekiwane zachowanie powodujące błąd składniowy. Pypy (który prawdopodobnie robi to tylko wewnętrznie) również generuje błąd.Edytować:
Ze względu na staranność @ feersum w znajdowaniu niejasnych sposobów na złamanie interpretera Pythona, ta odpowiedź jest całkowicie nieważna dla każdego typowego środowiska cpython, o ile mi wiadomo! (Python 2 i 3 dla systemów Windows i Linux) Nadal uważam, że te pęknięcia nie będą działać dla Pypy na żadnej platformie (jedyna inna implementacja Pythona, którą przetestowałem).
źródło
"""?'''"""
C (clang) , 16 bajtów
Wypróbuj online!
*/
zamyka każdy/*
komentarz, a wiodące miejsce zapewnia, że nie uruchomiliśmy tylko jednego. Nowa linia zamyka każdy//
komentarz i przerywa dosłowny ciąg znaków. Następnie powodujemy błąd#else without #if
lub#else after #else
błąd (niezależnie od tego, ile#if 0
s może być w środku).źródło
-std=c99
, ale spróbujmy przełączyć na clang.R"foobar(...)foobar"
i tylko prawy paren, po którym następuje dopasowany ogranicznik i oferta zamknie to.Pyth, 6 bajtów
¡
jest niezaimplementowanym znakiem, co oznacza, że jeśli parser Pyth kiedykolwiek go oceni, to popełni błąd z PythParseError. Kod zapewnia, że tak się stanie na jednym z nich¡
.Istnieją trzy sposoby, w których bajt może występować w programie Pyth i nie może być analizowany: w literale łańcuchowym (
"
lub."
, które są analizowane równorzędnie), w literale Python ($
) i bezpośrednio po\
.Ten kod uniemożliwia
\
dokonanie oceny bezbłędnie, ponieważ wpływa to tylko na bezpośrednio następujący bajt i na drugie¡
błędy.$
osadza$
kod bezpośrednio w skompilowanym kodzie Pythona. Nie zakładam, co może się tam wydarzyć.Jeśli program osiągnie ten kod w
$
kontekście, zakończy się na$
, a¡
zaraz po nim popełni błąd parsera. Literały Pythona zawsze kończą się na następnym$
, niezależnie od tego, co może robić kod Pythona.Jeśli program uruchomi się w
"
kontekście,"
łańcuch zakończy łańcuch, a kod końcowy¡
spowoduje błąd analizatora składni.źródło
Ada - 2 bajty
Myślę, że to powinno działać:
To podkreślenie nowego wiersza. Newline kończy komentarze i nie jest dozwolone w ciągu. Podkreślenie nie może podążać za białymi znakami; dawniej było dozwolone tylko po literach i cyfrach, ale wprowadzenie Unicode komplikowało sprawę.
źródło
32-bitowy kod maszynowy x86, 11 bajtów (i przyszłościowy 64-bit)
To jest
times 9 nop
/ud2
. Zasadniczo jest to sanie NOP , więc nadal działa jako 0 lub więcejnop
s, a następnieud2
generuje wyjątek, niezależnie od tego, ile0x90
bajtów zostało wykorzystanych jako operandy do poprzedniego kodu operacyjnego. Inne instrukcje jednobajtowe (jaktimes 9 xchg eax, ecx
) też by działały.64-bitowy kod maszynowy x86, 10 bajtów (aktualne procesory)
W trybie 64-bitowym jest kilka niedozwolonych instrukcji 1-bajtowych, dopóki jakieś przyszłe rozszerzenie ISA nie zmieni ich przeznaczenia jako przedrostków lub części wielobajtowych kodów operacyjnych tylko w trybie 64-bitowym, niezależnie od ich znaczenia w trybie 32-bitowym.
0x0e
jestpush cs
w trybie 32-bitowym, ale nielegalne na obecnych procesorach (testowane na Intel Skylake) w wersji 64-bitowejInterpretacja reguł dla wykonywalnego kodu maszynowego :
Bajtów nie można przeskoczyć (podobnie jak ograniczenie „nieparsowane”), ponieważ procesory nie zgłaszają wyjątków, dopóki nie spróbują dekodować / wykonać (nie spekulacyjnie).
Nielegalne środki zawsze powodują wyjątek, na przykład wyjątek niezgodny z instrukcją. (Prawdziwe programy mogą to wykryć za pomocą procedury obsługi wyjątków na czystym metalu lub zainstalować procedurę obsługi sygnałów systemu operacyjnego, ale myślę, że to oddaje ducha wyzwania.)
Działa, ponieważ krótszy ciąg bajtów kończący się na
ud2
może pojawić się jako imm32 i / lub część trybu adresowania dla innej instrukcji lub podzielić na parę instrukcji . Najłatwiej jest o tym pomyśleć w kategoriach tego, co można umieścić przed ciągiem, aby „zużyć” bajty jako część instrukcji i pozostawić coś, co nie będzie winy.Myślę, że instrukcja może zużyć maksymalnie 9 bajtów dowolnych rzeczy: bajt SIB, disp32 i imm32. tzn. pierwsze 2 bajty tej instrukcji mogą zużywać 8 NOP i ud2, ale nie 9.
Nie można pokonać 9 zawodników:
Tryb 64-bitowy:
Ale bajty dla 8 NOP + ud2 (lub
times 9 db 0x0e
) mogą pojawiać się jako część innych insns:źródło
ud2
? Wygląda na to, że mówisz, że interpretujesz zasady jako zabraniające przeskakiwania bajtów, więcud2
samo by to zadziałało, nie? Och… Chyba mówisz, że problem polega na tym, żeud2
może występować jako przedrostek prawidłowej instrukcji? Druga część tej odpowiedzi była dla mnie trochę trudna do zrozumienia.ud2
mogą pojawić się wimm32
dowolnej instrukcji. Myślałem o tym w kategoriach bajtów, które możesz umieścić przed takim ciągiem, który „konsumuje”0f 0b
jako część wcześniejszej instrukcji zamiast dekodować jakoud2
. Nie byłem do końca zadowolony z tego, jak to skończyłem, ale chciałem zilustrować, dlaczego tylko 8nop
s nie wystarczyło i co się stało z 9nop
s +ud2
.%else
/%else
może działać, aby pokonać%if 0
, co normalnie może zabezpieczyć każdy niepoprawny tekst przed parsowaniem. (pomysł z odpowiedzi CPP)C #, 16 bajtów
Działa, ponieważ:
//
komentarz nie będzie działał z powodu nowej linii/*
komentarz nie zadziała z powodu*/
#if false
do początku nie będzie działać z powodu#endif
"
Zamyka dowolny ciąg dosłowny<#@#>
Jest bezimienny dyrektywa więc nie dla szablonów T4./
na początku nie oszuka*/
Każda odmiana kończy się niepowodzeniem z błędem kompilacji.
źródło
APL i MATL i Fortran , 3 bajty
Newline, Cytuj, Newline zawsze generuje błąd, ponieważ komentarze blokowe nie istnieją:
unbalanced quotes
string literal not closed
Invalid character in name
źródło
Pisz Haskell , 15 bajtów
Naprawianie usuniętej próby przez nich.
Wypróbuj online!
Oryginalna próba nich to dwie ostatnie linie, oparte na Literate Haskell, która nie pozwala
>
na to, aby kod alfabetu stylu znajdował się w sąsiedniej linii do literackiej linii komentarza (5
tutaj). Nie powiodło się, ponieważ można go osadzić w komentarzu w alternatywnym stylu pisania („LaTeX”):Jednak
\begin{code}
styl Literate Haskell nie zagnieżdża się, ani sam w sobie, ani w{- -}
komentarzach wieloliniowych, więc umieszczając linię\end{code}
tuż przed linią z5
, to obejście zawodzi i nie widzę innego.źródło
Free Pascal, 18 bajtów
Najpierw zamknij wszystkie możliwe komentarze, a następnie obsłuż kompilację warunkową.
Proszę o komentarz tutaj, jeśli coś zapomniałem.
źródło
begin end.
.end.
uzyskaniu ważności są dozwolone przez pytanie.Commodore 64 Basic, 2 bajty
(to nowa linia, po której następuje litera „B”).
Każda linia w programie Commodore 64 musi zaczynać się od numeru linii lub słowa kluczowego BASIC, a zapisane programy zezwalają tylko na numery linii. Brak słów kluczowych rozpoczynających się od „B” (lub „H”, „J”, „K”, „Q”, „X”, „Y” lub „Z”).
źródło
=0
to po prostu oświadczeniem o przydziale ...Brain-Hack (odmiana Brain-Flak ),
32 bajtyPodziękowania dla Kreatora pszenicy za wskazanie, że Brain-Hack nie obsługuje komentarzy, co oszczędza mi bajt.
Wypróbuj online!
źródło
#
TIO(()){()}
.CJam , 7 bajtów
Wypróbuj online!
źródło
VBA, 2 bajty
Doprowadzenie wiersza, po którym następuje
_
znak podkreślenia - działa jako znak kontynuacji linii w VBA, a ponieważ nic nie jest w linii bezpośrednio po lewej lub powyżej kontynuacji linii, w połączeniu z brakiem komentarzy wielowierszowych VBA oznacza, że zawsze spowoduje to kompilację błąd czasuCompile Error:
Invalid character
źródło
_
, tylko, że nie ma żadnej poprawnej linii po lewej lub powyżejmyfunction(
\n_
)
:?Public Function Foo( ByVal bar as Integer, _
(Nowa linia)bas as long) as double
- więc tak, spowodowałby błąd, jeśli wywołałeś opisaną funkcjęmyfunction( _
\n_
)
. Przepraszam za zamieszanie. Innymi słowy, powinieneś był użyć dwóch nowych linii.SmileBASIC, 2 bajty
Nic nie przechodzi poza koniec wiersza, więc wszystko czego potrzebujesz to podział wiersza, po którym następuje coś, co nie może być początkiem instrukcji.
!
jest logicznym operatorem nie, ale nie wolno ignorować wyniku wyrażenia, więc nawet coś takiego!10
byłoby niepoprawne (X=!10
oczywiście działa)Podobne rzeczy będą działać w każdym języku, w którym wszystko kończy się na końcu linii, pod warunkiem, że analizuje kod przed jego wykonaniem.
Istnieje wiele alternatywnych znaków, które mogą być tutaj użyte, więc myślę, że bardziej interesujące byłoby wymienić te, które MOGĄ być prawidłowe.
@
jest na przykład początkiem etykiety@DATA
;(
może być częścią wyrażenia,(X)=1
które z jakiegoś powodu jest dozwolone; dowolna litera lub_
nazwa zmiennejX=1
, wywołanie funkcjiLOCATE 10,2
lub słowo kluczoweWHILE 1
;'
jest komentarzem; i?
jest skrótem odPRINT
.źródło
INTERCAL , 12 bajtów
Spróbuj go złamać online!
Podejście INTERCAL do błędów składniowych jest nieco wyjątkowe. Zasadniczo niepoprawna instrukcja nie spowoduje błędu, chyba że program spróbuje ją wykonać. W rzeczywistości idiomatyczna składnia komentarzy polega na tym
PLEASE NOTE
, że zaczyna się od nich , co tak naprawdę dopiero rozpoczyna instrukcję, deklaruje, że nie można jej wykonać, a następnie zaczyna od literyE
. Jeśli Twój kod ma goDODO
w środku, możesz wstawićDOABSTAINFROM(1)(1)
dowolne prawidłowe oświadczenie na końcu i wszystko będzie w porządku, jeśliDODODO
możesz po prostu zgiąć wokół niego wykonanie jako(1)DON'TDODODOCOMEFROM(1)
. Mimo że INTERCAL nie ma składni dosłownej na ciąg znaków, aby je uciec, nie ma możliwości użycia błędów składniowych do utworzenia niedozwolonego ciągu, nawet wyczerpując każdy możliwy numer wiersza(1)DO(2)DO...(65535)DODODO
, ponieważ wydaje się, że istnieje wiele możliwości posiadania zduplikowanych numerów linii podczasCOME FROM
pracy z dowolnym z nich.Aby nielegalnej ciąg, faktycznie trzeba użyć doskonale ważne oświadczenie:
TRY AGAIN
. Nawet jeśli nie zostanie wykonany, musi być ostatnią instrukcją w programie, jeśli w ogóle jest w programie. Według mojej wiedzy 12 bajtów jest najkrótszym możliwym do użycia niedozwolonym łańcuchemTRY AGAIN
, ponieważ musi zagwarantować, że po nim jest instrukcja (wykonana lub nie), toDOTRYAGAIN
jest po prostu normalny kod i musi się upewnić, że cała instrukcja jest rzeczywiścieTRY AGAIN
, więcTRYAGAINDO
nie działa, ponieważ można go łatwo przekształcić w ignorowany, normalny błąd składniowy:DON'TRYAGAINDOGIVEUP
lubPLEASE DO NOT TRY TO USE TRYAGAINDO NOT THAT IT WOULD WORK
. Bez względu na to, co można umieścić na dowolnej stronieDOTRYAGAINDO
, będziesz błędu, ze alboICL993I I GAVE UP LONG AGO
,ICL079I PROGRAMMER IS INSUFFICIENTLY POLITE
alboICL099I PROGRAMMER IS OVERLY POLITE
.źródło
ICL993I I GAVE UP LONG AGO
.COME FROM
każdej etykiety linii, może być nieco trudniej zmienić przepływ kontroli wokół bloku, ale nic nie powstrzyma cię od tegoGIVING UP
!AWK , 4 bajty
Wypróbuj online!
Ponieważ
AWK
nie ma metody wykonywania komentarzy wieloliniowych, potrzebujesz 2 nowych linii przed i 1 po,/
aby zapobiec komentowaniu lub przekształceniu go w wyrażenie regularne, np1/
. Dodaj . Najczęstszym komunikatem jest „nieoczekiwany nowy wiersz lub koniec łańcucha”.Z poprzednim crackem
źródło
Fortran, 14 bajtów
Brak komentarzy wielowierszowych lub dyrektyw preprocesora w Fortran.
źródło
JavaScript (Node.js) ,
98 bajtówWypróbuj online!
Myślę, że powinno to być wystarczająco nielegalne.
Poprzednie próby JS w innych odpowiedziach
Wyjaśnienie
Jest to samo w sobie nielegalne, a także blokuje wszystkie pojedyncze i podwójne cudzysłowy, ponieważ te cytaty nie mogą rozciągać się na linie bez znaku
\
na końcu liniii
Blokuje komentarze, wprowadzając nielegalne sekwencje specjalne
Blokuje początkowy zwrot wsteczny, wprowadzając nie zakończony literał RegExp
Blokuje otagowane literały szablonów, wprowadzając oczekiwany operator między dwoma kursorami wstecznymi
źródło
Rockstar ,
45 bajtówPrzekreślone 4 to wciąż 4 :(
Rockstar to bardzo ... dziwny język.
Chociaż
"
można go użyć do zdefiniowania ciągu, na przykład, o ilePut "Hello" into myVar
wiem, nie ma możliwości, aby 3 cytaty pojawiły się poza komentarzem, a ścisły paren zapewnia, że to się nie stanie (Komentarze w Rockstar są ujęte w nawiasy, takie jak to).Rockstar ma również poetycką składnię dosłowną, w której interpunkcja jest ignorowana, więc nowy wiersz zapewnia, że 3 cudzysłowy są początkiem linii kodu, która zawsze powinna być niepoprawna
źródło
(()""")
, czy nie byłby to brak możliwości działania?""")
analizowany jest kod, który jest nieprawidłowyGoethe says )"""
jest to poprawne .)
i"""
PowerShell,
1081214131416 bajtów-2 bajty dzięki Mazzy znajdując lepszy sposób na złamanie go
+4 -1 bajtów dzięki IsItGreyOrGray
Mam nadzieję, że to zadziała.
'
i"
zabezpieczyć się przed cudzysłowach,#>
aby rozbić blok-komentarz, nowe linie, aby zatrzymać komentarz pojedynczej linii, zarówno'@
i"@
złapać inny styl ciągów, a następnie rozpoczyna się niewłaściwy tablicę rzucać błąd składni.Logika polega na tym, że nie mogą użyć żadnego zestawu cudzysłowów, aby się dostać, nie mogą zablokować komentarza, jeśli
@"
zostanie użyty, utworzy ciąg tutaj, który nie może mieć tokena, a jeśli zostaw to w spokoju, spróbuje zrobić zepsutą tablicę. To oświadczenie chce żyć tak ciężko, że wciąż znajduję jeszcze więcej dziur w zbroi.źródło
@=
Runiczne Zaklęcia, 3 bajty
Jedna z wielu możliwych odmian.
Wypróbuj online!
Runiczna używa znaków Unicode łączących znaki w „
M
modyfikuje zachowanieC
” (gdzieC
jest polecenie). W związku z tym żadne dwa modyfikatory nie mogą modyfikować tego samego polecenia, a parser wyśle błąd, jeśli takie wystąpienie zostanie znalezione.Podobnie, niektóre polecenia przekierowujące adres IP nie mogą być w żaden sposób modyfikowane ze względu na istnienie znaków modyfikujących kierunek (i oba w tej samej komórce nie mają sensu).
Nie ma sposobu na ucieczkę lub dosłowne napisanie łańcucha, aby był on prawidłowy. Łącze Tio zawiera
;
w celu ominięcia błędu „brak terminatora” o wyższym priorytecie.źródło
TI-Basic (83 + / 84 + / SE, 24500 bajtów)
(24500 razy)
TI (-83 + / 84 + / SE) -Podstawowa sprawdza składnię tylko instrukcji, które osiąga, więc nawet 5000
End
instrukcji z rzędu można pominąć za pomocąReturn
. To natomiast nie mieści się w pamięci RAM TI-83 + / 84 + / SE, więc żaden program nie może zawierać tego ciągu. Bycie nieco konserwatywnym w stosunku do postaci liczy się tutaj.Oryginalny TI-83 ma 27000 bajtów pamięci RAM, więc
A
w takim przypadku potrzebujesz 27500 s.TI-Basic (89 / Ti / 92 + / V200, 3 bajty)
Nowa linia, cytat, nowa linia. Nowa linia zamyka wszelkie komentarze (i nie zezwala na osadzanie niedozwolonego znaku w łańcuchu, ponieważ stałe wieloliniowe AFAIK nie są dozwolone), druga linia nie zezwala na zamknięcie łańcucha, a cytat powoduje błąd składniowy.
Możesz dostać się do 2 bajtów za pomocą
bez nowej linii, ale nie jestem pewien, czy to się liczy, ponieważ
±
jest poprawne tylko w stałych ciągów.źródło
Idź , 6 bajtów
Spróbuj go złamać online!
Grób akcent (`) oznacza nieprzetworzony ciąg literału, wewnątrz którego wszystkie znaki z wyjątkiem`, włączając znaki nowej linii i odwrotne ukośniki, są interpretowane dosłownie jako część łańcucha. Rdzeń stanowią trzy `` z rzędu '': literały sąsiadujących ciągów są niepoprawne i `zawsze zamyka ciąg` , więc nie ma sposobu, aby je zrozumieć. Musiałem użyć 3 dodatkowych bajtów do obejścia, nowej linii, abyśmy nie mogli znajdować się w komentarzu jednowierszowym lub normalnym cytowanym łańcuchu, a * / więc nie możemy znajdować się w komentarzu wielowierszowym.
źródło
SILOS , 4 bajty
Silosy są konkurencyjne \ o /
SILOS działa na dwuprzebiegowym interpretatorze / kompilatorze. Przed wykonaniem „kompilator” próbuje uprościć źródło w tablicy opisującej źródło. Każda linia jest traktowana osobno. x + a to operator przypisania, który doda ea do wartości x i zapisze ją w x. Jednak „kompilator” się zepsuje. Dlatego bierzemy ten ciąg i dodajemy nową linię przed i po upewnieniu się, że jest w swojej własnej linii i przerywa kompilator.
Wypróbuj online!
źródło
ax+
błędu?AutoHotkey , 5 bajtów
`jest znakiem ucieczki. Możesz uniknąć znaku „tylko podczas przypisywania go do zmiennej.
\ n * / zapobiega komentowaniu go lub przypisywaniu do zmiennej.
źródło
JavaScript, 11 znaków
Cofnij się, aby zabijać ciągi szablonów, cytaty pozbywają się ciągów, nowa linia unika komentarzy, linia na końcu unika blokowania komentarzy, a ostatni backstick i ucieczka (z!, Aby uniknąć dołączania liczb), spróbuj rozpocząć nieprawidłowy strunowy.
Wypróbuj online!
źródło
)
po\u
, może to by zadziałało tutaj?