Буквенно-цифровой Hello World [закрыто]


43

Ваша цель написать «Привет, мир!» (минус кавычки). Это , поэтому побеждает большинство голосов. Длина кода будет использоваться для разрыва связей.
Все идет, пока это в следующих правилах:

  • Все символы должны быть буквами или цифрами, поэтому вы можете использовать только символы в строке "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".
  • Весь код, который вы используете, должен быть в одном файле, за исключением импортированных модулей / классов / независимо от того, как они называются на вашем любимом языке.
  • Разрешены только стандартные библиотеки / фреймворки для выбранного языка (например, модуль Python Math разрешен, а Numpy, Scipy и Pygame - нет). Я позволю TkInter, так как это де-факто стандарт для графических интерфейсов в Python.
  • Не допускается ввод данных, будь то чтение из стандартного ввода, чтение файла, отображение изображения или чтение из Интернета.

+10 очков брауни, если вы поймете, как это сделать на Java, не нарушая правил.


На ваших отметках, получите набор, код!

РЕДАКТИРОВАТЬ: фигурные скобки ({}), квадратные скобки ([]) и круглые скобки (()) разрешены, поскольку это было бы практически невозможно для большинства языков без них. Я также удаляю правило ограничения персонажа. Надеюсь, это сделает это более интересным.

РЕДАКТИРОВАТЬ ^ 2: пробел также допускается. Мой мозг не работает должным образом, извините. >. <


1
До вас, я просто уверен. Как насчет пробелов?
Geobits

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)
Должно быть очевидно, что оно выполняется слева направо, пока каждое выражение возвращает true. Но что на земле s zqzchr 44ze?

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

В этом случае мы видим три 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 для оценки REPLACEMENT или «chr 44» в качестве выражения), которое равно «, ». Затем он заменяет «m» на chr 33, «!» И печатает его.
Амори

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

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 basic перешел на отдельный ответ, как и предлагалось. Большинство голосов по этому вопросу, безусловно, за ответ LOGO.)

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
Вы должны разделить этот ответ на две части.
Джастин

@WallWest Я почти не знаю языка, но это был инструмент для работы. Вы также можете напечатать текст (это называется меткой на вашем чертеже), но для этого вам нужна кавычка (я думаю, что требуется только открывающая цитата, а закрывающая цитата не обязательна).
Level River St

1
+1 за рисование вместо печати слов.
Wec

@steveverril Вторая цитата будет синтаксической ошибкой, на самом деле.
Томсминг

29

Applescript

Никаких скобок [], скобок {}или скобок ()в этом:

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 Трудно написать, легко прочитать
Цифровая травма

2
даже C легче читать ...
Sarge Borsch

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-

banner Hello Worldилиfiglet Hello World

2
@professfishfish Сложной частью этой задачи является получение ,и !. В противном случае, я бы просто использовал старый echo.
Цифровая травма

@DigitalTrauma о, извините, не видел этого ... немного медленно

19

base64

SGVsbG8sIFdvcmxkIQ

Удовлетворяет оригинальным правилам.


2
Является ли base64 языком? И какой у тебя выход? Есть ли у него правильная заглавная буква?
Уровень Река St

23
Конечно, это язык, но он не является полным по Тьюрингу. Кроме того, base64decode.org
Кендалл Фрей

1
Ха - ха. За этот ответ +1 ваш комментарий, но не ваш ответ. Может быть, ваш ответ позже, если мне так хочется.
Уровень River St

2
@Neil вы использовали"
mniip

2
@KendallFrey По этой логике base10 - это язык: 1234567890.
Коул Джонсон,

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, но, учитывая все эти стоны, я не мог поверить, что это было так просто на таком общем языке.
Уровень Река St

1
Я просто написал тот же код, прежде чем этот ответ был опубликован. Я обновился, чтобы опубликовать свой ответ и нашел это ...
grovesNL

1
@steveverrill Стон не был без причины. Здесь нет ни одного ответа, который бы соответствовал первоначальным правилам (без скобок / скобок / скобок, без повторений символов более одного раза)
Geobits

1
@grovesNL Если это заставляет Вас чувствовать себя лучше, это первое , что я когда - либо использовал питона для. Я провел некоторое время, просматривая документы, пытаясь выяснить, существует ли какой-либо реальный способ объединить их в одну строку перед публикацией.
Geobits

@Geobits sys.stdout.write- это стандартный способ вывода текста без перевода строки в большинстве версий на Python (поведение немного изменилось в 3.0). Мы не можем сделать это здесь из-за периодов.
grovesNL

19

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

H

Спасибо @victor за список языков.


5
Это полиглот. Это работает также в H9 +, HQ9 ++, CHIQRSX9 +, HQ9 + B и HQ9 + 2D.
Виктор Стафуса

Я уверен, что это также работает в Привет.
Wec

5
Он работает на любом языке, который вы придумываете.
Zero Fiber

2
Я ничего не изобрел ...
Исмаэль Мигель

