Привіт Світ! з обмеженим повторенням символів


79

Мовою, яку ви обрали, напишіть програму, яка точно виводить символи з Hello world!наступним новим рядком. Код:

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

Приклад дійсної програми python:

print("He%so world!"%(2*'l'))

Приклад недійсної програми python (символ 'r' використовується тричі):

print("Hel"+chr(108)+'o world!')

Переможець - це той, хто має найбільше голосів через 14 днів.

EDIT: Вибір переможця! Дякую всім за вашу роботу над цим питанням!


25
Як щодо повторної літери o у "правильному" прикладі пітона. Є також такі: - "'()
Адам Війт

15
@AdamSpeight, що ти маєш на увазі? Лист використовується лише двічі відповідно до специфікацій.
Джош

5
@AdamSpeight ... що буквально те саме.
VisioN

4
Я думаю, ви маєте на увазі, що персонаж не повинен з’являтися більше двох разів, тобто він не повинен повторюватися більше одного разу.
Майкл Кей

56
Гадаю, мозковий ебан не йдеться про ...
jub0bs

Відповіді:


61

Ruby (1.9+)

Оскільки це конкурс на популярність, давайте спробуємо не використовувати БУДЬ-кого з персонажів із "Hello world!" при цьому використовуйте інші символи лише максимум два рази:

puts("S\107VsbG8gV29ybGQhCg".unpack(?m))

Це 40 символів до доби.

Баш

І цей використовує магію unicode.

Примітки:

  • Хоча оригінальні символи з’являються в іншому місці (на відміну від прикладу рубіну), друкована рядок містить лише символи, що не входять до списку.
  • Два з трьох просторів насправді є вкладками, тому немає символів utf-8, які відображаються більше ніж у 2 рази
  • Оскільки двійкові деякі октети з’являються більше ніж у 2 рази, сподіваємось, це не суперечить правилам. Я намагаюся їх вирішити.

Код:

echo '𝓗𝐞𝑙𝒍𝓸 𝓦𝗈𝖗𝖑𝘥¡'|iconv -t  asCIi//TRANSLIT

Для тих, у кого не встановлений належний шрифт, це виглядає так:

code as image

Ось hexdump:

00000000  65 63 68 6f 20 27 f0 9d  93 97 f0 9d 90 9e f0 9d  |echo '..........|
00000010  91 99 f0 9d 92 8d f0 9d  93 b8 e2 80 8a f0 9d 93  |................|
00000020  a6 f0 9d 97 88 f0 9d 96  97 f0 9d 96 91 f0 9d 98  |................|
00000030  a5 c2 a1 27 7c 69 63 6f  6e 76 09 2d 74 09 61 73  |...'|iconv.-t.as|
00000040  43 49 69 2f 2f 54 52 41  4e 53 4c 49 54 0a        |CIi//TRANSLIT.|
0000004e

Ви повинні запустити його на машині, де за замовчуванням є charf utf-8. Я спробував на OSX10.8, використовуючи iTerm2 із наступним середовищем:

bash running in iTerm2

PHP 5.4

Для цього використовується zLib: (на жаль, він використовує символи eта o)

<?=gzuncompress('x▒▒H▒▒▒W(▒/▒IQ▒!qh');

Hexdump:

