Nieskazitelna i wyjątkowa gra w kręgle


80

Twoje wyzwanie jest proste: napisz jak najdokładniejszy program w wybranym języku, używając tylko unikalnych bajtów. (Pełna definicja nieskazitelnego programu, skopiowana z tego linku, znajduje się u dołu tego pytania).

Zgadza się, bez żadnych zobowiązań. Twój kod w ogóle nie musi nic robić, wystarczy uruchomić bez błędów, spełnić wymagania nieskazitelnego programu (link powyżej) i nie zawierać zduplikowanych bajtów w używanym kodowaniu.

Do celów powyższego objaśnienia i powiązanej definicji „nieskazitelnego programu” błąd definiuje się jako cokolwiek, co powoduje, że program albo całkowicie nie uruchamia się, albo kończy z niezerowym kodem wyjścia po upływie określonego czasu.

Ponieważ jest to , najdłuższy , a nie najkrótszy, wygrywa kod (mierzony liczbą bajtów). Maksymalnie teoretycznie możliwy wynik to 256, ponieważ możliwych jest 256 różnych bajtów. W przypadku remisu wygrywa pierwsza odpowiedź o najwyższym wyniku.


Oto pełna definicja nieskazitelnego programu, skopiowana z powyższego linku:

Zdefiniujmy nieskazitelny program jako program, który sam nie ma żadnych błędów, ale spowoduje błąd, jeśli zmodyfikujesz go, usuwając ciągłe podciągi N znaków, gdzie 1 <= N < program length.

Na przykład trzyznakowy program w języku Python 2

`8`

jest nieskazitelnym programem, ponieważ wszystkie programy powstałe w wyniku usunięcia podciągów o długości 1 powodują błędy (w rzeczywistości błędy składniowe, ale zrobi to każdy rodzaj błędu):

8`
``
`8

a także wszystkie programy wynikające z usunięcia podciągów o długości 2 powodują błędy:

`
`

