Escreva um programa GUI Olá, mundo que se fecha após três segundos

24

Por favor, leia as regras e as áreas em negrito também .

Escreva um programa em qualquer idioma, contanto que ele suporte GUI a um sistema de janelas (não pode ser um console de texto, etc., e deve ser uma GUI / kit de ferramentas / janela).

O programa deve dizer olá mundo de qualquer maneira (imagem inicial, barra de menus, barra de status, título, vídeo, caixa de mensagem, outros itens de widget etc.), desde que apareça uma janela compatível com GUI e mostre esse texto por três segundos . A pessoa que puder codificar isso na menor quantidade de código usada, contada em bytes, ficará com o bolo.

Sut Dip
fonte
11
Os comentários aqui se degradaram em um argumento inútil. Evite discussões prolongadas nos comentários; se necessário, você pode usar o bate-papo . Todos os comentários foram eliminados.
Maçaneta
13
Não importa de onde veio o argumento - todos os usuários devem evitar participar de disputas que são claramente barulhentas ou não levam a lugar algum.
Maçaneta
11
Tem que ser "Hello world" ou pode ser "Hello_world"?
Slebetman 23/05
3
Além disso, ele deve sair normalmente?
Slebetman 23/05
você não especifica como o programa deve ser executado? por exemplo, ele precisa ser iniciado por si só ou pode ser algo carregado em um ambiente já em execução?
Jordon Biondo 25/05

Respostas:

28

Shell Unix, 31 caracteres

xmessage -timeout 3 hello world

mensagem "olá mundo" com o botão "ok"

Este programa requer o utilitário xmessage (1) do X.Org. Ele usa os tradicionais X Athena Widgets (Xaw) em preto e branco.

Kernigh
fonte
Grrr ... eu ia postar um usando timeoute zenity, mas já não era ...
BenjiWiebe
@ BenjiWiebe Existe uma zenityresposta por n.1 em codegolf.stackexchange.com/a/28451/4065
kernigh
2
Você pode salvar 1 byte: timeout 3 xmessage olá mundo
Glenn Randers-Pehrson 24/14
11
@ GlennRanders-Pehrson Não posso fazer isso, porque minha máquina não tem timeoutcomando. Talvez alguém possa postar uma nova resposta que a use?
Kernigh 24/05
23

Shell e gedit - 27 caracteres

timeout 3 gedit Hello World

Se o Hello World precisar ser exibido como uma única sequência, seus 28 caracteres:

timeout 3 gedit Hello\ World

timeoutO utilitário executa um comando pela duração especificada. Ele garante que o gedit seja executado por 3 segundos, assumindo um tempo mínimo de inicialização.

Qualquer editor pode ser usado no lugar de gedit. Se um editor nomeado mais curto for usado como gvim, o comprimento poderá ser reduzido em 1 ou mais caracteres.

Usando um editor inicialmente pensado pelo usuário80551 .

asheeshr
fonte
Escape the space, useHello\ World
user80551
11
@ user80551 A pergunta requer que "Hello World" seja exibido de qualquer maneira , de modo que isso não será necessário.
Asheeshr # 23/14
Tecnicamente, isso tornaria issoHello <space> <close icon> <Document icon> World
user80551
Você pode confirmar se katefuncionaria em vez de gedit?
User80551
@ user80551 O KDE não está instalado, mas, seguindo a página de manual do Kate , não parece haver nenhuma razão para que ele não funcione.
Asheeshr # 23/14
19

Applescript, 45 bytes:

Freqüentemente, o Applescript é uma das respostas mais curtas:

display alert "hello world" giving up after 3

Cole no Editor de maçã e execute ou execute usando osascripta linha de comando:

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

insira a descrição da imagem aqui

Trauma Digital
fonte
17

HTML + Javascript, 73 60 caracteres

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

Isso funciona no Chrome, mas pode não ser portátil para outros navegadores.

As sugestões dos comentários levam isso adiante:

<body onload=open('',name=setTimeout(close,3e3))>Hello world
Greg Hewgill
fonte
Isso é muito golfe que eu vi. Eu vi isso passar de 108caracteres para baixo para 73. De repente, todo o código é visível.
Justin
@ Quincunx: Você perdeu as primeiras iterações na época. :)
Greg Hewgill
Isso porque eu estava ocupado postando meu próprio código. :-)
Justin
2
<body onload=open('','_self'),setTimeout(close,3e3)>Hello worldparece salvar mais alguns caracteres.
Ventero 21/05
11
Você tem uma sugestão de edição do usuário3082537: salve dois caracteres de #<body onload=open('',name=setTimeout(close,3e3))>Hello world
Justin Justin
16

