Hallo Welt! ohne Wiederholung

27

Schreiben Sie in jeder Programmiersprache, die vor der Beantwortung dieser Frage existiert hat, ein Programm (keine Funktion), das die Zeichen Hello world!gefolgt von einer neuen Zeile ausgibt. Ihr Programm:

  • sollte kein Zeichen mehr als einmal verwenden (einschließlich Leerzeichen)
  • sollte nur ASCII-Zeichen verwenden
  • sollte keine eingebauten Bibliotheken verwenden
  • sollte keine Eingabe erhalten (Benutzer, Datei, Dateiname, Systemvariable, Internet, irgendetwas)
  • sollte nichts anderes ausgeben

Gewinner ist, wer nach 14 Tagen die meisten Stimmen hat und sich an die sechs Regeln hält.

Die sechste Regel lautet, dass Sie H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hallo, Hallo +, Hallo ++, Hexisch, CHIQRSX9 + oder Fuge nicht verwenden können. Außerdem müssen alle Antworten, für die Implementierungen erforderlich sind, die neuer sind als diese Herausforderung, als nicht konkurrierend gekennzeichnet werden.


Haftungsausschluss: Diese Frage wurde mit der Annahme gestellt, dass Hallo Welt! mit begrenzten Wiederholungen verursachte keine Schäden an Ihrem Computer oder Ihrem Gehirn, während die Antworten ausgearbeitet wurden.

Timtech
quelle
Wenn Zeichencodes ausgeblendet werden, kann das Zeichen "\" mehrmals verwendet werden?
WallyWest
4
Was ist mit Piet?
Victor Stafusa
@ Victor "sollte nur ASCII-Zeichen verwenden"
Timtech
3
Das war ein tolles Puzzle und ich habe es genossen :-).
Konrad Borowski
9
"Sollte nur ASCII-Zeichen verwenden" - was für eine drakonische Einschränkung. Dadurch wird eine ganze Klasse von Sprachen entfernt, die ASCII nicht verwenden.
Timwi

Antworten:

33

Perl 6 (29 28 Zeichen)

Das war etwas nervig, aber ich habe es endlich geschafft, ein Programm für diese Aufgabe zu erstellen. Vielen Dank an die großartige # perl6-Community , die mir bei dieser Aufgabe geholfen hat. Ich habe zwei Stunden gebraucht, hoffe es gefällt dir. Die Ausgabe entspricht vollständig der Spezifikation, einschließlich eines Zeilenumbruchs.

say
Q[@A`DO world!]~|<HeLhg>

Es gibt vier interessante Marken.

  • say

    Dies gibt das Argument mit der neuen Zeile am Ende aus. Die neue Zeile nach dem Befehl selbst wird als Leerzeichenersatz benötigt.

  • Q[@A`DO world!]

    Dies ist die erste Zeichenfolge. Q[]ist für rohe Strings (wie r""in Python). In diesem Fall kann ein beliebiges Trennzeichen (oder ein Paar davon) verwendet werden []. In diesem Fall verwende ich dies für Anführungszeichen. Ich benötige kein unformatiertes Zeichenfolgenverhalten.

  • ~|

    Dies ist ein stringweiser ( ~) bitweiser oder ( |) Operator.

  • <HeLhg>

    <>ist ein Listenliteral, das eine durch Leerzeichen getrennte Liste von Elementen verwendet. In diesem Fall hat es ein Element und als Skalar gibt es eine Zeichenfolge.

Konrad Borowski
quelle
3
Tolle! Ich muss weiter lernen. Einige Perl 6-Syntax! Ich stimme auch Ihrem Kommentar zu, es war definitiv ein lustiges Problem!
Dom Hastings
4
Woah ... mein Verstand ist überwältigt: O +1
Türklinke
12

Perl 5 mit -M5.01029 Bytes

say+He.v108
x2,q(O world!)^$"

Probieren Sie es online!

Ich habe viel Wissen gesammelt, seit ich das erste Mal versucht habe. Immer noch nicht so kurz wie die anderen Antworten, aber das Beste, was ich finden kann!

Dom Hastings
quelle
Herausforderung hat Kleinbuchstaben w.
Ørjan Johansen
@ ØrjanJohansen Danke, ich habe vergessen!
Dom Hastings
11

Perl 5.10+: 24 Zeichen

say+He,YZX^q(567 world!)

OK, ich denke das ist so kurz wie es in Perl geht.

Führen Sie mit perl -M5.010(oder nur perl -E) aus, um die Perl 5.10+ say-Funktion zu aktivieren .