00000000  3c 3f 3d 67 7a 75 6e 63  6f 6d 70 72 65 73 73 28  |<?=gzuncompress(|
00000010  27 78 9c f3 48 cd c9 c9  57 28 cf 2f ca 49 51 e4  |'x..H...W(./.IQ.|
00000020  02 00 21 71 04 68 27 29  3b                       |..!q.h');|
00000029

+1

Ось код ruby ​​2.0, який я використовував для тестування дублікатів:

d=ARGF.read
p [d.split(//),d.unpack('C*')].map{|x|x.inject(Hash.new(0)){|i,s|i[s]+=1;i}.select{|k,v|v>2}}

2
Хоча я завжди ціную Unicode розумність, ваша спроба башти, здається, не задовольняє специфікацію питання. "написати програму, яка точно виводить символів з Hello world!наступним новим рядком"
FireFly

14
@FireFly: це його задовольняє. iconv з цільовим кодуванням ascii//translitтранслітерує символи unicode до базових ascii. І звичайно відлуння додасть новий рядок, тож цей підходить до специфікації (якщо ми не вважатимемо схожість октетів)
SztupY

5
У моїй системі я отримую Hello World?замістьHello World!
marinus

1
@SztupY о, ти маєш рацію, моя погана. Дуже розумно, мені це подобається!
FireFly

1
Скільки бонусних очок ви отримаєте, якщо ваш дублікат також перевіряє специфікацію, що повторюється? :-)
corsiKa

55

Вам доведеться використовувати більш виразні мови.

Китайська,  6 4   3 символи

喂世!

Запуск google translate на цьому виробляє Hello world!

(дякую @sreservoir та @Quincunx за оновлення)


33
+1 для згинання правила ... "Мовою на ваш вибір ..."
WallyWest

4
Любіть це. Але як саме це програма?
П’єр Арло

3
Насправді ви можете розглядати це як програму на мові перекладу google - для китайської як на її підмову :)
Tomas

2
+1. Хороша ідея. 世界 = Shì jiè = Світ. 你好 = nǐ hǎo = Привіт. "Світ, привіт!" перекладається на "Привіт, світ!". Його можна покатати ще трохи:你好世!
Джастін

2
можна пограти в гольф далі 喂世!за рахунок ... ну, нічого більше насправді не витрачається.
muhmuhten

45

HQ9 +, 1 char

H

простота :)


7
HQ9 + видає кому, хоча;)
Джош

8
Я все-таки не відповів би на вашу відповідь ... це все-таки змагання за популярність, правила - це вітер!
Джош

26
@Josh Це одна з рідкісних подій, де я пропускаю кнопку знищення коментарів. Якщо ми відкинемо правила, то нічого не залишається, щоб виправдати конкурс.
Говард

5
@Howard Я відчуваю себе брудною. Я підтримав ваш та коментар Джоша
Cruncher

22
Усі print Hello Worldзапитання - це фактично who can submit a HQ9+ answer fasterпитання.
totymedli

44

C, 192 символів

#
#
/*$$@``*/ATION_[]={9.};main(BBCDDEEFFGGHJJKKLLMMPPQQRRSSUUVVWWXXYYZZabbdefgghhjjkkmpqqsstuuvvwxyyzz) {printf("He%clo \
world!%c\
",2^7&!8.&~1|~-1?4|5?0x6C:48:6<3>2>=3<++ATION_[0],'@'^79-5);}

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

(Оновлено за коментарем @ ugoren.)


3
Творчо вражаючі. Мені це подобається.
Джош

Косою косою рядками "\" три і чотири роблять її продовженням рядка, а не новим рядком. І рядок четвертий припиняється ЄСВ, що робить його законним.
Джош

1
Я думаю, що ти можеш легко коментувати ., використовуючи його для фракцій. Також ви можете оголосити масив і використовувати [].
ugoren

@ugoren гарний дзвінок про .; Я думав лише про те, щоб використовувати його для доступу до структури. <s> Що стосується оголошень масиву, я закінчуюсь ,через printfдзвінок, і я також не в ;силі, тому я не впевнений, як я міг би його оголосити. </s> Дю, я міг би замінити його ATION_. ..
FireFly

44

Команда Vim (18 натискань клавіш)

iHeEsc3alEscio WorRightd!Enter

Не повторюється жодного натискання клавіші більше двох разів.

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

Також потрібно nocompatibleвстановити, що може вважатися використанням зовнішніх ресурсів, тому я надав ще одну варіацію:


Команда Vim (21 натискання клавіш)