Gdyby na przykład `8program nie zawierał błędów `8`, nie byłby nieskazitelny, ponieważ wszystkie wyniki usuwania podciągów muszą zawierać błędy.


37
Czapki z głów przed wami za stworzenie dobrego wyzwania do gry w kręgle !
ETHprodukcje

Jeśli podprogram działa wiecznie, ale nie powoduje błędu, czy to powoduje, że odpowiedź jest nieprawidłowa?
dylnan

1
@dylnan „błąd definiuje się jako [...] zakończenie [...] po upływie określonego czasu.”
user202729,

3
@Baldrickk Nie, wyzwanie nie będzie dozwolone. (Jeśli odwołujesz się do przykładu w pytaniu, jest to demonstracja tego, co to jest nieskazitelny program, ale który nie spełnia dodatkowego wymogu unikatowych bajtów.)
Aidan F. Pierce

1
Czy możemy uznać niezdefiniowane zachowanie za błąd, jeśli w praktyce zwykle powoduje to błąd? Myślę o czymś jak JMP <address outside of the program's memory>w asemblerze. Zasadniczo na prawdziwym komputerze może zapętlać się w nieskończoność lub wychodzić z niezerowym błędem, ale zwykle ulega spektakularnemu awarii.
Chris

Odpowiedzi:


20

Galaretka , 253 254 256 bajtów

M“¢£¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#%&'()*+,-./0145689:;<=>?@ABCDEFGHIJKNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻḅḍẹḥịḳḷṃṇọṛṣṭụṿẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż”L»«’Ɗạ‘}237$¤¡

Wypróbuj online! lub Sprawdź to!

Okazuje się, że języki gry w golfa potrafią ...

  • +1 bajt, pracując w . Teraz tylko «»nie są używane
  • +2 bajty przy pomocy «». Teraz uzyskaj optymalny wynik!

W jaki sposób?

Kluczową cechą Jelly, która sprawia, że ​​jest to możliwe, jest to, że znaki otwierające i zamykające dla literałów łańcuchowych nie są takie same jak w prawie wszystkich innych językach.

Struktura programu jest następująca:

M <239 character long string> L»«’Ɗạ‘}237$¤¡

Mznajduje indeksy swojego argumentu wskazujące na maksymalne elementy. Liczy się tylko to, że bez żadnego argumentu dla tego programu Jelly przypisuje 0do łańcucha i błędy Jelly, kiedy Mzostanie zastosowane 0.

Aby nie dopuścić Mdo działania 0w pełnym programie, używamy ¡szybkiego, który stosuje Msię wiele razy, zależnie od wyniku linku bezpośrednio poprzedzającego. W tym przypadku jest to link <239 character long string> L»«’Ɗạ‘}237$¤.

Lprzyjmuje długość tego ciągu (239) i »«’Ɗzmniejsza go do 238. »«Część nic nie robi, ale Ɗ(ostatnie trzy linki jako monada) powoduje, że jeśli zostaną usunięte, wystąpi błąd. Następnie przyjmuje bezwzględną różnicę między wynikiem »«’Ɗa monadą ‘}237$zastosowaną do łańcucha. inkrementuje i jest monadą, ale }zamienia to w diadę i stosuje ją do właściwego argumentu 237, poddając się 238. W ten sposób uzyskuje się 0w pełnym programie.

¤linki z powrotem do literału łańcucha, tworząc nilad. Wynikiem tego jest to 0, że Mw ogóle nie jest stosowane, co zapobiega wszelkim błędom.

Możliwe podprogramy:

  • Jeśli jakakolwiek część ciągu zostanie usunięta, <string>..¤będzie niezerowa i Mzostanie zastosowana 0, co spowoduje błąd.
  • Jeśli jakakolwiek część L»«’Ɗạ‘}237$zostanie usunięta, albo Mzostanie zastosowana, 0albo wystąpią operacje między ciągiem a liczbą, w wyniku czego powstanie znak TypeError.
  • Jeśli którykolwiek ¤¡zostanie usunięty, Mzostanie zastosowany do 0.
  • Jeśli znak zamykający łańcuch i oba ’‘zostaną usunięte i nie zostaną usunięte , wszystko po Mprzekształceniu w łańcuch Mbędzie działać 0.
    • Jeśli zamknięcie ciąg znaków i zostaną usunięte i nie ma, wszystko między i zamienia listy liczb całkowitych.
  • Jeśli Msam zostanie usunięty, istnieje, EOFErrorponieważ ¡oczekuje linku przed poprzednim niladem.
  • Jeśli M“i dowolna liczba znaków po jej usunięciu, pojawi się znak, EOFErrorponieważ ¤szuka niladu poprzedzającego go, ale go nie znajdzie. 238nie liczy się, ponieważ jest częścią monady.

To prawie wszystko obejmuje.

Wcześniej nie korzystałem, «»‘ponieważ dwóch ostatnich nie można uwzględnić w ciągu, ponieważ pasują one do znaku, tworząc rzeczy inne niż ciągi. «też nie może być w “”ciągu, ale nie wiem dlaczego.


31

Haskell , 39 45 50 52 60 bajtów

main=do{(\𤶸	陸 ⵙߜ 新->pure fst)LT
EQ[]3
2$1}

Identyfikator mainmusi mieć typ IO adla jakiegoś typu a. Po uruchomieniu programu obliczenia mainsą wykonywane, a jego wynik jest odrzucany. W tym przypadku jest to typ IO ((a,b)->a).

Wynikiem jest zastosowanie funkcji (λ a b c d e f → return fst), sześcioparametrowej funkcji stałej zwracającej funkcję fst (która daje pierwszy element 2-krotny), wstrzykniętej w monadę IO. Sześć argumenty LT(enum za mniej niż) EQ(enum równości), pusta lista [], 3, 2i 1.

To, co byłoby spacjami, jest zastępowane unikatowymi znakami, które liczą się jako spacje: tabulator, spacja niełamliwa, formfeed, tabulator pionowy, OGHAM SPACE MARK, spacja regularna, znak nowej linii i znak powrotu karetki. Jeśli któregoś z nich brakuje, wystąpi niedopasowanie liczby argumentów. Nazwy parametrów są wybierane jako trzy- lub czterobajtowe znaki UTF-8 𤶸陸ⵙ商ߜ新, starannie wybierając znaki, które nie powodują duplikacji bajtów.

Dzięki @BMO za jego cenny wkład.

Zrzut szesnastkowy:

00000000: 6d61 696e 3d64 6f7b 285c f0a4 b6b8 09ef  main=do{(\......
00000010: a793 c2a0 e2b5 990c e595 860b df9c e19a  ................
00000020: 80e6 96b0 2d3e 7075 7265 2066 7374 294c  ....->pure fst)L
00000030: 540a 4551 5b5d 330d 3224 317d            T.EQ[]3.2$1}

Wypróbuj online!


Hm, '\109999'wydaje się być ważny, przynajmniej w GHC 8.2.2. '\10999a'wywołuje błąd leksykalny.
chepner

@chepner: Właśnie przetestowałem z GHC 8.2.2 i również 𚶯produkuje błąd leksykalny.
ბიმო

2
@chepner: największy Char to maxBound :: Char, tj '\1114111'. Uwaga: liczby są domyślnie dziesiętne, więc jeśli chcesz szesnastkowy, musisz wstawić xpo nim \ np '\x10999a'.
nimi

@nimi Aaa i myślę, że ustaliliśmy, jak często faktycznie używam znaków ucieczki Unicode :) Używanie prawidłowego formularza dla wartości szesnastkowych, \x10ffffdziała dobrze i \x110000zapewnia błąd poza zakresem, jak można by oczekiwać.
chepner,

24

Python 2 ,  20 21 33 39 45  50 bajtów

Teraz bardzo wspólny wysiłek!

+2 dzięki Aidan F. Pierce (wymienić sorted({0})z map(long,{0}))

+8 dzięki dylnan (wykorzystanie \i nowa linia zastąpić przestrzeń; propozycje, aby przenieść z 0do wyrażenia matematycznego, zastępując -1z -True; wykorzystanie szesnastkowym)

+11 dzięki Angsowi ( 4*23+~91-> ~4836+9*1075/2potem później ~197836254+0xbCABdDF-> ~875+0xDEAdFBCbc%1439/2*6)


if\
map(long,{~875+0xDEAdFBCbc%1439/2*6})[-True]:q

Wypróbuj online! Lub zobacz pakiet potwierdzający

0xDEAdFBCbcjest szesnastkowy i ocenia na 59775106236.
~jest uzupełnieniem bitowym, więc ~875ocenia na -876.
%jest operatorem modulo, więc 0xDEAdFBCbc%1439ocenia na 293.
/jest dzieleniem całkowitym, więc 0xDEAdFBCbc%1439/2ocenia na 146.
*jest mnożeniem, więc xDEAdFBCbc%1439/2*6ocenia na 876.
+jest dodatkiem, więc ~875+xDEAdFBCbc%1439/2*6ocenia na 0.
... żadna wersja pozbawiona również nie jest oceniana 0.

{0}jest setzawierający pojedynczego elementu 0.

Wywołanie sortedz setjako argument daje listę, która może być indeksowany do z [...].

Bez sortedkodu ({0})po prostu dałoby to seti nie da się tego zrobić w ten sam sposób, if({0})[-True]:qwywołałoby to TypeError.

Indeksowanie w Pythonie jest oparte na 0 i pozwala na indeksowanie ujemne od tyłu i Truejest równoważne 1, stąd sorted({0})[-True]znajduje element 0, a jednocześnie sorted({0})[True]podniesie IndexError, jak sorted({})[-True]i sorted({0})[]będzie niepoprawną składnię.

0Które znajduje się falsey więc ciała z if, qnigdy nie jest stracony, ale gdyby było to podnieść NameError, ponieważ qnie zostało zdefiniowane.

Ponieważ niepusta lista jest prawdą, nie możemy ograniczyć się do if[-1]:qżadnego z nich.

Zobacz pakiet potwierdzający, aby zobaczyć: potwierdzenie, że bajty są unikalne; wszystkie błędy; i sukces samego kodu.


17

C (tcc) , x86_64, 29 31 33 39 40 bajtów

main[]={(23*8),-~0xABEDFCfebdc%95674+1};

Zwraca 0 . Dzięki @feersum za sugerowanie wielkich liter szesnastkowych.

Wypróbuj online!

Jak to działa

Przypisanie zapisuje dwie liczby int ( 184 i 49664 ) w miejscu pamięci main . W przypadku 32-bitowych liczb całkowitych i kolejności bajtów little-endian dokładne bajty to b8 00 00 00 00 c2 00 00.

Ponieważ tcc nie deklaruje zdefiniowanej tablicy jako .data (większość kompilatorów by to zrobiła ), więc przejście do main wykonuje kod maszynowy, na który wskazuje.

  • b8 00 00 00 00( mov eax, imm32) przechowuje wartość int 0 w rejestrze eax.

  • c2 00 00( ret imm16) wyrzuca 0 dodatkowych bajtów ze stosu i zwraca. (Wartość w rejestrze eax jest wartością zwracaną przez funkcję).


15

> <> , 122 bajty

e"~l=?!z6-d0p}xwutsrqonmkjihgfcba`_]\[>ZYXWVUTSRQPONMLKJIHGFEDCB@<:98754321/,+*)('&%$# .	|{Ay

Wypróbuj online!

Nic nie robi. Oparty na tym samym formacie, co moja odpowiedź „ Programowanie nieskazitelnego świata” .

Najpierw sprawdzamy, czy długość kodu wynosi 122, a jeśli nie jest to błąd. ><>programy nie mogą zakończyć się bez użycia ;polecenia, ale jeśli to polecenie jest w programie, możemy po prostu usunąć wszystko przed nim, aby program natychmiast się zakończył. Aby temu zaradzić, używamy ppolecenia, aby umieścić ;kod w czasie wykonywania. Aby to zrobić, odejmujemy 6 Ai umieszczamy go po p.

Prawdopodobnie dodam większość innych wartości powyżej 127, gdy wymyślę właściwe dwie bajty. Brakuje 5 wartości v^;i dwie nowe linie.

Spośród 7502 podprogramów 7417 z nich zignorowało błędne instrukcje, 72 z niedomiaru pamięci, a 13 z braku pamięci.


13

JavaScript, 42 bajty

if([0XacdCADE*Proxy.length]!=362517948)田
  • Usunięcie i, flub ifspowoduje SyntaxError: missing ; before statement;
  • Usunięcie spowoduje SyntaxError: expected expression, got end of script;
  • Usunięcie 1 lub 2 bajtów spowoduje Invalid or unexpected token;
  • Zmodyfikowanie wyrażenia logicznego spowoduje włączenie błędu składniowego lub błędu referencyjnego

00000000: 6966 285b 3058 6163 6443 4144 452a 5072  if([0XacdCADE*Pr
00000010: 6f78 792e 6c65 6e67 7468 5d21 3d33 3632  oxy.length]!=362
00000020: 3531 3739 3438 29e7 94b0                 517948)...


8

Brain-Flak , 2 bajty

<>

Wypróbuj online!

Alternatywnie [], {}lub (). Usunięcie jednego nawiasu powoduje, że drugi nawias staje się niedopasowany.

Dowód, że jest to optymalne rozwiązanie:

Program Brain-Flak składa się z niladów (para nawiasów samodzielnie) lub monad (pary nawiasów zawierających 1 lub więcej niladów). Monada nie może być w nieskazitelnym programie, ponieważ możesz po prostu usunąć jedną lub więcej nilad. Podobnie, nie możesz mieć więcej niż jednego nilada w programie, ponieważ możesz usunąć jeden z nich bez przerywania programu.

Jako taki, może to być najmniej optymalny język dla nieskazitelnego lub unikalnego programowania.


6

Ada, 110 bajtów (latin1)

Prawdopodobnie najlepsza odpowiedź na każdy język używany w branży?

Hexdump:

0000000: 7061 636b 4167 4520 6266 686a 6c6d 6f71  packAgE bfhjlmoq
0000010: 7274 7576 7778 797a e0e1 e2e3 e4e5 e6e7  rtuvwxyz........
0000020: e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f8  ................
0000030: f9fa fbfc fdfe 0d69 730b 656e 6409 4246  .......is.end.BF
0000040: 484a 4c4d 4f51 5254 5556 5758 595a c0c1  HJLMOQRTUVWXYZ..
0000050: c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1  ................
0000060: d2d3 d4d5 d6d8 d9da dbdc ddde 3b0a       ............;.

Skompiluj, zapisując do dowolnego pliku kończącego się .adsi działającego gcc -c <filename>. Tworzy plik wykonywalny, który nic nie robi. (Nie można podać linku TIO, ponieważ TIO umieszcza kod w .adbpliku i gccdomyślnie próbuje znaleźć dla niego pasującą specyfikację)

Zasadniczo deklaruje paczkę o nazwie zawierającej duże / małe litery łacińskie1. Potrzebuje innego znaku spacji dla każdej ze spacji, więc używa spacji, CR, LF i TAB.

Jak to wygląda w wersji vim:

packAgE bfhjlmoqrtuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ^Mis^Kend^IBFHJLMOQRTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ;

Jak to działa

W Adzie można nawet skompilować specyfikację. Spec są jak pliki nagłówkowe c, ale są bardziej w pełni funkcjonalne i mogą skompilować jakiś podstawowy kod. Aby była poprawna, każda specyfikacja musi mieć format: package <NAME> is ... end <NAME>;z <NAME>dopasowaniem. Zaletą Ady jest to, że nie uwzględnia ona wielkości liter. Tak więc, dopóki twoje imię i nazwisko ma warianty wielkich i małych liter, możesz iść!

Najtrudniejszą częścią było uzyskanie kompilowalnej jednostki. Zwykle programy Ada mają „główną” procedurę lub funkcję leżącą poza jakimkolwiek pakietem, który stanie się ostatecznym plikiem wykonywalnym. Niestety procedury wymagają beginsłowa kluczowego, co prowadzi do zbyt wielu es (znane są tylko 2 przypadki), podczas gdy funkcje wymagają returnsłowa kluczowego, co prowadzi do zbyt wielu ns. Musiałem więc po prostu skompilować pakiet.


4

C, 8 bajtów

main(){}

Nic nie robi.

Wypróbuj online!


1
Może nie rozumiem wyzwania, ale co zmain(){short x;}
Jerry Jeremiasz

@JerryJeremiah: nie, main(){short;}kompiluje się tylko z warning: useless type name in empty declaration. Myślę, że C99 i C ++ wymagają jawnego typu zwrotu, więc int main(a może unsigned main) może działać, ale nie z gcc, który ostrzega tylko z -std=c11.
Peter Cordes,

@JerryJeremiah: return 0;może być możliwe z C89, gdzie nie ma niejawnego return 0końca main. Wyjście ze statusem niezerowym można uznać za niepowodzenie, zgodnie z innymi odpowiedziami. Czy dodawanie flag kompilatora, takich jak, -Werrorliczy się dobrze do wyniku w kręgle kodu? Ponieważ ścisłe egzekwowanie naruszeń C11 może pozwolić na znacznie dłuższy program. Hmm, #include<>coś, a potem użyj tego; nie możesz usunąć zarówno włączenia, jak i użycia, a jeśli zawiedzie bez prototypu lub makr def, wygrywasz.
Peter Cordes,

@PeterCordes Myślałem o tym, ale maini includeoba zawierają i, więc nie można mieć obu. Podobnie do deklarowania i używania funkcji. Również returnw ogóle o tym pomyślę.
Chris

Ups, zapomniałem o wymaganiu dotyczącym unikalnych bajtów; oczywiście int mainnie może działać.
Peter Cordes,

4

JavaScript, 22 bajty

with(0xF?JSON:[])parse

Wypróbuj online!

Możliwe błędy

Po zmianie spowoduje jeden z następujących błędów 1 :

[some_identifier] is not defined
expected expression, got ')'
expected expression, got ':'
expected expression, got '?'
expected expression, got ']'
expected expression, got end of script
identifier starts immediately after numeric literal
missing ( before with-statement object
missing ) after with-statement object
missing : in conditional expression
missing ] after element list
missing exponent
missing hexadecimal digits after '0x'
missing octal digits after '0o'
unexpected token: ')'
unexpected token: ']'
unexpected token: identifier

