Буквено-цифровий привіт світ [закрито]


43

Ваша мета - написати "Привіт, світ!" (мінус котирування). Це за , тому більшість голосів виграє. Довжина коду буде використана для розриву зв'язків.
Що б там не було, якщо це передбачено наступними правилами:

  • Усі символи повинні бути або літерами, або цифрами, тому ви можете використовувати символи лише у рядку "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".
  • Весь код, який ви використовуєте, повинен бути в одному файлі, за винятком імпортованих модулів / класів / як би вони не називались улюбленою мовою.
  • Дозволені лише стандартні бібліотеки / рамки для вашої мови вибору (наприклад, дозволений модуль Python's Math, але Numpy, Scipy і Pygame - ні). Я дозволю TkInter, оскільки це фактичний стандарт для графічних інтерфейсів на Python.
  • Не дозволяється введення даних, будь то читання з stdin, читання файлів, відтворення зображення або читання з Інтернету.

+10 балів браузера, якщо ви зрозуміли, як це зробити на Java, не згинаючи правила.


На своїх позначках встановіть, код!

EDIT: дужки ({}), дужки ([]) та дужки (()) дозволені, оскільки для більшості мов без них це було б майже неможливо. Я також видаляю правило обмеження символів. Сподіваємось, це зробить це цікавішим.

EDIT ^ 2: допускається також пробіл. Мій мозок не працює належним чином, вибачте. >. <


1
До вас, я просто переконуюсь. А що з пробілом?
Геобіц

1
О, справа білого простору. Моїй мозок явно не працює належним чином сьогодні. Це слід дозволити. За секунду дозвольте мені виправити правила.
wec

8
Отже, жодних операторів? І, головне, ні ;? Як я можу написати що-небудь на C?
Оберон


3
+1 для з'ясування того, як виключити J природним чином: 72 101 108 108 111 44 32 87 111 114 108 100 33{a.потрібен період в кінці для роботи, а шлях через u:аналогічно вимагає двокрапки. Без .і :ми ніщо.
алгоритм

Відповіді:


103

Perl

Деякі кажуть, що perl - це мова, повна шуму ascii та випадкових символів, таких як $... Це неправда: P

s zzHelloq worldmz and s zqzchr 44ze and s zmzchr 33ze and print

Давайте розділимо це на підекспресії:

(s zzHelloq worldmz) and (s zqzchr 44ze) and (s zmzchr 33ze) and (print)
Повинно бути очевидним, що воно виконується зліва направо до тих пір, поки кожен вираз поверне справжній. Але що на землі s zqzchr 44ze?

У Perl є група «цитата-подібних операторам» , яка включає в себе q(str), qw(li st), /regex/, s/from/to/між іншим. Виявляється, усі ці оператори можуть використовувати майже будь-який символ як деліметр, з парами особливостей: відкриваючий паретес повинен бути закритий відповідними дужками, що закриваються, і якщо ви хочете використовувати літеру як роздільник, вам потрібно поставити пробіл після листа оператора (для роз'єднання його з голословою).

У цьому випадку ми бачимо три використання s///оператора (заміщення регулярного виразів):

s//Helloq worldm/
s/q/chr 44/e
s/m/chr 33/e
Все розмежоване персонажем z. /eПрапор на дві останніх викликає заміну слід інтерпретувати як код , який буде оцінений, а буквальний текст.

Досить відомим фактом щодо perl є те, що більшість операцій за замовчуванням працюють для $_вбудованої змінної, якщо не вказано інше. Всі ці три підстановки та printдію $_в цьому випадку, тому спочатку ми вводимо слова Hello world у змінну, потім фіксуємо розділові знаки за допомогою числових значень символів ascii, потім друкуємо вміст змінної.


46
+1 Я не знаю, що, чорт тут, відбувається, але це працює!
писклива косточка

95
@squeamishossifrage Це може бути девіз perl
mniip

6
Якби ви могли, додали б невелике пояснення?
ace_HongKongIndependence

10
Я ні в якому разі не експерт, але в perl замість зазвичай вказується символом s/PATTERN/REPLACEMENT/FLAGS, але ви можете використовувати більшість всього, що хочете, замість косої частини. Код тут використовує "z" замість косих перетворень і перетворює (нічого) у "Helloq Worldm", а потім замінює "q" на chr 44 (використовуючи прапор \ e для оцінки ЗАМІНИ ака "chr 44" як вираз), який є ", ". Потім він замінює "m" на chr 33, a "!" І друкує його.
Аморі

3
@ace в цитаті, як оператор, наприклад q//, будь-який роздільник може бути використаний q!! q** q\\ q;;. Кілька винятків в тому , що , щоб закрити (використовувати ), q() q[] q{} q<>і що використовувати буквено - цифрові символи в якості роздільника, він повинен бути відділений від оператора , щоб заборонити двозначності, наприклад q qq, q 66. Ті ж хитрощі застосовуються і до інших операторів, що нагадують цитати.
mniip

73

С

int main(void) {
  if (putchar(72))
    if (putchar(101))
      if (putchar(putchar(108)))
        if (putchar(111))
          if (putchar(44))
            if (putchar(32))
              if (putchar(87))
                if (putchar(111))
                  if (putchar(114))
                    if (putchar(108))
                      if (putchar(100))
                        if (putchar(33)) 
                        {
                        }
}

4
Дивовижно! ЗРОБИТИ це можна в C. І я думав, що я виграв це ...
Level River St

2
@ace Тільки якщо у вас визначені випадки. Ви можете легко переписати це як switch(putchar(72)){}switch(putchar(101)){}і т.д.
Комінтерн

27
+1 заputchar(putchar(108))
Ілмарі Каронен

2
Просто пропущено кому "if (putchar (44))".
Десті

1
Добре помічений, не впевнений, як я пропустив кому у питанні. Виправлено.
mattnewport

49

(редагувати - Основна BBC перейшла до окремої відповіді, як було запропоновано. Більшість голосів на це, безумовно, за відповідь LOGO.)

ЛОГО

Перекладач за адресою http://www.calormen.com/jslogo/#

TO h        pd  fd 100 rt  90  pu  fd 50  rt 90  pd  fd 100  rt 180 fd 50  lt 90  fd 50  rt 90  pu END 
TO e        pu  fd 25  rt  90  pd  fd 25  rt 90  arc 270 25  lt 90  fd 25  lt 90  pu END  
TO l        pd  fd 100 pu  END  
TO o        rt  45 fd  35  pd  arc 360 25  lt  45  pu END 
TO comma    pd  rt 90  arc 90  15  lt  90  pu END 
TO w         l  rt 180 l   pd  lt  135 fd  35  rt  90  fd 35  lt 135  l  END  
TO r        pd  fd 25  rt  90  pu  fd  25  rt 180  arc 180 25 rt 90 END 
TO d         o  rt 135 fd  35  lt  135  l  END      
TO exclaim arc 360 5   fd  10  l  END 

clearscreen  
setpencolor 4 pu 
setxy 0 150      h 
setxy 100 150    e  
setxy 200 150    l 
setxy 250 150    l 
setxy 300 150    o 
setxy 350 150    comma  
setpencolor 1 
setxy 0 0        w 
setxy 100 0      o 
setxy 200 0      r  
setxy 300 0      l 
setxy 350 0      d 
setxy 450 0      exclaim 
fd 100

Вихід (зелений трикутник - курсор черепахи)

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


2
Ви повинні розділити цю відповідь на два.
Джастін

@WallyWest Я навряд чи знаю мову, але це був інструмент для роботи. Ви також можете надрукувати текст (його називають ярликом на вашому малюнку), але для цього вам потрібна лапка (я думаю, потрібна лише вступна цитата, а кінцева цитата не є обов'язковою)
Рівень Річки Св.

1
+1 для малювання замість друку слів.
wec

@steveverril Друга цитата насправді буде синтаксичною помилкою.
tomsmeding

29

Яблукопис

У цьому немає дужок [], дужок {}чи дужок ():

set s to ASCII character 72
set s to s as list
set end of s to ASCII character 101
set end of s to ASCII character 108
set end of s to end of s
set end of s to ASCII character 111
set end of s to ASCII character 44
set end of s to space
set end of s to ASCII character 87
set end of s to item 5 of s
set end of s to ASCII character 114
set end of s to third item of s
set end of s to ASCII character 100
set end of s to ASCII character 33
display dialog s as text

Вихід: введіть тут опис зображення


10
Неймовірно! (Я маю на увазі написати слово "характер" повністю, я маю на увазі!) Тепер я розумію, що вони означають, що яблука дорогі. Тільки жартую, +1 для чогось іншого :-)
Level River St

10
AppleScript - смішно багатослівний, але результат - це дійсно одна з найбільш зрозумілих мов програмування для лайперсона.
Джонатан Ван Матре

3
@JonathanVanMatre Важко писати, легко читати
Digital Trauma

2
навіть C легше читати ...
Сардж Борщ

1
@Cruncher - Це легко. Команда set s to s as listперетворюється "H"на {"H"}(список). В інших мовах, як-от Java, це зробити набагато складніше.
Ніколя Барбулеско

24

Баш

Цей вид працює, якщо ви косаєте очима:

echo NN i NN i i i iNN NNi i i i i i i NN i NN i i i i i i i NNi i i NN NN
echo NN i NNi i i i NN NN i i i i i i iNN i NN i i i i i i i NN i i iNN NN
echo NN i NN iNNNNi NN NN iNNNNi i i i NN i NN iNNNNi NN NN iNN iNNN NN NN
echo NNNNNNN NN iNN NN NN NN iNN i i i NN i NN NN iNN NNN iN NN NN iNNN N
echo NN i NN NNNNNN NN NN NNi NN i i i NN N NN NNi NN NN i i NN NNi iNN N
echo NN i NN NN i i NN NN NN iNN i i i NNN NNN NN iNN NN i i NN NN i NN
echo NN i NN iNNNi iNN NN iNNNNi N i i NN i NN iNNNNi NN i i NN iNNNN N NN
echo i i i i i i i i i i i i i i N

1
це працює і у файлі Windows bat / cmd
phuclv

banner Hello Worldабоfiglet Hello World

2
@professorfish Хитра частина цього виклику - отримання ,та !. В іншому випадку я просто використовую звичайний старий echo.
Цифрова травма

@DigitalTrauma о, вибачте, не бачив цього ... трохи повільно

19

база64

SGVsbG8sIFdvcmxkIQ

Задовольняє оригінальні правила.


2
Мовою base64 є мова? А який ваш вихід? Чи правильна вона з великої літери?
Річка рівня Св.

23
Звичайно, це мова, вона просто не є Тюрінг-повною. Також base64decode.org
Кендалл Фрей

1
Ха-ха. Для цього відповідь поставив +1 своєму коментарю, але не свою відповідь. Можливо, ваша відповідь пізніше, якщо я відчуваю це як.
Річка Рівня Св.

2
@Neil ви використовували"
mniip

2
@KendallFrey За цією логікою base10 - це мова: 1234567890.
Cole Johnson,

19

Пітон

То що, ми просто припускаємо, що всі читають по горизонталі? Для тих користувачів, які люблять читати вертикально:

print chr(72) 
print chr(101)
print chr(108)
print chr(108)
print chr(111)
print chr(44)
print chr(32)
print chr(87)
print chr(111)
print chr(114)
print chr(108)
print chr(100)
print chr(33)

+1 і ха-ха! На це питання на початку було стільки голосів, тому що люди вважали, що це неможливо. Я не знаю Python, але, враховуючи всі стогони, я не міг повірити, що в такій загальній мові це легко.
Річка рівня Св.

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

1
@steveverrill Стогін був недарма. Тут немає жодної відповіді, яка б перейшла до оригінальних правил (жодних дужок / паронів / дужок, жодних символів не повторювалося більше одного разу)
Geobits

1
@grovesNL Якщо ви відчуваєте себе краще, це перше, що я коли- небудь використовував python. Я провів деякий час, розчісуючи документи, намагаючись зрозуміти, чи є якийсь можливий спосіб сформувати їх в один рядок перед публікацією.
Геобіт

@Geobits sys.stdout.write- це стандартний спосіб виводу тексту без нових рядків у більшості версій на Python (поведінка трохи змінено в 3.0). Ми цього не можемо зробити через періоди.
гаїNL

19

Поліглот: HQ9 +, H9 +, HQ9 ++, CHIQRSX9 +, HQ9 + B і HQ9 + 2D (1 байт)

H

Дякую @victor за список мов.


5
Це поліглот. Він також працює в H9 +, HQ9 ++, CHIQRSX9 +, HQ9 + B і HQ9 + 2D.
Віктор Стафуса

Я впевнений, що це працює і в Hello.
wec

5
Він працює будь-якою мовою, яку ви вигадуєте.
Нульова фібра

2
Я нічого не вигадував ...
Ісмаель Мігель

6
На жаль, вихід "привіт, світ" ( esolangs.org/wiki/HQ9%2B ) або відповідно до цього перекладача "Привіт, світ". ( almnet.de/esolang/hq9plus.php ) Щоб отримати "Привіт, світ!" можливо, вам доведеться збільшити акумулятор кілька разів.
tttppp

17

OMGROFL

Я великий шанувальник езотеричних мов. На щастя, OMGROFL буквено-цифровий:

lol iz 72
rofl lol
lol iz 101
rofl lol
lol iz 108
rofl lol
rofl lol
lool iz 111
rofl lool
loool iz 44
rofl loool
loool iz 32
rofl loool
loool iz 87
rofl loool
rofl lool
lool iz 114
rofl lool
rofl lol
lol iz 100
rofl lol
lol iz 33
rofl lol
stfu

izКоманда встановлює значення змінної, в даному випадку lol, loolі looolслужити в якості змінних ...

У roflкомандному відгомони з ASCII - еквівалентна кількості зберігається в змінної.

stfuКоманда завершує програму;)


ха-ха, приємно! Я хотів спробувати версію LOLCODE, але мова вимагає використання двокрапки та лапки, щоб примусити вводити символи до символів.
Джонатан Ван Матре

17

КОБОЛ

   ID DIVISION 
   DATA DIVISION 
   01  HELLOWORLDBINARY 
       05  HE                       COMP    PIC 9999 
       05  LL                       COMP    PIC 9999 
       05  OCOMMA                   COMP    PIC 9999 
       05  SPACEW                   COMP    PIC 9999 
       05  ORTEXT                   COMP    PIC 9999 
       05  LD                       COMP    PIC 9999 
       05  EXCLAMATION              COMP    PIC 9999 
   01  FILLER REDEFINES HELLOWORLDBINARY 
       05  HELLOWORLDTEXT                   PIC XXXXXXXXXXXXX
       05  FILLER                           PIC X 
   PROCEDURE DIVISION 
       MOVE 51333                   TO HE 
       MOVE 37779                   TO LL 
       MOVE 38507                   TO OCOMMA 
       MOVE 16614                   TO SPACEW 
       MOVE 38553                   TO ORTEXT 
       MOVE 37764                   TO LD 
       MOVE 23104                   TO EXCLAMATION 
       DISPLAY HELLOWORLDTEXT 
       GOBACK 

Потрібні деякі зміни, щоб стати справді буквено-цифровим джерелом.

Ідентифікатор програми можна скинути. Ви отримуєте згенеровану назву програми (див. Повідомлення).

РОБОТА-ЗБЕРІГАННЯ можна скинути. Знову компілятор стогне.

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

Змінюючи COMP-5 на COMP, пропозиції VALUE більше не дозволені, оскільки COMP 9999 - це лише чотири десяткових цифри, тоді як COMP-5 - двобайтовий двійковий код із усіма наявними бітовими значеннями.

Значення в MOVE - це десяткові значення, які дають двійкові значення, які дають пари символів.

Навіть незважаючи на те, що поля COMP мають чотири цифри і не дозволяють VALUE пропозицій з більш ніж чотирма цифрами, ви можете використовувати більше цифр у MOVE буквального значення без усікання в цьому пункті ... не запитайте мене, чому. Опція компілятора DIAGTRUNC (яку я відключив) створить попереджувальну діагностику для них.

Варіант компілятора TRUNC (BIN) може використовуватися для розгляду COMP як COMP-5, але MOVE - це інший спосіб зробити це.

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

HELLO WORLD!

Гаразд, поступаючись, тепер виробляє:

Hello, World!

Котрий, будучи непарною кількістю символів, потребував додаткових змін, оскільки ми не можемо мати бінарні поля непарних чисел у цьому компіляторі. Подивіться на цей рядок 13 X! Зазвичай він пишеться як X (13), але може бути таким, як я показав ...

І ORTEXT потрібен (чи ні АБО, все одно) як ім'я, оскільки АБО - це зарезервоване слово для компілятора (це означає, АБО, звичайно).

Це значення EBCDIC, а не ASCII, оскільки він працює у вікні EBCDIC та Big Endian.

О, COBOL вимагає багато повних зупинок / періодів. Я залишив їх поза межами (вони заборонені), тому я отримав багато повідомлень про компіляцію. Щойно сказав компілятору все-таки генерувати код (жодне повідомлення не стосується об'єктного коду).

Навіть без DIAGTRUNC повідомлень зараз до 17 ...

  1  IGYDS1003-E   A "PROGRAM-ID" paragraph was not found. 
  Program-name "CBLNAM01" was assumed. 

  2  IGYDS1082-E   A period was required.  A period was assumed 
  before "DATA". 

  3  IGYDS1082-E   A period was required.  A period was assumed 
  before "01". 

                   Same message on line:     11 

  3  IGYDS1040-E   A data item was found in the "DATA DIVISION" 
                   before a section header was encountered. 
                   "WORKING-STORAGE SECTION" was assumed. 

  4  IGYDS1082-E   A period was required.  A period was assumed 
  before "05". 

                   Same message on line:      5      6      7      8
                   9     10     12     13 

 14  IGYDS1082-E   A period was required.  A period was assumed 
 before "PROCEDURE". 

 15  IGYPS2145-E   A period was required.  A period was assumed 
 before "MOVE". 

 23  IGYSC1082-E   A period was required.  A period was assumed 
 before "END OF PROGRAM". 

1
Я не думаю, що -це дозволено
mniip

1
Влучне зауваження. Закріплення. Звички.
Білл Вудгер

@mniip Mmmm .... трохи складніше ... мені доведеться пізніше виправити РОБОТУ-ЗБЕРІГАННЯ. Я повинен піти зараз ...
Білл Вудгер

1
Я сміявся з "Оскільки це COBOL, вихід повинен бути у верхньому випадку". Хороша робота!
Джонатан Ван Матре

15

Ruby (використовуючи лише alnums та пробіли)

putc 72
putc 101
putc 108
putc 108
putc 111
putc 44
putc 32
putc 87
putc 111
putc 114
putc 108
putc 100
putc 33

Вихід: Hello, World!


15

Javascript

with (function SGVsbG8sIFdvcmxkIQ(){}) atob(name)

Для тестування використовуйте консоль браузера.


14

JavaScript

with (String) with ([]) {
    push(fromCharCode(72))
    push(fromCharCode(101))
    push(fromCharCode(108))
    push(fromCharCode(108))
    push(fromCharCode(111))
    push(fromCharCode(44))
    push(fromCharCode(32))
    push(fromCharCode(87))
    push(fromCharCode(111))
    push(fromCharCode(114))
    push(fromCharCode(108))
    push(fromCharCode(100))
    push(fromCharCode(33))
    alert(join([]))
}

1
ARGH! Я потрапив у те саме рішення, але вирішив, що оскільки було 2 години ранку, я повинен лягати спати і відправляти його вранці. Кудо вам!
DocMax

12

ferNANDo

h E R
e I S
h E
l L O
w O
r L
d U S
i N G
o N L
y L E
t T E
r S

H e L L o W O R
L d h E L l O w
O r l D h e L L
O w o R l d H E
L l o W o r l d
H E l L o w O R
L D h E L L O W
O r L d H e l l
O w o R l d h e
L l o w O R l D
H e l L o w O R
L d h E L l O W
O R l D H E L l
O w O
r L d

Відсутня кома і!
VoronoiPotato

@VoronoiPotato: тут чудово працює
marinus

whoops вибачте: X
VoronoiPotato

12

Rebol

Алфавітно-цифрове рішення:

prin quote Hello prin add space 12 prin space prin quote World print add space 1

Вище - це оновлення, яке використовує доктор Ребму відмінна пропозиція add space 1(яка виробляє !), щоб дістатися до всіх персонажів.

Нижче наведено оригінальну версію:

prin quote Hello prin pick mold system 264 prin space prin quote World print pick mold system 12

Коротша версія з дужками:

print rejoin [quote Hello pick mold system 264 space quote World pick mold system 12] 

І навіть коротша версія з дужками:

print join {Hello} join pick mold system 264 join { World} pick mold system 12

І найкоротша версія з обома дужками та дужками:

print rejoin [{Hello} pick mold system 264 { World} pick mold system 12]

Rebol використовує дужки {}для багаторядкового котирування. Тож цілком дійсна за змінами правила, але не в повному дусі (ІМХО), як перші два мої відповіді вище.


NB. Друк !було болем!

Rebol дозволяє і використовує пунктуаційні символи звичайно для імен функцій та типів даних. Тож варіанти, такі як to-char 33або to char! 33не будуть дозволені за правилами (навіть якщо ці пунктуації не є операторами самі по собі).

На щастя, я знайшов сміливий шлях, перетворивши об’єкт системи Rebol: make object! [...]на рядок і вишню, що вибираєш !із нього :)

Оновлення: А тепер також вишневий вибраний кома з ліцензійного тексту в системному об’єкті.


1
!не дозволено
grovesNL

2
@grovesNL - рішення більше не використовує -або !так що ви можете тепер видалити вниз голосування
draegtun

1
Вам не вистачає кома
mniip

1
@mniip - Дякую, що пропустив це! Тепер виправили.
draegtun

1
Досить хитро, але ви могли просто додати місця для отримання персонажів ... ;-) Дивіться рішення Rebmu , яке працює на 46 символів ...
Доктор Ребму