shell script, 31

Não tenho certeza se ele se qualifica. Requer notify-send. Funciona pelo menos no Ubuntu 12.04.

notify-send -t 3000 Hello world

captura de tela

user12205
fonte
11
Provavelmente não, pois não é uma janela compatível com a GUI . Infelizmente, o uso zenityé muito mais longo.
User80551 22/05
Seus 34 caracteres com o gedit - codegolf.stackexchange.com/a/28425/8766
user80551
4
Acredito que uma janela sem decoração de janela ainda é uma janela. Aqui no Iluminismo, a notificação também possui um botão X para fechá-la (mas nenhuma outra decoração de janela).
kernigh 23/05
12

shell + gedit / geany, 34

gedit Hello\ World&sleep 3;kill $!

Olá Mundo no gedit

Isso pressupõe que o gedit aparece instantaneamente, já que os 3 segundos são contados desde o início da emissão do comando. Pode ser menor se houver um editor de texto da GUI menor que gedit.

geany funciona também para o mesmo número de caracteres, apenas s/gedit/geany/g

Olá mundo em geany

EDIT: O uso timeouté mais curto. /codegolf//a/28477/8766

EDIT2: Alguém pode confirmar se isso funciona kate?


meld, 32

Se exatamente Hello Worldnão for necessário, meldpoderá ser usado.

meld Hello World&sleep 3;kill $!

Olá: Mundo - Meld

user80551
fonte
Boa ideia, gedittenta abrir um arquivo com esse nome, mesmo se não houver arquivo.
AL
Se você o usar gvim, precisará de apenas 33 caracteres
avall
11
@ Daniel haltseria mais curto, mas não sei se é permitido ser destrutivo. Além disso, ele requer permissões de root, portanto, precisamos assumir que somos root ou usar o sudoque custa mais (e precisa que o usuário digite a senha).
User80551 23/05
11
Desculpe, eu estava tentando ser engraçado. Eu estava assumindo que o usuário tem permissões de root.
Daniel
11
@ Daniel Não precisa se desculpar, este site é baseado nas mais tortuosas e distorcidas regras para tornar seu código mais curto.
User80551
7

VBScript, 58

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

captura de tela

user12205
fonte
6

Python (pygame), 87

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

captura de tela

user12205
fonte
Não trabalhar no OSX, não mostra janela ...
Harry Beadle
@BritishColour deveria, talvez seja muito pequeno? Tente alterar o tamanho para[999,999]
user12205
Ainda não está funcionando, a janela não é mesmo aparecendo ...
Harry Beadle
@BritishColour Bem, definitivamente funciona para mim. Veja aqui . Talvez estivesse aparecendo ao fundo ou algo assim?
User12205 22/05
11
É interessante como nosso código é basicamente idêntico, mas usa um módulo diferente. tkinteracaba por ser mais curto.
22714 Justin
6

Tcl - 32 bytes

Notei que alguns desses envios, como os de shell ou javascript, permitem que você digite o código no console. Se for esse o caso, posso reduzi-lo para:

wm ti . hello\ world;af 3000 exi

Deve ser digitado no console após executar o desejo. Ou seja, execute wishsem argumentos que fornecerão um console REPL e digite o código acima. Isso faz uso do fato de que tcl pode ser branda e preencher automaticamente nomes de comando / função, mas apenas no modo interativo. Então, afna verdade, ele executa o aftercomando e exiexecuta exit. Eu queria usar, exmas meu sistema possui o exeditor instalado.


Submissão original - 36 bytes

wm ti . hello\ world;after 3000 exit

Execute usando em wishvez de tclsh.

slebetman
fonte
5

52 51 caracteres com o Mathematica

(Espero que conte como compatível com a GUI.)

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

Código Mathematica GUI Golf

akater
fonte
4

Java, 136 bytes

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

Exibe a mensagem Hello Worldcomo o título de um quadro. Após 3segundos, o programa fecha.

Se parece com isso:

insira a descrição da imagem aqui

Arraste-o maior:

insira a descrição da imagem aqui


Código expandido (ou seja, legível):

class F {

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

}
Justin
fonte
Você pode usar em enumvez de classsalvar outro caractere.
Riking
@Riking não funciona.
21714 Justin
Sério? Eu poderia jurar que realmente usei isso uma vez ... Dang.
Riking
4

R, 44

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

insira a descrição da imagem aqui

ping
fonte
4

PowerShell - 63 52

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

Visual FoxPro - 23 caracteres

