Brudny i wyjątkowy

26

W tym pytaniu będę mówić o programach jako ciągach, są to ciągi bajtów, a nie znaków. Sposób renderowania lub wyświetlania wynikowego programu nie jest ważny dla tego wyzwania, liczy się tylko sposób, w jaki pojawia się w pamięci.

Dziewiczy Program jest programem że podczas uruchamiania, nie błąd, jednak będzie ona błędów, gdy ciągłe podciąg o rozmiarze n , gdzie 1 n < | S | , jest usunięty.S.n1n<|S.|

Brudny program jest odwrotny, jest to program który po uruchomieniu popełnia błąd, jednak za każdym razem, gdy ciągły podciąg o rozmiarze n , gdzie 1 n < | S | jest usuwany, nie powoduje błędu.S.n1n<|S.|

W przypadku tego wyzwania błędem jest niepuste wyjście do STDERR.

Twoim wyzwaniem jest napisanie brudnego programu, który wykorzystuje tak wiele unikalnych bajtów, jak to możliwe. Oznacza to, że otrzymasz jeden punkt za każdy unikalny bajt, który pojawia się w kodzie, przy czym lepszy wynik jest lepszy. Maksymalny wynik to zatem 256.

Kreator pszenicy
źródło
Czy można w ogóle odpowiedzieć na to pytanie w językach, które zawierają nawiasy / nawiasy? Możliwe byłoby usunięcie niektórych podciągów z kodu, aby powstały niedopasowane nawiasy.
JungHwan Min
@JungHwanMin Gdyby język wymuszał zrównoważone nawiasy, podejrzewałbym, że byłoby to niemożliwe.
Wheat Wizard
@CatWizard, więc brudny program nie popełnia błędu, gdy ciągły podciąg znaków (tj. Nie ciągły zestaw bajtów) jest usuwany, prawda?
JungHwan Min
@JungHwanMin Przepraszamy. Może, ale nie musi. Dbamy tylko o ciągłe ciągi znaków.
Wheat Wizard

Odpowiedzi:

18

Unary , 14 bajtów

123456789ABCDE

To koduje program pieprzenia mózgu [, który popełnia błędy z powodu niedopasowanych nawiasów.

Usuwanie bajtów spowoduje >, <, +, -, ., ,lub pusty program, który są ważne programy brainfuck.

Dennis
źródło
Jest to optymalne rozwiązanie, ponieważ każde dłuższe rozwiązanie można sprowadzić do tego rozwiązania, które popełniają błędy
Jo King
To także jedyne rozwiązanie.
user202729
13

R , 3 bajty

qrt

Wypróbuj online!

Nazwa obiektu jest poprawnym programem w języku R.

qrt nie jest nazwą czegokolwiek, więc zwraca błąd.

q jest funkcją wyjścia

qr to funkcja rozkładu QR

rt jest funkcją próbkowania rozkładu t

qt jest odwrotnością rozkładu t CDF

t jest funkcją transpozycji

ngm
źródło
2
@pajonk, ale „r” jest ciągłym podciągiem. Usunięcie tego pozostawia „qt”
Orphevs
3
W R o długości 3 jest dokładnie jeden brudny program i to jest to! (jedyny pojedynczy char ważne programy 0-9cqtCDFIT, każdy program musi zaczynać się cm, qf, qr, qt, tslub Im. Długość trzy możliwości qrf, qrm, qrt, qtsi tsd, a tylko jeden z nich jest brudna (inni nie mogą zostać przedłużone albo aby je Filthy jak nie ma funkcji rm*, rf*, ts*, sd*)
JDL
@Orphevs my bad, źle odczytałem wyzwanie.
pajonk
10

Galaretka , 4 5 6 7 8 10 11 bajtów

“a”;⁽PFð+µU

Wypróbuj online!

Sprawdź to.

Próbuje dodać ciąg z liczbą całkowitą.

Niektóre z możliwych podprogramów:

“a” to dosłowny ciąg znaków.

“a jest tym samym ciągiem literału.

jest pustym ciągiem.

“a”; konkatenuje „a” z samym sobą.

... zbyt wielu, by wymienić je wszystkie.

dylnan
źródło
1
Na szczęście galaretka nadal pozwala na błędy.
user202729
6

Polyglot, 3 bajty

1 2

Pracuje w:

  • JavaScript
  • Rubin
  • R
  • Oktawa
  • GHCi
  • Julia

W JavaScript wyrzuca SyntaxError: nieoczekiwany token: literał liczbowy lub podobny błąd.

Wszystkie pozostałe ciągi są poprawnymi literałami liczbowymi ( 1 , 2 lub 12 ).


W GHCi to rzuca

<interactive>:1:1: error:
     Non type-variable argument in the constraint: Num (t1 -> t2)
      (Use FlexibleContexts to permit this)
     When checking the inferred type
        it :: forall t1 t2. (Num t1, Num (t1 -> t2)) => t2

To dlatego, że stara się zastosować 1do 2postaci funkcji, jednak nie może. Kiedy jakakolwiek część tego zostanie usunięta, staje się po prostu literałem liczbowym.

Arnauld
źródło
Polyglot: R, Octave, Ruby, the Pythons ...
ngm
1
@ngm GHCi również, jednak błędy `2` w pythonie.
Wheat Wizard
Podejrzewałem, że to było bardzo ogólne. Zamieniłem to w wiki społeczności, więc edytuj je we wszystkich językach, dla których to działa!
Arnauld
5

Python 2/3 , 3 bajty

4\f2

LUB

4\x0c2

Wypróbuj online!

W python „\ f” jest taki sam jak „\ x0c” i jest danych postaci. Oznacza to, że drukarka wskazuje przejście do następnego wiersza.

Jeśli wyrażenie python zaczyna się lub kończy \f, to w zasadzie jest tak ignorowane\f2 jest poprawnym wyrażeniem.

4I 2może być dowolny numer 0-9. Jednak aby pierwszy bajt był 0poprawny tylko w Pythonie 2.7.15, tak jak 02zostało to prawnie zadeklarowane 2.

Tak więc samo wyrażenie zawiedzie z błędem składni, ponieważ istnieją dwie liczby oddzielone spacją. Jednak każde skrócenie albo umieszcza \fna początku lub na końcu, gdzie to nie ma znaczenia, lub tworzy, 42co jest ważne.

(Warto zauważyć, że w IDLE plik ten otwiera się jak „42”).

Źródło wyjaśnienia kanału formularza: /programming//a/26184126

The Matt
źródło
3
Byłoby to łatwiejsze do zrozumienia, gdybyś używał rzeczywistego kodu w źródle bez \f. Oto link do wypróbowania online, z którego można uzyskać wstępnie sformatowaną odpowiedź.
Wheat Wizard
1
Dodałem go jako wariant dla wyjaśnienia. Dziękujemy również za sugestię łącza.
Matt