Selbstbewertungsprogramm

15

Wir haben eine Herausforderung , Ihre eigene Punktzahl auszugeben , aber es sieht so aus, als ob alle Antworten die Ausgabe nur hart codieren, und das ist langweilig 1 . Stellen wir uns also einer neuen Herausforderung. Ihr Programm muss Ausgabe seine eigene Länge in Bytes , gefolgt von der Zeichenfolge " bytes", sondern um fest einprogrammierte Lösungen zu verhindern , wenn wir seine Größe zu reduzieren , indem jeden ein Byte, das neue Programm muss auch ausgegeben es ist neu Byteanzahl, noch gefolgt von " bytes". Bei der Ausgabe muss nicht zwischen Groß- und Kleinschreibung unterschieden werden. Sie können auch eine abschließende Newline ausgeben.

Ihre Antworten werden in Bytes bewertet, wobei weniger Bytes besser sind.


1: Ich mag einige der Antworten dort.

Weizen-Assistent
quelle
Vielleicht könnten Sie den Namen der Herausforderung in "selbstbewertendes modifizierbares Programm" oder ähnliches ändern.
Dylnan
Können Sie konforme Sprachen verwenden oder nur dolmetschen?
Logern
@Logern Sie können entweder verwenden.
Weizen-Assistent
2
Argh. Ich habe eine halbe Stunde damit verbracht, eine Hexagony-Lösung zu erstellen , aber als ich sie testete , ließ das Entfernen des Bytes das Hexagon schrumpfen ! :(
Jo King
1
@WW Was ich meine ist " 1 bytesist eine technisch falsche Grammatik, aber wenn Sprachen keine eingebaute Zeichenkette haben, um die Zeichenkette" Bytes "in <= 2 Bytes auszugeben, wird das Programm länger als 3 Bytes sein, also nicht egal "- es ist sowieso egal.
user202729

Antworten:

16

Rückhand , 40 36 29 Bytes

vv""sseettyybb  ""jjHHOO]

Probieren Sie es online! Nachprüfung!

Verdoppeln Sie im Zweifelsfall alles. Dies nutzt die Fähigkeit von Backhand, mehr als einen Schritt gleichzeitig zu bewegen, um die Redundanz zu implementieren. Die nicht druckbaren Dateien haben alle den Bytewert 28.

Erläuterung:

Nicht bestrahltes Programm:

v       Reduce step count to 2
  "    Start string literal
    s e t y b        Push the " bytes" part of the output
                  " Push 28 twice and end the string literal
                       j    Jump to the 28th position (0 indexed) 
                             ]   Increment the 28 to 29
                           O     Print the 29
                         H       Halt and output the entire stack

Bestrahltes Programm:

Wenn ein Zeichen gelöscht wird, wird jedes nachfolgende Zeichen nach unten verschoben.

vv"sseettyybb
v " s e t y b     The same instructions are still executed

Anstatt zum zu springen ], reflektiert es jedoch das Ende des Programms und landet Ostattdessen auf dem .

                             v  28th character (0 indexed)
vv""sseettyybb       ""jjHHOO]
v""sseettyybb       ""jjHHOO]OOHHjj"".....
                             ^ 28th character, reflecting off the end of the code
Scherzen
quelle
3

Runenverzauberungen , 47 Bytes

>>yyLL     @"setyb 64"/
"47 bytes"@"setyb 64"L\

Probieren Sie es online!

Das ist mehr oder weniger ein Port meiner Geigerzähler- Antwort, aber mit unterschiedlicher Ausgabe (das ist selbst ein Port einer Klein-Antwort).

>>yyLList erforderlich, damit Runic (mindestens) eine IP generiert, zwei IPS zusammenführt und nach links reflektiert, sodass alle Variationen zu einer einzigen IP führen, die sich nach links bewegt. Könnte durch ersetzt werden yy<<, speichert aber keine Bytes.

Die Reflektoren auf der rechten Seite zwingen die IP zur unteren linken Zeichenfolge, sodass die IP durch Entfernen der rechten oberen Zeichenfolge in die rechte obere Zeichenfolge verschoben werden kann. Durch Entfernen eines Bytes an einer anderen Stelle in der oberen Zeile wird der obere Reflektor so eingestellt, dass er über dem L liegt (sodass das Programm unten rechts angezeigt wird). Durch das Entfernen eines Bytes am unteren Rand wird dieser Reflektor angepasst (oder entfernt), sodass das letzte Zeichen implizit mit einem Leerzeichen gefüllt wird, sodass die IP von beiden Seiten des oberen rechten Reflektors in die obere rechte Zeichenfolge springen kann.

