Напишіть програму GUI world GUI, яка закриється через три секунди


24

Будь ласка, прочитайте правила та сміливі області .

Напишіть програму будь-якою мовою, якщо вона підтримує графічний інтерфейс для віконної системи (не може бути текстовими консолями тощо) та має бути графічним інтерфейсом / інструментарієм / вікном.

Програма повинна сказати привіт світ будь-яким способом (сплеск зображення, рядок меню, рядок стану, заголовок, відео, поле повідомлень, інші матеріали віджетів тощо), доки не з’явиться вікно, сумісне з графічним інтерфейсом, і відображає цей текст протягом трьох секунд . Людина, яка може зашифрувати це найменшою кількістю використовуваного коду, перерахованого в байтах, візьме пиріг.


1
Зауваження тут принизилися до безглуздого аргументу. Будь ласка, утримуйтесь від розширеного обговорення в коментарях; при необхідності ви можете використовувати чат замість цього. Усі коментарі піддані.
Дверна ручка

13
Не має значення, звідки взявся аргумент - всі користувачі повинні уникати участі в суперечках, які явно шуміть або нікуди не діваються.
Дверна ручка

1
Це повинно бути "Hello world" чи може бути "Hello_world"?
slebetman

3
Також він повинен вийти витончено?
slebetman

Ви не вказуєте, як потрібно запускати програму? наприклад, чи потрібно його запускати самостійно чи це може бути щось завантажене у вже запущеному середовищі?
Джордон Біондо,

Відповіді:


28

Оболонка Unix, 31 символ

xmessage -timeout 3 hello world

message "hello world" with button "okay"

Ця програма вимагає утиліта xmessage (1) від X.Org. Він використовує традиційні чорно-білі віджети X Athena (Xaw).


Хмм ... Я збирався відправити його , використовуючи timeoutі , zenityале це було більше ...
BenjiWiebe

@BenjiWiebe Є zenityвідповідь №1
kernigh

2
Ви можете зберегти 1 байт: тайм-аут 3 xmessage hello world
Гленн Рендерс-Персон

1
@ GlennRanders-Pehrson Я не можу цього зробити, тому що моя машина не має timeoutкоманди. Можливо, хтось ще може опублікувати нову відповідь, яка використовує його?
kernigh

23

Шелл і гедіт - 27 символів

timeout 3 gedit Hello World

Якщо Hello World потрібно відображати як один рядок, то його 28 символів:

timeout 3 gedit Hello\ World

timeoutутиліта виконує команду протягом зазначеної тривалості. Це гарантує, що gedit працює протягом 3 секунд, передбачаючи мінімальний час запуску.

Будь-який редактор можна використовувати замість gedit. Якщо використовується коротший редактор з назвою, наприклад gvim, довжину можна зменшити на 1 або більше символів.

Використання редактора, спочатку продуманого користувачем80551 .


Втечі з простору, використовуйтеHello\ World
user80551

1
@ user80551 Питання вимагає "Hello World" відображатися будь-яким чином , тому це не повинно бути необхідним.
asheeshr

Технічно це зробило бHello <space> <close icon> <Document icon> World
користувач80551,

Чи можете ви підтвердити, чи kateпрацював би замість цього gedit?
користувач80551

@ user80551 У вас не встановлено KDE, але, переходячи на сторінку користувача Kate , схоже, немає причин, чому він не повинен працювати.
asheeshr

19

Яблукопис, 45 байт:

Не часто Applescript є однією з коротших відповідей:

display alert "hello world" giving up after 3

Вставте в редактор Applescript і запустіть або запустіть за osascriptдопомогою командного рядка:

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

enter image description here


17

HTML + Javascript, 73 60 символів

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

Це працює в Chrome, але може не переноситися для інших браузерів.

Пропозиції з коментарів продовжують це:

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

Це багато гольфу я бачив. Я бачив, як це переходило від 108знаків до низу 73. Раптом видно весь код.
Джастін

@Quincunx: Ви пропустили перші кілька повторень. :)
Грег Хьюгілл

Це тому, що я був зайнятий публікацією власного коду. :-)
Джастін

2
<body onload=open('','_self'),setTimeout(close,3e3)>Hello worldсхоже, врятує ще кілька символів.
Вентеро

1
У вас є пропозиція редагування від користувача3082537: збережіть два знаки<body onload=open('',name=setTimeout(close,3e3))>Hello world
Джастін

