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.


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.


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


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.


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


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.


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).


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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.