Als eine Art Teil 2 zu Hallo, Welt! (Jedes andere Zeichen) , ein Programm schreiben , so dass alle drei dieser Programme drucken „Hallo, Welt!“: Das gesamte Programm, das 1., 3., 5. usw. Zeichen des Programms, und die 2., 4., 6., etc.
Wenn Ihr Programm ist:
abc
def
Es sollte "Hello, World!" Ausgeben, sollte es aber auch
acdf
Und
b
e
Keine Lösungen mit eingebauten "Hallo, Welt!" S.
code-golf
source-layout
hello-world
Leo Tenenbaum
quelle
quelle
Antworten:
x86-Maschinencode, 378 Byte
PROG.COM Downloaden Sie und führen Sie es in MS-DOS- Emulator, DOSBox beispielsweise aus.
Sie können auch LEFT.COM und herunterladen RIGHT.COM
Wie es funktioniert und wie man läuft
Siehe Antwort zu Teil eins
Zauber
Wenn Sie den Befehl 0xAB opcode mit einem Parameter 0xCD ausführen möchten , schreiben Sie
Generator
Code ausführen, Hex erhalten. In Binär umwandeln
Code-Snippet anzeigen
quelle
Python 3 , 115 Bytes
Jeder seltsame Charakter
Jeder gerade Charakter
Probieren Sie es online!
Dies könnte wahrscheinlich viel kürzer werden, aber ich bin froh, dass ich es geschafft habe, es in Python zum Laufen zu bringen. Ähnlich wie die Antwort von vroomfondel im ersten Teil.
Langweilige 93-Byte-Antwort
Jeder seltsame Charakter
Jeder gerade Charakter
Probieren Sie es online!
quelle
> <> 45 Bytes
Oder einfach nur Zeichen:
Oder nur ungerade Zeichen:
Probieren Sie sie online aus: originell , ausgeglichen , Gewinnchancen .
Die ursprüngliche Version drückt "
!!ddllrrooWW oolllleeHH
" auf den Stapel, dann springt der Fisch dazwischen>~o <
, wodurch ein Buchstabe gelöscht, zwei gedruckt, zwei gelöscht, zwei gedruckt, zwei gelöscht usw. Die beiden Halbprogramme sind ziemlich normale Zeichenfolgendruckprogramme. Der knifflige Teil war, in allen drei Programmen den String-Modus korrekt zu kombinieren"
und wieder!
zu deaktivieren.quelle
Befunge-98 , 43 Bytes
Probieren Sie es online!
Nur die ungeraden:
Probieren Sie es online!
Nur die geraden:
Probieren Sie es online!
Erläuterung
Das vollständige Programm:
Im ungeraden Programm ist das
2
weg, damit macht das10x
eigentlich gar nichts (es setzt das Delta auf(1,0)
das es sowieso voreingestellt ist). Der Rest des Programms ist dann der gleiche.Im geraden Programm drücken wir nur
2
den Anfang, den wir völlig ignorieren können. Der Rest des Programms ist derselbe wie zuvor.quelle
Gammaplex , 46 Bytes
Siehe hier.
Dolmetscher. Möglicherweise müssen einige Änderungen vorgenommen werden, um in modernen Compilern zu funktionieren.
quelle
Mathematica, 65 Bytes
Es gibt einige Warnungen aus, druckt
Hello, World!
und kehrt zurückNull PPrriinntt[["" HHeelllloo, Null, "" WWoorrlldd!!]]
. Bei Ausführung als Programm (nicht in der REPL) wird der Rückgabewert nicht gedruckt.Nach dem Entfernen der geraden Zeichen:
Es wird gedruckt
Hello, World!
und kehrt zurück"el,Wrd" Null Pit
.Nach dem Entfernen der ungeraden Zeichen:
Es wird gedruckt
Hello, World!
und kehrt zurückNull ol! rn[Hlo]
.quelle
x86-Maschinencode, 73 Byte
Inspiriert von der Lösung von Евгений Новиков , dachte ich, dass es mit weniger Tricks machbar sein sollte, dh nur herumzuspringen, um ansonsten "disjunkte" Codes für alle drei Varianten zu erhalten. Ich versuche es immer noch mit einer intelligenten Variante, die
lodsb; lodsb
als Mittelpunkt dient (daher wird für alle Varianten nur eine String-Konstante benötigt).Wenn ich mich richtig an meine Kindheitstage erinnere, beginnt das winzige COM-Modell mit
DS=CS=SS
und der Code wird ab geladenCS:0100h
. Ich gehe nicht davon aus, dass garantiert wird, dass der Code in einen Speicherblock mit Nullen geladen wird (wenn dies garantiert wäre, könnte ich zwei Bytes löschen).Demontage des Langcodes sollte sein
Zerlegung eines ungeraden Codes
Zerlegung von geradem Code:
quelle
8A
at 0116 sollteBA
stattdessen sein, und Zeichenfolgen werden mit$
nicht NULL abgeschlossen.Netzhaut , 48 Bytes
Probieren Sie es online!
Ungerade Positionen:
Probieren Sie es online!
Gerade Positionen:
Probieren Sie es online!
Erläuterung
Das vollständige Programm:
Das macht überhaupt nichts. Dies
|
ist keine vorhandene Konfigurationsoption. DasG
macht dies zu einer Grep-Bühne, aber es gibt wirklich nichts zu begreifen und die Regex ist leer, also macht das nichts. Der Zweck dieser Stufe ist es, zwei Zeilenvorschübe vor dem Hauptmenü "Hallo, Welt!" Zu haben. Linie, so dass einer von ihnen immer die Reduktion überlebt. Der Grund für die Erstellung eines Grep-Stags besteht darin, dass die Parität der Zeilen ausgeglichen werden muss und Grep-Stufen nur eine einzelne Zeile erfordern.Dies verwandelt die (leere) Arbeitszeichenfolge in die erforderliche Ausgabe, wobei jedes Zeichen verdoppelt wird.
Das macht nichts. Die Regex versucht, nach dem Ende der Zeichenkette ein
_
und ein zu finden,&
was natürlich unmöglich ist. Wir werden diese Zeichen jedoch in der reduzierten Version benötigen, um verschwindende Zeilenvorschübe zu beheben.Zum Schluss entfernen wir die doppelten Zeichen durch Ersetzen
(.)\1
durch$1
. Dast?
wird nie verwendet, wird aber in den reduzierten Versionen wieder benötigt.Das ungerade Programm:
Der
G
kann nicht mit der Leereingabe übereinstimmen, aber aus diesem Grund müssen wir|
eine alternative Leereingabe zulassen. Dies macht den leeren Arbeitsstring zur gewünschten Ausgabe.Dies ersetzt Unterstriche durch
()1?$
, es gibt jedoch keine Unterstriche in der Zeichenfolge, sodass dies nichts bewirkt.Das gerade Programm:
Das bedeutet
`
nur eine leere Konfigurationszeichenfolge, daher verwenden wir wieder die leere Regex, um die Arbeitszeichenfolge durch die Ausgabe zu ersetzen. Dieses Mal fügen wir auch ein,$&
aber das ist das Match selbst, das natürlich leer ist, also macht es nichts.Dies würde jedes Zeichen, auf das ein Tabulator folgt, durch ein ersetzen
1
, aber wir haben keine Tabulatoren, daher ist dies auch ein No-Op.quelle
Lua , 106 Bytes
Probieren Sie es online!
Alternative 1:
Probieren Sie es online!
Alternative 2:
Probieren Sie es online!
Drehbuch der Lichtmaschine: Probieren Sie es online aus!
quelle
CJam , 44 Bytes
Probieren Sie es online!
quelle
PHP, 70 Bytes
Ungerade Zeichen:
Gerade Zeichen:
quelle
Haskell , 92 Bytes
Probieren Sie es online! Es sieht so aus, als wäre der Missbrauch von Kommentaren zu viel für die Syntaxhervorhebung.
{- ... -}
ist ein Inline- oder mehrzeiliger Kommentar, während--
ein Zeilenkommentar beginnt.Ungerade Zeichen:
Probieren Sie es online!
Gerade Zeichen:
Probieren Sie es online!
quelle
Zsh , 54 Bytes
Probieren Sie es online!
Das Hauptprogramm führt die erste Anweisung erfolgreich aus, sodass die Anweisung nach dem Booleschen Wert
||
ignoriert wird.Für ungerade / gerade wird das
<<<Hello\ world!
entweder ein nicht abgeschlossenes<<heredoc
oder ein<file
auf stdin bereitgestelltes. In beiden Fällen wird das||
zu|
und alles, was vom ersten Befehl ausgegeben wird , wird weitergeleitet und von ignoriertecho
.quelle
LOGO , 71 Bytes
(Das Programm hat eine abschließende Newline)
Zwei entfernte Versionen:
und
(Das Programm hat eine abschließende Newline)
Für eine Erklärung was
pr
under
tun, siehe diesen Beitrag . In diesem Faller
wird Feed mit einem Wort Prozedurnamen bestimmen.Das
\
Escape-Zeichen in Logo, das die neue Zeile nach dem Ende des Kommentars verlässt, macht daher die zweite Zeile (rHlo ol!e |
) des zweiten entfernten Programms zu einem Kommentar.quelle
Javascript, 68 Bytes
Sonderzeichen:
Sogar Charaktere:
Geänderte Version meiner Antwort auf die andere.
quelle
l
inHHeelllloo
.Perl 5 , 61 Bytes
60 Byte Code + 1 für
-p
.Probieren Sie es online!
Jedes ungerade Byte
Probieren Sie es online!
Jedes gerade Byte
Probieren Sie es online!
quelle
BotEngine ,
180178 BytesBasierend auf meiner Antwort auf diese Frage.
Ungerade Zeichen (beachten Sie die mehreren nachgestellten Leerzeichen in der letzten Zeile):
Gerade Zeichen:
quelle
Runenverzauberungen , 52 Bytes
Probieren Sie es online!
Runic ist normalerweise nicht sehr gut im Umgang mit Strahlung, da das zufällige Entfernen von Flusskontrollzeichen die Ausführung der Verfolgung zu einem großen Schmerz macht, aber vorhersagbare Strahlung wie jedes andere Zeichen? Ganz einfach, wir codieren einfach zwei Programme, die gegeneinander vertauscht und verschachtelt sind, und heften dann eine dritte Kopie für die Basisausführung auf und steuern, welche mit einem einzelnen Zeichen ausgeführt wird. In Programm 2 ist die dritte Kopie Müll, der nie gesehen wurde, und in Programm 3 werden die Anführungszeichen beibehalten, sodass sie ohne Drucken angezeigt werden können.
Programm 1 führt nur diesen Teil aus:
Programm 2 führt nur diesen Teil aus:
So was:
Probieren Sie es online!
Programm 3 führt nur diesen Teil aus:
So was:
Probieren Sie es online!
Das
"drW,le"
Teil wird ausgeführt, wird jedoch~
sofort vom Stapel entfernt, wobei die gewünschte Ausgabe beibehalten wird.Naiv scheint eine Konvertierung der Antwort> <> zu einem kürzeren Programm mit einem Gewicht von 45 Bytes zu führen:
Runic hat jedoch eine Einschränkung, die> <> nicht hat: eine maximale Stapelgröße von 10 + IPs Mana (die anfänglich 10 ist). Und
!!ddllrrooWW oolllleeHH
enthält 24 Zeichen, was dazu führt, dass die IP-Adresse bis zum Ablauf des Zeitraums, bevor derR
Befehl ausgeführt wird, aus dem Mana ausblutet , was zu keiner Ausgabe für das Basisprogramm führt.Probieren Sie es online!
quelle