WAIT"hello world"TIME 3

Olá mundo em VFP

Isso abusa do fato de que o VFP permite não colocar um espaço entre a sequência a ser impressa (que acabei de descobrir) e que permite encurtar cada palavra-chave para até seus 4 primeiros caracteres.

Versão não destruída:

WAIT "hello world" TIMEOUT 3
Alejandro
fonte
4

GTK +, 47 45

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

Olá Mundo


Versão antiga (pontuação 47):

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

Olá Mundo

Por alguma razão, o zenity exibe um texto que pode ser traduzido à medida que Todas as atualizações são concluídas .

AL
fonte
11
Apenas para adicionar algumas informações extras, todas as atualizações estão completas. é o que eu recebo em inglês.
User12205 22/05
11
Você pode reduzir um personagem mudando --titlepara--text
asheeshr
11
Você pode mudar "Hello World"paraHello\ World
kernigh
Obrigado AsheeshR e kernigh, tenho 2 caracteres a menos com sua ajuda.
AL
3

C, 151 caracteres

#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()

Não é a menor resposta. Eu gosto disso.

Oberon
fonte
Bom trabalho. # 32 & # 32 & # 32 & # 32
Sut Dip
Como isso compila? 'SAFE'não é um único caractere.
heinrich5991
@ heinrich5991 O SAFE provavelmente está definido no allegro.h como um único caractere.
Adam Davis
@AdamDavis C avalia macros em constantes de caracteres?
Heinrich5991
11
Sem macro, é realmente apenas um número inteiro de 32 bits, escrito como quatro bytes, na chamada notação constante de vários caracteres, uma maneira muito inteligente de escrever por seqüências de caracteres de quatro bytes. A Apple o usou para números mágicos de tipo de arquivo uma vez. Atualmente, os compiladores o suportam, mas emitem um aviso. Exemplo para os não crentes
Wander Nauta
3

C # 101 151

Isso com certeza não será a resposta mais curta (já que existem outras boas respostas sendo muito mais curtas), mas o codegolf.SE precisa de muito mais contribuições C # na minha opinião!

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

Uma alternativa baseada na resposta de Bob , mas com WPF em vez de WinForms:

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

Salva 3 caracteres graças ao espaço para nome mais curto ...

Num Lock
fonte
Você precisa incluir as usingdeclarações na contagem de caracteres. Como alternativa, você pode deixá-los de fora, mas precisará fazer coisas como System.Windows.Forms.MessageBox.Show(um pouco menos caracteres, se for apenas um uso). Como seu código atualmente é, ele não será compilado ou executado.
23314 Bob
Bem, eu apenas assumi que não era necessário porque vejo muitas respostas em C, C ++, C #, Java etc, sem usar / importações / o que seja. Vou editá-lo, no entanto. BTW, existe alguma regra explícita sobre isso? Certamente, ele seria compilado e executado com as configurações corretas de compilação e / ou compilador. (por exemplo, a resolução utilizando directivas relativas ao tempo de compilação, contanto que eles possam ser resolvidos distinta)
Num Lock
Está um pouco cinza - por exemplo, tive que adicionar uma referência a System.Windows.Forms.dll, que faz parte da linha de comando msbuild config / the compile. No entanto, o consenso geral parece ser que, quando um programa completo é solicitado, using/ import/ #include/ etc. onde for necessário para a compilação e execução do código, são necessárias e a tentativa de usar truques de linha de comando do compilador para evitar problemas.
Bob
Eu vou manter aquilo em mente. Obrigado pelas referências.
Num Lock
3

Lote (24)

msg/time:3 * hello world

Testado no Windows 7, mas deve funcionar em qualquer versão do Windows baseada em NT, desde que você tenha o MSG.EXE na pasta System32.

EDIT: Aparentemente, o MSG.EXE não está disponível por padrão nas versões iniciais do Windows. No Windows 7, por exemplo, isso está disponível apenas nas edições Ultimate ou Business. No entanto, você pode copiar o arquivo para a pasta System32 e fazê-lo funcionar. (Você também deve copiar o arquivo MSG.EXE.MUI apropriado para obter as mensagens de erro adequadas, mas meu "script" funciona sem elas.)

Você precisa instalar o software para que a maioria dessas respostas funcione também, então não acho que isso deva ser um desqualificador.

