Написать программу hello world GUI, которая закрывается через три секунды


24

Пожалуйста, ознакомьтесь с правилами и жирными областями .

Напишите программу на любом языке, если она поддерживает GUI для оконной системы (не может быть текстовой консолью и т. Д. И должна быть GUI / toolkit / window).

Программа должна приветствовать мир любым способом (заставка, строка меню, строка состояния, заголовок, видео, окно сообщения, другие элементы виджета и т. Д.), При условии, что окно, совместимое с графическим интерфейсом, отображает этот текст в течение трех секунд. , Человек, который может закодировать это с наименьшим количеством использованного кода, подсчитанного в байтах, возьмет пирог.


1
Комментарии здесь превратились в бессмысленный аргумент. Пожалуйста, воздержитесь от расширенного обсуждения в комментариях; при необходимости вы можете использовать чат . Все комментарии были удалены.
Дверная ручка

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

1
Это должен быть «Hello world» или «Hello_world»?
Slebetman

3
Кроме того, он должен выйти изящно?
Slebetman

Вы не указываете, как программа должна быть запущена? например, он должен быть запущен сам по себе или это может быть что-то загруженное в уже работающей среде?
Джордон Биондо

Ответы:


28

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

xmessage -timeout 3 hello world

сообщение "привет мир" с кнопкой "все в порядке"

Эта программа требует утилиту xmessage (1) от X.Org. Он использует традиционные черно-белые виджеты X Athena (Xaw).


Хмм ... Я собирался отправить его , используя timeoutи , zenityно это было больше ...
BenjiWiebe

@BenjiWiebe zenityОтвет n.1
Kernigh,

2
Вы можете сохранить 1 байт: время ожидания 3 xmessage hello world
Гленн Рандерс-Персон

1
@ GlennRanders-Pehrson Я не могу этого сделать, потому что у моей машины нет timeoutкоманды. Может быть, кто-то еще может опубликовать новый ответ, который использует его?
Kernigh

23

Shell and gedit - 27 символов

timeout 3 gedit Hello World

Если Hello World должен отображаться в виде одной строки, то его 28 символов:

timeout 3 gedit Hello\ World

timeoutУтилита запускает команду на указанную продолжительность. Это гарантирует, что Gedit работает в течение 3 секунд, предполагая минимальное время запуска.

Любой редактор может быть использован вместо gedit. Если используется редактор с более коротким именем gvim, длина может быть уменьшена на 1 или более символов.

Использование редактора, изначально задуманного пользователем 80551 .


Escape the space, используйтеHello\ World
user80551

1
@ user80551 Вопрос требует, чтобы «Hello World» отображался каким-либо образом , поэтому в этом нет необходимости.
Asheeshr

Технически, это сделало бы этоHello <space> <close icon> <Document icon> World
user80551

Можете ли вы подтвердить, kateбудет ли работать вместо gedit?
user80551

@ user80551 У вас не установлен KDE, но, судя по справочной странице Кейт , кажется, нет никаких причин, почему он не должен работать.
asheeshr

19

Applescript, 45 байт:

Не часто Applescript является одним из коротких ответов:

display alert "hello world" giving up after 3

Вставьте в редактор Applescript и запустите или запустите с помощью osascriptкомандной строки:

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

введите описание изображения здесь


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

Скриншот


1
Вероятно, нет, так как это не GUI-совместимое окно . К сожалению, использование zenityнамного дольше.
user80551

Это 34 символа с gedit - codegolf.stackexchange.com/a/28425/8766
user80551

4
Я считаю, что окно без оконных украшений - это все еще окно. Здесь, в Enlightenment, уведомление также имеет кнопку X, чтобы закрыть его (но без других оконных декораций).
Керни

12

shell + 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

РЕДАКТИРОВАТЬ: Использование timeoutкороче. /codegolf//a/28477/8766

РЕДАКТИРОВАТЬ 2: Кто-нибудь может подтвердить, если это работает с kate ?