6
К сожалению, вывод «hello, world» ( esolangs.org/wiki/HQ9%2B ) или, согласно интерпретатору «Hello world». ( 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 

Требуются некоторые изменения, чтобы стать действительно буквенно-цифровым источником.

PROGRAM-ID может быть удален. Вы получаете сгенерированное имя программы (см. Сообщения).

РАБОЧАЯ ХРАНИЛИЩА может быть сброшена. Опять стонет компилятор.

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

При изменении 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 нужен (или не OR, во всяком случае) как имя, потому что OR является зарезервированным словом для компилятора (это, конечно, означает OR).

Это значения 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 Мммм ... немного сложнее ... Мне нужно будет починить ХРАНИЛИЩЕ РАБОТУ позже. Я должен уйти сейчас ...
Билл Вуджер

1
Я смеялся над "Так как это COBOL, вывод должен быть в верхнем регистре". Хорошо сделано!
Джонатан Ван Матре

15

Ruby (с использованием только чисел и пробелов)

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

ФЕРНАНДО

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: отлично работает здесь
marinus

Ой, извините: 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]

Ребол использует фигурные скобки {}для многострочного цитирования. Настолько полностью действительный при изменениях правил, но не совсем в полном духе (ИМХО), как мои первые два ответа выше.


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 и т. д.) Я задаю его как long long [], так как таким образом я могу передать 8-байтовый аргумент и, следовательно, использовать только два вызова printf () вместо четырех.


Это нарушает правило № 1
Timtech

1
Символы, числа, пробелы и {} () [] допускаются.
pank4j

Вы можете привести литерал int к массиву? Я никогда не видел этого раньше
phuclv

Что это делает?
Николас Барбулеско

@ LưuVĩnhPhúc Массив является указателем. Указатель является целым числом.
Seequ

11

BBC BASIC

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

Сплит от моего логотипа ответа.

Легкий способ

Цифры справа - это просто коды 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

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


Как это работает? Не могли бы вы добавить объяснение?
Wec

1
Не за что. Объяснение будет добавлено в ближайшее время.
Форс

2
+1. Вы можете сделать это в шестнадцатеричном виде, чтобы сохранить несколько символов:16i48656C6C6F2C20576F726C6421P
Digital Trauma

9

JavaScript!

И они сказали, что это невозможно сделать ... Без операторов присваивания, без конкатенаторов, без кавычек! Arghhhh!

Не бойся ... Потому что сила это 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

@ 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 (), полученная строка будет контекстом следующего блока with. Я использую краткий путь, чтобы быстро получить "Hello"доступ к nameсвойству Helloфункции. Затем я объединяю символы запятой и пробела с помощью String.fromCharCode.

Следующий трюк - получить "World"часть строки. Я не могу использовать тот же метод, который использовал для получения Hello, так как не могу вызвать World.name. Вместо этого я помещаю эту логику в метод World и вызываю ее.

Наконец, я добавляю последний восклицательный знак и отправляю результат прямо в функцию log, которая, конечно, 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 без многословия
Ming-Tang

На моем Mac первая и третья строки Perl не работают, работает только вторая строка Perl. У меня есть Perl 5.16.2.
Николас Барбулеско

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


6

Python:

import antigravity 

вызывает "Привет, мир!" появляться на вашем экране. Не веришь мне? Попробуй сам! Кроме того, он на самом деле не использует Интернет, он открывает браузер, который может искать веб-сайт.


1
У меня экран высотой 768 пикселей, поэтому "Привет, мир!" не появляется на моем экране.
Оливье Грегуар

1
Это не пишет "Привет, мир!" где-нибудь в моем поле зрения. Но это открывает xkcd.com/353/ в Safari!
Николас Барбулеско

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

sciyoshi.com/2008/12/import-antigravity Код требует появления Python 3, но не будет работать в Python 3 (если только это не было перенесено).
Март Хо,

5

DC, (26 байт для игроков в гольф)

Пробелы и []скобки теперь разрешены:

[Hello]n44P[ World]n33P[]p

Выход:

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

5

Ребму , 46 персонажей

pnUPPqHELLO01pnADsp12pnSPpnUPPqWORLD01pnADsp01

Сильно совпадает с решением @ dragetun в Rebol (потому что 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

5

Пробелы

Хорошо, мы можем использовать пробелы. Он использует только 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


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
Да, хотя эта задача, по-видимому, дает в основном наивные ответы, она определенно вдохновила на некоторые интересные извращения в попытках найти интересные неконкатентивные подходы.
Джонатан Ван Матре

Ты можешь лучше. Используйте ПЕЧАТЬ, а не ВЫБРАТЬ. И неявно приведен с помощью LTRIM () или RTRIM (). Я делаю что-то подобное здесь .
Muqo

4

Python:

Пффф, кому нужна числовая часть буквенно-цифровой?

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 символа

Это может быть сделано, в конце концов!

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

Вот что касается J. Большинство примитивов - это знаки препинания 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.