Schreiben Sie ein Hallo Welt GUI-Programm, das sich nach drei Sekunden schließt

24

Bitte lesen Sie die Regeln und die fett gedruckten Bereiche .

Schreiben Sie ein Programm in einer beliebigen Sprache, sofern es GUI-Unterstützung für ein Fenstersystem bietet (kann keine Textkonsole usw. sein und muss eine GUI / ein Toolkit / ein Fenster sein).

Das Programm muss in jeder Hinsicht Hallo sagen (Begrüßungsbild, Menüleiste, Statusleiste, Titel, Video, Meldungsfeld, andere Widget-Elemente usw.), sofern ein GUI-kompatibles Fenster angezeigt wird und dieser Text drei Sekunden lang angezeigt wird . Die Person, die dies in der geringsten Menge an Code, gezählt in Bytes, codieren kann, wird den Kuchen nehmen.

Sut Dip
quelle
1
Die Kommentare hier haben sich zu einem sinnlosen Argument verschlechtert. Bitte unterlassen Sie eine ausführliche Diskussion in den Kommentaren. Bei Bedarf können Sie stattdessen den Chat verwenden. Alle Kommentare wurden gelöscht.
Türklinke
13
Es spielt keine Rolle, woher das Argument stammt - alle Benutzer sollten vermeiden, an Streitigkeiten teilzunehmen, die eindeutig auf Lärm beruhen oder nirgendwo hin führen.
Türklinke
1
Muss es "Hallo Welt" sein oder kann es "Hallo_Welt" sein?
Slebetman
3
Muss es auch ordnungsgemäß beendet werden?
Slebetman
Sie legen nicht fest, wie das Programm ausgeführt werden soll? Muss es zum Beispiel von selbst gestartet werden oder kann es in einer bereits laufenden Umgebung geladen werden?
Jordon Biondo

Antworten:

28

Unix-Shell, 31 Zeichen

xmessage -timeout 3 hello world

meldung "hallo welt" mit button "okay"

Für dieses Programm ist das Dienstprogramm xmessage (1) von X.Org erforderlich . Es verwendet die traditionellen schwarz-weißen X Athena Widgets (Xaw).

Kernigh
quelle
Grrr ... Ich wollte ein schreiben mit timeoutund zenityaber es war mehr ...
BenjiWiebe
@BenjiWiebe Es gibt eine zenityAntwort von n.1 unter codegolf.stackexchange.com/a/28451/4065
kernigh
2
Sie können 1 Byte speichern: Timeout 3 xmessage Hallo Welt
Glenn Randers-Pehrson
1
@ GlennRanders-Pehrson Das kann ich nicht, weil meine Maschine keinen timeoutBefehl hat. Vielleicht kann jemand anderes eine neue Antwort posten, die diese verwendet?
Kernigh
23

Shell und gedit - 27 Zeichen

timeout 3 gedit Hello World

Wenn Hello World als einzelne Zeichenfolge angezeigt werden soll, sind es 28 Zeichen:

timeout 3 gedit Hello\ World

timeoutDienstprogramm führt einen Befehl für die angegebene Dauer aus. Es stellt sicher, dass gedit 3 Sekunden lang ausgeführt wird, vorausgesetzt, die Startzeit ist minimal.

Anstelle von kann ein beliebiger Editor verwendet werden gedit. Wenn ein Editor mit einem kürzeren Namen verwendet wird gvim, kann die Länge um 1 oder mehr Zeichen verringert werden.

Verwenden eines Editors, der ursprünglich von user80551 entwickelt wurde .

Ascheshr
quelle
Entfliehen Sie dem Raum, verwenden SieHello\ World
user80551
1
@ user80551 Die Frage erfordert, dass "Hello World" in irgendeiner Weise angezeigt wird , sodass dies nicht erforderlich sein sollte.
Asheeshr
Technisch würde das dazu führenHello <space> <close icon> <Document icon> World
user80551
Kannst du bestätigen, ob katedas funktionieren würde gedit?
user80551
@ user80551 KDE ist noch nicht installiert, aber wenn man sich Kates Manpage ansieht, scheint es keinen Grund zu geben, warum es nicht funktionieren sollte.
Asheeshr
19

Applescript, 45 Bytes:

Nicht oft ist Applescript eine der kürzeren Antworten:

display alert "hello world" giving up after 3

