Привіт Світ 0,0!


78

Ділберт - приголомшливий
джерело: Ділберт, 8 вересня 1992 року

Я сподіваюся додати новий поворот у класичному "Hello World!" програма.

Кодуйте програму, яка виводить Hello World!без:

  • Літерали для рядків / символів
  • Числа (будь-яка база)
  • Попередньо вбудовані функції, які повертають "Hello World!"
  • RegEx літерали

За винятком "O" і 0.

† "O" з великої літери, "o" неприйнятно.


4
Один із [code-golf] та [code-challenge], будь ласка, не обидва. Суть цих тегів полягає в тому, щоб допомогти людям знаходити запитання щодо правил, які вони хочуть використовувати. По суті, кожне запитання на цьому веб-сайті має бути певною грою.
dmckee

4
-1 У нас вже був Замкнений Hello World , і я думаю, що це завдання занадто схоже. Я б голосував "близько як дублікат", якби не модник.
Кріс Єстер-Янг

2
@zzzzBov: Я не думаю, що це достатньо інакше, щоб вимагати іншого питання в темі "привіт світ"; інша тема була б кращою. Але це лише моя думка.
Кріс Єстер-Янг

1
Я думаю, що це гольф тонкого коду - і кращий за попередній.
MtnViewMark

2
Деякі люди, здається, припускають, що це "O"*означає, що вони можуть мати рядкову літеру з будь-якою кількістю O, включаючи нуль. Я не думаю, що це був намір. Будь ласка, поясніть.
Тімві

Відповіді:


83

Windows PowerShell, занадто багато

Так, насправді, тоді, коли нам довелося писати «Привіт, світ», використовуючи (майже виключно) нулі ...

&{-join[char[]]($args|% Length)} `
O00000000000000000000000000000000000000000000000000000000000000000000000 `
O0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O0000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000

На більш серйозну ноту:

Windows PowerShell, 25

Write-Host Hello World!

Немає літерального рядка Там, Hello World!що відбувається, просто розбирається як рядок, оскільки PowerShell знаходиться в режимі розбору аргументів там.


2
Як це реально ?? O_o
Джош

1
Я шукав в Інтернеті деякі приклади чи історію цього. Це так дивно. Чи можете ви надати якісь посилання?
Caleb Jares

1
"Повернення дня". :) Ти тисячоліття тріщить мене 👍

Ой. Одинарний. Я розумію.
Matthew Roh

86

C, 327 символів

#define O(O)-~O
#define OO(o)O(O(o))
#define Oo(o)OO(OO(o))
#define oO(o)Oo(Oo(o))
#define oo(o)oO(oO(o))
#define O0 putchar
main() {
    O0(OO(oO(!O0(~O(Oo(OO(-O0(~O(Oo(-O0(O(OO(O0(oo(oO(O0(O(oo(oO(OO(Oo(oo(oO(
    O0(oo(oo(!O0(O(OO(O0(O0(O(OO(Oo(O0(O(Oo(oo(oO(O0(oo(oo(oO(oo(oo(0))))))))
    ))))))))))))))))))))))))))))))))))))));
}

Як не дивно, він не втрачає своєї краси після попередньої обробки:

main() {
putchar(-~-~-~-~-~-~-~-~-~-~!putchar(~-~-~-~-~-~-~-~-putchar(~-~-~-~-~-~-
putchar(-~-~-~putchar(-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~putchar(
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~putchar(-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
-~-~-~-~-~-~-~-~-~-~-~-~-~!putchar(-~-~-~putchar(putchar(-~-~-~-~-~-~-~putchar
(-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~putchar(-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0))))))))))));
}

2
Дивовижно. Не вистачає!
Марк Рід

1
Це справжнє мистецтво!
Аскага

Я відчуваю, що тіло можна було вкоротити ще більшою кількістю препроцесорів. Не впевнений, чи не виграє б код у цілому.
Звей

@Zwei, Це, безумовно, можна скоротити. Я не доклав жодних зусиль, щоб знайти оптимальний набір макросів.
ugoren

Чому ви не включите парен у CLANG #define? врятувало б кілька байт, ні? Редагувати: ніколи, просто спробував, і тепер я бачу, чому це не спрацює ахаха
Альберт Реншо

52

BrainFuck, 102 111 символів

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

Відповідає всім правилам.

Кредит належить Даніелю Крістофані .


1
Я не можу вирішити, чи повинні також містити правила 0 and/or "O" must be used. Для BrainFuck та golfscript це мало значення, але вони не мають труднощів із цим завданням.
zzzzBov

34
@zzzzBov: Якщо їх потрібно використовувати, код Brainfuck просто включить їх. Однак вони взагалі не впливають на програму.
Джої

38

C, 182 байти