1. Dokładna liczba wyraźnych błędów zależy od silnika. Ta lista została wygenerowana za pomocą SpiderMonkey (Firefox).


3

Python 3 + Flask-Env , 7 13 14 17 bajtów

import\
flask_env

Brak TIO, ponieważ nie ma flask-env.

Znaleziono najdłuższą nazwę modułu, która nie ma przecięcia importi nie ma żadnych liczb na końcu nazwy. _sha256jest dłuższy, ale 256na swój własny nie robi błędów. Znalazłem jedną bibliotekę, b3j0f.syncczyli o jeden bajt dłużej, ale nie mogłem jej poprawnie zaimportować.

  • +1 bajt zastępując spacji po importz \<newline>. Wyjęcie jednego lub obu powoduje błąd.

Mogą być jeszcze dłuższe opcje niż flask_env, tak naprawdę nie przeprowadziłem wyczerpującego wyszukiwania, ale przejrzałem ~ 70 000 modułów. Otwarty na sugestie.


256działa bez błędów.
Aidanie F. Pierce

@ AidanF.Pierce Dzięki, naprawiono.
dylnan

Próbowałem import *[hawkey]i podobnie, ale niestety nie działa ...
dylnan

1
jastrzębia nie ma w standardowej bibliotece, więc jest to „Python z jastrzębiem” (prawdopodobnie może lepiej zrobić gdzieś z innym modułem)
Jonathan Allan

