Écrivez un programme GUI Hello World qui se ferme après trois secondes

24

Veuillez lire les règles et les zones en gras également .

Écrivez un programme dans n'importe quelle langue, tant qu'il prend en charge l'interface graphique d'un système de fenêtres (ne peut pas être des consoles de texte, etc., et doit être une interface graphique / boîte à outils / fenêtre).

Le programme doit dire bonjour au monde de quelque manière que ce soit (image de démarrage, barre de menus, barre d'état, titre, vidéo, boîte de message, autres éléments de widget, etc.), tant qu'une fenêtre compatible avec l'interface graphique apparaît et affiche ce texte pendant trois secondes. . La personne qui peut coder cela dans le moins de code utilisé, compté en octets, prendra le gâteau.

Sut Dip
la source
1
Les commentaires ici se sont dégradés en un argument inutile. Veuillez vous abstenir de poursuivre la discussion dans les commentaires; si nécessaire, vous pouvez utiliser le chat à la place. Tous les commentaires ont été supprimés.
Poignée de porte
13
Peu importe d'où vient l'argument - tous les utilisateurs doivent éviter de participer à des conflits qui sont clairement bruyants ou ne vont nulle part.
Poignée de porte
1
Doit-il être "Hello world" ou peut-il être "Hello_world"?
slebetman
3
De plus, doit-il sortir gracieusement?
slebetman
vous ne spécifiez pas comment le programme doit être exécuté? par exemple, doit-il être démarré seul ou peut-il être quelque chose chargé dans un environnement déjà en cours d'exécution?
Jordon Biondo

Réponses:

28

Shell Unix, 31 caractères

xmessage -timeout 3 hello world

message "hello world" with button "okay"

Ce programme nécessite l' utilitaire xmessage (1) de X.Org. Il utilise les widgets traditionnels X Athena en noir et blanc (Xaw).

kernigh
la source
Grrr ... J'allais poster un en utilisant timeoutet zenitymais c'était plus long ...
BenjiWiebe
@BenjiWiebe Il y a une zenityréponse par n.1 à codegolf.stackexchange.com/a/28451/4065
kernigh
2
Vous pouvez enregistrer 1 octet: timeout 3 xmessage hello world
Glenn Randers-Pehrson
1
@ GlennRanders-Pehrson Je ne peux pas faire ça, car ma machine n'a pas de timeoutcommande. Peut-être que quelqu'un d'autre peut poster une nouvelle réponse qui l'utilise?
kernigh
23

Shell et gedit - 27 caractères

timeout 3 gedit Hello World

Si Hello World doit être affiché comme une seule chaîne, alors ses 28 caractères:

timeout 3 gedit Hello\ World

timeoutl'utilitaire exécute une commande pendant la durée spécifiée. Il garantit que gedit fonctionne pendant 3 secondes, en supposant un temps de démarrage minimal.

N'importe quel éditeur peut être utilisé à la place de gedit. Si un éditeur nommé plus court est utilisé comme gvim, la longueur peut être réduite de 1 ou plusieurs caractères.

Utilisation d'un éditeur initialement pensé par user80551 .

asheeshr
la source
Échapper à l'espace, utiliserHello\ World
user80551
1
@ user80551 La question nécessite que "Hello World" soit affiché de quelque manière que ce soit, donc cela ne devrait pas être nécessaire.
asheeshr
Techniquement, cela ferait celaHello <space> <close icon> <Document icon> World
user80551
Pouvez-vous confirmer si katecela fonctionnerait au lieu de gedit?
user80551
@ user80551 Ne pas installer KDE, mais d'après la page de manuel de Kate , il ne semble pas y avoir de raison pour que cela ne fonctionne pas.
asheeshr
19

Applescript, 45 octets:

Pas souvent Applescript est l'une des réponses les plus courtes:

display alert "hello world" giving up after 3

Collez dans l'éditeur Applescript et exécutez ou exécutez à l'aide osascriptde la ligne de commande:

osascript -e 'display alert "hello world" giving up after 3'

enter image description here

Traumatisme numérique
la source
17

HTML + Javascript, 73 60 caractères

<script>setTimeout("open('','_self','');close()",3e3)</script>Hello world

Cela fonctionne dans Chrome, mais peut ne pas être portable sur d'autres navigateurs.

Les suggestions des commentaires vont plus loin:

<body onload=open('',name=setTimeout(close,3e3))>Hello world
Greg Hewgill
la source
C'est beaucoup de golf que j'ai vu. J'ai vu ça passer des 108caractères à 73. Du coup, tout le code est visible.
Justin
@Quincunx: Vous avez alors raté les premières itérations. :)
Greg Hewgill
C'est parce que j'étais occupé à publier mon propre code. :-)
Justin
2
<body onload=open('','_self'),setTimeout(close,3e3)>Hello worldsemble enregistrer quelques caractères supplémentaires.
Ventero
1
Vous avez une suggestion de modification de la part de user3082537: enregistrez deux caractères par<body onload=open('',name=setTimeout(close,3e3))>Hello world
Justin
16