#define decode(c,o,d,e,g,O,l,f) e##c##d##o
#define HelloWorld decode(a,n,i,m,a,t,e,d)
#define Puzzles(flog) #flog
#define CodeGolf Puzzles(Hello World!)
HelloWorld(){puts(CodeGolf);}

1
+ 1, Lol, ти все ще використовуєш трюк оператора вставки лексеми! Приємний товариш :-)
Кіхотичний

35

C програма - 45

(обман)

У лексичному плані це не використовує жодних рядкових літералів чи регулярних літералів. Скористається функцією струфікації препроцесора С. s(x)це макрос, який перетворює свій аргумент у рядок.

#define s(x)#x
main(){puts(s(Hello World!));}

3
За дуже зручне поняття "лексично" :) Але нахабність FTW!
JB

24

Haskell - 143 символи

o%y=o.o.o$y;o&y=(o%)%y;o!y=o$o$(o%)&y
r=succ;w=pred;a=r%y;e=r$w&l;l=r!'O';o=r e;u=(w&)&a;y=r%l
main=putStrLn[w!o,o,l,l,y,w u,w$r&'O',y,a,l,e,u]

ой, це було шерстяно!

Без чисел, без числових операцій, змінних, перейменованих для розваги.

Деякі експозиції можуть бути приємні:

  • o%y, o&yі o!yкожен застосовує функцію oдо yдекількох разів: 3, 9 та 29 разів відповідно. 29?!?! Так, 29!
  • rі wє наступним та попереднім символом, який при застосуванні за допомогою вищезазначених функцій вищого порядку можна зробити, щоб отримати всі необхідні символи 'O'.

Послідовність необхідних стрибків:

'O' +29    -> 'l'
'O'  +9 -1 -> 'W'
'l'  -9 +1 -> 'd'
'l'  +3    -> 'o'
'd'  +1    -> 'e'
'o'  +3    -> 'r'
'e' -29    -> 'H'
'r' -81    -> '!'
'!'  -1    -> ' '

  • Редагувати: (134 -> 144) Забув видати знак оклику, зітхнути….
  • Редагувати: (144 -> 143) Видалено непотрібне $, перейменовано #на !Hugs.

1
o rly? oo ....
Joey Adams

Це не працює. codepad.org/lyKyj1Ox
nyuszika7h

@ Nyuszika7H Це тому, що ця служба за замовчуванням включає деякі параметри компілятора. Він повинен складатись із звичайним GHC.
FUZxxl

@ Nyuszika7H Це прекрасно працює з GHC. Проблема полягає в тому, що ця служба використовує Hugs з 2006 року. Здається, що Hugs не може вирішити: 1) Використання "#" як оператора. Зміна на "!" змушує це працювати. 2) Визначення r=succта w=predрозуміння того, як Х'юз здійснює обмеження мономорфізму. Зміна r x=succ xі w x=pred xзмушує її працювати (ціною 4 символів). Це, здається, проблеми в обіймах.
MtnViewMark

Чи все-таки він дійсний після редагування @Community?
Hosch250

22

Unary , 10 197 1137672766964589547169964037018563746793726105983919528073581559828 байт

Я здивований, що цього ще ніхто не робив ...

Тут надто довго публікувати публікації, але це нулі 1137672766964589547169964037018563746793726105983919528073581559828 нулів.

Або, простіше читати: ~ 10 67 нулів.

Завдяки @dzaima за збереження 10 197 байт


2
Коли я прочитав "Колись я написав всю базу даних, використовуючи лише нулі", моя перша думка була "він, мабуть, зробив це не одинаково". +1 за те, що він є єдиною відповіддю, щоб
зрозуміти

21

Математика 12 символів

Тільки символи, ніяких рядків.

Hello World!   

The! є факторіальним оператором, але оскільки символи Привіт і Світ не визначені, повертають дані незмінними.

Якщо ми трохи змінили програму:

Hello=2;
World=3;
Hello World!  

Потім він друкує 12(2 * 3!)


16

i386 збірка (Linux, синтаксис gcc), 440 442 435

Сьогодні день мого зібрання, і після цього мені вистачить на деякий час. Я дозволив собі номер 128, дивіться програму нижче для обговорення чому. Нічого надзвичайного: я просто кодую "Hello World!" як коди збірки, де це мало сенс без числових констант, а решту заповнювали арифметикою.

#define M mov
M $0,%ecx;inc %cx;M %ecx,%ebx;inc %cx;M %ecx,%eax;add %ax,%ax
M %ecx,%edx;shl %cl,%dx;M (e),%ch;add %dl,%ch;dec %ch;M %ch,(l)
M %ch,(j);M %ch,(z);M $0,%ch;shl %cl,%edx;M %dl,(s);inc %dl
M %dl,(b);M (o),%dl;M %dl,(u);add %al,%dl;dec %dl;M %dl,(r)
M $m,%ecx;M $n,%edx;int $c;M %ebx,%eax;M $0,%ebx;int $c
.data
m:dec %eax;e:gs;l:es;j:es;o:outsl (%esi),(%dx)
s:es;push %edi;u:es;r:es;z:es;fs;b:es;n=.-m
t=(n+n)/n;c=t<<(t*t+t)