Meld, 32

Если точно Hello Worldне требуется, то meldможно использовать.

meld Hello World&sleep 3;kill $!

Hello : World - Meld


Хорошая идея, geditпытается открыть файл с этим именем, даже если нет файла.
AL

Если вы используете gvimэто потребуется всего 33 символов
Avall

1
@ Даниэль haltбыл бы короче, но я не знаю, допустимо ли быть разрушительным. Кроме того, для этого требуются права суперпользователя, поэтому мы должны либо предположить, что мы являемся пользователем root, либо использовать его, sudoкоторый стоит дороже (и требует, чтобы пользователь ввел пароль).
user80551

1
Извините, я пытался быть смешным. Я предполагал, что у пользователя есть права root.
Даниэль

1
@Daniel Не нужно извиняться, этот сайт основан на самых злобных хитросплетениях правил, которые делают ваш код короче.
user80551


6

Питон (pygame), 87

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

screenshot


Не работает на OSX, не показывает окно ...
Гарри Бидл

@ БританскийЦвет должен, возможно, он слишком мал? Попробуйте изменить размер на[999,999]
user12205

Все еще не работает, окно даже не появляется ...
Гарри Бидл

@BritishColour Ну, это определенно работает для меня. Смотрите здесь . Возможно, это было на заднем плане или что-то?
user12205

1
Интересно, что наш код в основном идентичен, но использует другой модуль. tkinterоказывается короче.
Джастин

6

Tcl - 32 байта

Я заметил, что некоторые из этих представлений, такие как shell или 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

(Надеюсь, это считается GUI-совместимым.)

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чтобы сохранить другого персонажа.
Riking

@ Рикинг не работает.
Джастин

В самом деле? Я мог бы поклясться, что использовал это однажды ... Данг.
Riking




4

Visual FoxPro - 23 символа

WAIT"hello world"TIME 3

Привет, мир в VFP

Это злоупотребляет тем фактом, что VFP позволяет не помещать пробел между строкой для печати (которую я только что обнаружил) и что оно позволяет сократить каждое ключевое слово до первых 4 символов.

Безголовая версия:

WAIT "hello world" TIMEOUT 3

4

GTK +, 47 45

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

Привет, мир


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

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

Привет, мир

По какой-то причине, zenity отображает текст, который можно перевести как все обновления сделаны .


1
Просто чтобы добавить дополнительную информацию, все обновления завершены. это то, что я получаю на английском языке.
user12205

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
Сат Дип

Как это вообще компилируется? '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 и т. Д. Без использования / import / что угодно. Я отредактирую это, все же. Кстати, есть ли какое-то явное правило на это? Конечно, он будет компилироваться и работать с правильными настройками компиляции и / или компилятором. (например, разрешение с использованием директив во время компиляции, при условии, что они могут быть разрешены отдельно)
Num Lock


Это немного серый - например, мне пришлось добавить ссылку на System.Windows.Forms.dll, которая является частью команды msbuild config / compile. Однако, по общему мнению, когда запрашивается полная программа, using/ import/ #include/ и т. Д. где это необходимо для кода, необходимого для компиляции и запуска, и попытки использовать трюки командной строки компилятора, чтобы избежать этого, это плохо.
Боб

Я запомню это. Спасибо за ссылки.
Num Lock

3

Пакетная (24)

msg/time:3 * hello world

Протестировано на Windows 7, но должно работать на любой NT-версии Windows, при условии, что у вас есть MSG.EXE в папке System32.

РЕДАКТИРОВАТЬ: Очевидно, MSG.EXE не доступен по умолчанию в домашних версиях Windows. Например, в Windows 7 это доступно только в версиях Ultimate или Business. Однако вы можете скопировать файл в папку System32 и заставить его работать. (Вы также должны скопировать соответствующий файл MSG.EXE.MUI, чтобы получить правильные сообщения об ошибках, но мой «скрипт» работает без них.)

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