script shell, 31

Je ne sais pas s'il est admissible. Requiert notify-send. Fonctionne au moins sur Ubuntu 12.04.

notify-send -t 3000 Hello world

capture d'écran

user12205
la source
1
Probablement pas car ce n'est pas une fenêtre compatible avec l'interface graphique . Malheureusement, l'utilisation zenityest beaucoup plus longue.
user80551
Ses 34 caractères avec gedit - codegolf.stackexchange.com/a/28425/8766
user80551
4
Je crois qu'une fenêtre sans décoration de fenêtre est toujours une fenêtre. Ici, dans Enlightenment, la notification a également un bouton X pour la fermer (mais pas d'autres décorations de fenêtre).
kernigh
12

coque + gedit / geany, 34

gedit Hello\ World&sleep 3;kill $!

Hello World dans gedit

Cela suppose que gedit apparaît instantanément puisque les 3 secondes sont comptées à partir du début de l'émission de la commande. Peut être plus petit s'il existe un éditeur de texte GUI plus court que gedit.

geany fonctionne aussi pour le même nombre de caractères, juste s/gedit/geany/g

Bonjour tout le monde

EDIT: L'utilisation timeoutest plus courte. /codegolf//a/28477/8766

EDIT2: Quelqu'un peut-il confirmer si cela fonctionne avec kate?


fusion, 32

Si exactement Hello Worldn'est pas requis, alors meldpeut être utilisé.

meld Hello World&sleep 3;kill $!

Bonjour: Monde - Meld