(зібрати gcc -nostartfiles hello.S -o hello, можливо, -m32залежно від арки)

Чому толерантність до 128? Мені потрібні системні дзвінки, щоб насправді щось показати; Системні дзвінки Linux знаходяться на INT 80h (128 десятків); єдиний формат операндів для INT є негайним, тому там не можна мати нічого іншого, крім постійної (до коду). Я міг би (після отримання тверезості) спробувати висловити це як функцію інших символічних констант у коді, ймовірно, n , але це стає дуже нудним для не великої вигоди. Я читаю обмеження на цифри як спосіб запобігти кодуванню ASCII, і це, безумовно, не те, що я роблю тут, тому відчуваю себе досить невинним, щоб подати це. (FWIW, я також спробував самовидозмінитися код, але цей зрізний) Зараз немає і 128. Код чистий!

  • Edit1 переформатоване для збереження рядків; видалено числовий 1 (ніхто не помітив ?!)
  • Edit2 стиснуто movмакросами CPP; ліквідовано решту 128.

6
Ось як програмують справжні чоловіки.
Ніт

14

Javascript - 305

Трохи довгий, але мені подобається використаний метод.

O=0;O++;O=O.toString();alert([O+0+0+O+0+0+0,0+O+O+0+0+O+0+O,O+O+0+O+O+0+0,O+O+0+O+O+0+0,O+O+0+O+O+O+O,O+0+0+0+0+0,O+0+O+0+O+O+O,O+O+0+O+O+O+O, O+O+O+0+0+O+0,O+O+0+O+O+0+0,O+O+0+0+O+0+0,O+0+0+0+0+O].map(function(e){O=0;O++;O++;return String.fromCharCode(parseInt(e,O))}).reduce(function (a,b){return a+b}))

Мені це подобається. Було б краще з параметрами функції , як OO, OOO, але, звичайно ж, що б зробити його більше.
zzzzBov

Дійсно приємно. Чи потрібно, щоб "нова String ()" була там наприкінці? Здається, працює і без цього.
Стівен Перелсон

3
А, ні, це не так. Іноді я забуваю, наскільки слабко набраний Javascript.
david4dev

Вам також не потрібно лівих 0 біт ("0+"), а пробіл та вигук - два лівих 0 біта. Загальне скорочення 28 символів.
Стівен Перелсон

10

C # (131 знак)

141 годин 142 символів

enum X{Hello,World,A,B=A<<A<<A}class Y{static void Main(){var c=(char)X.B;System.Console.Write(X.Hello.ToString()+c+++X.World+c);}}

Читає:

// Define some constants (B = 32)
enum X { Hello, World, A, B = A << A << A }
class Y
{
    static void Main()
    {
        // Generate the space (character #32)
        var c = (char) X.B;

        // Remember that “!” is character #33
        System.Console.Write(X.Hello.ToString() + c++ + X.World + c);
    }
}

2
це закручено і приємно. Я це люблю.
jcolebrand

+1 хороший спосіб генерувати певні числа. Треба пам'ятати про це!
Ігбі Ларгеман

Програма LINQPad, 102 символи:enum X{Hello,World,A,B=A<<A<<A}void Main(){var c=(char)X.B;(X.Hello.ToString()+c+++X.World+c).Dump();}
Cœur

.ToString()-> +""економить кілька причин
Firo

2
@Firo: ... і порушує правила. (Не дозволено використання рядкових літералів.)
Timwi

8

JavaScript, 88

t=!0<<-~-~-~-~!0
r=[]
for(i in{Hello:"O",World:0})r+=i+String.fromCharCode(t++)
alert(r)

99

Велике спасибі @Timwi за пропозиції

видалений потрійний оператор:

o={Hello:"O",World:0}
t=!0<<-~-~-~-~!0
c=String.fromCharCode
r=c(0)
for(i in o)r+=i+c(t++)
alert(r)

103
псевдонімString.fromCharCode

o={Hello:"O",World:0}
t=!0<<-~-~-~-~!0
c=String.fromCharCode
for(i in o)o[i]?r=i+c(t):alert(r+i+c(++t))

117
Переключено, якщо інше, на термінальний оператор

o={Hello:"O",World:0},t=!0<<-~-~-~-~!0
for(i in o)o[i]?r=i+String.fromCharCode(t):alert(r+i+String.fromCharCode(++t))