12

С

Використовує лише буквено-цифрові символи, пробіли та дужки {}, дужки [] та дужки ().

main()
{
        if(printf((long long []){0x202c6f6c6c6548}))
                if(printf((long long []){0x21646c726f57})){}
}

printf () приймає char * як аргумент, але оскільки ми не можемо використовувати лапки ("), я набираю рядок як довгий довгий масив. Значення, що бачаться тут, - це рядки ASCII, мало ендіан (0x48 = H, 0x65 = e, 0x6c = l і т. д.) Я набираю це на довгий [], оскільки таким чином я можу передавати 8-байтовий аргумент і, отже, використовувати лише два виклики printf () замість чотирьох.


Це порушує правило №1
Timtech

1
Знаки, числа, пробіли та {} () [] дозволені.
pank4j

ви можете віддати int literal до масиву? Я ніколи цього не бачив
phuclv

Що це робить?
Ніколя Барбулеско

@ LưuVĩnhPhúc Array - покажчик. Покажчик - ціле число.
seequ

11

BBC BASIC

Емулятор на bbcbasic.co.uk

Розділитись з моєї відповіді LOGO.

Простий спосіб

Цифри праворуч - це лише коди ASCII. Це так само, як друк. Якщо мені дозволили кома, я міг би це зробити в одному рядку ( VDU 72,101,108,etc.)

   10 VDU 72
   20 VDU 101
   30 VDU 108
   40 VDU 108
   50 VDU 111
   55 VDU 44
   60 VDU 32
   70 VDU 87
   80 VDU 111
   90 VDU 114
  100 VDU 108
  110 VDU 100
  120 VDU 33

Більш творчий спосіб

    5 MODE 6
   10 READ B
   12 WHILE B
   15   PROC1(B)
   16   PRINT
   17   READ B
   18 ENDWHILE
   20 END

REM procedure prints first square on line, 
REM then calls itself recursively with A DIV 2 to print the next
REM VDU 17 tell VDU controller we want to change colour
REM Next line changes background colour. 
REM Then following line VDU 32 prints a space in that background colour.

  110 DEFPROC1(A)
  115 VDU 17
  120 IF A AND 1 THEN VDU VPOS DIV 6 EOR 133 ELSE VDU 128
  125 VDU 32
  130 IF A THEN PROC1(A DIV2)
  140 ENDPROC

REM binary bitmap data for each row, least significant at left
  150 DATA 463221
  160 DATA 332053
  170 DATA 332151
  180 DATA 332053
  190 DATA 2586485
  200 DATA 1048576
  210 DATA 4395895
  220 DATA 4527447
  230 DATA 4526935
  240 DATA 333143
  250 DATA 4420981
  260 DATA 0

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



11

Постійного струму

DC - це майже ідеальний інструмент для роботи.

5735816763073854918203775149089P

DC- Pcommand вискакує одне число зі стека і виводить своє необроблене комп'ютерне подання на STDIO. Бачачи як 5735816763073854918203775149089 = 0x48656C6C6F2C20576F726C6421, який представлений як 0x21, 0x64, 0x6C... = 'H', 'e', 'l'...в архітектурі мало-ендіану, він виводить Hello, World!.


Як це працює? Ви б не хотіли додати пояснення?
wec

1
Зовсім ні. Пояснення буде додано незабаром.
Форс

2
+1. Ви можете це зробити в шістнадцять разів, щоб зберегти кілька символів:16i48656C6C6F2C20576F726C6421P
Digital Trauma

9

JavaScript!

І вони сказали, що цього не можна зробити ... Ні операторів присвоєння, ні конкатенаторів, ні цитат! Архххх!

Не бійся ... Бо ти сила with...

function w(x){
    with(document){
        with(String){
            write(fromCharCode(x))
        }
    }
}
w(72)
w(101)
w(108)
w(108)
w(111)
w(44)
w(32)
w(87)
w(111)
w(114)
w(108)
w(100)
w(33)

Output (on browser screen): Hello, World!

Він сказав: "Бонус, якщо ти можеш це зробити на Java", а не Javascript.
Алмо

@Almo Я не мав на меті це робити на Java ... Я зосереджувався на JavaScript, що є моєю основною силою на цьому сайті ...
WallyWest

Але ви сказали "І вони сказали, що цього не можна зробити", на що я думав, що це стосується головоломки, де зазначено бонус за те, що робити це на Java. Багато людей все ще плутають Java з Javascript.
Алмо

@Almo, я просто використовував загальну приказку ... І коли я посилаюся на "Javascript", я маю намір використовувати JavaScript ... Повірте, я не планував збиратися на бонус ...
WallyWest

9

Javascript

Оновлення: вдалося вирізати купу символів, ввівши також функцію World.

Ще одне рішення Javascript, яке пише в console.log:

function World() { with (World) return name }
function Hello() {}
with (console)
with (String)
with (Hello)
with (name)
with (concat(fromCharCode(44)))
with (concat(fromCharCode(32)))
with (concat(World()))
log(concat(fromCharCode(33)))

Натхненний цим записом .

По-перше, я визначаю функції під назвою Hello і World. Це буде використано згодом.

Тоді я запускаю свій ланцюжок вкладених з. with (console)І with (String)використовується так , що я можу пізніше Invoke console.logі String.fromCharCodeбез використання точки.

Зараз планується побудувати рядок Hello, World!шляхом зловживання вкладеними символами. Кожен раз, коли я викликав concat (), результуюча рядок буде контекстом у наступному блоці. Я роблю скорочення, щоб швидко отримати "Hello"доступ до nameвластивості Helloфункції. Потім я з'єдную кома та пробіли символами, використовуючи String.fromCharCode.

Наступний трюк - отримати "World"частину рядка. Я не можу використовувати той самий метод, який я отримав Hello, оскільки я не можу викликати World.name. Натомість я вкладаю цю логіку всередину методу Світу, і викликаю її.

Нарешті, я додаю остаточний знак оклику та надсилаю результат прямо до функції журналу, що, звичайно, є console.log.


7

Perl

У сучасному Perl (5.10 або новіший):

print q{Hello} and print chr 44 and print q{ World} and say chr 33

У старших Perl:

print q{Hello} and print chr 44 and print q{ World} and print chr 33 and print chr 10


Обидва рішення, що використовуються вище, використовують qоператор, що нагадує цитату Perl, і дозволяє вибіркові роздільники для цитування рядків, наприклад q{} q[] q() q//

Це рішення вимагає зміни правил, які дозволяють дужки, дужки або парен. Тому, хоча я цілком справедлива, я вважаю, що mniipвідмінна відповідь Perl більше відповідає справжньому духу правил (+1).

Однак, взявши лист у mniipвідповідь, моє рішення могло бути написане так:

print q xHellox and print chr 44 and print q x Worldx and say chr 33

і, тим важче на око, це працює.


1
Вам не вистачає кома
mniip

1
@mniip - ще раз дякую. Тепер додано пропущену кому.
draegtun

Схоже, AppleScript без багатослів’я
Мінг-Тан

На моєму Mac перший і третій рядки Perl не працюють, працює лише другий рядок Perl. У мене Perl 5.16.2.
Ніколя Барбулеско

syntax error at -e line 1, near "say chr"
Ніколя Барбулеско,


6

Пітон:

import antigravity 

викликає "Привіт, світ!" з'являтися на екрані. Не вірите мені? Спробуйте самі! Крім того, це фактично не використовує Інтернет, він відкриває браузер, який може шукати веб-сайт.


1
У мене екран висотою 768 пікселів, тому "Привіт, світ!" не відображається на моєму екрані.
Олів'є Грегоар

1
Це не пише "Привіт, світ!" де завгодно в моєму полі зору. Але це відкриває xkcd.com/353/ в Safari!
Ніколя Барбулеско,

Зараз я не використовую Інтернет. Я пишу в браузері, який може підключитися до веб-сайту.
Ніколя Барбулеско

sciyoshi.com/2008/12/import-antigravity Код вимагає, щоб Python 3 з'являвся, але не запускається в Python 3 (якщо тільки це не підтримувалося).
Хо-березень

6

Пробіл

Гаразд, ми можемо використовувати пробіл. Він використовує тільки Space, Tab, LineFeedі ігнорує будь-які інші символи.

   	  	   
	
     		  	 	
	
     		 		  
	
     		 		  
	
     		 				
	
     	 		  
	
     	     
	
     			 			
	
     		 				
	
     			  	 
	
     		 		  
	
     		  	  
	
     	    	
	
  


З коментарем: S, Tабо Lкошти Space, Tabабо LineFeedвідповідно.

S S S T S S T   S S S L
T   L
S S S S S T T   S S T   S T L
T   L
S S S S S T T   S T T   S S L
T   L
S S S S S T T   S T T   S S L
T   L
S S S S S T T   S T T   T   T   L
T   L
S S S S S T S T T   S S L
T   L
S S S S S T S S S S S L
T   L
S S S S S T T   T   S T T   T   L
T   L
S S S S S T T   S T T   T   T   L
T   L
S S S S S T T   T   S S T   S L
T   L
S S S S S T T   S T T   S S L
T   L
S S S S S T T   S S T   S S L
T   L
S S S S S T S S S S T   L
T   L
S S L
L
L

З виділенням: http://en.wikipedia.org/wiki/Whitespace_(programming_language)#Sample_code


5

DC, (26 байт для гравців у гольф)

Пробіли та []дужки тепер дозволені:

[Hello]n44P[ World]n33P[]p

Вихід:

$ dc <<< "[Hello]n44P[ World]n33P[]p"
Hello, World!
$ 

5

Ребму , 46 символів

pnUPPqHELLO01pnADsp12pnSPpnUPPqWORLD01pnADsp01

Рішучі паралелі @ рішення dragetun у Реболі (Тому що Rebmu - це інструмент навчання Rebol / Red, який є "діалектом", який має на меті привернути увагу до мов, гойдаючись у Code Golf. :-P)

Однак, щоб отримати відсутніх персонажів, я зробив щось більш очевидне. Я просто додав простір, замість того, щоб переглядати системні рядки. Ви можете додати пробіл 1, щоб отримати символи буквально # "!" і додайте пробіл 12, щоб отримати символи буквально # ",".

Якщо ми запустимо це, то можемо побачити, що він стає «безладно»:

>> rebmu/debug/stats "pnUPPqHELLO01pnADsp12pnSPpnUPPqWORLD01prADsp01"
Original Rebmu string was: 46 characters.
Rebmu as mushed Rebol block molds to: 46 characters.
Unmushed Rebmu molds to: 62 characters.
Executing: [pn upp q hello 1 pn ad sp 12 pn sp pn upp q world 1 pr ad sp 1]
Hello, World!

Що досить логічно:

; print with no newline the result of doing an uppercase/part
; on the quoting of the symbolic word hello, of only the first
; N characters (where N is 1)
pn upp q hello 1

; print the character you get when you add 12 to the space
; character literal, a.k.a. comma...again no newline
pn ad sp 12

; print a space, no newline
pn sp

; do the same trick of printing the quoted word hello with the
; first letter converted to uppercase
pn upp q world 1

; print the character you get when you add 1 to the space
; character literal, a.k.a. exclamation point...with newline now
pr ad sp 1

4

T-SQL, 52

Ах, це краще! Пряме бінарне перетворення, всього 52 символи.

SELECT CAST(0x48656C6C6F2C20576F726C6421 AS VARCHAR)

Раніше ...

Існує набагато розумніший і гольфістичний варіант, який би спрацював, якщо ми могли б використовувати =та +(Шукати стандартні вбудовані дані в msdb і використовувати їх для побудови рядка запиту, здатного EXEC)

Але оскільки ми не можемо, ви отримуєте такий наївний підхід:

SELECT CHAR(72)SELECT CHAR(101)SELECT CHAR(108)SELECT CHAR(108)SELECT CHAR(111)SELECT CHAR(44)SELECT CHAR(32)SELECT CHAR(87)SELECT CHAR(111)SELECT CHAR(114)SELECT CHAR(108)SELECT CHAR(100)SELECT CHAR(33)

1
Я знаю, відсутність операторів конкатенації мене вбиває ... Я намагаюся придумати спосіб зробити це за допомогою JavaScript ...
WallyWest

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

Ви можете зробити краще. Використовуйте PRINT, а не SELECT. І неявно передано за допомогою LTRIM () або RTRIM (). Я що - щось подібне тут .
Muqo

4

Пітон:

Pfff, кому потрібна числова частина буквено-цифрової?

from string import lowercase
from string import uppercase
from string import punctuation
print uppercase[len(str([[[len(str())]]]))]
print lowercase[len(str([[]]))]
print lowercase[len(str([[[[[len(str())]]]]]))]
print lowercase[len(str([[[[[len(str())]]]]]))]
print lowercase[len(str([[[[[[[]]]]]]]))]
print punctuation[len(str([[[[[len(str())]]]]]))]
print
print uppercase[len(str([[[[[[[[[[[]]]]]]]]]]]))]
print lowercase[len(str([[[[[[[]]]]]]]))]
print lowercase[len(str([[[[[[[[len(str())]]]]]]]]))]
print lowercase[len(str([[[[[len(str())]]]]]))]
print lowercase[len(str([len(str())]))]
print punctuation[len(str())]

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

lowercase="abcdefghijklmnopqrstuvwxyz"
uppercase="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
punctuation="!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"

(це не є частиною мого подання, це просто обмін моїми місцевими жителями для відпочинку)


4

J - 73 char

Зрештою, це можна зробити!

72 101 108 108 111 44 32 87 111 114 108 100 33{do 1 8{show 0 def 0
take
)

Ось що стосується Дж. Більшість примітивів - це розділові знаки ASCII, за якими слідують до двох крапок або двокрапки. Ті примітиви, які не складаються з пунктуації, є буквено-цифровим символом з двома крапками або двокрапками. Тож нам заборонено жодне із них, крім них { } [ ]. [і ]є дієсловами ідентичності, і тому марні.

На щастя, {індексує масиви, тож якби ми мали, скажімо, рядок із кожним символом ASCII ( a.званий алфавітом ), ми могли б витягнути літери за їх кодовими точками ASCII. У нас також є резервний спосіб створення рядків , 0 : 0а потім речі, а потім самотній ); двокрапка , в якому є псевдонім в стандартній бібліотеці, def.

Потім у стандартній бібліотеці є дієслово show, яке дає внутрішнє подання дієслова, якщо ви передасте йому ім'я як рядок. Є ще одне дієслово do, яке буде оцінювати рядок. Отже, якщо ми можемо витягнути a.з будь-якого такого представлення, ми можемо це зрівняти і витягнути Hello, World!.

Наш спаситель походить у формі take, псевдонім для {.якого має aсвоє ім'я. show'take'повернеться take=: {., тож ми маємо своє a.і, таким чином, рішення.

Ми можемо позбутися {, використовуючи по суті еквівалент pickзі стандартної бібліотеки, але батьків у самому кінці неможливо уникнути.

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