Üç saniye sonra kendini kapatan merhaba bir dünya GUI programı yaz


24

Lütfen kuralları ve koyu alanları da okuyun .

Bir pencere sistemi için GUI desteğine sahip olduğu sürece herhangi bir dilde bir program yazın (metin konsolları, vb. Olamaz ve bir GUI / araç takımı / pencere olmalıdır).

Program, GUI uyumlu bir pencere göründüğü ve bu metni üç saniye boyunca gösterdiği sürece herhangi bir şekilde merhaba dünyayı (sıçrama görüntüsü, menü çubuğu, durum çubuğu, başlık, video, mesaj kutusu, diğer widget öğeleri vb.) Söylemelidir. . Bayt sayılan, kullanılan en az miktarda kod kodlayabilen kişi pastayı alacaktır.


1
Buradaki yorumlar anlamsız bir tartışmaya dönüşmüştür. Lütfen yorumlardaki uzun tartışmalardan kaçının; Gerekirse, bunun yerine sohbeti kullanabilirsiniz . Tüm yorumlar temizlendi.
Doorknob

13
Argümanın nereden geldiği önemli değil - tüm kullanıcılar açıkça gürültü yapan veya hiçbir yere gitmeyen anlaşmazlıklara katılmaktan kaçınmalıdır.
Doorknob

1
"Merhaba dünya" mı olmalı yoksa "Hello_world" olabilir mi?
slebetman

3
Ayrıca, zarif bir şekilde çıkmalı mı?
slebetman

Programın nasıl çalıştırılacağını belirtmiyor musunuz? Mesela kendi başına başlatılması gerekiyor mu, yoksa hali hazırda çalışan bir ortamda yüklü bir şey olabilir mi?
Jordon Biondo

Yanıtlar:


28

Unix kabuğu, 31 karakter

xmessage -timeout 3 hello world

message "hello world" with button "okay"

Bu program, X.Org'dan xmessage (1) yardımcı programını gerektirir . Geleneksel siyah beyaz X Athena Widget'larını (Xaw) kullanır.


Grrr ... Ben kullanarak bir tane göndermek için gidiyordu timeoutve zenity... ama uzundu
BenjiWiebe

Bir yoktur @BenjiWiebe zenityde n.1 tarafından cevap codegolf.stackexchange.com/a/28451/4065
kernigh

2
1 byte tasarruf edebilirsiniz: timeout 3 xmessage merhaba dünya
Glenn Randers-Pehrson

1
@ GlennRanders-Pehrson Bunu yapamam, çünkü makinemde timeoutkomut yok . Belki başka biri onu kullanan yeni bir cevap gönderebilir?
kernigh

23

Kabuk ve gedit - 27 karakter

timeout 3 gedit Hello World

Hello World'ün tek bir dize olarak gösterilmesi gerekiyorsa, onun 28 karakteri:

timeout 3 gedit Hello\ World

timeoutyardımcı program belirtilen süre boyunca bir komut çalıştırır. Minimum başlangıç ​​zamanı varsayarak gedit'in 3 saniye boyunca çalışmasını sağlar.

Yerine herhangi bir editör kullanılabilir gedit. Editör gibi daha kısa bir ad kullanılırsa gvim, uzunluk 1 veya daha fazla karakterle azaltılabilir.

Başlangıçta user80551 tarafından düşünülen bir editör kullanmak .


Hello\ World
Uzaydan kaçın

1
@ user80551 Soru, "Merhaba Dünya" nın herhangi bir şekilde gösterilmesini gerektiriyor;
asheeshr

Teknik olarak, bu yapacağımHello <space> <close icon> <Document icon> World
user80551

kateBunun yerine işe yarayacağını onaylayabilir misiniz gedit?
user80551

@ user80551 KDE yüklü değil, ancak Kate'in adam sayfasına giderek , çalışmaması için herhangi bir neden olduğu görünmüyor.
asheeshr

19

Uygulama, 45 bayt:

Sık sık değil, Applescript daha kısa cevaplardan biridir:

display alert "hello world" giving up after 3

Applescript Editor'a yapıştırın ve çalıştırın veya osascriptkomut satırında kullanarak çalıştırın :

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

enter image description here


17

HTML + Javascript, 73 60 karakter

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

Bu Chrome'da çalışır, ancak diğer tarayıcılara taşınabilir olmayabilir.

Yorumlardan gelen öneriler bunu daha da ileri götürüyor:

<body onload=open('',name=setTimeout(close,3e3))>Hello world

Bu çok golf oynadım. Bunun 108karakterlerden aşağıya doğru gittiğini gördüm 73. Birden kodun tamamı görünür.
Justin

@ Quincunx: O zaman ilk birkaç tekrarlamayı kaçırdın. :)
Greg Hewgill

Çünkü kendi kodumu göndermekle meşguldüm. :-)
Justin

2
<body onload=open('','_self'),setTimeout(close,3e3)>Hello worldBirkaç karakter daha kaydetmiş gibi görünüyor.
Hava

1
User3082537 tarafından yapılan bir düzenleme öneriniz var: iki karakter kaydet<body onload=open('',name=setTimeout(close,3e3))>Hello world
Justin

16

kabuk betiği, 31

Nitelik olup olmadığından emin değil. Gerektirir notify-send. En azından 12.04 Ubuntu'da çalışır.

notify-send -t 3000 Hello world

screenshot


1
Muhtemelen GUI uyumlu bir pencere olmadığı için değil . Ne yazık ki, zenitykullanımı çok daha uzun.
user80551


4
Pencere dekorasyonu olmayan bir pencerenin hala bir pencere olduğuna inanıyorum. Burada Aydınlanma'da, bildirimde ayrıca kapatmak için bir X düğmesi bulunur (başka pencere dekorasyonu yoktur).
kernigh

12

deniz hayvanı kabuğu + gedit / geany, 34

gedit Hello\ World&sleep 3;kill $!

Hello World in gedit

Bu, gedit'in 3 saniye içinde komutun yayınlanmasından itibaren sayıldığından beri ortaya çıktığını varsayar. Şundan kısa bir GUI metin düzenleyicisi varsa daha küçük olabilirgedit .

geany Aynı sayıda karakter için de işe yarar, sadece s/gedit/geany/g

Hello World in geany

EDIT: Kullanımı timeoutdaha kısadır./codegolf//a/28477/8766

EDIT2: Bu işe yarayıp yaramadığını herkes onaylayabilir kate mi?


kaynak, 32

Tam Hello Worldolarak gerekli değilse, o meldzaman kullanılabilir.

meld Hello World&sleep 3;kill $!

Hello : World - Meld


Güzel fikir, geditdosya olmasa bile bu adda bir dosya açmaya çalışıyor.
AL

Eğer kullanırsanız gvimsadece gerekecektir 33 karakter
avall

1
@Daniel haltdaha kısa olurdu ama yıkıcı olmaya izin verilip verilmediğini bilmiyorum. Ayrıca, kök izinleri gerektirir, bu yüzden ya kök olduğumuzu varsaymamız ya da sudohangi maliyeti daha fazla kullandığımızı (ve kullanıcının şifreyi yazmasını gerektirmesi gerekir) gerekir.
user80551

1
Üzgünüm, esprili olmaya çalışıyordum. Kullanıcının kök izinleri olduğunu varsayıyordum.
Daniel

1
@Daniel Üzgünüz gerek yok, bu site kodunuzu kısaltmak için kuralların en kötü sapkın büküm dayanmaktadır.
user80551

7

VBScript, 58

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

screenshot


6

Python (pygame), 87

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

screenshot


OSX üzerinde çalışmıyor, pencereyi göstermiyor ...
Harry Beadle

@BritishColour olmalı, belki de çok küçük? Boyutu değiştirmeyi deneyin[999,999]
user12205 22:14