Ilmari Karonen
quelle
Ernsthaft beeindruckt! Ich habe ewig versucht, mich in ll...
Dom Hastings
9

Golfscript 42 33

Ich könnte genauso gut Golf spielen, wenn ich bedenke, dass ich einen Teil des Codes und alle Daten im selben Block unterbringen musste, ohne die beiden voneinander abzugrenzen. Ich denke, das ist ein ziemlich kurzes Ergebnis. Im Gegensatz zu meiner ersten Eingabe ist der Blockcode jetzt ein vollständig integrierter Teil der Daten. {1Beginnen Sie also nicht nur mit dem Block und legen Sie einen 1auf den Stapel, sondern definieren auch die Daten Husw. Die Array-Erstellung enthält jetzt die leere Eingabezeichenfolge, was bedeutet, dass ich den Anfang nicht zuschneiden muss, da nur ein Zeichen zwischen der leeren Zeichenfolge und dem Hsteht. Dieses Zeichen wird abgeschnitten, wenn ich jedes zweite Zeichen nehme, und das leere Zeichenfolge wird schließlich als nichts ausgegeben.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Online-Demo: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Definiert einen Codeblock. Erstellt eine Kopie des Codeblocks und konvertiert ihn in einen String. Verwendet den Codeblock, um die Zeichenfolge zu durchlaufen. Bei jeder Iteration erstellt der Code eine Kopie des vorherigen Zeichenwerts, xor es mit dem aktuellen Zeichenwert und subtrahiert 1. In der resultierenden Zeichenfolge werden dann die ersten 6 Zeichen entfernt und jedes zweite Zeichen entfernt. Zum Schluss wird ein Zeilenvorschub angehängt.

"r iFNGDJUHv98oIMgtplbh4m" ist nur zwei nicht deklarierte Variablen, sie tun nichts, aber sie sind sorgfältig konstruiert, um das gewünschte Ergebnis zu erzielen.

Online-Demo: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r

aaaaaaaaaaa
quelle
6

Vim 7.3, 18 Tastenanschläge

:h-cu
9j3wy$<C-^>P<End>r!o

Kopiert die Zeichenfolge Hello worldaus dieser Hilfedatei , die in Never- Versionen von Vim leider entfernt wurde.

BlackCap
quelle
Demnach<Esc> zählen Tastenanschläge wie und Kombinationen mit der Strg-Taste als ein Byte
Oktupol
6

Befunge-98 , 34 31 Bytes

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Probieren Sie es online!

Verwendet einige verschiedene Methoden, um doppelte Zeichen zu vermeiden.

Erstens verwenden wir ein Wrapping-String-Literal, um die Verwendung von zwei "s zu vermeiden . Dies fügt "Welt!" auf den Stapel.

Wenn wir in der zweiten Zeile nach links gehen, addieren wir 9 zu dem Extra f, um odas "Hallo" zu machen. Wir geten das Zeichen aus Zelle 5,0 ( l) und duplizieren es dann. Mit dem 'wird der Brief abgerufen e. Multiplizieren Sie 9 mit 8, um 72, den ASCII-Wert von, zu erhalten H. Wir drucken dann alles mit ck,, und drehen die Richtung mit >, um ,die neue Zeile ( a) erneut zu drucken .

Scherzen
quelle
Sehr gut, aber diese Herausforderung ist ohne Komma.
Ørjan Johansen
Oh lol, das macht es einfacher ... Danke @ ØrjanJohansen
Jo King
Du hast zwei von +und d.
Ørjan Johansen
@ ØrjanJohansen Ups. sollte jetzt behoben sein
Jo King
3

Elixier , 37 Bytes

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Probieren Sie es online!

Ich kann nicht garantieren, dass dies 2014 geklappt hätte, als diese Herausforderung veröffentlicht wurde, und Elixir noch vor Version 1.0 war (und somit, ob es formal "konkurriert", aber wenn ich mir die Versionshinweise anschaue, denke ich, sollte es so sein OKAY). Wie auch immer, ich bin froh, dass ich endlich eine gültige Lösung für diese Aufgabe gefunden habe, die eine andere konventionelle Allzwecksprache als Perl verwendet!

Komplettlösung

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!
Kirill L.
quelle
0

Stax (nicht konkurrierend), 8 Bytes

`dx/&\p4

Probieren Sie es online!

Nur ein komprimiertes String-Literal. Zum Glück lässt Stax mich ohne das schließende Backtick los.

Weijun Zhou
quelle