125
Я зберігаю "O"просто, щоб мати "О" в програмі.

o={Hello:"O",World:0},t=!0<<-~-~-~-~!0
for(i in o)if(o[i])r=i+String.fromCharCode(t)
else alert(r+i+String.fromCharCode(++t))

133

o={Hello:"O",World:0},t=!0<<(!0+!0<<!0)+!0
for(i in o)if(o[i])r=i+String.fromCharCode(t)
else r+=i+String.fromCharCode(t+!0)
alert(r)

@Joey, в цьому багато в чому справа.
zzzzBov

@ Joey, я читав на мета-кодовому гольфі, що слід уникати відповіді на власне запитання протягом певного часу, щоб заохотити інших спробувати різні різні підходи. Мій план полягав у тому, щоби його коментувати через день-два.
zzzzBov

@Joey, в той час не працював на своїй машині, і мені не здавалося, що я надсилаю електронну пошту відповіді, коли я могла просто опублікувати її в коментарі.
zzzzBov

@Joey: "Таких лише п'ять" - це неправильно. Будь-хто може запропонувати редагувати. Просто натисніть на "редагувати" між "посиланням" і "прапором", і ви зможете побачити код.
Іван,

@zzz: "це значною мірою суть". Усі ще можуть це бачити. Будь-хто може запропонувати змінити, натиснувши на "редагувати" між "посиланням" та "прапором", що відкриє діалогове вікно редагування та відкриє ваш код.
Іван,

7

GolfScript, 63 символи

[0))):O.)?O.*-.O.?+)).O.*+((..O+.O(.O+?.O-O*@.O+O.+$.O.*-).O/]+

Що, ще немає запису GolfScript?

У цьому використовується один числовий літерал 0та змінна назва O(яка використовується для зберігання числа 3). Все інше - це арифметика та маніпулювання стеком. Рядок Hello World!побудований з його ASCII-кодів, символ за символом.

Ось як це працює:

[             # insert start-of-array marker
  0))):O      # increment 0 thrice to get 3, and save it in the variable O
  .)?O.*-     # calculate 3^(3+1) - 3*3 = 81 - 9 = 72 = "H" 
  .O.?+))     # calculate 72 + 3^3 + 1 + 1 = 72 + 27 + 2 = 101 = "e"
  .O.*+((     # calculate 101 + 3*3 - 1 - 1 = 101 + 9 - 2 = 108 = "l"
  .           # ...and duplicate it for another "l"
  .O+         # calculate 108 + 3 = 111 = "o"
  .           # ...and duplicate it for later use
  O(.O+?      # calculate (3-1)^(3-1+3) = 2^5 = 32 = " "
  .O-O*       # calculate (32 - 3) * 3 = 29 * 3 = 87 = "W"
  @           # pull the second 111 = "o" to the top of the stack
  .O+         # calculate 111 + 3 = 114 = "r"
  O.+$        # copy the (3+3 = 6)th last element on the stack, 108 = "l", to top
  .O.*-)      # calculate 108 - (3*3) + 1 = 108 - 9 + 1 = 100 = "d"
  .O/         # calculate int(100 / 3) = 33 = "!"
]             # collect everything after the [ into an array
+             # stringify the array by appending it to the input string

7

Brainfuck, 111 байт

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

Алгоритм пояснив

Increment cell 0 to 10 (it will be loop counter)
Repeat 10 times ; will stop at cell 0
  Increment cell 1 to 7
  Increment cell 2 to 10
  Increment cell 3 to 3
  Increment cell 4 to 1
Increment cell 1 by 2 and output it ; Thus, output ASCII 72 'H'
etc. for all symbols in 'Hello World!'

Більш довга версія без циклу, 389 байт:

+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.+++++++++++++++++
++++++++++++.+++++++..+++.-------------------
---------------------------------------------
---------------.+++++++++++++++++++++++++++++
++++++++++++++++++++++++++.++++++++++++++++++
++++++.+++.------.--------.------------------
---------------------------------------------
----.-----------------------.

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

5

Луа 144 97 86 символів

Інший підхід, заснований на тому, що клавіші таблиці також є рядками, і на тому, що #Hello == #World == 32 == string.byte '\ n'

e=#"O"t=e+e for k,v in pairs{Hello=0,World=e}do T=t^#k io.write(k,string.char(T+v))end

145 char рішення

  • жодних рядків, крім "O" або 0
  • ніяких регексів
  • відсутні попередньо вбудовані функції

Зробив дельтане кодування байтів, а потім деякі попередні числа тощо тощо :)

Версія для гольфу:

e=#"O"d=e+e t=d+e v=d+t z=v+t T=t^d*d^t n=0 for l,m in pairs{T,T/t-z,z,0,d,-T-z,z*z+t*d,T/d,d,-d*t,-t^d,-T+v}do n=n+m io.write(string.char(n))end