trlkly
fonte
Por que isso não chama um programa nomeado time:3em uma pasta chamada msgno diretório atual?
cat
@cat Windows usa \.
jimmy23013
@ wim jimmy que foi há um ano. eu estou apenas usada para a escrita / em todas as plataformas agora oops
gato
@ jimmy23013 Mas o Windows /também suporta
MilkyWay90
@ MilkyWay90 O Windows suporta /em alguns lugares, mas em cmd, /xxxé interpretado como um argumento.
jimmy23013
2

APL (40)

X.Close⊣⎕DL 3⊣'X'⎕WC'Form' 'Hello World'
marinus
fonte
39:X.Close⊣⎕DL⍴⍕'X'⎕WC'Form' 'Hello World'
Adám 28/06
2

Lua + LÖVE, 67 bytes

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

insira a descrição da imagem aqui

Seeker14491
fonte
2

Perl no Windows (56)

use Win32;fork?kill+sleep+3,$$:Win32'MsgBox"Hello World"
gótico chinês do perl
fonte
Use '-MWin32' para salvar quatro bytes
DarkHeart 6/17/17
2

Perl 5, 47

Usando Perl / Tk :

perl -MTk -e'alarm 3;tkinit-title,"Hello World!";MainLoop'
#     123    45678901234567890123456789012345678901234567
Matthias
fonte
Parece que o módulo Tk é necessário.
AL
2
Sim, é claro que você precisa de algum kit de ferramentas da GUI. Eu escolhi Tk por causa de tkinit ().
Matthias
Eu conto 44 bytes. Você está contando a -MTkbandeira também?
Slebetman 23/05
@slebetman Sim, eu conto isso como 3 caracteres, adicionei a contagem ao post.
Matthias
11
@ n.1 Adicionei abaixo do título com um link para a documentação do CPAN do módulo Tk. Nenhum dos módulos principais do perl é um módulo da GUI; portanto, você sempre precisa instalar módulos externos. Desculpe, isso ficou claro para mim (como eu estou trabalhando com perl com bastante frequência), mas você está certo, é surpreendente para quem trabalha em outros idiomas.
Matthias
2

Rebol View (r3gui), 49

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

"olá mundo" da Rebol 3 View

Ungolfed:

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

Processamento, 77

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

Captura de tela:

insira a descrição da imagem aqui

Editar 1: a posição Y do texto pode ser 9 em vez de 10, como observado por @ace.

Edit 2: 3000 pode ser representado como 3e3 para raspar um caractere, também observado por @ace

segfaultd
fonte
3
Usar 9 para a posição Y em vez de 10 funciona para mim.
User12205 23/05
Apenas editei o código. Obrigado!
Segfaultd 23/05
3
Só notei que você pode usar 3e3em vez de 3000salvar mais um caractere
user12205
2

bash + ImageMagick (36 bytes)

timeout 3 display label:Hello\ world

Testado no Ubuntu 14.04 LTS e no Fedora 20.

Aparência mais agradável, mas 10 bytes maior:

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

CMD / lote - 33 bytes

Acredito que a janela em que o terminal Windows CMD é executado conta como compatível com a GUI.

start "Hello world" cmd /csleep 3

Se você não possui o sleepcomando no seu sistema - você pode usar o timeoutque vem como padrão no Windows 7. Por mais dois bytes.

start "Hello world" cmd /ctimeout 3

Inicia uma nova janela do CMD com o título "Hello World" ( NÃO exibido no próprio terminal, mas como o título da janela da GUI em que o terminal é executado), essa janela será fechada assim que todos os comandos analisados ​​forem executados - e depois sleep 3ou timeout 3foi concluído.

A janela fica assim -

Bloke

Nota; startexecuta os comandos fornecidos em uma nova janela - não na janela da qual você está executando os comandos acima.

desgrudar
fonte
Alterá-lo para cmd "Hello world" cmd /ctimeout 3colocar Hello world na barra de título por 3 segundos, mas isso provavelmente não conta.
Chris Kent
11
Eu não acho que sim, porque não gera uma nova janela. A pergunta diz que uma janela compatível com GUI aparece (parece ser a palavra-chave), o que implica que ela precisa exibir uma nova janela. Boa ideia.
Unclemeat
start "Hello world"Senhor, você é um gênio.
user8397947
1

Python 3, 83 72 bytes

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

Salve bytes usando tkinter.

O método antigo adicionou um Labelao quadro. Este método define o título do quadro para Hello World. f.after(3000,exit)é executado exit()após 3000milissegundos.

Justin
fonte
Mesma idéia, módulo diferente: turtlepossui menos bytes. = 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")
Furioso
fonte
1

Ruby [com sapatos] (44 caracteres)

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

aplicativo osx

Fabien Sa
fonte
1

C # 124

Longe do mais curto :(

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