iHeEsc3alEscio WorCtrl+[$ad!Enter

Цю варіацію не потрібно nocompatibleвстановлювати, хоча вона обходить Escтри рази, використовуючи Ctrl+[на своєму місці.


16
Якщо ви говорите про персонажах Right, Escі Enter, вони не в буквальному сенсі цих символів. Vim займається натисканням клавіш, які я вважаю рівнозначними символам для цілей цього конкурсу (і правило "не повторюй більше двох разів"). Я використовую iнатискання клавіші лише два рази, а <Right>натискання клавіші один раз. Щодо того E, я ніколи його не використовую взагалі - але я користуюсь <Esc>двічі та <Enter>один раз.
Джо З.

6
Тепер я розчарований, що в Emacs немає команди привітного світу Mx ...
RemcoGerlich

4
Навіть якщо це було, це три lс.
Джо З.

1
Слід зазначити, що вам доведеться :set nocompatible.
джазпі

1
Дивно, але я знаходжу, використовуючи Rightне дуже vim-y.
gefei

29

Піет - Ніяких персонажів!

Hello world in Piet


7
Я б вважав коделі "символами".
Paŭlo Ebermann

3
@ PaŭloEbermann Що б ви вважали унікальним коделом? EG різних форм? кольори? розміри? якась їх комбінація?
Наближення

1
@ValekHalfHeart визначення унікального кодексу наведено у специфікаціях мови : це блок коделів, який можна спростити як одноколірний піксель.
планування

@plannapus У такому випадку я не можу зробити це викликом технічно можливим в Piet. Я можу придумати щось творче.
Наближається до

@ValekHalfHeart о, це була не критика цієї відповіді: я люблю це! Цей виклик все одно не був кодовим гольфом.
планнапус

26

Perl, 29 символів

Ця відповідь включає x-рейтингові засмічення!

say"07-8*d<#B+>!"^xRATEDkL0GZ

Perl, 23 символи

Коротше, але порно взуття немає. :-( однакова основна ідея, хоча ...

say'0@@lo World!'^"x%,"

Perl, 20 символів

Нудно ...

say"Hello Wor\x6Cd!"

7
Гм .... дивний? +1 :)
Джош


19

Сліптінг , 11 символів

丟낆녬닆묬긅덯댦롤긐뤊

Я бачив цю прекрасну програму HelloWorld у списку програм Hello World від esolang .


5
Ого! Вітаємо, ви - перша особа, яка коли-небудь опублікувала що-небудь про мої стравоходи за межами esolangs.org :) (або принаймні перше, про кого я дізналася)
Timwi

18

Scala: 34 29 символів

Я пишаюся собою за це:

printf("He%c%co world!\n",108,108)

Було по-справжньому важко подолати дублікати 'l', 'r's, лапок і дужок. Тоді я виявив стару printfфункцію Java , яка з радістю перетворить цифри в літери, коли дано %cспецифікатор формату.

Оновлення

MrWonderful зробив чудову справу, зазначивши, що цілу купу символів можна зберегти, використовуючи мій другий 'l' вручну в рядку!

printf("Hel%co world!\n",108)

4
@KCaloux, Оскільки вам дозволено до 2 'l, чи не printf ("Hel% co world \ n", 108) у 28 може бути ще кращим?
MrWonderful

@MrWonderful Я думаю, ви абсолютно правильні! (Також я щойно зрозумів, що забув включити "!")
KChaloux

Наскільки я розумію, це неправдивий запис, хоча це і гарна спроба. printfмістить rяк world. Те саме стосується і письма, oяке використовується не раз. Це ґрунтується на моїй інтерпретації наступного твердження з ОП "Приклад недійсної програми python (символ" r "використовується тричі): print("Hel"+chr(108)+'o world!')"
javatarz

@JAnderton У мене був розбір мого сценарію на рубіновій програмі, щоб переконатися, що символів не було більше ніж двічі. Прочитайте ще раз. Є 2 rs, не 3. Один у "printf" і один у "world". Причина того, що пітон є недійсним, полягає в тому, що він включаєchr
KChaloux,

16

Python 3 [38 байт]

exec('import '+chr(95)*2+"h\x65llo__")

Я б не розглядав import __hello__як зовнішній ресурс.


15

Perl: 34 символи

$_="He12o wor3d!
";s{\d}{l}g;print

Проба зразка:

bash-4.1# perl -e '$_="He12o wor3d!
> ";s{\d}{l}g;print'
Hello world!

(Не велика справа. Опубліковано лише для того, щоб принаймні раз у житті користуватися s///тими вигадливими роздільниками.)


15

PHP, 33 символи

Мені просто подобається, скільки PHP прощає і розуміє!

<?=Hel.str_rot13("yb jbe").'ld!';

Перед тим, як його видалити (або якщо він все ще є, я абсолютно сліпий), я побачив коментар, що говорить "No brainf * ck?: D". Що ж, неможливо написати рішення в BrainF * ck, як відомо. Але мені вдалося це зашифрувати, просто для люльсу.

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

Якщо у вас немає інтерпретатора BF, наведений вище код просто друкує PHP: P


Я навіть не знав, що такий код дійсний! Тег Php не закритий, а рядок Helне оточений лапками. Також я ніколи про це не чув str_rot13.
Aycan Yaşıt

1
@ AycanYaşıt закриваючий тег php не потрібен на EOF, і якщо ви покладете рядок без лапок, це передбачає, що це
констата,

1
Ви можете уникнути попередження (і зберегти перше .), поставивши Helдо <?=.
Paŭlo Ebermann

4
@ PaŭloEbermannHel<?=str_rot13("yb jbe")?>ld!
MirroredFate

2
@ PaŭloEbermann Я б сказав, що використовувати це як обман, оскільки це вже не чистий PHP.
Вереос

13

HTML Fiddle - 21 символ

Hel&#108;o World!<br>

Чи включає це останній рядок?
Джош

Е ... пропустив цю вимогу! Я додам туди <br>.
Briguy37

7
@netinept: Попросив новий рядок, не \nтак, я б сказав, <br>рахується
Кріс

1
Але персонаж rповторюється в розчині. Я неправильно трактував вимоги?
javatarz

2
"l" і "o" теж, але кожен символ може бути використаний не більше двох разів.
xem

12

Рубін: 27 символів

puts [:Hel,'o wor',"d!"]*?l

Проба зразка:

bash-4.1# ruby <<ENDOFSCRIPT
> puts [:Hel,'o wor',"d!"]*?l
> ENDOFSCRIPT
Hello world!

Ruby: 25 символів

(На основі коментаря Ваче.)

puts 'He'+?l*2+"o world!"

Ruby: 23 символи

(Копія Данко Durbić Powershell «s відповідь .)

puts"He#{?l*2}o world!"

puts 'He'+'l'*2+'o world!'на один символ коротший!
глибоко дивіться

3
Але має 6 "" "'s ...
маніпуляція

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

1
Вилучіть пробіл після ставок і зробіть його 23. -puts"He#{?l*2}o world!"
Нульове волокно

1
@SampritiPanda, pвключає лапки у висновку. Я вважаю за краще суворо дотримуватися необхідного вихідного формату. Але ви праві, простір не потрібен. Дякую.
манантська робота

12

JavaScript, 66 символів

alert('Hel'+window.atob("\x62G8gd29ybGQhCg=="));//rH+in.\x689yQhC;

Натхненний FireFly, кожен символ, що використовується цим кодом, використовується рівно двічі.


Я думаю, що вам дозволено використовувати деякі символи лише один раз, і ви можете кинути коментар.
Іван Дворак

2
@JanDvorak - добре, я впевнений, що міг би зробити це саме так, - але я думаю, що це рішення заслуговує на нагороду за абсолютну беззаперечність використання кожного персонажа рівно вдвічі. :-)
Боб Джарвіс

6
+1, але використовувати символ просто два рази рівно, якщо ви просто додаєте хитрість як коментар.
Каміло Мартін

11

C - 43 символи

main(){printf("Hel%co World!%c",'k'+1,10);}

Вихідні дані

Hello World!

Характер рахується

' ' Count: 1    '!' Count: 1    '"' Count: 2    '%' Count: 2    ''' Count: 2
'(' Count: 2    ')' Count: 2    '+' Count: 1    ',' Count: 2    '0' Count: 1
'1' Count: 2    ';' Count: 1    'H' Count: 1    'W' Count: 1    'a' Count: 1
'c' Count: 2    'd' Count: 1    'e' Count: 1    'f' Count: 1    'i' Count: 2
'k' Count: 1    'l' Count: 2    'm' Count: 1    'n' Count: 2    'o' Count: 2
'p' Count: 1    'r' Count: 2    't' Count: 1    '{' Count: 1    '}' Count: 1

Вам не потрібно mainі т.д.?
FireFly

@FireFly я так думаю! Це сказало написати програму.
Кірк Бекус

Це C, але не C ++. У C ++ немає неявного int (і ви не можете пощадити іншого i).
Ben Voigt

@BenVoigt Okie dokie!
Кірк Бекус


9

nginx.conf

return  200 "He&#x6clo wo&#x72ld!\n";

Дія:

% curl -6 http://localhost/ | lynx -dump -stdin
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    21  100    21    0     0  20958      0 --:--:-- --:--:-- --:--:-- 21000

   Hello world!

%

У цьому рішенні є 4 місця…
Джош

3
@Josh, насправді їх є 5. Але ви не могли б вважати, що два з перших чотирьох - це вкладки, а потім останній - це нерозривний простір? :-)
cnst

Це працює для мене!
Джош

@Josh, насправді, тепер, коли ми використовуємо HTML, більше не потрібно set. Зараз у нього є лише 3 пробіли, кожен з яких може бути вкладкою!
cnst

Дуже красиво зроблено.
Джош

9

Команда Emacs (15 натискань клавіш)

He<Ctrl-3>l<Left>o wor<End>d!<Enter>

Якщо відповіді VIM є законними, то це повинно бути занадто :)

Жартуючи вбік, макрос це теж може стати :)

Більше дурниць убік, я, мабуть, можу вичавити ще трохи, але це, здається, досить добре на даний момент (оскільки це б'є vim).

PS, будь ласка, ігноруйте всі мої дурниці (я (рідко, але) також використовую vim!).


2
Я все ще думаю, що vim> emacs.
Джо З.

6

Befunge 98

a"!dlrow ol":'e'Hck,@

Ось версія, де кожен персонаж з’являється двічі.

bka!e:dw"H@!dlrow  ol":'e'Hbk,a,@

Залишає кучу мотлоху на стосі.

Як бонус, кожен персонаж щось із цим робив IP.



5

Насправді мені не подобається обман: P

Пітон

print("!dlrow os%eH"[::-1]%('l'*2))

2
Ви повинні вказати, що це для python2. У python3 ви отримуєте зворотний рядок як вихід, а потім a TypeError.
Бакуріу

1
Для використання в Py3K аргумент друку повинен бути укладений в дужки. print("!dlrow os%eH"[::-1]%('l'*2))працювати в обох (Python2 та Py3K) версіях.
AMK

4

GolfScript

'He

o world!'n/"l"*

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


Ви забули "!".
Говард

@Howard, пропустив це. На жаль
Пітер Тейлор

Буква о повторюється також
Адам Шрейт

1
@AdamSpeight: Лист є лише двічі o. У правилах сказано, що персонаж заборонено мати більше двох разів .
ProgramFOX

4

Хм.

В C, враховуючи ці правила, ми можемо мати лише одне #define(через iі n) і максимум два функції викликів АБО визначення ( (і) ).

Я припускаю, що існує майже один спосіб (хоча я, мабуть, помиляюся):

main(){puts("Hello w\x6fr\154d!");}

Ще потрібно вивести новий рядок. Зробити цей виклик у С важко ...
Джош

1
@Josh я просто повинен використовувати puts()замість цього printf().
Оберон

2
Але що сталося з oв world?
VisioN

@VisioN У старому проекті того ж коду (перш ніж я зрозумів, як важко було написати таку програму), я використав ще одне «o» в іншому місці. Але це не код-гольф , тому я думаю, що його не потрібно виправляти.
Оберон

4
Насправді я не впевнений, чому кожна відповідь відображає кількість символів.
Оберон


4

C - 46 символів

main(){printf("He%clo wor%cd!\x0d",'l',108);}

Друкує:

Привіт Світ!


Якщо ви націлені на гольф, main(){printf("He%clo world!%c",108,10);}варто попрацювати і заощадить вам кілька символів.
FireFly

@FireFly ти правий, ти врятував би мені 3 символи. Ваша пропозиція також чудово працює.
Філіп Кінкаде

4

Фуга

З вікі esolang:

enter image description here

І ви можете слухати вихідний код .


11
Я б сказав, що це недійсно. Я бачу більше 4 середніх с у правій руці.
Джастін

4
Не кажучи вже про рядок чотирьох послідовних G у 9-му заході.
Джо З.

Ви це написали чи лише вивели? З огляду на те, що ви посилаєтесь на MIDI архіву esolang.
FireFly

4
-1 за плагіат. Це з вікі esolang . Ви цього не цитуєте. Редагувати: відмінено, тепер цитується вікі esolang.
Джастін

-1 для використання однієї і тієї ж ноти більше 2 разів.
Ерік Аутгольфер

4

PHP

32 символи

Зауважте, як я не використовую символ більше двох разів, оскільки l! = L

He<?=strtolower("LLO WOR");?>ld!

Також зауважте, що, незважаючи на те, що стек Overflow видалив його в представництві, після перегляду рядка існує розрив рядка !.


1
Ви використовуєте три пробіли, але, мабуть, це можна виправити, видаляючи ті біля тегів PHP! : P
Вереос

1
Це було швидко, хоча я зрозумів перед тим, як прочитати ваш коментар (насправді з іншої відповіді)
Франциско Презенсія

Невже вихід "H" не повинен бути великим?
Девід Кері

Цілком правда, пропустив і те):
Франциско Презенсія

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