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.


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


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 .


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


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

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


1
Prawdopodobnie nie, ponieważ nie jest to okno zgodne z GUI . Niestety używanie zenityjest znacznie dłuższe.
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


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


6

Python (pygame), 87

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

screenshot


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.


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


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);
    }

}

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

PowerShell - 63 52

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

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

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 .


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.


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


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.


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'

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



2

Perl 5, 47

Using Perl/Tk:

perl -MTk -e'alarm 3;tkinit-title,"Hello World!";MainLoop'
#     123    45678901234567890123456789012345678901234567

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

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


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

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.


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.


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

1

Ruby [with Shoes] (44 chars)

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

osx app


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);}}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.