@JathanathanAllan Dobra uwaga. Muszę już iść, ale przeszukam później
dylnan

3

R , 14 bajtów

(Sys.readlink)

Wypróbuj online!

Może to być najdłuższy możliwy w R. Wywołanie dowolnej funkcji jest skazane na niepowodzenie, ponieważ można usunąć wszystko oprócz nazwy funkcji, co po prostu spowoduje wydrukowanie kodu źródłowego funkcji. Jest to najdłużej nazwany obiekt w domyślnej konfiguracji R, bez duplikatów znaków i bez nazwy obiektu podczas usuwania ciągłych znaków.

Ta pierwsza próba nie zadziałała, ale wiele się nauczyłem, próbując!

dontCheck({family;NROW})


2

Perl 5, 3 bajty

y=>

=>to „gruby przecinek”, który cytuje słowo po lewej stronie. To jest równoważne z

"y",

który nic nie robi.

Bez tłustego przecinka yjest operatorem transliteracji, który jest nieprawidłowy bez powtórzenia później trzech znaków tego samego znaku.

Sam przecinek tłuszczowy jest również nieważny, tak jak jest =i >sam.


2

pieprzenie mózgu , 2 bajty

[]

Wypróbuj online!

Inspirowany odpowiedzią Jo King Brain-Flak . Jest to optymalne, ponieważ jedynym błędem w pieprzeniu mózgu są niedopasowane nawiasy. (Jeszcze raz dziękuję Jo King za tę informację.)