Hala çalışmıyor, pencere bile görünmüyor ...
Harry Beadle

@BritishColour Peki kesinlikle benim için çalışıyor. Buraya bakınız . Belki de arka planda mı göründü?
user12205

1
Kodumuzun temelde aynı olması ilginç ama farklı bir modül kullanıyor. tkinterdaha kısa olduğu ortaya çıktı.
Justin,

6

Tcl - 32 bayt

Bu gönderilerden bazılarının, kabuk veya javascript olanlar gibi, kodu konsola yazmanıza izin verdiğini fark ettim. Bu durumda, onu kısaltabilirim:

wm ti . hello\ world;af 3000 exi

Dilek çalıştırıldıktan sonra konsola yazılmalıdır . Yani, wishsize bir REPL konsolu verecek argümanlar olmadan çalıştırın ve sonra yukarıdaki kodu yazın. Bu, tcl'nin esnek ve otomatik tamamlama komut / işlev adları olabileceği gerçeğini ancak yalnızca etkileşimli modda kullanır. Böylece bu afaslında emri yerine getirir afterve exiuygular exit. Kullanmak istedimex ama sistemimde exeditör kurulu.


Orijinal gönderim - 36 bayt

wm ti . hello\ world;after 3000 exit

Kullanarak çalıştırın wishyerine tclsh.


5

Mathematica ile 52 karakter

(Umarım GUI uyumlu olarak sayılır.)

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

Mathematica GUI Golf code


4

Java, 136 bayt

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

Mesajı Hello Worldbir çerçevenin başlığı olarak görüntüler . 3Saniye sonra , program kapanır.

Buna benzer:

enter image description here

Daha büyük sürükleyin:

enter image description here


Genişletilmiş kod (yani okunabilir):

class F {

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

}

Başka bir karakter kaydetmek için enumyerine kullanabilirsiniz class.
Riking

@Riking çalışmıyor.
Justin,

Gerçekten mi? Bunu bir kere kullandığına yemin edebilirdim ... Dang.
Riking


4

R, 44

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

enter image description here


4

PowerShell - 63 52

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

4

Visual FoxPro - 23 karakter

WAIT"hello world"TIME 3

Hello world in VFP

Bu, VFP'nin yazdırılacak dize (henüz keşfettiğim) arasına boşluk koymamasını ve her anahtar kelimeyi ilk 4 karakterine kadar kısaltmasını sağladığı gerçeğini kötüye kullanır.

Ungolfed versiyonu:

WAIT "hello world" TIMEOUT 3

4

GTK +, 47 45

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

Hello World


Eski versiyon (puan 47):

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

Hello World

Nedense, zenity Tüm güncellemeler yapıldığı gibi çevrilebilecek bir metin görüntüler .


1
Sadece bazı ekstra bilgiler eklemek için, Tüm güncellemeler tamamlandı. ingilizcem ne olsun
user12205,

1
Sen değiştirerek bir karakter azaltabilir --titleiçin--text
asheeshr

1
Değişebilirsin "Hello World"içinHello\ World
kernigh

Teşekkürler AsheeshR ve kernigh, yardımınızla 2 daha az karakterim var.
AL

3

C, 151 karakter

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

En küçük cevap değil. Yine de hoşuma gitti.


Aferin. & # 32 & # 32 & # 32 & # 32
Sut Dip

Bu nasıl derlenir? 'SAFE'tek bir karakter değil.
heinrich5991

@ heinrich5991 SAFE, allegro.h dosyasında tek bir karakter olarak tanımlanmaktadır.
Adam Davis,

@AdamDavis C makroları karakter sabitlerinde değerlendirir mi?
heinrich5991

1
Makro yok, sadece çok karakterli sabit notasyon adı verilen dört bayt olarak yazılan 32 bitlik bir tamsayı, dört baytlık etiket dizeleri yazmak için kendi başına çok akıllıca. Apple bir kez dosya türü sihirli sayılar için kullandı. Derleyiciler bugünlerde onu destekliyor ancak bir uyarı veriyor. İnanmayanlara örnek
Wander Nauta

