Привіт Світ! (Кожен інший персонаж)


129

Напишіть програму, яка друкує «Привіт, світ!». Але також, якщо ви візьмете лише перші, треті, п'яті і т. Д. Символи вашої програми, отримана програма все ж повинна надрукувати "Привіт, світ!".

Якщо ваша програма:

abc
def

Він повинен вивести "Здрастуйте, світ!", Але так і слід

acdf

Немає рішень із меншою кількістю символів.


2
Чи може бути пробіл навколо виводу?
vroomfondel

18
Дивовижний перший пост!
Adám

11
Побачивши всі відповіді з "HHeelllloo", це нагадало мені говорити про кита.
Брайан Мінтон

32
Про порада уникати "Привіт, світ!" вбудовані в подібні завдання: використовуйте трохи інший рядок подібної складності, як "Вітання, Земляни!"
Мартін Ендер

6
"Немає рішення, що містить менше 2 символів." Дивовижний.
Роберт Грант

Відповіді:


195

Python 3 , 61 байт

rant="partisn't"
print(("HHeelllloo,,  WWoorrlldd!!"""[::2]))

Спробуйте в Інтернеті!

Зловживання фактом, що printє функцією в Python 3 :)

Найменш партизанське рішення ви знайдете тут на PPCG.

Стає

rn=print
rn("Hello, World!"[:])

48
Це прекрасно.
музикант523

1
@ musicman523 Але, НЕ ЗАВДАННЯ оточує текст одноцитатами в цьому випадку.
officialaimm

1
@officialaimm Так, я вважаю, що це так
музикант523

1
@ yamboy1 Спробуйте видалити всі інші листи
vroomfondel

1
Я не знав, що [:]насправді працював: o Приємно!
HyperNeutrino

56

Кардинал , 29 байт

%
"
H
e
l
l
o
,
 
W
o
r
l
d
!

Спробуйте в Інтернеті!

Якщо видалити будь-який інший символ, видаляються всі канали ліній, що призводить до Hello, World!:

%"Hello, World!

Спробуйте в Інтернеті!

Причина цього працює в тому, що %створюється чотири вказівні інструкції, рухаючись у кожному з чотирьох кардинальних напрямків. IP-адреси, які залишають вихідний код, просто видаляються. Так у першому випадку залишається лише ІР, що йде на південь, а у другому - залишається лише ІС, що йде на схід, а всі інші просто скидаються. У будь-якому випадку виконана програма тоді справедлива "Hello, World!. У "перемикається в режим рядки , де кожна клітинка просто друкуються на STDOUT. Нам не потрібно припиняти рядок, оскільки залишення вихідного коду все-таки припиняє програму.