Tak. Jedynym błędem, jaki może mieć pieprzenie mózgów, są niedopasowane nawiasy kwadratowe
Jo King


1

Standardowy ML , 22 bajty

val 1089=op-(765,~324)

Wypróbuj online! op-(a,b)jest pozbawioną cukru formą a-b. ~oznacza unarny minus, więc tak naprawdę zajmujemy się obliczeniami 765+324. To wyrażenie jest dopasowane do stałej na stałe 1089. To dopasowanie się powiedzie, jeśli program nie został zmieniony i nic się nie stanie.

Jeśli dopasowanie się nie powiedzie, ponieważ niektóre cyfry zostały usunięte, dostaje się znak „an” unhandled exception: Bind. Usunięcie op-powoduje błąd typu, ponieważ krotka jest dopasowana do pliku int. Wszystkie inne usunięcia powinny skutkować błędem składni.


1

Swift 4 , 19 bajtów

[].contains{1 !=
0}

Wypróbuj online!

Wszystkie możliwe błędy, które znalazłem to:

  • Usuwanie dowolnego [, ], {lub }spowoduje błąd składni
  • Usunięcie [].spowodujeUse of unresolved identifier 'contains'
  • Usunięcie .spowodujeConsecutive statements on a line must be separated by ';'
  • Usunięcie []spowodujeReference to member 'contains' cannot be resolved without a contextual type
  • Usunięcie {1 !=␊0}spowodujeExpression resolves to an unused function
  • Usunięcie 1 !=␊0spowodujeMissing return in a closure expected to return 'Bool'
    • Usunięcie nowej linii spowoduje '!=' is not a prefix unary operator
    • Usunięcie przestrzeni spowoduje '=' must have consistent whitespace on both sides
    • Usunięcie !=spowodujeMissing return in a closure expected to return 'Bool'
      • Spowoduje to również usunięcie nowej linii Consecutive statements on a line must be separated by ';'
      • Usunięcie spacji i nowej linii (i zero lub jedna z cyfr) spowoduje Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
  • Usunięcie [].containsspowodujeClosure expression is unused