In den Applescript-Editor einfügen und ausführen oder über osascriptdie Befehlszeile ausführen :

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

Bildbeschreibung hier eingeben

Digitales Trauma
quelle
17

HTML + Javascript, 73 60 Zeichen

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

Dies funktioniert in Chrome, ist jedoch möglicherweise nicht auf andere Browser übertragbar.

Vorschläge aus den Kommentaren gehen noch weiter:

<body onload=open('',name=setTimeout(close,3e3))>Hello world
Greg Hewgill
quelle
Das ist eine Menge Golf, die ich gesehen habe. Ich habe gesehen, wie es von 108Zeichen zu Zeichen ging 73. Plötzlich ist der gesamte Code sichtbar.
Justin
@ Quincunx: Sie haben dann die ersten Iterationen verpasst. :)
Greg Hewgill
Das liegt daran, dass ich damit beschäftigt war, meinen eigenen Code zu veröffentlichen. :-)
Justin
2
<body onload=open('','_self'),setTimeout(close,3e3)>Hello worldscheint ein paar Zeichen mehr zu speichern.
Ventero
1
Sie haben einen Bearbeitungsvorschlag von user3082537: save two chars by<body onload=open('',name=setTimeout(close,3e3))>Hello world
Justin
16

Shell-Skript, 31

Nicht sicher, ob es qualifiziert ist. Benötigt notify-send. Funktioniert zumindest unter Ubuntu 12.04.

notify-send -t 3000 Hello world

Bildschirmfoto

user12205
quelle
1
Wahrscheinlich nicht, da es sich nicht um ein GUI-kompatibles Fenster handelt . Leider ist die Verwendung zenityviel länger.
user80551
Seine 34 Zeichen mit gedit - codegolf.stackexchange.com/a/28425/8766
user80551
4
Ich glaube, dass ein Fenster ohne Fensterdekorationen immer noch ein Fenster ist. Hier in Aufklärung hat die Benachrichtigung auch eine X-Schaltfläche, um sie zu schließen (aber keine anderen Fensterdekorationen).
Kernigh
12

Shell + Gedit / Geany, 34

gedit Hello\ World&sleep 3;kill $!

Hallo Welt in gedit

Dies setzt voraus, dass gedit sofort angezeigt wird, da die 3 Sekunden ab dem Start der Befehlsausgabe gezählt werden. Könnte kleiner sein, wenn es einen GUI-Texteditor gibt, der kürzer ist als gedit.

geany funktioniert auch für die gleiche Anzahl von Zeichen, nur s/gedit/geany/g

Hallo Welt in Geany

EDIT: Mit timeoutist kürzer. /codegolf//a/28477/8766

EDIT2: Kann jemand bestätigen, ob dies mit funktioniert kate?


verschmolzen, 32

Wenn genau Hello Worldnicht erforderlich ist, dann meldkann verwendet werden.

meld Hello World&sleep 3;kill $!

Hallo: Welt - Meld

user80551
quelle
Gute Idee, geditversucht eine Datei mit diesem Namen zu öffnen, auch wenn keine Datei vorhanden ist.
AL
Wenn Sie gvimes verwenden, benötigen Sie nur 33 Zeichen
voraussichtlich
1
@Daniel haltwäre kürzer, aber ich weiß nicht, ob es erlaubt ist, destruktiv zu sein. Außerdem sind Root-Berechtigungen erforderlich, sodass wir entweder davon ausgehen müssen, dass wir Root sind, oder dass sudodie Verwendung dieser Berechtigungen mehr kostet (und der Benutzer das Kennwort eingeben muss).
user80551
1
Entschuldigung, ich habe versucht, humorvoll zu sein. Ich ging davon aus, dass der Benutzer über Root-Berechtigungen verfügt.
Daniel
1
@Daniel Diese Seite basiert auf den schlimmsten falschen Regeln, um Ihren Code zu verkürzen.
user80551
7

VBScript, 58

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

Bildschirmfoto

user12205
quelle
6

Python (Pygame), 87

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

Bildschirmfoto