user80551
la source
Belle idée, geditessaie d'ouvrir un fichier avec ce nom même s'il n'y a pas de fichier.
AL
Si vous l'utilisez, gvimil n'aura besoin que de 33 caractères
avall
1
@Daniel haltserait plus court mais je ne sais pas si être destructeur est autorisé. En outre, il nécessite des autorisations root, nous devons donc supposer que nous sommes root ou utiliser sudoce qui coûte plus cher (et nécessite que l'utilisateur tape le mot de passe).
user80551
1
Désolé, j'essayais d'être humoristique. Je supposais que l'utilisateur avait des autorisations root.
Daniel
1
@Daniel Pas besoin d'être désolé, ce site est basé sur la torsion la plus diabolique des règles pour raccourcir votre code.
user80551
7

VBScript, 58

WScript.CreateObject("WScript.Shell").Popup"Hello world",3

capture d'écran

user12205
la source
6

Python (pygame), 87

import pygame.display as d,time
d.set_mode()
d.set_caption('Hello world')
time.sleep(3)

capture d'écran

user12205
la source
Ne fonctionne pas sur OSX, n'affiche pas la fenêtre ...
Harry Beadle
@BritishColour ça devrait, c'est peut-être trop petit? Essayez de changer la taille en[999,999]
user12205
Ne fonctionne toujours pas, la fenêtre n'apparaît même pas ...
Harry Beadle
@BritishColour Eh bien, cela fonctionne vraiment pour moi. Voyez ici . Peut-être que cela apparaissait à l'arrière-plan ou quelque chose?
user12205
1
Il est intéressant de voir comment notre code est fondamentalement identique, mais utilise un module différent. tkinterse révèle être plus courte.
Justin
6

Tcl - 32 octets

J'ai remarqué que certaines de ces soumissions, comme celles du shell ou du javascript, vous permettent de taper le code dans la console. Si tel est le cas, je peux le raccourcir en:

wm ti . hello\ world;af 3000 exi

Doit être tapé dans la console après avoir exécuté wish. Autrement dit, exécutez wishsans arguments qui vous donnera une console REPL puis tapez le code ci-dessus. Cela utilise le fait que tcl peut être des noms de commande / fonction indulgents et à saisie semi-automatique, mais uniquement en mode interactif. Donc, cela afexécute réellement la aftercommande et exis'exécute exit. Je voulais utiliser exmais mon système a l' exéditeur installé.


Soumission d'origine - 36 octets

wm ti . hello\ world;after 3000 exit

Exécutez en utilisant wishau lieu de tclsh.

Slebetman
la source
5

52 51 caractères avec Mathematica

(J'espère que cela compte comme une interface graphique compatible.)

NotebookClose/@{CreateDialog@"Hello world",Pause@3}

Mathematica GUI Golf code

akater
la source
4

Java, 136 octets

class F{public static void main(String[]a)throws Exception{new java.awt.Frame("Hello World").show();Thread.sleep(3000);System.exit(0);}}

Affiche le message Hello Worldcomme titre d'un cadre. Après 3quelques secondes, le programme se ferme.

Ressemble à ça:

entrez la description de l'image ici

Faites-le glisser plus grand:

entrez la description de l'image ici


Code étendu (c'est-à-dire lisible):

class F {

    public static void main(String[] a) throws Exception {
        new java.awt.Frame("Hello World").show();
        Thread.sleep(3000);
        System.exit(0);
    }

}
Justin
la source
Vous pouvez utiliser enumau lieu de classpour enregistrer un autre personnage.
Riking
@Riking ça ne fonctionne pas.
Justin
Vraiment? J'aurais juré avoir utilisé ça une fois ... Dang.
Riking
4

R, 44

x11(ti="Hello World");Sys.sleep(3);dev.off()

entrez la description de l'image ici

ping
la source
4

PowerShell - 63 52

(new-object -c wscript.shell).popup('Hello World',3)
Rynant
la source
4

Visual FoxPro - 23 caractères

WAIT"hello world"TIME 3

Bonjour tout le monde dans VFP

Cela abuse du fait que VFP permet de ne pas mettre d'espace entre la chaîne à imprimer (que je viens de découvrir) et qu'il permet de raccourcir chaque mot-clé jusqu'à ses 4 premiers caractères.

Version non golfée:

WAIT "hello world" TIMEOUT 3
Alejandro
la source
4

GTK +, 47 45

zenity --info --text=Hello\ World --timeout=3

Bonjour le monde


Ancienne version (score 47):

zenity --info --title="Hello World" --timeout=3

Bonjour le monde

Pour une raison quelconque, zenity affiche un texte qui peut être traduit lorsque toutes les mises à jour sont terminées .

AL
la source
1
Juste pour ajouter quelques informations supplémentaires, toutes les mises à jour sont terminées. c'est ce que j'obtiens en anglais.
user12205
1
Vous pouvez réduire un caractère en changeant --titleà--text
asheeshr
1
Vous pouvez changer "Hello World"pourHello\ World
kernigh
Merci AsheeshR et kernigh, j'ai 2 caractères de moins avec votre aide.
AL
3

C, 151 caractères

#include<allegro.h>
main(){textout_ex(screen,font,"Hello World",0,0,7,set_gfx_mode('SAFE',8,8,install_timer(),
allegro_init()));rest(3e3);}END_OF_MAIN()

Pas la plus petite réponse. Je l'aime bien.

Oberon
la source
Bon travail. & # 32 & # 32 & # 32 & # 32
Sut Dip
Comment cela compile-t-il même? 'SAFE'n'est pas un seul caractère.
heinrich5991
@ heinrich5991 SAFE est probablement défini dans allegro.h comme un seul caractère.
Adam Davis
@AdamDavis C évalue les macros dans les constantes de caractères?
heinrich5991
1
Pas de macro, c'est vraiment juste un entier 32 bits écrit en quatre octets dans ce qu'on appelle la notation constante à plusieurs caractères, un moyen trop intelligent pour son propre bien d'écrire des chaînes de balises de quatre octets. Apple l'a utilisé une fois pour les nombres magiques de type de fichier. Les compilateurs le supportent aujourd'hui mais émettent un avertissement. Exemple pour les non
Wander Nauta
3

C # 101 151

Ce ne sera certainement pas la réponse la plus courte (car il existe déjà d'autres bonnes réponses étant beaucoup plus courtes) mais codegolf.SE a besoin de beaucoup plus de contributions C # à mon avis!

using t=System.Threading;class P{static void Main(){using(t.Tasks.Task.Run(()=>System.Windows.MessageBox.Show("hello world"))){t.Thread.Sleep(3000);}}}

C # 121

Une alternative basée sur la réponse de Bob , mais avec WPF au lieu de WinForms:

class P{static void Main(){new System.Windows.Window(){Title="hello world"}.Show();System.Threading.Thread.Sleep(3000);}}

Enregistre 3 caractères grâce à l'espace de noms plus court ...

Verrouillage numérique
la source
Vous devez inclure les usingdéclarations dans le nombre de caractères. Alternativement, vous pouvez les laisser de côté, mais vous devrez alors faire des choses comme System.Windows.Forms.MessageBox.Show(un peu moins de caractères si ce n'est qu'une seule utilisation). Tel que votre code l'est actuellement, il ne se compilera ni ne s'exécutera.
Bob
Eh bien, j'ai juste supposé que ce n'était pas nécessaire parce que je vois beaucoup de réponses en C, C ++, C #, Java, etc. sans utiliser / imports / que ce soit. Je vais toutefois le modifier. BTW, y a-t-il une règle explicite à ce sujet? Bien sûr, il compilerait et fonctionnerait avec les bons paramètres de compilation et / ou le compilateur. (par exemple, résolution à l'aide de directives sur le temps de compilation, tant qu'elles peuvent être résolues séparément)
Verrouillage numérique
C'est un peu gris - par exemple, j'ai dû ajouter une référence à System.Windows.Forms.dll, qui fait partie de la configuration de msbuild / de la ligne de commande de compilation. Cependant, le consensus général semble être que lorsqu'un programme complet est demandé, using/ import/ #include/ etc. lorsque cela est nécessaire pour que le code compile et s'exécute sont requis, et tenter d'utiliser des astuces de ligne de commande du compilateur pour esquiver est mauvais.
Bob
Je garderai cela à l'esprit. Merci pour les références.
Verrouillage numérique
3

Lot (24)

msg/time:3 * hello world

Testé sur Windows 7, mais devrait fonctionner sur n'importe quelle version NT de Windows, en supposant que vous avez MSG.EXE dans votre dossier System32.

EDIT: Apparemment, MSG.EXE n'est pas disponible par défaut sur les versions domestiques de Windows. Sur Windows 7, par exemple, cela n'est disponible que dans les éditions Ultimate ou Business. Cependant, vous pouvez copier le fichier dans votre dossier System32 et le faire fonctionner. (Vous devez également copier le fichier MSG.EXE.MUI approprié pour obtenir les messages d'erreur appropriés, mais mon "script" fonctionne sans eux.)

Vous devez également installer un logiciel pour que la plupart de ces autres réponses fonctionnent, donc je ne pense pas que cela devrait être une disqualification.

trlkly
la source
Pourquoi cela n'appelle-t-il pas un programme nommé time:3dans un dossier appelé msgdans le répertoire courant?
cat
@cat utilise Windows \.
jimmy23013
@jimmy wow c'était il y a un an. je suis juste habitué à écrire / sur toutes les plateformes maintenant oups
cat
@ jimmy23013 Mais Windows prend /également en charge
MilkyWay90
@ MilkyWay90 Windows prend /en charge à certains endroits, mais dans cmd, /xxxest interprété comme un argument.
jimmy23013
2

APL (40)

X.Close⊣⎕DL 3⊣'X'⎕WC'Form' 'Hello World'
marinus
la source
39:X.Close⊣⎕DL⍴⍕'X'⎕WC'Form' 'Hello World'
Adám
2

Lua + LÖVE, 67 octets

l=love l.window.setTitle"hello world"l.timer.sleep(3)l.event.quit()

entrez la description de l'image ici

Seeker14491
la source
2

Perl sur Windows (56)

use Win32;fork?kill+sleep+3,$$:Win32'MsgBox"Hello World"
perl chinois goth
la source
Utilisez '-MWin32' pour économiser quatre octets
DarkHeart
2

Perl 5, 47

Utilisation de Perl / Tk :

perl -MTk -e'alarm 3;tkinit-title,"Hello World!";MainLoop'
#     123    45678901234567890123456789012345678901234567
Matthias
la source
Il semble que le module Tk soit requis.
AL
2
Oui, bien sûr, vous avez besoin d' une boîte à outils GUI. Je choisis Tk à cause de tkinit ().
Matthias
Je compte 44 octets. Comptez-vous également le -MTkdrapeau?
slebetman
@slebetman Oui, je compte que pour 3 caractères, j'ai ajouté le compte au message.
Matthias
1
@ n.1 Je l'ai ajouté sous le titre avec un lien vers la documentation CPAN du module Tk. Aucun des modules de base perl n'est un module GUI, vous devez donc toujours installer des modules externes. Désolé, c'était clair pour moi (car je travaille souvent avec Perl), mais vous avez raison, c'est surprenant pour ceux qui travaillent dans d'autres langues.
Matthias
2

Vue Rebol (r3gui), 49

view/no-wait[title"hello world"]wait 3 unview/all

"bonjour le monde" de Rebol 3 Voir

Non golfé:

view/no-wait [title "hello world"]
wait 3
unview/all
draegtun
la source
2

Traitement, 77

int x=millis();void draw(){text("Hello world",0,9);if(millis()>x+3e3)exit();}

Capture d'écran:

entrez la description de l'image ici

Édition 1: la position Y du texte peut être 9 au lieu de 10, comme indiqué par @ace.

Edit 2: 3000 peut être représenté comme 3e3 pour raser un personnage, également noté par @ace

segfaultd
la source
3
Utiliser 9 pour la position Y au lieu de 10 fonctionne pour moi.
user12205
Je viens de modifier le code. Merci!
segfaultd
3
Je viens de remarquer que vous pouvez utiliser 3e3au lieu de 3000pour enregistrer un autre caractère
user12205
2

bash + ImageMagick (36 octets)

timeout 3 display label:Hello\ world

Testé sur Ubuntu 14.04 LTS et sur Fedora 20.

Plus joli, mais 10 octets de plus:

timeout 3 display -size 800 label:Hello\ world
Glenn Randers-Pehrson
la source
2

CMD / Lot - 33 octets

Je crois que la fenêtre dans laquelle le terminal Windows CMD s'exécute compte comme GUI compatible.

start "Hello world" cmd /csleep 3

Si vous n'avez pas la sleepcommande sur votre système - alors vous pouvez utiliser timeoutce qui vient par défaut dans Windows 7. Pour deux octets supplémentaires.

start "Hello world" cmd /ctimeout 3

Démarre une nouvelle fenêtre CMD avec le titre "Hello World" ( NON affiché dans le terminal lui-même, mais en tant que titre de la fenêtre GUI dans laquelle le terminal s'exécute), cette fenêtre se fermera dès que toutes les commandes analysées auront été exécutées - donc après sleep 3ou timeout 3a terminé.

La fenêtre ressemble à ceci -

Type

Remarque; startexécute les commandes données dans une nouvelle fenêtre - pas la fenêtre à partir de laquelle vous exécutez les commandes ci-dessus.

dégrader
la source
Le changer pour mettre cmd "Hello world" cmd /ctimeout 3Hello world dans la barre de titre pendant 3 secondes, mais cela ne compte probablement pas.
Chris Kent
1
Je ne pense pas que ce soit le cas, car cela ne fait pas apparaître une nouvelle fenêtre. La question indique qu'une fenêtre compatible GUI apparaît (apparaît comme étant le mot clé), ce qui implique qu'elle doit afficher une nouvelle fenêtre. Bonne idée cependant.
unclemeat
start "Hello world"Vous monsieur, êtes un génie.
user8397947
1

Python 3, 83 72 octets

from tkinter import*
f=Tk()
f.wm_title("Hello World")
f.after(3000,exit)

Économisez des octets en utilisant tkinter.

L'ancienne méthode ajoutait un Labelau cadre. Cette méthode définit le titre du cadre sur Hello World. f.after(3000,exit)s'exécute exit()après que les 3000millisecondes se soient écoulées.

Justin
la source
Même idée, module différent: turtlea moins d'octets. = D codegolf.stackexchange.com/a/28548/14506
daviewales
1

Cobra - 180

use System.Windows.Forms
use System.Threading
class M
    def main
        Thread(ref .w).start
        Thread.sleep(3000)
        Environment.exit(0)
    def w
        MessageBox.show("hello world")
Οurous
la source
1

Rubis [avec chaussures] (44 caractères)

Shoes.app{para "Hello world";every(3){exit}}

app osx

Fabien Sa
la source
1

C # 124

Loin du plus court :(

class P{static void Main(){new System.Windows.Forms.Form(){Text="Hello World"}.Show();System.Threading.Thread.Sleep(3000);}}
Bob
la source