Bonjour le monde! (Tous les autres personnages)

129

Ecrivez un programme qui affiche "Hello, World!". Mais aussi, si vous ne prenez que les premier, troisième, cinquième, etc. caractères de votre programme, le programme résultant devrait quand même afficher "Hello, World!".

Si votre programme est:

abc
def

Il devrait produire "Hello, World!", Mais il devrait en être de même

acdf

Aucune solution avec moins de 2 caractères.

Leo Tenenbaum
la source
2
Peut-il y avoir des espaces autour de la sortie?
vroomfondel
18
Incroyable premier post!
Adám
11
Voir toutes les réponses avec "Heelllloo" m'a rappelé de parler Whale.
Brian Minton
32
Astuce pour éviter "Hello, World!" des défis intégrés comme celui-ci: utilisez une chaîne légèrement différente de complexité similaire à celle-ci: "Salutations, terribles!"
Martin Ender
6
"Aucune solution avec moins de 2 caractères." Incroyable.
Robert Grant

Réponses:

195

Python 3 , 61 octets

rant="partisn't"
print(("HHeelllloo,,  WWoorrlldd!!"""[::2]))

Essayez-le en ligne!

Abuser du fait qu’il s’agisse d’ printune fonction de Python 3 :)

La solution la moins partisane que vous trouverez ici sur PPCG.

Devient

rn=print
rn("Hello, World!"[:])
vroomfondel
la source
48
C'est beau.
musicman523
1
@ musicman523 Mais, REPL n'entoure pas le texte de guillemets simples dans ce cas.
officialaimm
1
@officialaimm Oui, je suppose que c'est le cas
musicman523
1
@ yamboy1 Essayez de supprimer toutes les lettres
vroomfondel
1
Je ne savais pas [:]réellement travaillé: o Nice!
HyperNeutrino
56

Cardinal , 29 octets

%
"
H
e
l
l
o
,
 
W
o
r
l
d
!

Essayez-le en ligne!

Supprimer tous les autres caractères supprime tous les sauts de ligne, ce qui entraîne toujours Hello, World!:

%"Hello, World!

Essayez-le en ligne!

Cela fonctionne parce qu'il %crée quatre indicateurs d'instruction, se déplaçant dans chacune des quatre directions cardinales. Les IP qui laissent le code source sont simplement supprimées. Ainsi, dans le premier cas, seule la propriété intellectuelle allant du sud reste et dans le second cas, seule la propriété intellectuelle allant vers l'est, tous les autres sont simplement abandonnés. Dans les deux cas, le programme exécuté est alors juste "Hello, World!. Les "bascule en mode chaîne où chaque cellule est simplement imprimée sur STDOUT. Nous n'avons pas besoin de terminer la chaîne, car laisser le code source met toujours fin au programme.