user12205
quelle
Funktioniert nicht unter OSX, zeigt kein Fenster an ...
Harry Beadle
@BritishColour sollte es sein, vielleicht ist es zu klein? Versuchen Sie, die Größe zu [999,999]
ändern
Das Fenster funktioniert immer noch nicht, es erscheint nicht einmal ...
Harry Beadle
@ BritishColour Nun, es funktioniert definitiv für mich. Sehen Sie hier . Vielleicht tauchte es im Hintergrund auf oder so?
user12205
1
Es ist interessant, wie unser Code im Grunde identisch ist, aber ein anderes Modul verwendet. tkinterfällt kürzer aus.
Justin
6

Tcl - 32 Bytes

Mir ist aufgefallen, dass Sie bei einigen dieser Einsendungen, wie der Shell- oder der Javascript-Einsendung, den Code in die Konsole eingeben können. Wenn das der Fall ist, kann ich es verkürzen auf:

wm ti . hello\ world;af 3000 exi

Muss nach dem Ausführen von wish in die Konsole eingegeben werden . Das heißt, Sie müssen wishohne Argumente ausführen , um eine REPL-Konsole zu erhalten, und dann den obigen Code eingeben. Dies macht sich die Tatsache zunutze, dass tcl milde Befehls / Funktionsnamen sein und automatisch vervollständigen kann, jedoch nur im interaktiven Modus. Damit afwird der afterBefehl tatsächlich ausgeführt und exiausgeführt exit. Ich wollte verwenden, exaber auf meinem System ist der exEditor installiert.


Ursprüngliche Einreichung - 36 Bytes

wm ti . hello\ world;after 3000 exit

Run using wishanstelle von tclsh.

Slebetman
quelle
5

52 51 Zeichen mit Mathematica

(Ich hoffe, es gilt als GUI-konform.)

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

Mathematica GUI Golf Code

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

Zeigt die Nachricht Hello Worldals Titel eines Frames an. Nach 3Sekunden wird das Programm geschlossen.

Sieht aus wie das:

Bildbeschreibung hier eingeben

Ziehe es größer:

Bildbeschreibung hier eingeben


Erweiterter Code (dh lesbar):

class F {

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

}
Justin
quelle
Sie können enumanstelle von ein classanderes Zeichen speichern.
Riking
@Riking es funktioniert nicht.
Justin
"Ja wirklich?" Ich hätte schwören können, dass ich das tatsächlich einmal benutzt habe ... Dang.
Riking
4

R 44

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

Bildbeschreibung hier eingeben

Klingeln
quelle
4

PowerShell - 63 52

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

Visual FoxPro - 23 Zeichen

WAIT"hello world"TIME 3

Hallo Welt in VFP

Dies missbraucht die Tatsache, dass VFP es erlaubt, kein Leerzeichen zwischen die zu druckende Zeichenfolge (die ich gerade entdeckt habe) zu setzen und jedes Schlüsselwort auf die ersten 4 Zeichen zu kürzen.

Ungolfed-Version:

WAIT "hello world" TIMEOUT 3
Alejandro
quelle
4

GTK +, 47 45

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

Hallo Welt


Alte Fassung (47 Punkte):

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

Hallo Welt

Aus irgendeinem Grund zeigt Zenity einen Text an, der übersetzt werden kann, wenn alle Aktualisierungen abgeschlossen sind .

AL
quelle
1
Nur um ein paar zusätzliche Informationen hinzuzufügen: Alle Updates sind abgeschlossen. bekomme ich auf englisch.
user12205
1
Sie können ein Zeichen reduzieren, indem Sie --titleauf--text
asheeshr
1
Sie können um "Hello World"Hello\ World
kernigh
Danke AsheeshR und kernigh, ich habe 2 Charaktere weniger mit deiner Hilfe.
AL
3

C 151 Zeichen

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

Nicht die kleinste Antwort. Ich mag es aber.

Oberon
quelle
Gut gemacht. & # 32 & # 32 & # 32 & # 32
Sut Dip
Wie kompiliert das überhaupt? 'SAFE'ist kein einziger char.
heinrich5991
@ heinrich5991 SAFE wird in allegro.h wahrscheinlich als einzelnes Zeichen definiert.
Adam Davis
@AdamDavis C wertet Makros in Zeichenkonstanten aus?
heinrich5991
1
Kein Makro, es ist wirklich nur eine 32-Bit-Ganzzahl, die als vier Bytes in der so genannten Konstantennotation mit mehreren Zeichen geschrieben ist. Dies ist eine zu clevere Methode, um vier-Byte-Tag-Zeichenfolgen zu schreiben. Apple hat es einmal für den Dateityp Magic Numbers verwendet. Compiler unterstützen dies heutzutage, geben jedoch eine Warnung aus. Beispiel für Ungläubige
Wander Nauta
3

