Schmutzig und einzigartig


26

In dieser Frage werde ich über Programme als Zeichenketten sprechen, das sind Zeichenketten aus Bytes und nicht aus Zeichen. Wie Ihr resultierendes Programm gerendert oder angezeigt wird, ist für diese Herausforderung nicht wichtig, sondern nur, wie es im Speicher angezeigt wird.

Ein unberührtes Programm ist ein Programm , wenn es ausgeführt wird, keinen Fehler macht, jedoch immer dann, wenn ein kontinuierlicher Teilstring der Größe n mit 1 n < | S | , ist entfernt.Sn1n<|S|

Ein schmutziges Programm ist das Gegenteil, es ist ein Programm , , dass bei der Ausführung macht Fehler, jedoch immer dann , wenn eine kontinuierliche Teilkette der Größe n , wobei 1 n < | S | wird entfernt, es tritt kein Fehler auf.Sn1n<|S|

Für diese Herausforderung ist ein Fehler eine nicht leere Ausgabe an STDERR.

Ihre Herausforderung besteht darin, ein schmutziges Programm zu schreiben, das so viele eindeutige Bytes wie möglich verwendet. Dies bedeutet, dass Sie für jedes eindeutige Byte, das in Ihrem Code angezeigt wird, einen Punkt erhalten, wobei eine größere Punktzahl besser ist. Die maximale Punktzahl beträgt somit 256.


Ist es überhaupt möglich, dies in Sprachen zu beantworten, die Klammern enthalten? Es wäre möglich, einige Teilzeichenfolgen aus dem Code zu entfernen, sodass es nicht übereinstimmende Klammern gibt.
JungHwan Min

@JungHwanMin Wenn die Sprache ausgewogene Klammern erzwingt, würde ich vermuten, dass es unmöglich wäre.
Weizen-Assistent

@CatWizard, damit ein schmutziges Programm keinen Fehler macht, wenn eine fortlaufende Zeichenfolge (dh kein fortlaufender Satz von Bytes) entfernt wird, richtig?
JungHwan Min

@JungHwanMin Entschuldigung. Es kann oder kann nicht. Wir kümmern uns nur um kontinuierliche Zeichenfolgen.
Weizen-Assistent

Antworten:


18

Unär , 14 Bytes

123456789ABCDE

Dies kodiert das Brainfuck-Programm [, das Fehler aufgrund nicht übereinstimmender Klammern aufweist.

Entfernen Bytes ergeben >, <, +, -, ., ,oder das leere Programm, die gültigen Gehirnfick Programme sind.


Dies ist die optimale Lösung, da jede längere Lösung auf diese Lösung reduziert werden könnte, die Fehler aufweist
Jo King

Dies ist auch die einzige Lösung.
User202729

13

R , 3 Bytes

qrt

Probieren Sie es online!

Ein Name eines Objekts ist ein gültiges Programm in R.

qrt ist nicht der Name von irgendetwas, daher wird ein Fehler zurückgegeben.

q ist die Beendigungsfunktion

qr ist die QR-Zerlegungsfunktion

rt ist die t-Verteilungsabtastfunktion

qt ist die t-Verteilungsinverse CDF

t ist die Transponierungsfunktion


2
@pajonk aber "r" ist eine kontinuierliche Teilzeichenfolge. Wenn das entfernt wird, bleibt "qt"
Orphevs

3
Es gibt genau ein schmutziges Programm in R der Länge 3, und das ist es! (die nur einzelne Zeichen gültigen Programme sind 0-9cqtCDFIT, muss jedes Programm daher beginnen mit cm, qf, qr, qt, tsoder Im. Die Länge drei Möglichkeiten qrf, qrm, qrt, qtsund tsdund nur eine davon ist schmutzig (die andere können auch nicht verlängert werden , um sie schmutzig zu machen da es keine Funktionen rm*, rf*, ts*, sd*)
JDL

@Orphevs meine schlechte, die Herausforderung falsch verstanden.
Pajonk

10

Jelly , 4 5 6 7 8 10 11 Bytes

“a”;⁽PFð+µU

Probieren Sie es online!

Überprüfen Sie es.

Versucht, eine Zeichenfolge mit einer Ganzzahl hinzuzufügen.

Einige der möglichen Unterprogramme:

“a” ist ein String-Literal.

“a ist das gleiche String-Literal.

ist die leere Zeichenfolge.

“a”; verkettet "a" mit sich selbst.

... zu viele, um sie alle aufzuzählen.


1
Zum Glück erlaubt dir Jelly immer noch Fehler zu machen.
User202729

6

Mehrsprachig, 3 Bytes

1 2

Arbeitet in:

  • JavaScript
  • Rubin
  • R
  • Oktave
  • GHCi
  • Julia

Löst in JavaScript SyntaxError: unerwartetes Token: numerisches Literal oder einen ähnlichen Fehler aus.

Alle anderen Zeichenfolgen sind gültige numerische Literale ( 1 , 2 oder 12 ).


In GHCi wirft dies

<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

Dies liegt daran, dass versucht wird, 1auf 2eine Funktion anzuwenden , dies jedoch nicht möglich ist. Wenn ein Teil davon entfernt wird, wird es einfach zu einem numerischen Literal.


Polyglot: R, Octave, Ruby, die Pythons ...
ngm

1
@ngm GHCi auch, jedoch `2` Fehler in Python.
Weizen-Assistent

Ich vermutete, dass es sehr allgemein war. Ich habe dies in ein Community-Wiki umgewandelt. Sie können es also mit allen Sprachen bearbeiten, für die dies funktioniert.
Arnauld


5

Python 2/3 , 3 Bytes

4\f2

ODER

4\x0c2

Probieren Sie es online!

In Python ist "\ f" dasselbe wie "\ x0c" und ein Formular-Feed- Zeichen. Dies bedeutet, dass ein Drucker in die nächste Zeile wechseln muss.

Wenn ein Python-Ausdruck mit beginnt oder endet \f, wird er grundsätzlich ignoriert, ebenso \f2wie ein gültiger Ausdruck.

Das 4und 2kann eine beliebige Zahl von 0 bis 9 sein. Das erste Byte 0ist jedoch nur in Python 2.7.15 gültig, wie 02eine gesetzliche Erklärung von gemacht wurde 2.

Der Ausdruck selbst schlägt mit einem Syntaxfehler fehl, da zwei durch ein Leerzeichen getrennte Zahlen vorhanden sind. Jegliche Verkürzung setzt jedoch entweder \fam Anfang oder am Ende an, wo es keine Rolle spielt, oder erzeugt, 42was gültig ist.

(Es ist erwähnenswert, dass diese Datei im IDLE-Modus wie "42" aussieht.)

Erklärungsquelle für den Formular-Feed: https://stackoverflow.com/a/26184126


3
Dies wäre einfacher zu verstehen, wenn Sie den eigentlichen Code in der Quelle ohne das verwenden würden \f. Hier ist ein Online-Link zum Ausprobieren, über den Sie eine vorformatierte Antwort erhalten können.
Weizen-Assistent

1
Ich habe es als Variante zur Verdeutlichung hinzugefügt. Vielen Dank auch für den Linkvorschlag.
Der Matt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.