16

сценарій оболонки, 31

Не впевнений, чи відповідає вона. Вимагаєnotify-send . Працює принаймні на Ubuntu 12.04.

notify-send -t 3000 Hello world

screenshot


1
Можливо, ні, оскільки це не вікно, сумісне з графічним інтерфейсом . На жаль, користуватися zenityнабагато довше.
користувач80551


4
Я вважаю, що вікно без віконних прикрас все ще є вікном. Тут, в епоху Просвітництва, сповіщення також має кнопку X, щоб закрити його (але жодних інших прикрас вікон).
kernigh

12

оболонка + gedit / geany, 34

gedit Hello\ World&sleep 3;kill $!

Hello World in gedit

Це передбачає, що gedit спливає миттєво, оскільки 3 секунди рахуються від початку видачі команди. Може бути меншим, якщо текстовий редактор GUI коротший за gedit.

geany працює також для тієї ж кількості символів, просто s/gedit/geany/g

Hello World in geany

EDIT: Використання timeoutкоротше. /codegolf//a/28477/8766

EDIT2: Чи може хтось підтвердити, чи працює це kate?


мель, 32

Якщо точно Hello Worldне потрібно, то meldможна використовувати.

meld Hello World&sleep 3;kill $!

Hello : World - Meld


Хороша ідея, geditнамагається відкрити файл з таким ім'ям, навіть якщо файлу немає.
AL

Якщо ви користуєтесь gvimним, знадобиться лише 33 символи
аван

1
@Daniel haltбуде коротше, але я не знаю, чи дозволяється руйнівно. Крім того, для цього потрібні кореневі дозволи, тому нам або потрібно припустити, що ми є root, або використовувати, sudoяке коштує більше (і потрібно, щоб користувач вводив пароль).
user80551

1
Вибачте, я намагався бути жартівливим. Я припускав, що користувач має root права.
Даніель

1
@Daniel Не потрібно шкодувати, цей сайт заснований на найбільш злому хитромудрішому скручуванні правил, щоб скоротити ваш код.
користувач80551


6

Пітон (пігама), 87

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

screenshot


Не працює на OSX, не показує вікно ...
Гаррі Бідл

@BritishColour це має бути, можливо, це занадто мало? Спробуйте змінити розмір на[999,999]
user12205

Все ще не працює, вікно навіть не з’являється…
Гаррі Бісл

@BritishColour Ну, безумовно, це працює для мене. Дивіться тут . Можливо, це відображалося на задньому плані чи щось?
користувач12205

1
Цікаво, як наш код в основному ідентичний, але використовує інший модуль. tkinterвиявляється коротше.
Джастін

6

Tcl - 32 байти

Я помітив, що деякі з цих матеріалів, як оболонка або javascript, дозволяють вводити код у консоль. Якщо це так, я можу скоротити його до:

wm ti . hello\ world;af 3000 exi

Потрібно набрати в консоль після запуску бажання. Значить, запустіть wishбез аргументів, які дадуть консоль REPL, а потім введіть код вище. Це використовує той факт, що tcl може бути поблажливим і автозавершеним іменами команд / функцій, але лише в інтерактивному режимі. Так що afнасправді виконує afterкоманду і exiвиконує exit. Я хотів використовувати, exале в моїй системі exвстановлений редактор.


Оригінальне подання - 36 байт

wm ti . hello\ world;after 3000 exit

Запустити з використанням wishзамість tclsh.


5

52 51 символів з Mathematica

(Сподіваюся, він вважається сумісним із графічним інтерфейсом.)

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

Mathematica GUI Golf code


4

Java, 136 байт

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

Відображає повідомлення Hello Worldяк заголовок кадру. Через 3кілька секунд програма закривається.

Виглядає так:

enter image description here

Перетягніть його більше:

enter image description here


Розширений код (тобто читабельний):

class F {

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

}

Ви можете використовувати enumзамість, classщоб зберегти інший символ.
Рікінг

@Рікінг не працює.
Джастін

Дійсно? Я міг би присягнути, що фактично це колись використовував ... Данг.
Рікінг




4

Visual FoxPro - 23 символи

WAIT"hello world"TIME 3

Hello world in VFP

Це зловживає тим, що VFP дозволяє не ставити пробіл між рядком для друку (який я щойно виявив) і що дозволяє скоротити кожне ключове слово до перших 4 символів.