C # 101 151

Dies wird sicherlich nicht die kürzeste Antwort sein (da es bereits andere gute Antworten gibt, die viel kürzer sind), aber codegolf.SE benötigt meiner Meinung nach viel mehr C # -Beiträge!

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

Eine Alternative basierend auf Bobs Antwort , aber mit WPF anstelle von WinForms:

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

Speichert 3 Zeichen dank des kürzeren Namensraums ...

Num Lock
quelle
Sie müssen die usingDeklarationen in die Zeichenanzahl aufnehmen. Alternativ könnten Sie sie weglassen, aber dann müssten Sie Dinge wie System.Windows.Forms.MessageBox.Show(etwas weniger Zeichen, wenn es nur eine einmalige Verwendung ist) tun . Wie Ihr Code derzeit ist, wird er nicht kompiliert oder ausgeführt.
Bob
Nun, ich habe nur angenommen, dass es nicht notwendig ist, weil ich viele Antworten in C, C ++, C #, Java usw. sehe, ohne / exports / whatever zu verwenden. Ich werde es jedoch bearbeiten. Übrigens, gibt es eine explizite Regel dazu? Sicher würde es mit den richtigen Kompilierungseinstellungen und / oder dem richtigen Compiler kompiliert und ausgeführt. (z. B. Auflösen mit Direktiven zur Kompilierungszeit, sofern sie eindeutig aufgelöst werden können)
Num Lock
Es ist ein bisschen grau - ich musste zum Beispiel einen Verweis hinzufügen System.Windows.Forms.dll, der Teil der msbuild config / compile-Befehlszeile ist. Der allgemeine Konsens scheint jedoch zu sein, dass, wenn ein vollständiges Programm angefordert wird, using/ import/ #include/ etc. Erforderlich, damit der Code kompiliert und ausgeführt werden kann, und der Versuch, mithilfe von Compiler-Befehlszeilentricks zu verhindern, dass das Problem auftritt.
Bob
Ich werde mir das merken. Vielen Dank für die Hinweise.
Num Lock
3

Charge (24)

msg/time:3 * hello world

Getestet unter Windows 7, sollte jedoch unter jeder NT-basierten Version von Windows funktionieren, vorausgesetzt, Sie haben MSG.EXE in Ihrem System32-Ordner.

BEARBEITEN: Anscheinend ist MSG.EXE in Heimversionen von Windows nicht standardmäßig verfügbar. Unter Windows 7 ist dies beispielsweise nur in der Ultimate- oder Business-Edition verfügbar. Sie können die Datei jedoch in Ihren System32-Ordner kopieren und zum Laufen bringen. (Sie müssen auch die entsprechende MSG.EXE.MUI-Datei kopieren, um die richtigen Fehlermeldungen zu erhalten, aber mein "Skript" funktioniert ohne sie.)

Sie müssen Software installieren, damit die meisten dieser anderen Antworten auch funktionieren. Ich denke also nicht, dass dies ein Disqualifizierer sein sollte.

trlkly
quelle
Warum wird dadurch kein Programm aufgerufen, das time:3in einem Ordner heißt, der sich msgim aktuellen Verzeichnis befindet?
Katze
@cat Windows verwendet \.
Jimmy23013
@ Jimmy wow das war vor einem Jahr. Ich bin gerade jetzt oops zu schreiben / auf allen Plattformen verwendet
cat
@ Jimmy23013 Aber Windows unterstützt /auch
MilkyWay90
@ MilkyWay90 Windows unterstützt /an einigen Stellen, wird aber in cmd, /xxxals Argument interpretiert.
Jimmy23013
2

APL (40)

X.Close⊣⎕DL 3⊣'X'⎕WC'Form' 'Hello World'
Marinus
quelle
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()

Bildbeschreibung hier eingeben

Seeker14491
quelle
2

Perl unter Windows (56)

use Win32;fork?kill+sleep+3,$$:Win32'MsgBox"Hello World"
chinesischer Perl Goth
quelle
Verwenden Sie "-MWin32", um vier Bytes zu speichern
DarkHeart
2

Perl 5, 47

Verwenden von Perl / Tk :