Inne interesujące programy to (jeden w każdej linii):

[].isEmpty
[:].values
[1:2]

Zawiera dwa as
caird coinheringaahing



0

Siatkówka , 2 bajty

Nie zdziwiłbym się, gdyby to było optymalne ...

()

Wypróbuj online!

Wyrażenie regularne zawiera pustą grupę. Usunięcie jednego z paren spowoduje błąd analizy z powodu niedopasowanych nawiasów.

Inne rozwiązania to: \(, \), \[, \], \*, \+, \?,a]


a]nie popełnia błędu.
jimmy23013

@ jimmy23013 Ach, nie wiem, jak mi tego brakowało. Wycofana.
mbomb007

-2

C (gcc) , 73 75 bajtów

#include <ftw.h>
ABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890(){g FTW_D-1;}

Wypróbuj online!

Na podstawie odpowiedzi @Steadybox, dzięki @Angs za wykrycie poważnego błędu.

Tak, to jest brudny Hack (bo w rzeczywistości używa #definesię -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=maina -Dg=return), ale nie widzę żadnej reguły, która zakazuje takiej opcji kompilatora.


Pierwszą linię można usunąć, aby program nie był nieskazitelny
Angs

@Angs Thanks, naprawiono (z ceną dodania innej opcji kompilatora)
trolley813 18.04 18.04

6
Zgodnie z tym meta postem Twoje zgłoszenie nie jest już w języku C, ale w C89 + -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main+ -Dg=return, więc twierdzę, że używa to gotowego języka specjalnie zaprojektowanego dla wyzwania , które jest domyślnie zabronione.
Dennis
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.