Негольована версія:

WAIT "hello world" TIMEOUT 3

4

GTK +, 47 45

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

Hello World


Стара версія (оцінка 47):

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

Hello World

Чомусь із zenity відображається текст, який можна перекласти як « Все оновлення» .


1
Щоб додати додаткову інформацію, усі оновлення завершені. це те, що я отримую англійською.
користувач12205

1
Можна зменшити один символ, змінивши --titleна--text
asheeshr

1
Ви можете змінитись "Hello World"доHello\ World
Керні

Спасибі AsheeshR та kernigh, у мене з вашою допомогою є 2 менш символи.
AL

3

C, 151 символів

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

Не найменша відповідь. Мені це подобається, хоча.


Хороша робота. & # 32 & # 32 & # 32 & # 32
Sut Dip

Як це навіть компілюється? 'SAFE'не є жодною символікою.
heinrich5991

@ heinrich5991 SAFE, ймовірно, визначається в allegro.h як єдиний символ.
Адам Девіс

@AdamDavis C оцінює макроси в константах символів?
heinrich5991

1
Ніякого макросу, це насправді лише 32-бітове ціле число, записане чотирма байтами в так званій постійній нотації багато символів, занадто розумний для власного-хорошого спосіб написання чотирьохбайтових рядків тегів. Apple використовувала його для чарівних чисел файлів один раз. Сьогодні компілятори це підтримують, але надсилають попередження. Приклад для невіруючих
Wander Nauta

3

C # 101 151

Це, безумовно, не найкоротша відповідь (оскільки є й інші хороші відповіді, які є набагато коротшими), але codegolf.SE потребує набагато більше 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

Альтернатива, заснована на відповіді Боба , але WPF замість WinForms:

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

Зберігає 3 символи завдяки скороченому простору імен ...


Вам потрібно включити usingдекларації до числа символів. Крім того, ви можете їх залишити, але тоді вам доведеться робити такі речі System.Windows.Forms.MessageBox.Show(трохи менше символів, якщо це лише одне використання). Оскільки ваш код наразі є, він не компілюється та не запускається.
Боб

Ну, я просто припустив, що це не потрібно, тому що я бачу багато відповідей у ​​C, C ++, C #, Java тощо, без використання / імпорту / будь-якого іншого. Я все-таки відредагую. До речі, чи є явне правило щодо цього? Впевнений, що він буде компілювати та запускатись із правильними налаштуваннями компіляції та / або компілятором. (наприклад, вирішення за допомогою директив про час компіляції, якщо вони можуть бути вирішені окремо)
Num Lock,


Він трохи сірий - наприклад, мені довелося додати посилання на System.Windows.Forms.dll, що є частиною командного рядка msbuild / компілювати. Однак загальним є єдиний консенсус, коли вимагається повноцінна програма, using/ import/ #include/ тощо. там, де необхідно для збору та запуску коду, та спроби використовувати хитрощі командного рядка компілятора, щоб ухилитися від цього погано.
Боб

Я буду мати це на увазі. Дякую за довідку.
Num Lock

3

Пакет (24)

msg/time:3 * hello world

Тестовано на Windows 7, але має працювати в будь-якій версії Windows, заснованої на NT, якщо у вашій папці System32 є MSG.EXE.

EDIT: Мабуть, MSG.EXE недоступний у домашніх версіях Windows. Наприклад, у Windows 7 це доступно лише у виданнях Ultimate або Business. Однак ви можете скопіювати файл у папку System32 і примусити його працювати. (Ви також повинні скопіювати відповідний файл MSG.EXE.MUI, щоб отримати належні повідомлення про помилки, але мій "скрипт" працює без них.)

Вам також потрібно встановити програмне забезпечення для більшості цих відповідей, тому я не думаю, що це має бути дискваліфікатором.


Чому цей виклик не буде викликати програму з іменем time:3у папці, що називається msgу поточному каталозі?
кіт

@cat використовує Windows \.
jimmy23013

@jimmy вау, це було рік тому. Я просто звик писати / на всіх платформах зараз ой
кіт

@ jimmy23013 Але Windows /теж підтримує
MilkyWay90

@ MilkyWay90 Windows підтримує /місцями, але в cmd, /xxxінтерпретується як аргумент.
jimmy23013




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

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);}}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.