perl -MTk -e'alarm 3;tkinit-title,"Hello World!";MainLoop'
#     123    45678901234567890123456789012345678901234567
Matthias
quelle
Es scheint, dass das Tk-Modul erforderlich ist.
AL
2
Ja, natürlich benötigen Sie ein GUI-Toolkit. Ich wähle Tk wegen tkinit ().
Matthias
Ich zähle 44 Bytes. Zählen Sie auch die -MTkFlagge?
Slebetman
@slebetman Ja, ich zähle das als 3 Zeichen, ich habe die Anzahl zum Beitrag hinzugefügt.
Matthias
1
@ n.1 Ich habe es unter dem Titel mit einem Link zur CPAN-Dokumentation des Tk-Moduls hinzugefügt. Keines der Perl-Kernmodule ist ein GUI-Modul, daher müssen Sie immer externe Module installieren. Entschuldigung, das war mir klar (da ich ziemlich oft mit Perl arbeite), aber Sie haben Recht, es ist überraschend für diejenigen, die in anderen Sprachen arbeiten.
Matthias
2

Rebol View (r3gui), 49

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

"Hallo Welt" aus Rebol 3 View

Ungolfed:

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

Verarbeitung, 77

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

Bildschirmfoto:

Bildbeschreibung hier eingeben

Edit 1: Die Y-Position des Textes kann 9 statt 10 sein, wie durch @ace vermerkt.

Edit 2: 3000 kann als 3e3 dargestellt werden, um ein Zeichen zu entfernen. Dies wird auch durch @ace vermerkt

segfaultd
quelle
3
9 für Y-Position anstelle von 10 zu verwenden, funktioniert für mich.
user12205
Habe gerade den Code bearbeitet. Vielen Dank!
Segfaultd
3
Nur bemerkt , dass Sie verwenden können , 3e3statt 3000ein weiteres Zeichen zu speichern
user12205
2

Bash + ImageMagick (36 Bytes)

timeout 3 display label:Hello\ world

Getestet auf Ubuntu 14.04 LTS und Fedora 20.

Schöner aussehend, aber 10 Bytes größer:

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

CMD / Batch - 33 Bytes

Ich glaube, dass das Fenster, in dem das Windows CMD-Terminal ausgeführt wird, als GUI-kompatibel gilt.

start "Hello world" cmd /csleep 3

Wenn Sie den sleepBefehl nicht auf Ihrem System haben, können Sie timeoutden Standard in Windows 7 verwenden. Für zwei weitere Bytes.

start "Hello world" cmd /ctimeout 3

Startet ein neues CMD-Fenster mit dem Titel "Hello World" ( NICHT im Terminal selbst angezeigt, sondern als Titel des GUI-Fensters, in dem das Terminal ausgeführt wird). Dieses Fenster wird geschlossen, sobald alle analysierten Befehle ausgeführt wurden sleep 3oder abgeschlossen timeout 3hat.

Das Fenster sieht so aus -

Kerl

Hinweis; startFührt die angegebenen Befehle in einem neuen Fenster aus - nicht in dem Fenster, in dem Sie die obigen Befehle ausführen.

unclemeat
quelle
Durch Ändern dieser cmd "Hello world" cmd /ctimeout 3Einstellung wird Hello World 3 Sekunden lang in der Titelleiste angezeigt, was jedoch wahrscheinlich nicht zählt.
Chris Kent
1
Ich würde nicht denken, dass es das tut, weil es kein neues Fenster erzeugt. Die Frage besagt, dass ein GUI-kompatibles Fenster angezeigt wird (es wird als Schlüsselwort angezeigt), was bedeutet, dass ein neues Fenster angezeigt werden muss. Gute Idee.
Unclemeat
start "Hello world"Sie, Sir, sind ein Genie.
Dorukayhan will Monica
1

Python 3, 83 72 Bytes

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

Speichern Sie Bytes mit tkinter.

Die alte Methode fügte Labeldem Frame ein hinzu. Diese Methode setzt den Titel des Frames auf Hello World. f.after(3000,exit)Läuft exit()nach 3000Ablauf von Millisekunden.

Justin
quelle
Gleiche Idee, anderes Modul: turtlehat weniger 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
quelle
1

Rubin [mit Schuhen] (44 Zeichen)

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

osx app

Fabien Sa
quelle
1

C # 124

Weit entfernt von der kürzesten :(

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