Зауважте, що ця ж ідея працює і в Beeswax , використовуючи *замість %і `замість "(це тому, що бджолиний віск в значній мірі був натхненний кардиналом, але використовує шестикутну сітку).

Спробуйте в Інтернеті! (вертикальний) | | Спробуйте в Інтернеті! (горизонтальний)



31

Власне , 2 байти

HH

Пояснення:

H, як ви могли очікувати, штовхає Hello, World!до стека.

Основна програма ( HH) зустрінеться першою Hі натисне Hello, World!на стек. На другому H, однак, він спробує використати два аргументи (оскільки стек повинен бути порожнім, щоб натиснути Hello, World!), і не вдасться. Однак ця помилка буде ігнорована і потім Hello, World!буде неявно надрукована.

Друга програма ( H) буде натискати Hello, World!один раз, і це буде неявно надруковано.

Це схоже на 2-байтну відповідь Fatalize, але це насправді не «обманює».

Спробуйте в Інтернеті!


4
Гарне рішення, але я думаю, що це не повинно рахуватися, оскільки це занадто схоже на односимвольне рішення.
Лев Тененбаум

32
@LeoTenenbaum Чому ні? Він повністю відповідає нормам.
Okx

2
Те, що ви пояснюєте, не так, Hбуде натискати лише Hello, World!на порожній стек, і якщо стек не порожній, він очікував би 2 аргументи, тому буде помилка, а помилки ігноруються. І жоден насправді не неявно друкує лише найвищий елемент.
Ерік Аутгольфер

@EriktheOutgolfer На жаль. Виправимо.
Okx

Ось чому насправді моя улюблена мова з гольфу. Це на ідеальному рівні дурного.
RShields

22

Луа , 89 байт

--- [ [
print("Hello, World!")
--[[ ] ]
pCrAiLnCtU(L"AHTeOlRlFoE,L IWNoEr:lDd !:"D)
---]]

Спробуйте в Інтернеті! Як показує підсвічування синтаксису, це масове зловживання коментарями.

Чергуйте:

--[[pit"el,Wrd"
-[]]print("Hello, World!")--]

Спробуйте в Інтернеті!

А для зручності - програма для перетворення програми у будь-яку іншу форму символів: Спробуйте в Інтернеті!


Мені це подобається! Формат коментування Lua здається схожим на T-SQL, я спробую попрацювати над однією для цієї мови.
BradC

3
Цей трюк повинен працювати на будь-якій мові як із блоковими коментарями, так і з коментарями до рядків (C, JS тощо)
CalculatorFeline


2
HHeelllloo WWoorrlldd!!це щось нудно: P
CalculatorFeline

19

Сітківка , 39 байт


HHeelllloo,,  WWoorrlldd!!


(.).x?
$1

Спробуйте в Інтернеті!

Якщо взяти будь-якого іншого персонажа, ви отримуєте:


Hello, World!
()x
1

Спробуйте в Інтернеті!

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

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


17

Вугілля деревне , 25 байт

H→e→l→l→o→,→ →W→o→r→l→d→!

Спробуйте в Інтернеті!

Якщо ви видалите парні символи, ви просто видалите команди зі стрілками, які вказують напрямок наступного тексту, і який залишає такий код:

Hello, World!

Спробуйте в Інтернеті!

Це також друкує привітання.


17

Haskell , 85 байт

{--}main=putStr"Hello, World!"--} m a i n = p u t S t r " H e l l o ,   W o r l d ! "

Спробуйте в Інтернеті!

Кожен другий вилучений символ:

{-mi=uSrHlo ol!-}main=putStr"Hello, World!"

Спробуйте в Інтернеті!

Це використовує два формати коментарів у Haskell: {- -}для вбудованих або багаторядкових коментарів та --для коментування решти рядка.


16

Javascript, 67 байт

/**/alert`Hello, World`// * / a l e r t ` H e l l o ,   W o r l d `

Кожен другий лист видалено:

/*aetHlo ol`/*/alert`Hello, World`

Як і у відповіді Хаскелла Лайконі, це використовує коментарі.


Приємна відповідь, +1! Збережені 2 байта, створюючи порт вашої відповіді на моє Java 8 відповіді , і додаткові байти , коли я змінив // * /до //**/(який , до жаль , НЕ представляється можливим у вашому випадку з - за /**/alert`Hello, World` непарних кількість байт, а навіть як в моєму випадку .
Кевін Круїйсен

14

Брахілог , 4 байти

Ḥ~wḤ

Спробуйте в Інтернеті!

Пояснення

~wпише праву змінну до STDOUTі ігнорує її лівий аргумент. є "Hello, World!", так це друкує Hello, World!.

Якщо ми візьмемо лише першу та третю символи, отримаємо Ḥw. У цьому випадку wпише ліву змінну і ігнорує її праву змінну, тому вона також друкує Hello, World!.

2 байти

ḤḤ

Спробуйте в Інтернеті!

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


Я не думаю, що 2-байтна відповідь є "технічно" достовірною, оскільки виклик констатує друк .
Okx

1
@Oxx друк, як на папері?
theonlygusti

@theonlygusti Це означає надрукувати в STDOUT.
Okx

5
@theonlygusti Sigh ... ось що означає друк за замовчуванням.
Okx

3
@Okx ти намагаєшся бути педантичним, щоб скасувати рішення, але насправді в цьому немає нічого недійсного. Проблема говорить лише про "вихід".
theonlygusti

11

Haskell, 102 байти

Повна програма:

main= putStr"Hello, World!";;
putSt   x ="p u t S t r  \" H e l l o ,   W o r l d !\"";
mmaaiin = main

і з кожним іншим символом видалено:

mi=ptt"el,Wrd";ptt x=putStr "Hello, World!";main=mi

Ви можете зняти 2 байти, видаливши пробіли між p u t S t rі \".
Сріотчілізм О'Заїк

11

машинний код x86, 162 байти

демонстрація

PROG.COM Завантажте та запустіть його в емуляторі MS-DOS , наприклад DOSBox .

90 B3 B4 B4 02 90 90 B3 B2 B2 48 90 90 B3 CD CD 21 90 90 B3 B2 B2 65 90 
90 B3 CD CD 21 90 90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 2C 90 90 B3 CD CD 21 90 
90 B3 B2 B2 20 90 90 B3 CD CD 21 90 90 B3 B2 B2 77 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 72 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 B2 B2 64 90 90 B3 CD CD 21 90 
90 B3 B2 B2 21 90 90 B3 CD CD 21 90 90 B3 CD CD 20 90

після видалення MINI.COM Завантажити

90 B4 02 90 B2 48 90 CD 21 90 B2 65 90 CD 21 90 B2 6C 90 CD 21 90 CD 21 
90 B2 6F 90 CD 21 90 B2 2C 90 CD 21 90 B2 20 90 CD 21 90 B2 77 90 CD 21 
90 B2 6F 90 CD 21 90 B2 72 90 CD 21 90 B2 6C 90 CD 21 90 B2 64 90 CD 21 
90 B2 21 90 CD 21 90 CD 20

Як бігати?

Встановіть DOSBox для Ubuntu / Debian

sudo apt install dosbox

Виконати його

dosbox

В DOSBOX

mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM

Як це працює?

Коди роботи машини представляють інструкції з мови монтажу .

У MS-DOS для друку char ви встановите регістри та зробите переривання. AH реєстр буде 0x02, DL-регістр містить ваші дані. Вектор переривання 0x21.

mov ah,0x2  ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21    ;0x21 interrupt     (CD 21)

Крихітна модель MS-DOS COM - хороший вибір, оскільки вона не має заголовків . Він обмежений 64K, але в нашому випадку це не має значення.

Для зупинки програми використовуйте переривання 0x20

int 0x20    ;0x20 interrupt     (CD 20)

Магія

Якщо ви хочете виконати команду кодування 0xAB з одним параметром 0xCD , ви пишете

AB CD

У PROG.COM

90 B3 AB AB CD 90
nop         ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop         ; No operation (90)

В MINI.COM

90 AB CD
nop         ; No operation (90)
AB CD command (AB CD)

Це рівні машини, якщо ви не використовуєте регістр BL .

Генератор

Перетворити текстовий файл з шістнадцятковим у шістнадцятковий двійковий

cat hex_file | xxd -r -p > exec.com


Видаліть усі `90 90` на -52 байти.
NieDzejkob

Також ніколи в самому кінці ніколи не буде досягнуто.
NieDzejkob

10

Pyth , 31 байт

p% 2"HHeelllloo,,  WWoorrlldd!!

Спробуйте в Інтернеті!

Стає

p "Hello, World!

Завдяки @CalculatorFeline вказує на помилку та видаляє один байт.


Персонажі, що утримуються, починаються з першого, а не з другого. Ви можете скинути провідний простір.
CalculatorFeline

Ах, дякую @CalculatorFeline. Я читаю "Взяти" як "Видалити" в специфікації.
vroomfondel


7

05AB1E , 29 байт

”™ ,ï‚‚ï ! ”# ¦2 ä ø¨øJð ý

Спробуйте в Інтернеті!

Пояснення

”™ ,ï‚‚ï ! ”                # push the string "Weekly Hello , Changed World ! "
               #               # split on spaces
                               # RESULT: ['Weekly','Hello',',','Changed','World','!','']
                ¦              # remove the first element (Weekly)
                 2ä            # split in 2 parts
                               # RESULT: [['Hello', ',', 'Changed'], ['World', '!', '']]
                   ø           # zip
                               # RESULT: [['Hello', 'World'], [',', '!'], ['Changed', '']]
                    ¨          # remove the last element
                     ø         # zip
                               # RESULT: [['Hello', ','], ['World', '!']]
                      J        # join each inner list
                       ðý      # join on space

Після видалення всіх інших символів нам залишається код

”Ÿ™,‚ï!” 2äøøðý

Спробуйте в Інтернеті!

Пояснення

”Ÿ™,‚ï!”       # push the string "Hello, World!"
        2ä     # split in 2 parts
               # RESULT: ['Hello, ', 'World!']
          ø    # zip, as the string has an odd length the space is lost
               # RESULT: ['HW', 'eo', 'lr', 'll', 'od', ',!']
           ø   # zip again
               # RESULT: ['Hello,', 'World!']
            ðý # join on space

7

Математика, 62 байти

P0r0i0n0t0@0"0H0e0l0l0o0,0 0W0o0r0l0d0!0"Print@"Hello, World!"

Він повертається "0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0]та друкується Hello, World!як побічний ефект. При запуску як програми (не в REPL) повернене значення не буде надруковано.

Після видалення всіх інших символів:

Print@"Hello, World!"rn@Hlo ol!

Він повертається Null ol! rn[Hlo]і друкує Hello, World!.


7

Желе , 26 25 байт

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »

Спробуйте в Інтернеті!

Після видалення кожного другого символу нам залишається наступний код.

“3a;»“3ḅaė;œ»

Спробуйте в Інтернеті!

Як це працює

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »  Main link.

““3ḅaė;œ»                  Index into Jelly's dictionary to yield
                           ["", "Hello, World!"]. 
          “ 3 ḅ a ė ; œ »  Index into Jelly's dictionary to yield.
                          " FullERebitingBEfluffiest adoptable".
         ḷ                 Take the left result.
“3a;»“3ḅaė;œ»  Main link.

“3a;»          Index into Jelly's dicrionary to yield " N-".
               Set the argument and the return value to the result.
     “3ḅaė;œ»  Index into Jelly's dicrionary to yield "Hello, World!".
               Set the return value to the result.

7

Кубічно v2.1 , 222 байти

+0503 @@6 :22 //1 +050501 @@6 :55 +0502 @@6@6 :33 //1 +050502 @@6 :55 +03 //1 +04 @@6 :55 //1 +03 @@6 :55 +01 //1 +0504 @@6 :33 //1 +050502 @@6 :55 +01 //1 +050502 @@6 :55 +0502 @@6 :11 //1 +050501 @@6 :55 +01 //1 +03 @@6

Спробуйте в Інтернеті!

Кожен інший лист:

+53@6:2/1+551@6:5+52@66:3/1+552@6:5+3/1+4@6:5/1+3@6:5+1/1+54@6:3/1+552@6:5+1/1+552@6:5+52@6:1/1+551@6:5+1/1+3@6

Спробуйте в Інтернеті!



6

Допоможіть, WarDoq! , 2 байти

Hi

Спробуйте в Інтернеті!

Hдрукує Hello, World!, iє неоперативним.

Допоможіть, WarDoq! можна додати два числа та перевірити прайси, тому він вважається дійсною мовою програмування для цього мета-повідомлення .


чому це було знято?
Уріель

NOP та масивні простори проти духу.
RShields

1
+1 через новинку щодо того, як отриманий вихідний код підкреслює повідомлення, яке отримує вихід.
TOOGAM


6

PHP, 53 байти

#
echo date(
$e_c_h_o='\H\e\l\l\o\,\ \W\o\r\l\d\!
');

Коли кожен інший символ видалений:

#eh ae
echo'Hello, World!';

6

Октава, 49 45 байт

Збережено 4 байти, оскільки Octave не потребує дужках для індексації.

'HHeelllloo,,  WWoorrlldd!! ' (1:2 : 3 ^ 3)''

Спробуйте в Інтернеті!

І зменшений:

'Hello, World!'(:    )'

Спробуйте в Інтернеті!

Пояснення:

У початковому коді букви в рядку дублюються, так що нам залишається, Hello, World!коли видаляється кожна секунда. Додано пробіли, щоб забезпечити збереження дужок та апостроф.

Індексація дійсно 1:2:end. Є 27 символів, і ми не можемо використовувати endабо 27оскільки ми повинні видалити символ, тому ми переходимо з ним 3 ^ 3. Коли ми видаляємо кожен третій символ, індексування стає (:)(і деякими додатковими пробілами).

(:)означає "сплюснути і перетворити у вертикальний вектор" . Отже, нам потрібно його перенести, використовуючи '. Нам не потрібно переносити рядок у вихідний код, але подвійне переміщення працює, тому перша рядок переміщується двічі '', а друга - лише один раз.


6

APL (Dyalog) , 35 34 байт

-1 дякую Мартіну Ендеру.

'0H0e0l0l0o0,0 0W0o0r0l0d0!0'~  0

Спробуйте в Інтернеті!

'0H0e0l0l0o0,0 0W0o0r0l0d0!0' повідомлення з нулями, як символи, що заповнюються

~ крім

 відформатовано (ратифіковано)

0 число нуль

Залишаючи лише непарних персонажів, це стає 'Hello, World!' .


5

T-SQL, 75 байт

---
PRINT 'Hello, World!'
/*
-P-R-I-N-T-'-H-e-l-l-o-,- -W-o-r-l-d-!-'
---*/

Одно- та багаторядкові зловживання коментарями, натхненні версією LUA CalculatorFeline .

Після видалення всіх парних символів, деякі з яких є розривами рядків:

--PIT'el,Wrd'/
PRINT'Hello, World!'--/

5

Javascript, 73 байти

a ='a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/';eval(a.replace(/0/g,''))

Конструює рядок aіз вмістом a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/, а потім видаляє все 0, що дається alert`Hello, World!`//, що є eval'd.

Прийняття всіх інших символів програми дає

a=alert`Hello, World!`//;vlarpae//,')

який попереджає, Hello, Worldвикористовуючи синтаксис рядкового шаблону так само, як і те, що було eval'd у повній програмі, а потім зберігає результат виклику aі включає проникливий коментар //;vlarpae//,').


5

> <> , 47 байт

Оригінал:

| v~" H e l l o ,   W o r l d ! "

~o<< ;!!!? l

Після видалення кожного другого символу:

|v"Hello, World!"
o<;!?l

Спробуйте їх онлайн: оригінал , модифікований

Оригінальна програма штовхає персонажів "Привіт, світ!" до стеку (у зворотному порядку), що перетинається з пробілами, потім по черзі друкує символ і видаляє його, поки довжина стека не дорівнює нулю. Друга програма робить те саме, за винятком інструкцій щодо видалення ~.

Якщо ви не заперечуєте, щоб зупинитися з помилкою, ми можемо взяти лист із книги Кардинала Мартіна Ендера : модифікований код

\"!dlroW ,olleH"!#o#

і оригінал такий же, але з новими рядками, вставленими між усіма символами, на 39 байт Спробуйте їх онлайн: оригінал , модифікований .


5

,,, 34 байти

 2"Hteoltlaol,l yWhourmladn!! "⟛

Про видалення парних символів ...

 "Hello, World!"

Пояснення

З усіма персонажами:

 2"..."⟛

               no-op
 2             push 2 to the stack
  "..."        push "Hteoltlaol,l yWhourmladn!! " to the stack
       ⟛      pop 2 and the string and push every 2nd character of the string
               implicit output

Без парних символів:

 "..."

               no-op
 "..."         push "Hello, World!" to the stack
               implicit output

5
Це означає, що вам не потрібно говорити, що це неконкурентоспроможність.
FryAmTheEggman

2
Але ви повинні зберегти всі парні символи ... (0-індексовано) ...
HyperNeutrino

Упс, фіксований. Просто додайте ще один символ, хаха.
повністюлюдський

4

Brainfuck, 155 байт

- - < - < < + [ + [ < + > - - - > - > - > - < < < ] > ] < < - - . < + + + + + + . < < - . . < < . < + . > > . > > . < < < . + + + . > > . > > - . < < < + .

Спробуйте в Інтернеті!

Кожен другий вилучений символ:

--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.

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