Die überschüssigen Räume sind jedoch enttäuschend. Alle Versuche, sie zu reduzieren, haben jedoch entweder zu größeren Programmen, Programmen gleicher Größe oder Programmen geführt, die nicht 100% strahlungssicher sind. Sowohl die Antworten von Klein als auch von> <> verwenden Funktionen, die in Runic nicht verfügbar sind.

Draco18s
quelle
2

> <> , 43 39 Bytes

||vn-{"' bytes"-10/
 o>o<"38 bytes"[0/0

Probieren Sie es online! Nachprüfung!

Im unbestrahlten Programm addieren wir 0zu '(39) und im bestrahlten Programm überspringen wir die 0 und addieren -1stattdessen dazu. Wenn etwas aus der oberen Reihe entfernt wird, verschieben wir uns stattdessen in die untere Reihe und geben es einfach aus 38 bytes.

Scherzen
quelle
2

Hexagony , 71 Bytes

//.........||.>e;s;@..\;t;y;b<>}F"+!P0;/|/F!P0$@;<...t;ye;bs/.........)

Probieren Sie es online! Nachprüfung!

Ich habe viel zu lange versucht, dies in ein Sechseck der Größe 5 zu bringen, aber ich musste mich stattdessen mit einer unterdurchschnittlichen Größe 6 begnügen :(.

Erweitert:

      / / . . . .
     . . . . . | |
    . > e ; s ; @ .
   . \ ; t ; y ; b <
  > } F " + ! P 0 ; /
 | / F ! P 0 $ @ ; < .
  . . t ; y e ; b s /
   . . . . . . . . .
    ) . . . . . . .
     . . . . . . .
      . . . . . .

Ich habe dies anfangs mit der )einen Reihe niedriger gemacht, aber es hat sich herausgestellt, dass genau dort die Kluft zwischen Sechsecken der Größe 5 und 6 liegt. Das bedeutet, wenn ein Byte entfernt wird, verschiebt sich die Größe nach unten und ruiniert die Pfade. Ich bin mir auf jeden Fall sicher, dass eine Größe 5 möglich ist.

Scherzen
quelle
Wenn ich das richtig verstehe, kannst du dann nicht )eine Reihe tiefer setzen und danach einfach ein No-Op setzen, damit es ein Sechseck der Größe 6 ist?
EdgyNerd
@EdgyNerd Wenn Sie ein No-Op danach setzen, kann es entfernt werden, ohne das Programm zu beeinflussen
Jo King
2

Klein 000, 41 Bytes

<<@"setyb "$"4"+"0"/
..@"setyb 04"(....<1

Probieren Sie es online! JoKings Prüfer

Ich denke, diese Antwort ähnelt JoKings> <> Antwort , aber ich lese nicht> <>, daher kann ich nicht sicher sein.

Es gibt hier 4 verschiedene Arten von Byteentfernungen

  1. Ein Byte wird zuvor aus der ersten Zeile entfernt /. In diesem Fall wird der Schrägstrich effektiv um eine Stelle nach links verschoben, um ihn in die unterste Zeile umzulenken und zu verhindern, dass der geänderte Teil des Codes ausgeführt wird. Dies veranlasst uns ("40 bytes"@, den ausgegebenen Code auszuführen 40 bytes.

  2. Der erste /wird aus der ersten Zeile entfernt. In diesem Fall führen wir den Code aus "0"+"4"$" bytes"@, der ein verschlungener Weg oder Ausdruck ist 40 bytes.

  3. Der Zeilenumbruch wird entfernt. Das macht uns aus dem Ende der zweiten Zeile und den resultierenden Code (mit noops entfernt) starten 1("40 bytes"@, das gerade druckt 40 bytes.

  4. Ein Byte aus der letzten Zeile wird entfernt. Dies bewirkt, dass das 1Ende der ersten Zeile nach links verschoben wird, und verhindert, dass es zum Stapel hinzugefügt wird, wenn die Spitze von abgelenkt wird /. Der Code "0"+aus diesem Grund drückt 0statt 1, der Rest des Codes verwandelt sich 0in 40 bytes.

Klein 001, 41 Bytes

\("40 bytes"@......1
..@"setyb "$"4"+"0"/

Probieren Sie es online! JoKings Prüfer

Hier ist eine Antwort unter Verwendung einer anderen Topologie. Es ist die gleiche Größe, aber ich denke, es gibt Raum für Verbesserungen.

Weizen-Assistent
quelle
37 Bytes in 200
Jo King