Notez que la même idée fonctionne dans Beeswax , en utilisant *au lieu de %et `au lieu de "(c’est parce que la cire d’abeille a été largement inspirée par Cardinal mais utilise une grille hexagonale).

Essayez-le en ligne! (vertical) | | Essayez-le en ligne! (horizontal)

Martin Ender
la source
49

C, 125 octets

xpxuxtxs( ) { }xuxs ( ) { } main( ) {puts ( "Hello, World!" ) ; } mxaxixn ( ) {xpxuxtxs ( " H e l l o ,   W o r l d ! " ) ; }

Essayez-le en ligne!

Même avec les caractères supprimés:

xxxx(){}us(){}mi(){us("el,Wrd");}main(){puts("Hello, World!");}

Essayez-le en ligne!

Steadybox
la source
31

En fait , 2 octets

HH

Explication:

H, comme on pouvait s'y attendre, pousse Hello, World!à la pile.

Le programme principal ( HH) rencontrera le premier Het poussera Hello, World!dans la pile. Sur le second H, cependant, il essaiera d'utiliser deux arguments (car la pile doit être vide pour pousser Hello, World!) et échouera. Cependant, cette erreur sera ignorée et Hello, World!sera ensuite implicitement imprimée.

Le second programme ( H) poussera Hello, World!une fois, et sera implicitement imprimé.

Ceci est similaire à la réponse à 2 octets de Fatalize, mais cela ne "triche" pas vraiment.

Essayez-le en ligne!

Okx
la source
4
Belle solution, mais je pense que cela ne devrait pas compter car c'est trop comme une solution à un caractère.
Leo Tenenbaum
32
@LeoTenenbaum Pourquoi pas? Il se conforme parfaitement aux règles.
Okx
2
Ce que vous expliquez n'est pas le cas, Hne pousserait que Hello, World!sur une pile vide, et si la pile n'est pas vide, elle attendrait 2 arguments, donc il y aura une erreur et les erreurs sont ignorées. Et non, en fait, n'imprime pas implicitement uniquement l'élément le plus haut.
Erik the Outgolfer
@EriktheOutgolfer Oops. Réparera.
Okx
C'est pourquoi, en fait, c'est ma langue de golf préférée. C'est au niveau parfait de stupide.
RShields
22

Lua , 89 octets

--- [ [
print("Hello, World!")
--[[ ] ]
pCrAiLnCtU(L"AHTeOlRlFoE,L IWNoEr:lDd !:"D)
---]]

Essayez-le en ligne! Comme le montre la coloration syntaxique, il s'agit d'un abus de commentaire massif.

Alterner:

--[[pit"el,Wrd"
-[]]print("Hello, World!")--]

Essayez-le en ligne!

Et pour plus de commodité, un programme permettant de convertir un programme en toute autre forme de caractère: essayez-le en ligne!

CalculatriceFeline
la source
J'aime celui la! Le format de commentaire de Lua semble similaire à T-SQL, je vais essayer de travailler sur celui-ci pour cette langue.
BradC
3
Ce genre d’astuce devrait fonctionner dans toutes les langues avec à la fois des commentaires de bloc et des commentaires de ligne (C, JS, etc.)
CalculatorFeline
2
CALCULATORFELINE: D: D
Riking
2
HHeelllloo WWoorrlldd!!est un peu ennuyeux: P
CalculatorFeline
19

Retina , 39 octets


HHeelllloo,,  WWoorrlldd!!


(.).x?
$1

Essayez-le en ligne!

Prendre tous les autres personnages donne:


Hello, World!
()x
1

Essayez-le en ligne!

Le premier programme crée une chaîne avec le message d'accueil dupliqué. Ensuite, chaque paire de caractères est remplacée par le premier. Il y a aussi une scène vide qui remplace toutes les chaînes vides par des chaînes vides entre les deux, mais cela ne fait rien. Le second programme ne correspond pas à la lettre "x", il ne remplace donc rien après la création du message d'accueil.

Plus amusant peut-être, si la troisième étape est légèrement modifiée, le premier groupe de caractères ne doit pas nécessairement être identique. Cela pourrait conduire à de nombreuses solutions de longueur identique telles que complète et divisée par deux .

FryAmTheEggman
la source
17

Charbon de bois , 25 octets

H→e→l→l→o→,→ →W→o→r→l→d→!

Essayez-le en ligne!

Si vous supprimez les caractères pairs, vous supprimez simplement les commandes de flèche qui indiquent la direction du texte suivant, ce qui laisse le code suivant:

Hello, World!

Essayez-le en ligne!

Cela imprime aussi la salutation.

Charlie
la source
17

Haskell , 85 octets

{--}main=putStr"Hello, World!"--} m a i n = p u t S t r " H e l l o ,   W o r l d ! "

Essayez-le en ligne!

Chaque deuxième caractère supprimé:

{-mi=uSrHlo ol!-}main=putStr"Hello, World!"

Essayez-le en ligne!

Cela exploite les deux formats de commentaire dans Haskell: {- -}pour les commentaires en ligne ou multi-lignes et --pour commenter le reste de la ligne.

Laikoni
la source
16

Javascript, 67 octets

/**/alert`Hello, World`// * / a l e r t ` H e l l o ,   W o r l d `

Chaque seconde lettre enlevée:

/*aetHlo ol`/*/alert`Hello, World`

Tout comme la réponse de Haskell dans Laikoni, cela exploite les commentaires.

SuperStormer
la source
Bonne réponse, +1! Vous avez enregistré 2 octets en créant un port de votre réponse dans ma réponse Java 8 et un octet supplémentaire lorsque j'ai changé // * /en //**/(ce qui n’est malheureusement pas possible dans votre cas en raison du /**/alert`Hello, World` nombre impair d’octets, au lieu de comme dans mon cas .
Kevin Cruijssen
14

Brachylog , 4 octets

Ḥ~wḤ

Essayez-le en ligne!

Explication

~wécrit sa variable de droite dans STDOUT, et ignore son argument de gauche. est "Hello, World!", donc cela imprime Hello, World!.

Si nous prenons uniquement les premier et troisième caractères, nous obtenons Ḥw. Dans ce cas, wécrit sa variable de gauche et ignore sa variable de droite, ainsi il imprime également Hello, World!.

2 octets

ḤḤ

Essayez-le en ligne!

Ceci est techniquement une réponse valable, mais cela unifie la variable de sortie du programme au lieu de l’imprimer STDOUT, donc je suppose que le programme de 4 octets est plus dans l’esprit du défi.

Fataliser
la source
Je ne pense pas que le 2 octets réponse est « techniquement » valable, comme l'indique le défi d' impression .
Okx
1
@Okx imprimer, comme sur un morceau de papier?
theonlygusti
@theonlygusti Cela signifie imprimer sur STDOUT.
Okx
5
@theonlygusti Sigh ... c'est ce que l'on entend par impression par défaut.
Okx
3
@Okx vous essayez d'être pédant pour invalider une solution, mais en réalité, rien ne l'invalide. Le défi ne dit que "sortie".
theonlygusti
11

Haskell, 102 octets

Le programme complet:

main= putStr"Hello, World!";;
putSt   x ="p u t S t r  \" H e l l o ,   W o r l d !\"";
mmaaiin = main

et avec tous les autres personnages supprimés:

mi=ptt"el,Wrd";ptt x=putStr "Hello, World!";main=mi
Siracusa
la source
Vous pouvez supprimer 2 octets en supprimant les espaces entre p u t S t ret \".
Sriotchilism O'Zaic
11

code machine x86, 162 octets

démo

PROG.COM Téléchargez et exécutez-le dans un émulateur MS-DOS , DOSBox par exemple.

90 B3 B4 B4 02 90 90 B3 B2 B2 48 90 90 B3 CD CD 21 90 90 B3 B2 B2 65 90 
90 B3 CD CD 21 90 90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 2C 90 90 B3 CD CD 21 90 
90 B3 B2 B2 20 90 90 B3 CD CD 21 90 90 B3 B2 B2 77 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 72 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 B2 B2 64 90 90 B3 CD CD 21 90 
90 B3 B2 B2 21 90 90 B3 CD CD 21 90 90 B3 CD CD 20 90

après enlèvement MINI.COM Télécharger

90 B4 02 90 B2 48 90 CD 21 90 B2 65 90 CD 21 90 B2 6C 90 CD 21 90 CD 21 
90 B2 6F 90 CD 21 90 B2 2C 90 CD 21 90 B2 20 90 CD 21 90 B2 77 90 CD 21 
90 B2 6F 90 CD 21 90 B2 72 90 CD 21 90 B2 6C 90 CD 21 90 B2 64 90 CD 21 
90 B2 21 90 CD 21 90 CD 20

Comment courir?

Installer DOSBox pour Ubuntu / Debian

sudo apt install dosbox

Exécuter

dosbox

Dans DOSBOX

mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM

Comment ça fonctionne?

Les codes d'opération de la machine représentent les instructions en langage d' assemblage .

Dans MS-DOS, pour imprimer le caractère, vous allez définir des registres et effectuer des interruptions. Le registre AH sera 0x02, le registre DL contient votre caractère. Le vecteur d'interruption est 0x21.

mov ah,0x2  ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21    ;0x21 interrupt     (CD 21)

Le petit modèle de fichier COM MS-DOS est un bon choix, car il n'a pas d'en-tête . Il est limité à 64K, mais dans notre cas, cela n’a pas d’importance.

Pour arrêter le programme, utilisez 0x20 interruption

int 0x20    ;0x20 interrupt     (CD 20)

la magie

Si vous voulez exécuter la commande 0xAB opcode avec un paramètre 0xCD , vous écrivez

AB CD

Dans PROG.COM

90 B3 AB AB CD 90
nop         ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop         ; No operation (90)

Dans MINI.COM

90 AB CD
nop         ; No operation (90)
AB CD command (AB CD)

Ce sont des codes machine égaux , si vous n'utilisez pas le registre BL .

Générateur

Convertir un fichier texte avec hex en hex binaire

cat hex_file | xxd -r -p > exec.com

Вгений Новиков
la source
Supprimez tous les `90 90` pour -52 octets.
NieDzejkob
De plus, le nop à la toute fin ne sera jamais atteint.
NieDzejkob
10

Pyth , 31 octets

p% 2"HHeelllloo,,  WWoorrlldd!!

Essayez-le en ligne!

Devient

p "Hello, World!

Merci à @CalculatorFeline pour avoir signalé une erreur et supprimé un octet.

vroomfondel
la source
Les personnages conservés commencent au premier, pas au second. Vous pouvez laisser l’espace en tête.
CalculatriceFeline
Ah, merci @ CalculatriceFeline. Je lis "prendre" comme "supprimer" dans les spécifications.
vroomfondel
8

V , 32 octets

i;H;e;l;l;o;,; ;w;o;r;l;d;!;<esc>;Ó;

Notez qu'il <esc>s'agit d'un seul caractère, par exemple0x1b

Essayez-le en ligne!

Supprimer tous les autres caractères donne:

iHello, world!<esc>Ó

Essayez-le en ligne!

DJMcMayhem
la source
7

05AB1E , 29 octets

”™ ,ï‚‚ï ! ”# ¦2 ä ø¨øJð ý

Essayez-le en ligne!

Explication

”™ ,ï‚‚ï ! ”                # push the string "Weekly Hello , Changed World ! "
               #               # split on spaces
                               # RESULT: ['Weekly','Hello',',','Changed','World','!','']
                ¦              # remove the first element (Weekly)
                 2ä            # split in 2 parts
                               # RESULT: [['Hello', ',', 'Changed'], ['World', '!', '']]
                   ø           # zip
                               # RESULT: [['Hello', 'World'], [',', '!'], ['Changed', '']]
                    ¨          # remove the last element
                     ø         # zip
                               # RESULT: [['Hello', ','], ['World', '!']]
                      J        # join each inner list
                       ðý      # join on space

Après avoir supprimé tous les autres caractères, il nous reste le code

”Ÿ™,‚ï!” 2äøøðý

Essayez-le en ligne!

Explication

”Ÿ™,‚ï!”       # push the string "Hello, World!"
        2ä     # split in 2 parts
               # RESULT: ['Hello, ', 'World!']
          ø    # zip, as the string has an odd length the space is lost
               # RESULT: ['HW', 'eo', 'lr', 'll', 'od', ',!']
           ø   # zip again
               # RESULT: ['Hello,', 'World!']
            ðý # join on space
Emigna
la source
7

Mathematica, 62 octets

P0r0i0n0t0@0"0H0e0l0l0o0,0 0W0o0r0l0d0!0"Print@"Hello, World!"

Il revient "0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0]et s'imprime Hello, World!comme un effet secondaire. Lorsqu'il est exécuté en tant que programme (pas dans le REPL), la valeur de retour ne sera pas imprimée.

Après avoir supprimé tous les autres caractères:

Print@"Hello, World!"rn@Hlo ol!

Il revient Null ol! rn[Hlo]et imprime Hello, World!.

Alephalpha
la source
7

Gelée , 26 à 25 octets

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »

Essayez-le en ligne!

Après avoir supprimé tous les deux caractères, il nous reste le code suivant.

“3a;»“3ḅaė;œ»

Essayez-le en ligne!

Comment ça fonctionne

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »  Main link.

““3ḅaė;œ»                  Index into Jelly's dictionary to yield
                           ["", "Hello, World!"]. 
          “ 3 ḅ a ė ; œ »  Index into Jelly's dictionary to yield.
                          " FullERebitingBEfluffiest adoptable".
         ḷ                 Take the left result.
“3a;»“3ḅaė;œ»  Main link.

“3a;»          Index into Jelly's dicrionary to yield " N-".
               Set the argument and the return value to the result.
     “3ḅaė;œ»  Index into Jelly's dicrionary to yield "Hello, World!".
               Set the return value to the result.
Dennis
la source
7

Cubiquement v2.1 , 222 octets

+0503 @@6 :22 //1 +050501 @@6 :55 +0502 @@6@6 :33 //1 +050502 @@6 :55 +03 //1 +04 @@6 :55 //1 +03 @@6 :55 +01 //1 +0504 @@6 :33 //1 +050502 @@6 :55 +01 //1 +050502 @@6 :55 +0502 @@6 :11 //1 +050501 @@6 :55 +01 //1 +03 @@6

Essayez-le en ligne!

Toutes les autres lettres:

+53@6:2/1+551@6:5+52@66:3/1+552@6:5+3/1+4@6:5/1+3@6:5+1/1+54@6:3/1+552@6:5+1/1+552@6:5+52@6:1/1+551@6:5+1/1+3@6

Essayez-le en ligne!

TehPers
la source
6

Aidez-moi, WarDoq! , 2 octets

Hi

Essayez-le en ligne!

Hestampes Hello, World!, iest un non-op.

Aidez-moi, WarDoq! peut ajouter deux nombres et tester les nombres premiers, il est donc considéré comme un langage de programmation valide par cette méta publication .

Uriel
la source
pourquoi cela a-t-il été voté?
Uriel
NOP et les espaces massifs sont contre l'esprit.
RShields
1
+1 à cause de la nouveauté sur la façon dont le code source résultant insiste à nouveau sur le message qui est généré.
TOOGAM
6

PHP, 53 octets

#
echo date(
$e_c_h_o='\H\e\l\l\o\,\ \W\o\r\l\d\!
');

Avec tous les autres personnages supprimés:

#eh ae
echo'Hello, World!';
utilisateur63956
la source
6

Octave, 49 à 45 octets

4 octets enregistrés, Octave n’ayant pas besoin de crochets pour effectuer l’indexation.

'HHeelllloo,,  WWoorrlldd!! ' (1:2 : 3 ^ 3)''

Essayez-le en ligne!

Et le réduit:

'Hello, World!'(:    )'

Essayez-le en ligne!

Explication:

Le code initial a les lettres de la chaîne dupliquées, ce qui nous laisse le temps de Hello, World!supprimer chaque seconde. Des espaces sont ajoutés pour assurer le maintien des crochets et des apostrophes.

L'indexation est vraiment 1:2:end. Il y a 27 caractères, et nous ne pouvons pas utiliser endou 27puisque nous devons supprimer un caractère, nous allons donc avec 3 ^ 3. Lorsque nous supprimons tous les trois caractères, l'indexation devient (:)(et quelques espaces supplémentaires).

(:)signifie "aplatir et se transformer en un vecteur vertical" . Nous devons donc le transposer, en utilisant '. Nous n'avons pas besoin de transposer la chaîne dans le code d'origine, mais la transposition double fonctionne, donc la première chaîne est transposée deux fois à l'aide de ''et la seconde n'est transposée qu'une seule fois.

Stewie Griffin
la source
6

APL (Dyalog) , 35 à 34 octets

-1 merci à Martin Ender.

'0H0e0l0l0o0,0 0W0o0r0l0d0!0'~  0

Essayez-le en ligne!

'0H0e0l0l0o0,0 0W0o0r0l0d0!0' le message avec des zéros comme caractères de remplissage amovibles

~ sauf

 formaté (stringifié)

0 numéro zéro

Ne laissant que les personnages étranges, cela devient 'Hello, World!' .

Adam
la source
5

T-SQL, 75 octets

---
PRINT 'Hello, World!'
/*
-P-R-I-N-T-'-H-e-l-l-o-,- -W-o-r-l-d-!-'
---*/

Utilisation abusive de commentaires sur une ou plusieurs lignes, inspirée de la version LUA de CalculatorFeline .

Après suppression de tous les caractères pairs, dont certains sont des sauts de ligne:

--PIT'el,Wrd'/
PRINT'Hello, World!'--/
BradC
la source
5

Javascript, 73 octets

a ='a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/';eval(a.replace(/0/g,''))

Construit une chaîne aavec le contenu a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/, puis supprime tout 0à donner alert`Hello, World!`//, qui est eval'd.

Prendre tous les autres personnages du programme donne

a=alert`Hello, World!`//;vlarpae//,')

qui Hello, Worldutilise la syntaxe de chaîne de modèle de la même manière que ce qui a été évalué dans le programme complet, puis stocke le résultat de l'appel aet inclut le commentaire perspicace //;vlarpae//,').

jrich
la source
5

> <> , 47 octets

Original:

| v~" H e l l o ,   W o r l d ! "

~o<< ;!!!? l

A chaque deuxième caractère supprimé:

|v"Hello, World!"
o<;!?l

Essayez-les en ligne: original , modifié

Le programme original pousse les caractères de "Hello, World!" dans la pile (en ordre inverse) parsemé d'espaces, puis imprime alternativement un caractère et en supprime un jusqu'à ce que la longueur de la pile soit égale à zéro. Le deuxième programme fait de même, sauf que les instructions de suppression ~ont disparu.

Si cela ne vous dérange pas de vous arrêter avec une erreur, nous pouvons prendre une feuille du livre Cardinal de Martin Ender : le code modifié est

\"!dlroW ,olleH"!#o#

et l'original est le même mais avec des nouvelles lignes insérées entre tous les caractères, pour 39 octets. Essayez-les en ligne: original , modifié .

Pas un arbre
la source
5

,,, 34 octets

 2"Hteoltlaol,l yWhourmladn!! "⟛

En supprimant les caractères pairs numérotés ...

 "Hello, World!"

Explication

Avec tous les personnages:

 2"..."⟛

               no-op
 2             push 2 to the stack
  "..."        push "Hteoltlaol,l yWhourmladn!! " to the stack
       ⟛      pop 2 and the string and push every 2nd character of the string
               implicit output

Sans les caractères pairs:

 "..."

               no-op
 "..."         push "Hello, World!" to the stack
               implicit output
totalement humain
la source
5
Cela implique que vous n'avez pas besoin de dire que ceci n'est pas en compétition.
FryAmTheEggman
2
Mais vous êtes censé garder tous les caractères pairs-indexés ... (
Hyper
Oups, corrigé. Il suffit d'ajouter un autre personnage lol.
totalement humain
4

Brainfuck, 155 octets

- - < - < < + [ + [ < + > - - - > - > - > - < < < ] > ] < < - - . < + + + + + + . < < - . . < < . < + . > > . > > . < < < . + + + . > > . > > - . < < < + .

Essayez-le en ligne!

Chaque deuxième caractère supprimé:

--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.
Uriel
la source