Прокоментував:

-- without numbers, strings, regex
-- except "O" and 0
e=#"0"
t=e+e --2
d=t+e -- 3
v=d+t -- 5
z=v+t -- 7
n=0
T=t^d*d^t -- 72 = 2^3+3^2
for l,m in pairs{T, --72
T/t-z, -- 29 = 72/2-7
z, --7
0, -- 0
d, -- 3
-T-z, -- -79 = -72 - 7
z*z+t*d, -- 55 = 7*7 + 2*3
T/d, -- 24 = 72/3
d, -- 3
-d*t, -- -6
-t^d, -- -8
-T+v -- -67 = -72+5
} do
    n=n+q[k]
    io.write(string.char(n))
end

Редагування: Змінено кілька рядків O та знайдено кілька оптимізацій.


"O" * - Я думаю, що * було для виноски, а не "будь-яка кількість O
RomanSt

Що ж, я, звичайно, роблю регулярне поводження: p. Міг би замінити його ціною 5 або 3 зайвих символів відповідно для першого та другого рішення
jpjacobs

Але все одно я їх відредагую, дякую за голову
jpjacobs

Привіт та конструктор World in table все ще є рядковими буквами - це лише синтатичний цукор.
Олег Васильович Волков

5

Пітон ( 126 130)

O=ord("O")
N=O/O
T=N+N
R=N+T
E=T**R
E<<T
print'O'[0].join(chr(c+O)for c in[N-E,E*R-T,_-R,_-R,_,N-_-E-E,E,_,_+R,_-R,E*R-R,T-_-E-E])

Буквальне ''не дозволяється.
RomanSt

1
@romkyns: Дуже вірно, виправлено.
Хоа Лонг Там

5
Не фіксовано (неправильний вихід). Ви, напевно, думаєте [:0].
WolframH

5

J, 250

oo=:#a.
o0=:<.o.^0
o0o=:%:%:%:oo
ooo=:p:^:(-*oo)
o=:<.(^^^0)*(^^0)*(^^0)
o00=:o,~(,[)o0(**(**[))o0o
oo0=:*/p:(!0),>:p:!0
echo u:(o0(**(**]))o0o),(ooo ooo ooo(o.o.^^^0)*oo),o00,(+:%:oo),(oo0-~!p:>:>:0),o,(<.-:o.o.^o.^0),(>:p:(]^])#o00),(*:#0,#:oo),oo0

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


5

QR з напівблоками (169) 121 символ

За допомогою QR-коду за допомогою символів напівблоку UTF-8:

▗▄▄▄▗▄▖▗▄▄▄  
▐▗▄▐▝█▙▐▗▄▐  
▐▐█▐▝▄ ▐▐█▐  
▐▄▄▟▗▗▗▐▄▄▟  
▗▗▖▄▞▝ ▗ ▖▄  
 ▟▜ Code ▀▟  
 ▙▀ Golf ▘▚  
▗▄▄▄▐▗▘▟▙▝▝  
▐▗▄▐▝▀▛▘▘█▖  
▐▐█▐▐▖▐▝▖▜▘  
▐▄▄▟▗ ▌█▛▗▝  3

На превеликий жаль, це не вийде добре. Є невеликий фрагмент з відповідним стилем, але .. Ні! Мова, представлена ​​тут, не є HTML! Мова, представлений тут, - QR-код ! (HTML і CSS використовується тут лише для вирішення помилки презентації!)

QR з напівблоками (169)

  ▛▀▀▌▚▝▐▀▌▛▀▀▌
  ▌█▌▌▖▞▚▚▘▌█▌▌
  ▌▀▘▌ ▚▛▞ ▌▀▘▌
  ▀▀▀▘▚▌▙▘▌▀▀▀▘
  ▄▙▛▚▜▀▄▀█▖▝▄▌
  ▖▄▄▘▖▄▄▄▟▗ ▀▘
  ▜Code  golf!▌
  ▚▟▘▘▝▙▛▚▐▀▖▜▘
  ▘▘ ▀▛▗▚▗▛▀▌▄ 
  ▛▀▀▌▟▌▜▖▌▘█▐▘
  ▌█▌▌▘█▌▟█▜▙▐ 
  ▌▀▘▌▚▌▌█▗▝▌▚▘
  ▀▀▀▘ ▝▘▘▀▀▀▀▘

В ідеалі це може виглядати так:

QR: Привіт, світ!


Використовуйте свій смарт-телефон, щоб побачити це або zbarпід Linux. (Приклад: xwd | xwdtopnm | zbarimg /dev/stdin)
F. Hauri

Чи не Code golf!буквений символ?
угорен

