Napisz cześć GUI program, który zamyka się po trzech sekundach

24

Przeczytaj zasady, a także odważne obszary .

Napisz program w dowolnym języku, o ile ma on obsługę GUI dla systemu okien (nie może być konsolą tekstową itp. I musi być GUI / toolkit / window).

Program musi przywitać świat w jakikolwiek sposób (obraz powitalny, pasek menu, pasek stanu, tytuł, wideo, okno komunikatu, inne elementy widżetów itp.), O ile pojawi się okno zgodne z GUI i wyświetli ten tekst przez trzy sekundy . Osoba, która może zakodować to w jak najmniejszej ilości użytego kodu, liczonego w bajtach, weźmie ciasto.

Sut Dip
źródło
1
Komentarze tutaj przekształciły się w bezsensowny argument. Proszę powstrzymać się od rozszerzonej dyskusji w komentarzach; jeśli to konieczne, możesz zamiast tego użyć czatu . Wszystkie komentarze zostały usunięte.
Klamka
13
Nie ma znaczenia, skąd pochodzi argument - wszyscy użytkownicy powinni unikać uczestnictwa w sporach, które są wyraźnie hałasem lub nigdzie się nie udają.
Klamka
1
Czy to musi być „Hello world”, czy może „Hello_world”?
slebetman
3
Ponadto, czy musi wyjść z gracją?
slebetman
nie określasz, jak program ma być uruchomiony? na przykład, czy musi być uruchomiony sam, czy może to być coś załadowanego w już działającym środowisku?
Jordon Biondo

Odpowiedzi:

28

Powłoka uniksowa, 31 znaków

xmessage -timeout 3 hello world

message "hello world" with button "okay"

Ten program wymaga narzędzia xmessage (1) z X.Org. Wykorzystuje tradycyjne czarno-białe widżety X Athena (Xaw).

kernigh
źródło
Grrr ... miałem zamiar pisać używając jednego timeouti zenityale było już ...
BenjiWiebe
@BenjiWiebe zenityOdpowiedź od n.1 na codegolf.stackexchange.com/a/28451/4065
kernigh
2
Możesz zapisać 1 bajt: limit czasu 3 xmessage hello world
Glenn Randers-Pehrson
1
@ GlennRanders-Pehrson Nie mogę tego zrobić, ponieważ moja maszyna nie ma timeoutpolecenia. Może ktoś inny może opublikować nową odpowiedź, która z niej korzysta?
kernigh
23

Shell i gedit - 27 znaków

timeout 3 gedit Hello World

Jeśli Hello World musi być wyświetlany jako pojedynczy ciąg, to jego 28 znaków:

timeout 3 gedit Hello\ World

timeoutnarzędzie uruchamia polecenie na określony czas. Zapewnia, że ​​gedit działa przez 3 sekundy, przy założeniu minimalnego czasu uruchamiania.

Zamiast gedit. Można użyć dowolnego edytora . Jeśli używany jest edytor o krótszej nazwie gvim, długość można zmniejszyć o 1 lub więcej znaków.

Korzystanie z edytora, o którym początkowo pomyślał użytkownik 80551 .

asheeshr
źródło
Escape the space, użyjHello\ World
user80551
1
@ user80551 Pytanie wymaga wyświetlenia „Hello World” w jakikolwiek sposób , więc nie powinno to być konieczne.
asheeshr
Technicznie by to spowodowałoHello <space> <close icon> <Document icon> World
user80551
Czy możesz potwierdzić, czy katedziałałoby zamiast gedit?
user80551
@ user80551 Nie masz zainstalowanego KDE, ale przechodząc do strony podręcznika Kate , wydaje się, że nie ma żadnego powodu, dla którego powinien on nie działać.
asheeshr
19

Jabłkowy, 45 bajtów:

Niezbyt często Applescript jest jedną z krótszych odpowiedzi:

display alert "hello world" giving up after 3

Wklej do edytora Applescript i uruchom lub uruchom za pomocą osascriptwiersza polecenia:

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

enter image description here

Cyfrowa trauma
źródło
17

HTML + JavaScript, 73 60 znaków

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

Działa to w Chrome, ale może nie być przenośne na inne przeglądarki.

Sugestie zawarte w komentarzach idą dalej:

<body onload=open('',name=setTimeout(close,3e3))>Hello world
Greg Hewgill
źródło
Widziałem dużo golfa. Widziałem, jak to zmienia się od 108znaków do 73. Nagle cały kod jest widoczny.
Justin
@Quincunx: Wówczas przegapiłeś kilka pierwszych iteracji. :)
Greg Hewgill
To dlatego, że byłem zajęty publikowaniem własnego kodu. :-)
Justin
2
<body onload=open('','_self'),setTimeout(close,3e3)>Hello worldwydaje się uratować jeszcze kilka postaci.
Ventero
1
Masz sugestię edycji od user3082537: zapisz dwa znaki do<body onload=open('',name=setTimeout(close,3e3))>Hello world
Justin
16

skrypt powłoki, 31

Nie jestem pewien, czy się kwalifikuje. Wymaga notify-send. Działa przynajmniej na Ubuntu 12.04.

notify-send -t 3000 Hello world

screenshot

użytkownik12205
źródło
1
Prawdopodobnie nie, ponieważ nie jest to okno zgodne z GUI . Niestety używanie zenityjest znacznie dłuższe.
user80551
Jego 34 znaki z gedit - codegolf.stackexchange.com/a/28425/8766
user80551
4
Uważam, że okno bez dekoracji okiennych jest nadal oknem. W Oświeceniu powiadomienie ma również przycisk X, aby je zamknąć (ale nie ma innych dekoracji okna).
kernigh
12

shell + gedit / geany, 34

gedit Hello\ World&sleep 3;kill $!

Hello World in gedit

Zakłada się, że gedit wyskakuje natychmiast, ponieważ 3 sekundy są liczone od początku wydania polecenia. Może być mniejszy, jeśli edytor tekstu GUI jest krótszy niż gedit.

geany działa również dla tej samej liczby znaków, tylko s/gedit/geany/g

Hello World in geany

EDYCJA: Korzystanie timeoutjest krótsze. /codegolf//a/28477/8766

EDYCJA 2: Czy ktoś może potwierdzić, czy to działa kate?


meld, 32

Jeśli dokładnie Hello Worldnie jest to wymagane, meldmożna je zastosować.

meld Hello World&sleep 3;kill $!

Hello : World - Meld

użytkownik80551
źródło
Fajny pomysł, geditpróbuje otworzyć plik o tej nazwie, nawet jeśli nie ma pliku.
AL
Jeśli gvimgo użyjesz , potrzebujesz tylko 33 znaków
avall
1
@Daniel haltbyłby krótszy, ale nie wiem, czy bycie destrukcyjnym jest dozwolone. Wymaga to również uprawnień roota, więc albo musimy założyć, że jesteśmy rootem, albo użyć, sudoktóry kosztuje więcej (i wymaga od użytkownika wpisania hasła).
user80551
1
Przepraszam, starałem się być pełen humoru. Zakładałem, że użytkownik ma uprawnienia roota.
Daniel
1
@Daniel Nie musisz przepraszać, ta strona jest oparta na najbardziej złym, przebiegłym przekręcaniu zasad, aby skrócić Twój kod.
user80551
7

VBScript, 58

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

screenshot

użytkownik12205
źródło
6

Python (pygame), 87

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

screenshot

użytkownik12205
źródło
Nie działa na OSX, nie wyświetla okna ...
Harry Beadle
@BritishColour powinno, może jest za małe? Spróbuj zmienić rozmiar na[999,999]
user12205
Wciąż nie działa, okno nawet się nie pojawia ...
Harry Beadle
@BritishColour Cóż, to zdecydowanie działa dla mnie. Zobacz tutaj . Może pokazywał się w tle czy coś takiego?
user12205
1
To ciekawe, jak nasz kod jest w zasadzie identyczny, ale używa innego modułu. tkinterokazuje się krótszy.
Justin
6

Tcl - 32 bajty

Zauważyłem, że niektóre z tych zgłoszeń, takie jak shell lub javascript, pozwalają na wpisanie kodu w konsoli. W takim przypadku mogę go skrócić do:

wm ti . hello\ world;af 3000 exi

Należy wpisać w konsoli po uruchomieniu życzeń. Oznacza to, że uruchom wishbez argumentów, które dadzą ci konsolę REPL, a następnie wpisz powyższy kod. Wykorzystuje to fakt, że tcl może być łagodny i automatycznie uzupełnia nazwy poleceń / funkcji, ale tylko w trybie interaktywnym. Tak więc affaktycznie wykonuje afterpolecenie i exiwykonuje exit. Chciałem użyć, exale mój system ma exzainstalowany edytor.


Oryginalne przesłanie - 36 bajtów

wm ti . hello\ world;after 3000 exit

Uruchom za pomocą wishzamiast tclsh.

Slebetman
źródło
5

52 51 znaków z Mathematica

(Mam nadzieję, że liczy się to jako zgodne z GUI.)

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