3

C # 101 151

Bu kesinlikle en kısa cevap olmayacak (çünkü zaten daha kısa olan başka iyi cevaplar var) ama codegolf.SE bence çok daha fazla C # katkıya ihtiyaç duyuyor!

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

Bob'un cevabına dayanan , ancak WinForms yerine WPF'li bir alternatif :

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

Kısa ad alanı sayesinde 3 karakter kaydeder ...


usingTanımlamaları karakter sayımına dahil etmeniz gerekir . Alternatif olarak, onları dışarıda bırakabilirsiniz ama sonra gibi şeyler yapmanız System.Windows.Forms.MessageBox.Showgerekir (yalnızca tek kullanımlıksa, biraz daha az karakter). Kodunuz şu anda olduğu gibi derlenmeyecek veya çalıştırılmayacaktır.
Bob,

Eh, sadece gerekli olmadığını düşündüm, çünkü C, C ++, C #, Java vb. Yine de düzenleyeceğim. BTW, bu konuda açık bir kural var mı? Derleme ve doğru derleme ayarları ve / veya derleyici ile çalıştırılacağından emin olun. (örneğin, derlenme süresinde direktifleri kullanarak çözme, farklı çözülebilmeleri koşuluyla)
Num Lock


Bu biraz gri - örneğin, System.Windows.Forms.dllmsbuild config / compile komut satırının bir parçası olan bir referans eklemek zorunda kaldım . Ancak, genel fikir birliği, tam bir program istendiğinde, using/ import/ #include/ etc gibi görünüyor. kodun derlenmesi ve çalıştırılması için gerekli olduğunda ve bu durumdan kaçmak için derleyici komut satırı püf noktaları kullanmaya çalışmak gerekir.
Bob,

Bunu aklımda tutacağım. Referanslar için teşekkürler.
Num Lock

3

Toplu iş (24)

msg/time:3 * hello world

Windows 7'de test edilmiştir, ancak System32 klasörünüzde MSG.EXE olduğunu varsayarsak, Windows'un herhangi bir NT tabanlı sürümünde çalışmalıdır.

DÜZENLEME: Görünüşe göre MSG.EXE varsayılan olarak, Windows'un ev sürümlerinde kullanılamaz. Örneğin, Windows 7'de, bu yalnızca Ultimate veya İşletme sürümlerinde kullanılabilir. Ancak, dosyayı System32 klasörünüze kopyalayıp çalışmasını sağlayabilirsiniz. (Uygun hata iletilerini almak için uygun MSG.EXE.MUI dosyasını da kopyalamanız gerekir, ancak "komut dizim" onlar olmadan çalışır.)

Bu diğer yanıtların çoğunun da çalışması için yazılım yüklemelisiniz, bu yüzden diskalifiye edici olması gerektiğini düşünmüyorum.


Bu neden bir program çağırmıyor? time:3msg geçerli dizinde adı verilen klasörde adlandırılan ?
Kedi,

@cat Windows kullanır \ .
jimmy23013

@jimmy vay bu bir yıl önceydi. Ben şimdi sadece ayraç / tüm platformlarda yazmaya alışkınım
kedi

@ jimmy23013 Ancak Windows destekler / çok
MilkyWay90

MilkyWay90, Windows destekler @ /bazı yerlerde, ama içinde cmd, /xxxbağımsız değişken olarak yorumlanır.
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 bayt

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

enter image description here


2

Windows'da Perl (56)

use Win32;fork?kill+sleep+3,$$:Win32'MsgBox"Hello World"

Dört bayttan tasarruf etmek için '-MWin32' kullanın
DarkHeart

2

Perl 5, 47

Kullanılması Perl / Tk :

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

Tk modülünün gerekli olduğu görülüyor.
AL