2
Насправді я думаю, що ця відповідь, хоч і творча, не кваліфікується, оскільки це не програма. QR - це спосіб кодування даних, а не мова програмування.
угорен

1
А як щодо мов на зразок postscript, svgабо інших мов презентації, які вже використовуються там? Спосіб кодування є мовою в будь-якому випадку ... Я думаю!
Ф. Хаурі

1
Я використовував HTML (мінус JS) як приклад того, що не є мовою. Те саме стосується QR. Дивіться ці критерії .
угорен

4

Scala ( 357 423 361 символ)

На жаль, не найкоротша відповідь, але сподіваючись отримати бонусні бали за максимальне використання 'O'та'0'

def h(){type t=scala.Char;def OO(c:t)={(c-('O'/'O')).toChar};def O(c:t)={OO(OO(OO(c)))};def O00(c:t)={(c+('O'/'O')).toChar};def O0(c:t)={O00(O00(O00(c)))};val l=O('O');val z=O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(0)))))))))));print(OO(O(O('O'))).toString+(OO(O(O(O('O')))).toString+l+l+'O'+OO(z)+O0(O0(O0(OO('O'))))+'O'+O0('O')+l+OO(OO(O(O(O('O')))))+z).toLowerCase)}

Раніше:

def h(){type t=scala.Char;print(OO(O(O('O'))).toString+(OO(O(O(O('O')))).toString+O('O')+O('O')+'O'+OO(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(0))))))))))))+O0(O0(O0(OO('O'))))+'O'+O0('O')+O('O')+OO(OO(O(O(O('O')))))+O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(0)))))))))))).toLowerCase);def OO[Char](c:t)={(c-('O'/'O')).toChar};def O[Char](c:t)={OO(OO(OO(c)))};def O00[Char](c:t)={(c+('O'/'O')).toChar};def O0[Char](c:t)={O00(O00(O00(c)))}}

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

def h(){type t=scala.Char;print(""+OO(O(O('O')))+(""+OO(O(O(O('O'))))+O('O')+O('O')+'O'+OO(O(O(O(O(O('0'))))))+O0(O0(O0(OO('O'))))+'O'+O0('O')+O('O')+OO(OO(O(O(O('O')))))+O(O(O(O(O('0')))))).toLowerCase);def O0[Char](c:t)={O00(O00(O00(c)))};def O[Char](c:t)={OO(OO(OO(c)))};def OO[Char](c:t)={(c-('O'/'O')).toChar};def O00[Char](c:t)={(c+('O'/'O')).toChar}}

Я вважаю, що порожній рядок ( "") та рядки / букви з символів, що містять нуль символу ( '0'), не дозволені. Лише рядок "O"(величина O) і число 0.
Тімві

Баггер. Тоді потрібні були деякі редагування ...
Гарет

4

C (або C ++) (сегмент тіла: 49) (обман)

під час компіляції компілюйте у двійковий викликаний Hello\ World\!код:

#include <stdio.h>
#include <string.h>
int main(int i,char**a)
{
  int j=i+i,k=j<<j;puts(strrchr(*a,'O'-(k<<j))+i);
}

strrchrСегмент потрібно видалити повний шлях в разі назва програми пройшла в містить повний шлях, і ніяких доказів не повинні бути передані в ..

Типовим рядком компіляції може бути: gcc -o Hello\ World\! foo.c


3

C ++, 141, 146

Вперше спробувавши одне з них, напевно, можна ще трохи вдосконалити:

char o='O'/'O',T=o+o,X=T+o,f=T+X,t=f+f,F=t*f,h=F+F,l=h+t-T,O=l+X;
char c[]={F+t+t+T,h+o,l,l,O,o<<f,h-t-X,O,l+f+o,l,h,0};
cout<<c;

Редагувати:

Вкрав трюк з розділення з іншої публікації, не можу повірити, що я про це не думав :(


1
Ви технічно повинні включати всю робочу програму в число символів, включаючи такі речі, як основна, будь-які включені бібліотеки std::тощо тощо
Wug

3

Хаскелл - 146

a:b:c:f:g:s:j:z=iterate(\x->x+x)$succ 0
y=[f+j,d+a,c+s+h,l,a+b+l,s,f-s+o,o,a+b+o,l,l-f,a+s]
[h,e,l,_,o,_,w,_,r,_,d,x]=y
main=putStrLn$map toEnum y

Я подумав, що відповідність шаблону дасть Haskell величезну ногу вгору, зокрема, тому що ви можете ініціалізувати сили двох подібних:

one:two:four:eight:sixteen:thirty_two:sixty_four:the_rest = iterate (*2) 1

Однак, як видно на Haskell відповідь MtnViewMark в (який заслуговує багато багато upvotes, до речі) і інші відповіді, краще стиснення може бути досягнуто за рахунок використання більш ніж просто +і -.


3

Clojure - 46 годин

(map print(butlast(rest(str'(Hello World!)))))

Зверніть увагу , що Helloі World!символи, які не літерали будь-якого роду.


3

C ++

/*
Hello World!
*/
#define CodeGolf(r) #r
#include<iostream>
using namespace std;
int main()
{
    char str[*"O"];
    freopen(__FILE__,CodeGolf(r),stdin);
    gets(str);gets(str);puts(str);
}

1
100Порушує правило про числах. Будь ласка, замініть його чимось кумеднішим.
Joey Adams

@ joey-adams Дякуємо, що вказали. Змінили це.
fR0DDY

Line 7: error: ISO C++ forbids declaration of 'main' with no type
Натан Осман

@ Джордж-Едісон Виправлено. Хоча це працювало без intg ++
fR0DDY

3

PHP - 49 символів

<?=Hello.chr(($a=-~-~-~0).~-$a).World.chr($a.$a);

Журнал змін :

  • (73 -> 86) Забув видати знак оклику ... зітхнути
  • (86 -> 57) Використовує одну змінну із збільшенням
  • (57 -> 51) Змінено на використання побітових операторів на 0
  • (51 -> 49) Бітовіші оператори

1
Досить впевнений, що константи через конверсії вважатимуться рядковими буквами.
Кевін Браун

@ Bass5098 Дякуємо за вашу редакцію! Я це схвалив.
nyuszika7h

@ Bass5098 не працює, потрібно мати символи 32 і 33, а не 21 і 22. <?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);працює, але це 54 символи.
zzzzBov

@zzzzBov Я не міг зрозуміти, як очистити правки спочатку, і забув повернути її, як тільки це було затверджено.
Кевін Браун

ого, я залишив 1там. Там я порушую свої власні правила ... <?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);це те, що я повинен був використовувати, все ще 54 символи.
zzzzBov

3

Пітона, 106

o=-~-~-~0
L=o+o
d,W=-~L,o**o
_=o*W
print str().join(chr(L+W+_-i)for i in[d*L,L+d,L,L,o,-~_,W,o,0,L,d+d,_])

Використовуйте '' (без попереднього пробілу) замість str ()
aditsu

2
Також ДУЖЕ приємно! :) До речі, багаторазове призначення не рятує жодних символів
aditsu

@aditsu: Я не можу, це був би строковий буквал. Дякуємо за ваші коментарі. :)
flornquake

Ой, ой, якось порожній рядок не зареєструвався як буквальний у моїй свідомості
aditsu

3

Perl, 186 байт

@A=(0,0,0,0);@B=(@A,@A);@C=(@B,@B);@D=(@C,@C);@E=(@D,@D);@d=(@E,@D,@A);$l=[@d,@B];$o=[@$l,0,0,0];print(chr@$_)for[@E,@B],[@d,0],$l,$l,$o,\@D,[@E,@C,@A,0,0,0],$o,[@$o,0,0,0],$l,\@d,[@D,0]

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

Безумовно:

@A = (0, 0, 0, 0);          # A = 2^2
@B = (@A, @A);              # B = 2^3
@C = (@B, @B);              # C = 2^4
@D = (@C, @C);              # D = 2^5
@E = (@D, @D);              # E = 2^6

# d = 100 = 0x64 = 1100100b
@d = (@E, @D, @A);          # d = 2^6 + 2^5 + 2^2 

# l = 108 = 0x6C = 1101100b
$l = [@d, @B];              # l = d + 2^3

# o = 111 = 0x6F = 1101111b
$o = [@$l, 0, 0, 0];        # o = l + 3

print (chr @$_) for
    [@E, @B],              # "H"    H  =  72 = 0x48 = 1001000b = 2^6 + 2^3
    [@d, 0],               # "e"    e  = 101 = 0x65 = 1100101b = d + 1  
    $l, $l, $o,            # "llo"
    \@D,                   # " "   ' ' =  32 = 0x20 = 0100000b = 2^5
    [@E, @C, @A, 0, 0, 0], # "W"    W  =  87 = 0x57 = 1010111b = 2^6 + 2^4 + 2^2 + 3
    $o,                    # "o"
    [@$o, 0, 0, 0],        # "r"    r  = 114 = 0x72 = 1110010b = o + 3
    $l, \@d,               # "ld"
    [@D,0]                 # "!"    !  =  33 = 0x21 = 0100001b = 2^5 + 1

здається, що мій бінарний водху надихнув вас :) +1
masterX244

3

Символи Java 389

помітив непотрібну декларацію