Mathematica GUI Golf code

akater
źródło
4

Java, 136 bajtów

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

Wyświetla wiadomość Hello Worldjako tytuł ramki. Po 3kilku sekundach program zamyka się.

Wygląda tak:

enter image description here

Przeciągnij to większe:

enter image description here


Rozszerzony kod (tzn. Czytelny):

class F {

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

}
Justin
źródło
Możesz użyć enumzamiast classzapisać inną postać.
Riking
@ Riking to nie działa.
Justin
Naprawdę? Mógłbym przysiąc, że kiedyś tego użyłem ... Dang.
Riking
4

R, 44

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

enter image description here

świst
źródło
4

PowerShell - 63 52

(new-object -c wscript.shell).popup('Hello World',3)
Rynant
źródło
4

Visual FoxPro - 23 znaki

WAIT"hello world"TIME 3

Hello world in VFP

To narusza fakt, że VFP pozwala nie umieszczać spacji między ciągiem do wydrukowania (co właśnie odkryłem) i że pozwala skrócić każde słowo kluczowe do pierwszych 4 znaków.

Wersja bez golfa:

WAIT "hello world" TIMEOUT 3
Alejandro
źródło
4

GTK +, 47 45

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

Hello World


Stara wersja (wynik 47):

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

Hello World

Z jakiegoś powodu zenity wyświetla tekst, który można przetłumaczyć po zakończeniu aktualizacji .

glin
źródło
1
Aby dodać dodatkowe informacje, wszystkie aktualizacje są kompletne. to co dostaję po angielsku.
user12205
1
Możesz zredukować jedną postać, zmieniając --titlena--text
asheeshr
1
Możesz zmienić "Hello World"naHello\ World
kernigh
Dzięki AsheeshR i kernigh, z twoją pomocą mam o 2 mniej postaci.
AL
3

C, 151 znaków

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

Nie najmniejsza odpowiedź. Lubię to.

Oberon
źródło
Dobra robota. & # 32 & # 32 & # 32 & # 32
Sut Dip
Jak to się w ogóle kompiluje? 'SAFE'nie jest ani jednym char.
heinrich5991
@ heinrich5991 SAFE jest prawdopodobnie zdefiniowany w allegro.h jako pojedynczy znak.
Adam Davis
@AdamDavis C ocenia makra w stałych znakowych?
heinrich5991
1
Bez makra, to tak naprawdę 32-bitowa liczba całkowita zapisana jako cztery bajty w tak zwanej notacji stałej wieloznakowej, co jest zbyt sprytnym, jak na swój własny dobry sposób, pisaniem czterobajtowych ciągów znaczników. Apple użyło go raz dla magicznych liczb typu pliku. Kompilatory obecnie go obsługują, ale wysyłają ostrzeżenie. Przykład dla niewierzących
Wander Nauta
3

C # 101 151

To z pewnością nie będzie najkrótsza odpowiedź (ponieważ istnieją już inne dobre odpowiedzi, które są znacznie krótsze), ale codegolf.SE wymaga znacznie więcej wkładów C #!

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

Alternatywa oparta na odpowiedzi Boba , ale z WPF zamiast WinForm:

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

Zapisuje 3 znaki dzięki krótszej przestrzeni nazw ...

Num Lock
źródło
You need to include the using declarations in the character count. Alternatively, you could leave them out but then you'd have to do things like System.Windows.Forms.MessageBox.Show (slightly fewer characters if it's only a single use). As your code currently is, it won't compile or run.
Bob
Well, I just assumed it was not neccesary because I see a lot of answers in C, C++, C#, Java etc without any using/imports/whatever. I will edit it, though. BTW, is there some explicit rule on this? Sure it would compile and run with the right compile settings and/or compiler. (e. g. resolving using directives on compile time, as long as they can be resolved distinct)
Num Lock
It is a little grey - for example, I had to add a reference to System.Windows.Forms.dll, which is part of the msbuild config/the compile command line. However, the general consensus seems to be that when a full program is requested, using/import/#include/etc. where necessary for the code to compile and run are required, and attempting to use compiler command line tricks to dodge that is bad.
Bob
I will keep that in mind. Thank you for the references.
Num Lock
3

Batch (24)

msg/time:3 * hello world

Tested on Windows 7, but should work on any NT-based version of Windows, assuming you have MSG.EXE in your System32 folder.

EDIT: Apparently MSG.EXE is not available by default on home versions of Windows. On Windows 7, for example, this is only available in the Ultimate or Business editions. However, you can copy the file over to your System32 folder and get it to work. (You must also copy over the appropriate MSG.EXE.MUI file to get proper error messages, but my "script" works without them.)