2
Evet, elbette biraz GUI araç setine ihtiyacınız var . Tkinit () yüzünden Tk seçiyorum.
Matthias

44 bayt sayıyorum. -MTkBayrağı da mı sayıyorsun ?
slebetman

@slebetman Evet, 3 karakter olarak sayımı yazıya ekledim.
Matthias

1
@ n.1 Tk modülünün CPAN belgelerine bir link vererek başlığın altına ekledim. Perl çekirdek modüllerinden hiçbiri bir GUI modülü değildir, bu nedenle daima harici modüller kurmanız gerekir. Üzgünüm, bu benim için açıktı (sık sık perl ile çalıştığım için), ama haklısın, başka dillerde çalışanlar için şaşırtıcı.
Matthias

2

Rebol Görünümü (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

İşleme, 77

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

Ekran görüntüsü:

enter image description here

Düzenleme 1: Metnin Y konumu, @ace ile belirtildiği gibi, 10 yerine 9 olabilir.

Düzenleme 2: 3000 bir karakterin tıraş edilmesi için 3e3 olarak gösterilebilir, ayrıca @ace


3
10 pozisyon yerine Y pozisyonunda 9 kullanmak benim için çalışıyor.
user12205

Kodu yeni düzenledim. Teşekkürler!
segfaultd

3
Bir karakter daha kaydetmek 3e3yerine kullanabileceğinizi farkettim3000
user12205

2

bash + ImageMagick (36 bayt)

timeout 3 display label:Hello\ world

Ubuntu 14.04 LTS ve Fedora 20'de test edilmiştir.

Güzel görünümlü, ancak 10 bayt daha büyük:

timeout 3 display -size 800 label:Hello\ world

2

CMD / Toplu İş - 33 Bayt

Windows CMD terminalinin çalıştığı pencerenin GUI uyumlu sayıldığını düşünüyorum.

start "Hello world" cmd /csleep 3

Eğer sleepsisteminizde komut yoksa - o zaman kullanabilirsiniztimeout iki bayt Windows 7'de varsayılan da verilir.

start "Hello world" cmd /ctimeout 3

"Merhaba Dünya" başlıklı yeni bir CMD penceresi başlatır ( DEĞİL terminalde kendisinde gösterilir, ancak GUI penceresinin başlığı olarak, terminal çalışır o), bu pencere tüm çözümlenen komutları yakın en kısa sürede idam gibi - yani sonra sleep 3veyatimeout 3 tamamladı.

Pencere böyle gözüküyor -

Bloke

Not; startverilen komutları yeni bir pencerede çalıştırır - yukarıdaki komutları çalıştırdığınız pencereyi değil.


Bunu değiştirmek cmd "Hello world" cmd /ctimeout 3Hello dünyasını 3 saniye boyunca başlık çubuğuna koyuyor, ancak bu muhtemelen sayılmaz.
Chris Kent

1
Öyle sanmam, çünkü yeni bir pencere açmaz. Soru, GUI uyumlu bir pencerenin göründüğünü (anahtar kelime olarak görünüyor) belirterek yeni bir pencere göstermesi gerektiğini söylüyor. Yine de iyi fikir.
unclemeat

start "Hello world"Siz efendim, sen bir dahisin.
user8397947

1

Python 3, 83 72 bayt

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

Kullanarak baytları kaydedin tkinter.

Eski yöntem Labelkareye bir a ekledi . Bu yöntem, çerçevenin başlığını olarak ayarlar Hello World. milisaniye geçtikten sonra f.after(3000,exit)çalışır .exit()3000


Aynı fikir, farklı modül: turtledaha az bayt var. = D codegolf.stackexchange.com/a/28548/14506
12'de daviewales

1

Kobra - 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 [Ayakkabı ile] (44 karakter)

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

osx app


1

C # 124

En kısa mesafeden :(

class P{static void Main(){new System.Windows.Forms.Form(){Text="Hello World"}.Show();System.Threading.Thread.Sleep(3000);}}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.