class A{static int a=0,b=a++,f=a,e=a++;static char p(String s){return(char)Byte.parseByte(s,a);}public static void main(String[]z){long x=e,y=b;String c=((Long)x).toString(),d=((Long)y).toString();char l=p(c+c+d+c+c+d+d),m=p(c+c+d+d+c+d+c),o=(char)(l+a+f),_=p(c+d+d+d+d+d),$=_++;System.out.print(new char[]{p(c+d+d+c+d+d+d),m,l,l,o,$,p(c+d+c+d+c+c+c),o,(char)(o+a+f),l,(char)(m-f),_});}}

Історія перебуває в історії редагування, тепер читається оригінальна версія безгофрованої версії:

// H  e  l    l   o      W  o  r   l    d  !
//72,101,108,108,111,32,87,111,114,108,100 33
import static java.lang.Integer.*;
class A
{


    public static void main(String[] args)
    {
        Integer a=0,b=a++,e=a++;  // making a 0 a 1 and a 2 which is required later;
        String c=e.toString(),d=b.toString(),z=c.substring(0,0);  //

        String H = ((char)parseInt(d+c+d+d+c+d+d+d,a))+z+  // make binary values and then to char
                (char)parseInt(d+c+c+d+d+c+d+c,a)+
                (char)parseInt(d+c+c+d+c+c+d+d,a)+
                (char)parseInt(d+c+c+d+c+c+d+d,a)+
                (char)parseInt(d+c+c+d+c+c+c+c,a)+
                (char)parseInt(d+d+c+d+d+d+d+d,a)+
                (char)parseInt(d+c+d+c+d+c+c+c,a)+
                (char)parseInt(d+c+c+d+c+c+c+c,a)+
                (char)parseInt(d+c+c+c+d+d+c+d,a)+
                (char)parseInt(d+c+c+d+c+c+d+d,a)+
                (char)parseInt(d+c+c+d+d+c+d+d,a)+
                (char)parseInt(d+d+c+d+d+d+d+c,a)
                ;
        System.out.println(H);  //obvious
    }

3

Perl 6 , 199 байт

my \O=+[0];my \t=O+O;my \T=t+O;my \f=(t+t,O);my \F=t+T;my \S=T+T;my \L=(S,F);
say [~] ((S,T),(|L,t,0),(my \l=(|L,T,t)),l,(my \o=(|l,O,0)),F,(S,|f,t,0),o,(|L,|f),l,(|L,t),(F,0),)
.map({chr [+] t X**@_})

(нові рядки додаються для зменшення ширини, але непотрібні, тому не враховуються)


Hello World! кодується як перелік списків повноважень 2 кожної літери.

Там є саме одне місце, де у мене є літерал, 0який використовується для чого-небудь, крім а 0. Він використовується для створення списку одноелементів, який негайно перетворюється на число 1за допомогою оператора числового префікса ( +[0]).

my \O=+[0];    # one          # (List.elems)
my \t=O+O;     # two
my \T=t+O;     # Three
my \f=(t+t,O); # (four, one)  # <W r>
my \F=t+T;     # five
my \S=T+T;     # six

my \L=(S,F);   # lowercase letter  # (6,5)

say [~] (
  (S,T),            # H
  (|L,t,0),         # e
  (my \l=(|L,T,t)), # l
  l,                # l  reuse <l>
  (my \o=(|l,O,0)), # o  reuse <l>, add 0,1
  F,                # ␠
  (S,|f,t,0),       # W
  o,                # o  reuse <o>
  (|L,|f),          # r
  l,                # l  reuse <l>
  (|L,t),           # d
  (F,0),            # !
).map({chr [+] t X**@_})

3

JavaScript 662 символів

O=[[,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[],[,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]];for(O_O=[].length;O.length>O_O;O_O++)document.write(String.fromCharCode((O[O_O].length||-Math.pow([,,].length,[,,,,,].length)-[,,,,,,,].length)+Math.pow([,,].length,[,,,,,,].length)+Math.pow(++[,].length,[,,,].length)-[,].length));document.write(String.fromCharCode(Math.pow([,,].length,[,,,,,].length)+[,].length))

А як зловживати літералами масиву просто для того, щоб мати одинарну базу. Ця програма має перевагу в тому, що вона не використовується 0.


Хоча це може бути дійсним, саме ця головоломка є кодом для гольфу, а це означає, що ви повинні прагнути до найкоротшого можливого коду. На 600+ символів ви ніде не перебуваєте <100 знаків, які вже мають існуючі рішення JS.
zzzzBov

1
@zzzzBov: Я насправді не намагаюся перемогти.
Конрад Боровський

1
Ця програма має перевагу в тому, що вона не використовується 0. Про що O_O=0;?
Ерік Аутгольфер

@EriktheGolfer: Виправлено, дякую. Я не помітив цього.
Конрад Боровський

O_O=[].lengthможна записати так, O_O=falseщо зменшує його на 4.
Атмокреції
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.