Bonjour le monde! sans répétition

27

Dans n'importe quel langage de programmation qui existait avant que cette question ne soit posée, écrivez un programme (pas une fonction) qui produit les caractères Hello world!suivis d'une nouvelle ligne. Votre programme:

  • ne doit utiliser aucun caractère plus d'une fois (y compris les espaces)
  • ne doit utiliser que des caractères ASCII
  • ne doit pas utiliser de bibliothèques intégrées
  • ne doit pas recevoir d'entrée (utilisateur, fichier, nom de fichier, variable système, Internet, quoi que ce soit)
  • ne devrait rien produire d'autre

Le gagnant est celui qui a le plus de votes après 14 jours et respecte les six règles.

La sixième règle est que vous ne pouvez pas utiliser H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + ou Fugue. En outre, toutes les réponses qui nécessitent des implémentations plus récentes que ce défi doivent être marquées comme non concurrentes.


Avertissement: Cette question a été publiée avec l'hypothèse que Bonjour tout le monde! avec une répétition limitée n'a causé aucun dommage à votre ordinateur ou à votre cerveau lors de l'élaboration des réponses.

Timtech
la source
si nous échappons aux codes de caractères, le caractère "\" peut-il être utilisé plusieurs fois?
WallyWest
4
Et piet?
Victor Stafusa
@Victor "ne devrait utiliser que des caractères ASCII"
Timtech
3
C'était un grand casse-tête, et j'ai aimé le faire :-).
Konrad Borowski
9
"Ne devrait utiliser que des caractères ASCII" - quelle restriction draconienne. Cela supprime une classe entière de langages qui n'utilisent pas ASCII.
Timwi

Réponses:

33

Perl 6 (29 28 caractères)

C'était un peu ennuyeux, mais j'ai finalement réussi à créer un programme pour cette tâche. Merci à la grande communauté # perl6 de m'avoir aidé dans cette tâche. Cela m'a pris deux heures, j'espère que vous apprécierez. La sortie est entièrement conforme aux spécifications, y compris une nouvelle ligne.

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

Il y a quatre jetons d'intérêt.

  • say

    Cela génère l'argument avec une nouvelle ligne à la fin. La nouvelle ligne après la commande elle-même est nécessaire comme remplacement d'espace.

  • Q[@A`DO world!]

    Ceci est la première chaîne. Q[]est pour les chaînes brutes (comme r""en Python). Il peut prendre n'importe quel délimiteur (ou une paire d'entre eux), dans ce cas []. Dans ce cas, je l'utilise pour les guillemets, je n'ai pas besoin d'un comportement de chaîne brute.

  • ~|

    Il s'agit de l'opérateur stringwise ( ~) bitwise ou ( |).

  • <HeLhg>

    <>est un littéral de liste, qui prend une liste d'éléments séparés par des espaces. Dans ce cas, il a un élément, et utilisé comme scalaire, il donne une chaîne.

Konrad Borowski
la source
3
Incroyable! J'ai besoin de continuer à apprendre. Un peu de syntaxe Perl 6! Je suis également d'accord avec votre commentaire, c'était vraiment un problème amusant!
Dom Hastings
4
Woah ... mon esprit est soufflé: O +1
Poignée de porte
12

Perl 5 avec -M5.010, 29 octets

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

Essayez-le en ligne!

J'ai acquis beaucoup de connaissances depuis ma première tentative. Toujours pas aussi court que les autres réponses, mais le meilleur que je puisse trouver!

Dom Hastings
la source
Le défi a des minuscules w.
Ørjan Johansen
@ ØrjanJohansen Merci, j'ai oublié!
Dom Hastings
11

Perl 5.10+: 24 caractères

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

OK, je pense que c'est aussi court qu'en Perl.

Exécutez avec perl -M5.010(ou tout simplement perl -E) pour activer la fonction Perl 5.10+ say.

Ilmari Karonen
la source
Sérieusement impressionné! J'ai passé des heures à essayer de contourner la llmer ...
Dom Hastings
9

Golfscript 42 33

Je pourrais aussi bien jouer au golf, étant donné que je devais mettre une partie du code et toutes les données dans le même bloc sans aucun moyen de délimiter les deux, je pense que c'est un résultat assez court. Contrairement à ma première soumission, le code de bloc fait maintenant partie intégrante des données, donc {1non seulement commencez le bloc et mettez un 1sur la pile, mais ce sont aussi les données qui définissent le H, et ainsi de suite. La création du tableau inclut désormais la chaîne d'entrée vide, ce qui signifie que je n'ai pas à recadrer le début car il n'y a qu'un seul caractère entre la chaîne vide et le H, ce caractère est coupé lorsque je prends un caractère sur deux et le vide la chaîne est finalement sortie comme rien.

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

Démo en ligne: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

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

Définit un bloc de code. Fait une copie du bloc de code et le convertit en chaîne. Utilise le bloc de code pour parcourir la chaîne. Pour chaque itération, le code fera une copie de la valeur de caractère précédente, xor avec la valeur de caractère actuelle, et soustrayez 1. La chaîne résultante a alors les 6 premiers caractères supprimés et chaque deuxième caractère supprimé. Enfin, un saut de ligne est ajouté.

"r iFNGDJUHv98oIMgtplbh4m" n'est que deux variables non déclarées, elles ne font rien, mais elles sont soigneusement construites pour produire le résultat souhaité.

Démo en ligne: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r

aaaaaaaaaaaa
la source
6

Vim 7.3, 18 frappes

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

Copie la chaîne Hello worldde ce fichier d'aide , qui a malheureusement été supprimée dans les versions jamais de Vim.

BlackCap
la source
Selon cela , les frappes similaires <Esc>et les combinaisons impliquant la touche Ctrl comptent comme un octet
oktupol
6

Befunge-98 , 34 31 octets

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

Essayez-le en ligne!

Utilise plusieurs méthodes différentes pour éviter les caractères en double.

Tout d'abord, nous utilisons un littéral de chaîne enveloppant pour éviter d'utiliser deux "s. Cela ajoute "monde!" à la pile.

En partant à gauche sur la deuxième ligne, nous ajoutons 9 au supplément fpour faire odu "Bonjour". Nous get le caractère de la cellule 5,0 ( l), puis le dupliquons. Le 'est utilisé pour récupérer la lettre e. Multipliez 9 par 8 pour obtenir 72, la valeur ASCII de H. Nous imprimons ensuite tout à l'aide de ck,, et inversons la direction avec le >pour réutiliser le ,pour imprimer la nouvelle ligne ( a).

Jo King
la source
Très bien mais ce défi est sans virgule.
Ørjan Johansen
Oh lol, ça rend plus facile ... Merci @ ØrjanJohansen
Jo King
Vous en avez deux +et d.
Ørjan Johansen
@ ØrjanJohansen oups. devrait être corrigé maintenant
Jo King
3

Elixir , 37 octets

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

Essayez-le en ligne!

Je ne peux pas garantir que cela aurait fonctionné en 2014 lorsque ce défi a été publié, et Elixir était toujours pré-1.0 (et donc, s'il est formellement "concurrent", mais en regardant leurs notes de version, je pense que cela devrait être D'ACCORD). Quoi qu'il en soit, je suis heureux d'avoir enfin trouvé une solution valable à cette tâche en utilisant un langage à usage général conventionnel autre que Perl!

Procédure pas à pas

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.
la source
0

Stax (non concurrent), 8 octets

`dx/&\p4

Essayez-le en ligne!

Juste un littéral de chaîne compressé. Heureusement, Stax me laisse partir sans le backtick final.

Weijun Zhou
la source