You have to install software for most of these other responses to work, too, so I don't think that should be a disqualifier.

trlkly
źródło
Why won't this call a program named time:3 in a folder called msg in the current directory?
cat
@cat Windows uses \.
jimmy23013
@jimmy wow that was a year ago. i'm just used to writing / on all platforms now oops
cat
@jimmy23013 But Windows supports / too
MilkyWay90
@MilkyWay90 Windows supports / in some places, but in cmd, /xxx is interpreted as an argument.
jimmy23013
2

APL (40)

X.Close⊣⎕DL 3⊣'X'⎕WC'Form' 'Hello World'
marinus
źródło
39: X.Close⊣⎕DL⍴⍕'X'⎕WC'Form' 'Hello World'
Adám
2

Lua + LÖVE, 67 bytes

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

enter image description here

Seeker14491
źródło
2

Perl on Windows (56)

use Win32;fork?kill+sleep+3,$$:Win32'MsgBox"Hello World"
chinese perl goth
źródło
Use '-MWin32' to save four bytes
DarkHeart
2

Perl 5, 47

Using Perl/Tk:

perl -MTk -e'alarm 3;tkinit-title,"Hello World!";MainLoop'
#     123    45678901234567890123456789012345678901234567
Matthias
źródło
It seems that the Tk module is required.
A.L
2
Yes, of course you need some GUI toolkit. I choose Tk because of tkinit().
Matthias
I count 44 bytes. Are you counting the -MTk flag as well?
slebetman
@slebetman Yes I count that as 3 chars, I added the count to the post.
Matthias
1
@n.1 I added it below the title with a link to the CPAN documentation of the Tk module. None of the perl core modules is a GUI module, therefore you always have to install external modules. Sorry, this was clear to me (as I am working with perl quite often), but you are right, it is surprising for those who work in other languages.
Matthias
2

Rebol View (r3gui), 49

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

"hello world" from Rebol 3 View

Ungolfed:

view/no-wait [title "hello world"]
wait 3
unview/all
draegtun
źródło
2

Processing, 77

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

Screenshot:

enter image description here

Edit 1: Y position of the text can be 9 instead of 10, like noted by @ace.

Edit 2: 3000 can be represented as 3e3 to shave one character off, also noted by @ace

segfaultd
źródło
3
Using 9 for Y position instead of 10 works for me.
user12205
Just edited the code. Thanks!
segfaultd
3
Just noticed you can use 3e3 instead of 3000 to save one more char
user12205
2

bash + ImageMagick (36 bytes)

timeout 3 display label:Hello\ world

Tested on Ubuntu 14.04 LTS and on Fedora 20.

Nicer-looking, but 10 bytes larger:

timeout 3 display -size 800 label:Hello\ world
Glenn Randers-Pehrson
źródło
2

CMD / Batch - 33 Bytes

I believe the window that the Windows CMD terminal runs in counts as GUI compliant.

start "Hello world" cmd /csleep 3

If you don't have the sleep command on your system - then you can use timeout which comes default in Windows 7. For two more bytes.

start "Hello world" cmd /ctimeout 3

Starts a new CMD window with the title "Hello World" (NOT displayed in the terminal itself, but as the title of the GUI window that the terminal runs in), this window will close as soon as all parsed commands have executed - so after sleep 3 or timeout 3 has completed.

The window looks like this -

Bloke

Note; start runs the given commands in a new window - not the window that you are running the above commands from.

unclemeat
źródło
Changing it to cmd "Hello world" cmd /ctimeout 3 puts Hello world in the title bar for 3 seconds, but that probably doesn't count.
Chris Kent
1
I wouldn't think it does, because it doesn't spawn a new window. The question says a GUI-compliant window appears (appears being the key word), implying that it has to display a new window. Good idea though.
unclemeat
start "Hello world" You sir, are a genius.
user8397947
1

Python 3, 83 72 bytes

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

Save bytes by using tkinter.

The old method added a Label to the frame. This method sets the title of the frame to Hello World. f.after(3000,exit) runs exit() after 3000 milliseconds have passed.

Justin
źródło
Same idea, different module: turtle has less 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")
Οurous
źródło
1

Ruby [with Shoes] (44 chars)

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

osx app

Fabien Sa
źródło
1

C# 124

Far from the shortest :(

class P{static void Main(){new System.Windows.Forms.Form(){Text="Hello World"}.Show();System.Threading.Thread.Sleep(3000);}}
Bob
źródło