Makelloses und einzigartiges Code-Bowling

81

Ihre Herausforderung ist einfach: schreiben , so lange von einem ursprünglichen Programm wie möglich in der Sprache Ihrer Wahl nur einzigartiges Bytes verwenden. (Die vollständige Definition eines unberührten Programms, kopiert von diesem Link, ist am Ende dieser Frage.)

Das ist richtig, keine Bedingungen geknüpft. Ihr Code muss überhaupt nichts tun, nur fehlerfrei ausgeführt werden, die Anforderungen für ein makelloses Programm (siehe oben) erfüllen und keine doppelten Bytes in die von Ihnen verwendete Codierung einbeziehen.

Für die Zwecke der obigen Erläuterung und der damit verbundenen Definition von "makellosem Programm" wird ein Fehler als alles definiert, was dazu führt, dass das Programm nach einer begrenzten Zeit entweder nicht mehr ausgeführt wird oder mit einem Exit-Code ungleich Null endet.

Da dies , gewinnt der längste , nicht der kürzeste Code (gemessen an der Byteanzahl). Die theoretisch maximal mögliche Punktzahl beträgt 256, da 256 verschiedene Bytes möglich sind. Bei einem Gleichstand gewinnt die erste Antwort mit der höchsten Punktzahl.


Hier ist die vollständige Definition eines unberührten Programms, kopiert aus dem obigen Link:

Definieren wir ein unberührtes Programm als ein Programm, das selbst keine Fehler aufweist, das jedoch fehlerhaft ist, wenn Sie es ändern, indem Sie zusammenhängende Teilzeichenfolgen mit N Zeichen entfernen 1 <= N < program length.

Zum Beispiel das dreistellige Python 2-Programm

`8`

ist ein unberührtes Programm, da alle Programme, die aus dem Entfernen von Teilzeichenfolgen der Länge 1 resultieren, Fehler verursachen (Syntaxfehler in der Tat, aber jede Art von Fehler reicht aus):

8`
``
`8

und auch alle Programme, die aus dem Entfernen von Teilzeichenfolgen der Länge 2 resultieren, verursachen Fehler:

`
`