Почему это не вызывает программу с именем time:3в папке, которая называется msgв текущем каталоге?
кот

@cat Windows использует \.
jimmy23013

@ Джимми вау, это было год назад. я просто привык писать / на всех платформах теперь упс
кошка

@ jimmy23013 Но Windows /тоже поддерживает
MilkyWay90

@ MilkyWay90 Windows поддерживает /в некоторых местах, но в cmd, /xxxинтерпретируется как аргумент.
jimmy23013




2

Perl 5, 47

Использование Perl / Tk :

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

Кажется, что модуль Tk требуется.
AL

2
Да, конечно, нужно немного GUI инструментарий. Я выбираю Tk из-за tkinit ().
Матиас

Я считаю 44 байта. Ты тоже считаешь -MTkфлаг?
Slebetman

@slebetman Да, я считаю, что как 3 символа, я добавил счет к сообщению.
Матиас

1
@ n.1 Я добавил его под заголовком со ссылкой на документацию CPAN модуля Tk. Ни один из модулей ядра Perl не является модулем с графическим интерфейсом, поэтому вам всегда нужно устанавливать внешние модули. Извините, это было ясно для меня (так как я работаю с Perl довольно часто), но вы правы, это удивительно для тех, кто работает на других языках.
Матиас

2

Rebol View (r3gui), 49

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

"Привет, мир" от Rebol 3 View

Ungolfed:

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

2

Обработка, 77

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

Скриншот:

введите описание изображения здесь

Редактировать 1: Y позиция текста может быть 9 вместо 10, как отмечено @ace.

Edit 2: 3000 можно представить как 3e3, чтобы сбрить один символ, также отмеченный @ace


3
Использование 9 для позиции Y вместо 10 работает для меня.
user12205

Просто отредактировал код. Благодарность!
segfaultd

3
Просто заметил, что вы можете использовать 3e3вместо того, 3000чтобы сохранить еще один символ
user12205

2

bash + ImageMagick (36 байт)

timeout 3 display label:Hello\ world

Протестировано на Ubuntu 14.04 LTS и на Fedora 20.

Красивее, но на 10 байт больше:

timeout 3 display -size 800 label:Hello\ world

2

CMD / партия - 33 байта

Я считаю, что окно, в котором работает терминал Windows CMD, считается графическим интерфейсом.

start "Hello world" cmd /csleep 3

Если у вас нет sleepкоманды в вашей системе - тогда вы можете использовать, timeoutкоторая используется по умолчанию в Windows 7. Еще два байта.

start "Hello world" cmd /ctimeout 3

Запускает новое окно CMD с заголовком «Hello World» ( НЕ отображается в самом терминале, но как заголовок окна GUI, в котором работает терминал), это окно закроется, как только будут выполнены все проанализированные команды - так после sleep 3или timeout 3завершил.

Окно выглядит так -

парень

Заметка; startзапускает указанные команды в новом окне, а не в том окне, из которого вы запускаете вышеуказанные команды.


Если изменить его на cmd "Hello world" cmd /ctimeout 3Hello World, то на 3 секунды в строке заголовка, но это, вероятно, не считается.
Крис Кент

1
Я не думаю, что это так, потому что это не порождает новое окно. В вопросе говорится, что появляется окно, совместимое с графическим интерфейсом (это ключевое слово), означающее, что оно должно отображать новое окно. Хорошая идея, хотя.
unclemeat

start "Hello world"Вы, сэр, гений.
user8397947

1

Python 3, 83 72 байта

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

Сохранить байты с помощью tkinter.

Старый метод добавил Labelк кадру. Этот метод устанавливает заголовок фрейма в Hello World. f.after(3000,exit)работает exit()через 3000миллисекунды


Та же идея, другой модуль: turtleимеет меньше байтов. = D codegolf.stackexchange.com/a/28548/14506
daviewales

1

Кобра - 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

Далеко не самый короткий :(

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.