Wenn zum Beispiel `8ein fehlerfreies Programm gewesen `8`wäre, wäre es nicht makellos, da alle Ergebnisse der Entfernung der Teilzeichenfolgen fehlerhaft sein müssen.

Aidan F. Pierce
quelle
37
Hut ab vor dir, dass du es geschafft hast, eine gute Code-Bowling- Herausforderung zu schaffen !
ETHproductions
Wenn ein Unterprogramm für immer läuft, aber kein Fehler auftritt, macht das die Antwort ungültig?
Dylnan
1
@dylnan "Ein Fehler ist definiert als [...] Abbruch nach einer begrenzten Zeit."
user202729
3
@Baldrickk Nein, für diese Herausforderung wäre das nicht zulässig. (Wenn Sie sich auf das Beispiel in der Frage beziehen, ist dies eine Demonstration dessen, was ein unberührtes Programm ist, das jedoch nicht die zusätzliche Anforderung eindeutiger Bytes erfüllt.)
Aidan F. Pierce
1
Können wir undefiniertes Verhalten als Fehler betrachten, wenn es in der Praxis normalerweise zu einem Fehler führt? Ich denke an so etwas wie JMP <address outside of the program's memory>in der Montage. Im Prinzip kann es auf einem echten Computer eine Endlosschleife geben oder mit einem Fehler ungleich Null beendet werden, aber normalerweise stürzt es spektakulär ab.
Chris

Antworten:

22

Jelly , 253 254 256 Bytes

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

Probieren Sie es online! oder Überprüfen Sie es!

Es stellte sich heraus, dass Golfsprachen ...

  • +1 Byte durch Arbeiten in . Jetzt nur «»noch nicht benutzt
  • +2 Bytes mit mit «». Jetzt haben Sie die optimale Punktzahl!

Wie?

Das entscheidende Merkmal von Jelly, das dies ermöglicht, ist, dass die Anfangs - und Endzeichen für Zeichenfolgenliterale nicht mit denen in fast allen anderen Sprachen identisch sind.

Die Programmstruktur ist wie folgt:

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

Mfindet die Indizes seines Arguments, die auf maximale Elemente verweisen. Alles, was zählt, ist, dass Jelly ohne Argument für dieses Programm 0den Ketten- und Jelly-Fehlern zuordnet , wenn sie Mangewendet werden 0.

Um zu verhindern M, dass 0im gesamten Programm weitergearbeitet wird, verwenden wir den ¡Schnellzugriff, Mder mehrmals angewendet wird. Dies wird durch das Ergebnis des unmittelbar davor stehenden Links bestimmt. In diesem Fall ist dieser Link <239 character long string> L»«’Ɗạ‘}237$¤.

LNimmt die Länge dieser Zeichenkette (239) und »«’Ɗdekrementiert sie auf 238. Der »«Teil macht nichts anderes als Ɗ(die letzten drei Links als Monade), so dass ein Fehler auftritt, wenn sie gelöscht werden. Nimmt dann den absoluten Unterschied zwischen dem Ergebnis »«’Ɗund der ‘}237$auf die Saite angewendeten Monade . Schritte und ist eine Monade, aber die }Windungen dieses in eine Dyade und wendet sie auf das rechte Argument ist, 237und ergibt 238. Damit ergibt sich 0im vollen Programm.

¤Links zurück zu dem String-Literal, das einen Nil bildet. Das Ergebnis ist 0, dass Mes überhaupt nicht angewendet wird, um Fehler zu vermeiden.

Mögliche Unterprogramme:

  • Wenn ein Teil der Zeichenfolge entfernt <string>..¤wird, ist er ungleich Null und Mwird angewendet 0, wodurch ein Fehler verursacht wird.
  • Wenn ein Teil von L»«’Ɗạ‘}237$entfernt Mwird, wird entweder auf angewendet, 0oder es werden Operationen zwischen der Zeichenfolge und einer Zahl ausgeführt, was zu a führt TypeError.
  • Wenn eines von ¤¡entfernt wird, Mwird auf angewendet 0.
  • Wenn die Zeichenfolge Abschlusszeichen und beide ’‘entfernt bekommen und nicht, alles nach Mverwandelt sich in einen String , so Mwird auf handeln 0.
    • Wenn der String das Zeichen schließt und entfernt wird und nicht, wird alles zwischen und in eine Liste von ganzen Zahlen umgewandelt.
  • Wenn Malleine entfernt wird, gibt es ein " EOFErrorweil", das ¡einen Link vor dem vorhergehenden "Nilad" erwartet.
  • Wenn M“und eine beliebige Anzahl von Zeichen nach dem Entfernen vorhanden ist, wird eine angezeigt, EOFErrorda ¤nach einem Nullpunkt gesucht wird, dieser jedoch nicht gefunden wird. 238zählt nicht, weil es Teil einer Monade ist.

Das deckt so ziemlich alles ab.

Ich hatte es zuvor nicht verwendet, «»‘da die beiden letzteren nicht in die Zeichenfolge aufgenommen werden können, da sie mit dem Zeichen übereinstimmen , um andere Dinge als Zeichenfolgen zu bilden. Ich «kann auch nicht in einer “”Saite sein, aber ich weiß nicht warum.

dylnan
quelle
31

Haskell , 39 45 50 52 60 Bytes

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

Der Bezeichner mainmuss einen Typ IO afür einen Typ a haben. Wenn das Programm ausgeführt wird, wird die Berechnung mainausgeführt und das Ergebnis verworfen. In diesem Fall ist sein Typ IO ((a,b)->a).

Das Ergebnis ist eine Anwendung der Funktion (λ a b c d e f → return fst), einer Konstantenfunktion mit sechs Argumenten, die die Funktion fst (die das erste Element eines 2-Tupels ergibt) zurückgibt, die in die E / A-Monade injiziert wird. Die sechs Argumente sind LT(Enum für weniger als), EQ(ENUM für Gleichheit), leere Liste [], 3, 2und 1.

Leerzeichen werden durch eindeutige Zeichen ersetzt, die als Leerzeichen gelten: ein Tabulator, ein nicht unterbrechendes Leerzeichen, ein Formularvorschub, ein vertikaler Tabulator, eine OGHAM-LEERTASTE, ein reguläres Leerzeichen, ein Zeilenumbruch und ein Zeilenumbruch. Wenn eine dieser Angaben fehlt, ist die Anzahl der Argumente nicht übereinstimmend. Die Parameternamen werden als drei- oder vier-Byte-UTF-8-Zeichen ausgewählt, 𤶸陸ⵙ商ߜ新wobei Zeichen sorgfältig ausgewählt werden, die nicht zu doppelten Bytes führen.

Vielen Dank an @BMO für seine wertvollen Beiträge.

Hex-Dump:

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}

Probieren Sie es online!

Angs
quelle
Hm, '\109999'scheint zumindest in GHC 8.2.2 gültig zu sein. '\10999a'erzeugt einen lexikalischen Fehler.
Chepner
@chepner: Ich habe gerade mit GHC 8.2.2 getestet und 𚶯erzeugt auch einen lexikalischen Fehler.
18.
2
@chepner: Größter Char ist maxBound :: Char, dh '\1114111'. Hinweis: Die Zahlen sind standardmäßig dezimal. Wenn Sie also hexadezimal schreiben möchten, müssen Sie ein xnach dem \ , z '\x10999a'.
Nimi
@nimi Aaaund ich denke, wir haben festgestellt, wie oft ich tatsächlich Unicode-Escapezeichen verwende :) Die Verwendung der richtigen Form für Hex-Werte \x10fffffunktioniert einwandfrei und \x110000liefert einen Fehler außerhalb des Bereichs, wie zu erwarten war.
Chepner
24

Python 2 ,  20 21 33 39 45  50 Bytes

Nun sehr eine gemeinsame Anstrengung!

+2 dank Aidan F. Pierce (ersetzen sorted({0})durch map(long,{0}))

+8 dank dylnan (Verwendung von \und newline, um Leerzeichen zu ersetzen; Vorschläge, um von 0einem mathematischen Ausdruck zu wechseln ; Ersetzen -1durch -True; Verwendung von hexadezimal)

+11 danke an Angs ( 4*23+~91-> ~4836+9*1075/2dann später ~197836254+0xbCABdDF-> ~875+0xDEAdFBCbc%1439/2*6)


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

Probieren Sie es online! Oder sehen Sie sich die Bestätigungssuite an

0xDEAdFBCbcist hexadezimal und ergibt 59775106236.
~Ist bitweise Ergänzung also zu ~875bewerten -876.
%Wird der Modulo-Operator also zu 0xDEAdFBCbc%1439ausgewertet 293.
/Ist die Ganzzahldivision so wird 0xDEAdFBCbc%1439/2ausgewertet 146.
*ist die Multiplikation so xDEAdFBCbc%1439/2*6wertet auf 876.
+ist nebenbei so zu ~875+xDEAdFBCbc%1439/2*6bewerten 0.
... wertet auch keine abgespeckte Version aus 0.

{0}ist ein setElement, das ein einzelnes Element enthält 0.

Wenn Sie sortedmit a setals Argument aufrufen, erhalten Sie eine Liste, in die Sie mit indexieren können [...].

Ohne sortedden Code ({0})würde nur das ergeben setund dieser kann nicht in gleicher Weise indiziert werden, if({0})[-True]:qwürde ein TypeError.

Indexieren in Python ist 0-basiert und ermöglicht negativen Indexieren von der Rückseite und Trueentspricht 1daher sorted({0})[-True]das Element findet 0, während sorted({0})[True]wird eine erhöhen IndexError, als Wille sorted({})[-True]und sorted({0})[]ist ungültig Syntax.

Die , 0die gefunden wird , ist Falsey so den Körper des if, qwird, nie jedoch ausgeführt, wenn es es ein aufwerfen würde , NameErrorda qnicht definiert wurde.

Da eine nicht leere Liste der Wahrheit entspricht, können wir auch nicht darauf eingehen if[-1]:q.

In der Bestätigungssuite finden Sie folgende Informationen : Bestätigung, dass die Bytes eindeutig sind; alle Fehler; und der Erfolg des Codes selbst.

Jonathan Allan
quelle
17

C (tcc) , x86_64, 29 31 33 39 40 Bytes

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

Gibt 0 zurück . Vielen Dank an @feersum für das Vorschlagen von Hex-Ziffern in Großbuchstaben.

Probieren Sie es online!

Wie es funktioniert

Die Zuweisung schreibt zwei Ints ( 184 und 49664 ) in den Speicherort von main . Bei 32-Bit-Ints und Little-Endian-Bytereihenfolge sind die genauen Bytes b8 00 00 00 00 c2 00 00.

Da tcc das definierte Array nicht als .data deklariert (die meisten Compiler würden dies tun), führt das Springen zu main den Maschinencode aus, auf den es verweist.

  • b8 00 00 00 00( mov eax, imm32) speichert die int 0 im eax-Register.

  • c2 00 00( ret imm16) entfernt 0 zusätzliche Bytes aus dem Stapel und gibt sie zurück. (Der Wert im eax-Register ist der Funktionsrückgabewert).

Dennis
quelle
Die TIO-Verbindung zeigt für mich einen Segmentierungsfehler an.
pppery vor
15

> <> 122 Bytes

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

Probieren Sie es online!

Tut nichts. Basiert auf dem gleichen Format wie bei der Programmierung einer unberührten Welt .

Zuerst prüfen wir, ob der Code 122 lang ist und ob er fehlerhaft ist. ><>Programme können nicht ohne die Verwendung des ;Befehls beendet werden. Befindet sich dieser Befehl jedoch im Programm, können wir einfach alles vorhergehende entfernen, um das Programm sofort zu beenden. Um dem entgegenzuwirken, verwenden wir den pBefehl, um zur ;Laufzeit ein in den Code einzufügen. Dazu subtrahieren wir 6 Aund setzen sie nach die p.

Ich werde wahrscheinlich die meisten anderen Werte über 127 addieren, sobald ich die richtigen Zwei-Byte-Werte herausgefunden habe. Die fehlenden 5 Werte sind v^;und die zwei Zeilenumbrüche.

Von den 7502 Unterprogrammen sind 7417 aufgrund ungültiger Anweisungen fehlerhaft, 72 aufgrund von Speichermangel und 13 aufgrund von Speichermangel.

Scherzen
quelle
13

JavaScript, 42 Bytes

if([0XacdCADE*Proxy.length]!=362517948)田
  • Entfernen i, foder ifwird verursachen SyntaxError: missing ; before statement;
  • Entfernen wird verursachen SyntaxError: expected expression, got end of script;
  • Das Entfernen von 1 oder 2 Bytes von bewirkt Invalid or unexpected token;
  • Wenn Sie den booleschen Ausdruck ändern, wird entweder ein Syntaxfehler oder ein Referenzfehler verursacht

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)...

tsh
quelle
9

Brain-Flak , 2 Bytes

<>

Probieren Sie es online!

Alternativ [], {}oder (). Durch Entfernen einer der beiden Halterungen wird die andere Halterung nicht mehr angepasst.

Beweisen Sie, dass dies die optimale Lösung ist:

Ein Brain-Flak-Programm besteht aus Niladen (ein Paar Klammern für sich) oder Monaden (ein Paar Klammern, die 1 oder mehr Niladen enthalten). Eine Monade kann nicht in einem unberührten Programm enthalten sein, da Sie einfach eine oder mehrere der Niladen entfernen können. Ebenso können Sie nicht mehr als einen Nullpunkt im Programm haben, da Sie einen davon entfernen können, ohne das Programm zu unterbrechen.

Daher ist dies möglicherweise die am wenigsten optimale Sprache für makellose oder eindeutige Programmierung.

Scherzen
quelle
6

Ada, 110 Bytes (latin1)

Wahrscheinlich die beste Antwort, die Sie aus einer in der Industrie verwendeten Sprache ziehen können?

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       ............;.

Kompilieren Sie, indem Sie in einer beliebigen Datei speichern, die auf "" endet .adsund ausgeführt wird gcc -c <filename>. Erzeugt eine ausführbare Datei, die nichts tut. (TIO-Link kann nicht bereitgestellt werden, da TIO Code in eine .adbDatei schreibt und gccstandardmäßig versucht, eine passende Spezifikation für diese zu finden.)

Deklariert grundsätzlich ein Paket mit einem Namen, der Groß- / Kleinschreibung in lateinischen Buchstaben1 missbraucht. Benötigt für jedes Leerzeichen ein anderes Leerzeichen, daher werden Leerzeichen, CR, LF und TAB verwendet.

So sieht es in der VIM-Version aus:

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

Wie es funktioniert

In Ada können sogar Specs kompiliert werden. Specs ähneln den Header-Dateien von c, sind jedoch umfangreicher und können einige grundlegende Codes kompilieren. Um gültig zu sein, muss jede Spezifikation das Format haben: package <NAME> is ... end <NAME>;with <NAME>matching. Das Schöne an Ada ist, dass die Groß- und Kleinschreibung nicht berücksichtigt wird. So lange Ihr Name aus Groß- und Kleinbuchstaben besteht, können Sie loslegen!

Das Schwierige war, eine kompilierbare Einheit zu bekommen. Normalerweise haben Ada-Programme eine 'Haupt'-Prozedur oder -Funktion, die außerhalb eines Pakets liegt, das zur endgültigen ausführbaren Datei wird. Leider erfordern Prozeduren das beginSchlüsselwort, was zu zu vielen es führt (nur 2 Fälle bekannt), während Funktionen das returnSchlüsselwort erfordern , was zu zu vielen ns führt. Also musste ich einfach ein Paket zusammenstellen.

LambdaBeta
quelle
5

C 8 Bytes

main(){}

Tut nichts.

Probieren Sie es online!

Steadybox
quelle
1
Vielleicht verstehe ich die Herausforderung nicht, aber was ist mitmain(){short x;}
Jerry Jeremiah
@JerryJeremiah: nein, main(){short;}kompiliert nur mit a warning: useless type name in empty declaration. Ich denke, C99 und C ++ erfordern einen expliziten Rückgabetyp, also int main(oder vielleicht unsigned main) könnte es funktionieren, aber nicht mit gcc, das nur warnt, sogar mit -std=c11.
Peter Cordes
@JerryJeremiah: a return 0;ist möglicherweise mit C89 möglich, wo es return 0am Ende keine Implizite gibt main. Das Beenden mit einem Status ungleich Null kann anderen Antworten zufolge als Fehlschlag gewertet werden. Zählt das Hinzufügen von Compiler-Flags wie -Werrorzum Beispiel beim Code-Bowling in guter Weise zur Punktzahl? Weil die strikte Durchsetzung von C11-Verstößen ein viel längeres Programm ermöglichen könnte. Hmm, #include<>etwas und dann benutze es; Sie können nicht sowohl include als auch usage entfernen, und wenn es ohne einen Prototyp oder eine Makro-Def abstürzt, gewinnen Sie.
Peter Cordes
@PeterCordes Ich habe darüber nachgedacht, aber mainund includebeide enthalten i, so dass Sie nicht beide haben können. Ähnlich zum Deklarieren und Verwenden einer Funktion. Auch mit returnüberhaupt nicht zu denken.
Chris
Hoppla, ich habe die Anforderung für eindeutige Bytes vergessen. int mainkann natürlich nicht funktionieren.
Peter Cordes
4

JavaScript, 22 Byte

with(0xF?JSON:[])parse

Probieren Sie es online!

Mögliche Fehler

Bei Änderung wird einer der folgenden Fehler ausgegeben 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. Die genaue Anzahl der unterschiedlichen Fehler hängt vom Motor ab. Diese Liste wurde mit SpiderMonkey (Firefox) erstellt.

Arnauld
quelle
4

Python 3 + Flask-Env , 7 13 14 17 Bytes

import\
flask_env

Kein TIO, weil es nicht hat flask-env.

Es wurde der längste Modulname gefunden, der keine Kreuzung mit hat importund am Ende des Namens keine Zahlen enthält. _sha256ist länger, aber 256alleine macht es keinen Fehler. Ich habe eine Bibliothek gefunden, b3j0f.syncdie ein Byte länger ist, aber ich konnte sie nicht richtig importieren.

  • +1 Byte durch Ersetzen eines Leerzeichens nach importmit \<newline>. Das Herausnehmen von einem oder beiden führt zu einem Fehler.

Möglicherweise gibt es noch längere Optionen als flask_env, ich habe nicht wirklich gründlich gesucht, aber ich habe ~ 70.000 Module durchgesehen. Offen für Vorschläge.

dylnan
quelle
256läuft ohne Fehler.
Aidan F. Pierce
@ AidanF.Pierce Danke, behoben.
Dylnan
Ich habe versucht import *[hawkey]und ähnlich, aber leider nicht funktioniert ...
Dylnan
1
Hawkey ist nicht in der Standardbibliothek, also ist dies "Python mit Hawkey" (wahrscheinlich besser mit einem anderen Modul irgendwo)
Jonathan Allan
@ JonathanAllan Guter Punkt. Ich muss jetzt gehen, aber ich werde später suchen
dylnan
3

R , 14 Bytes

(Sys.readlink)

Probieren Sie es online!

Dies kann in R die längste Zeit sein. Das Aufrufen einer Funktion ist zum Scheitern verurteilt, da Sie bis auf den Funktionsnamen alles entfernen können, was nur zum Ausdrucken des Funktionsquellcodes führt. Dies ist das am längsten benannte Objekt im Standard-R-Setup, bei dem keine doppelten Zeichen und kein Objektname übrig bleiben, wenn zusammenhängende Zeichen entfernt werden.

Dieser erste Versuch hat nicht funktioniert, aber ich habe viel gelernt, indem ich versucht habe!

dontCheck({family;NROW})

ngm
quelle
2

Perl 5, 3 Bytes

y=>

=>ist das "fette Komma", das das Barewort auf der linken Seite zitiert. Das ist also äquivalent zu

"y",

was nix macht.

Ohne das fette Komma ywird der Transliterationsoperator, der ungültig ist, ohne drei gleiche Zeichen später wiederholt.

Das fette Komma alleine ist ebenfalls ungültig, so wie es ist =und >alleine.

Chris
quelle
2

Brainfuck , 2 Bytes

[]

Probieren Sie es online!

Inspiriert von Jo King's Brain-Flak-Antwort . Dies ist optimal, da der einzige Fehler beim Brainfuck unvergleichliche Klammern sind. (Nochmals vielen Dank an Jo King für diese Info.)

dylnan
quelle
Jep. Der einzige Fehler, den Brainfuck haben kann, sind unvergleichliche Klammern
Jo King,
1

Standard-ML , 22 Bytes

val 1089=op-(765,~324)

Probieren Sie es online! op-(a,b)ist die entzuckerte Form von a-b. ~bezeichnet das unäre Minus, also rechnen wir tatsächlich765+324 . Dieser Ausdruck ist in der Konstante musterangepasst 1089. Dieses Match ist erfolgreich, wenn das Programm nicht manipuliert wurde und dies auch tut - naja, nichts.

Wenn die Übereinstimmung nicht erfolgreich ist, weil einige Ziffern entfernt wurden, erhält man eine unhandled exception: Bind. Das Entfernen op-führt zu einem Typfehler, da ein Tupel mit einem übereinstimmt int. Alle anderen Entfernungen sollten zu einem Syntaxfehler führen.

Laikoni
quelle
1

Schnelle 4 , 19 Bytes

[].contains{1 !=
0}

Probieren Sie es online!

Alle möglichen Fehler, die ich gefunden habe, sind:

  • Entfernen von einem [, ],{ oder }ist in einem Syntaxfehler ergeben
  • Entfernen [].führt zuUse of unresolved identifier 'contains'
  • Entfernen .führt zuConsecutive statements on a line must be separated by ';'
  • Entfernen []führt zuReference to member 'contains' cannot be resolved without a contextual type
  • Entfernen {1 !=␊0}führt zuExpression resolves to an unused function
  • Entfernen 1 !=␊0führt zuMissing return in a closure expected to return 'Bool'
    • Das Entfernen des Zeilenumbruchs führt zu '!=' is not a prefix unary operator
    • Das Entfernen des Leerzeichens führt zu '=' must have consistent whitespace on both sides
    • Das Entfernen !=führt zuMissing return in a closure expected to return 'Bool'
      • Auch das Entfernen des Zeilenumbruchs führt zu Consecutive statements on a line must be separated by ';'
      • Das Entfernen des Leerzeichens und des Zeilenumbruchs (und der Null oder einer der Ziffern) führt zu Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
  • Das Entfernen [].containsführt zuClosure expression is unused

Einige andere interessante Programme sind (eines in jeder Zeile):

[].isEmpty
[:].values
[1:2]
Herman L
quelle
Dies enthält zwei as
caird coinheringaahing
0

Batch, 7 Bytes

set/px=

Ein schöner Start

ericw31415
quelle
0

Retina , 2 Bytes

Es würde mich nicht wundern, wenn das optimal ist ...

()

Probieren Sie es online!

Der reguläre Ausdruck enthält eine leere Gruppe. Das Entfernen einer der beiden Klammern führt aufgrund nicht übereinstimmender Klammern zu einem Analysefehler.

Andere Lösungen sind: \(, \), \[, \], \*, \+, \?,a]

mbomb007
quelle
a]Fehler nicht.
Jimmy23013
@ jimmy23013 Ah, ich weiß nicht, wie ich das verpasst habe. Rollte zurück.
mbomb007
-2

C (gcc) , 73 bis 75 Bytes

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

Probieren Sie es online!

Basierend auf der Antwort von @Steadybox, danke an @Angs für die Erkennung schwerwiegender Fehler.

Ja, es ist ein schmutziger Hack (weil er tatsächlich ein #definewith -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=mainund verwendet -Dg=return), aber ich sehe keine Regel, die eine solche Compiler-Option verbietet.

trolley813
quelle
Die erste Zeile kann entfernt werden, damit das Programm nicht makellos ist
Angs
@Angs Danke, behoben (mit dem Preis für das Hinzufügen anderer Compiler-Optionen)
trolley813
7
Nach dieser Meta Post ist Ihre Vorlage nicht mehr in der C - Sprache, aber C89 + -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main+ -Dg=return, ich würde so argumentieren dass diese verwenden einen erfundenen Sprache , die speziell für die Herausforderung entwickelt , die standardmäßig verboten ist.
Dennis
Sie können das entfernen, -1ohne dass es fehlerhaft ist
Jo King vor