«Привет, мир!» (Каждый второй персонаж, часть 2)

18

Как своего рода часть 2 Hello, World! (Любой другой символ) , напишите программу так, чтобы все три из этих программ печатали «Hello, World!»: Всю программу, 1-й, 3-й, 5-й и т. Д. Символы вашей программы, а также 2-й, 4-й, 6-й, и т.п.

Если ваша программа:

abc
def

Должно появиться «Hello, World!», Но так должно

acdf

И

b
e

Нет решений со встроенным «Hello, World!» S.

Лео Тененбаум
источник
6
Почему бы просто не изменить текст с «Привет, мир!» к чему-то еще?
Конор О'Брайен,
1
Я думаю, что этого достаточно, чтобы избежать лазеек и «Привет, мир!» канонический
Лев Тененбаум
24
ИМО, было бы неплохо увидеть строку, отличную от "Hello, World!" время от времени (это только мое мнение)
Конор О'Брайен
1
Пробелы и переводы строки считаются символами?
officialaimm
6
@ ConorO'Brien С приятным побочным эффектом, что очень немногие языки будут иметь встроенные модули буквально для любой другой строки.
Деннис

Ответы:

24

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

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

PROG.COM Загрузите и запустите его в эмуляторе MS-DOS , например , DOSBox .

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

Также вы можете скачать LEFT.COM и RIGHT.COM

Как это работает и как запустить

Смотрите ответ на первую часть

магия

Если вы хотите выполнить команду кода операции 0xAB с одним параметром 0xCD , вы пишете

магия

Генератор

Запустите код, получите гекс. Преобразовать в двоичный

cat prog.hex | xxd -r -p > PROG.COM

Евгений Новиков
источник
13

Python 3 , 115 байт

print=="partisn't";
"ran" >="partisn't" ;
print((""" "HHeelllloo,,  wwoorrlldd!! """[" ) #2">"1":: 3- 1] [ 1:-1 ]))

Каждый странный персонаж

pit=print;"a">"ats'";pit(" Hello, world! "[  2>1: -1  :1])

Каждый четный персонаж

rn="ats'"
rn =print 
rn("""Hello, world!""")#""":3 ][1- )

Попробуйте онлайн!

Возможно, это может быть намного короче, но я рад, что мне удалось заставить его работать на Python. Похоже на ответ vroomfondel на первую часть.

Скучный 93-байтный ответ

""""""
print("Hello, world!")
""""""#
""""

pprriinntt((""HHeelllloo,,  wwoorrlldd!!""))
#"""

Каждый странный персонаж

"""pit"el,wrd"
"""
""
print("Hello, world!")#"

Каждый четный персонаж

"""
rn(Hlo ol!)"""#""
print("Hello, world!")
""

Попробуйте онлайн!

notjagan
источник
9

> <> , 45 байт

! """!!ddllrrooWW  oolllleeHH"!!"" >~o <> o <

Или просто персонажи:

 "!dlroW olleH"!">o<  

Или просто странные символы:

!""!dlroW olleH!" ~ >o<

Попробуйте их онлайн: оригинальные , четные , шансы .

Исходная версия помещает " !!ddllrrooWW oolllleeHH" в стек, затем рыба подпрыгивает между ними >~o <, что удаляет букву, печатает две, удаляет две, печатает две, удаляет две и т. Д. Две полупрограммы являются довольно стандартными программами струнной печати. Сложная часть сочетала "и !правильно включала и выключала строковый режим во всех трех программах.

Не дерево
источник
7

Befunge-98 , 43 байта

120 x""!!ddllrrooWW  ,,oolllleeHH""cckk,,@@

Попробуйте онлайн!

Только странные:

10x"!dlroW ,olleH"ck,@

Попробуйте онлайн!

Только четные

2 "!dlroW ,olleH"ck,@

Попробуйте онлайн!

объяснение

Полная программа:

120               Push 1, push 2, push 0.
x                 Pop 0 (y) and 2 (x) and set the instruction pointer's movement
                  delta to (x,y). That is, run the remainder of the code
                  by skipping every other cell.
"!dlroW ,olleH"   Push the code points of the output.
ck,               Print 13 characters from the top of the stack.
@                 Terminate the program.

В нечетной программе значение 2отсутствует, так что оно 10xвообще ничего не делает (в любом случае оно устанавливает дельту, по (1,0)умолчанию). Остальная часть программы остается такой же.

В четной программе мы просто нажимаем 2на начало, которое мы можем полностью игнорировать. Остальная часть программы такая же, как и раньше.

Мартин Эндер
источник
5

Mathematica, 65 байт

PPrriinntt[[""HHeelllloo,,  WWoorrlldd!!""]]Print@"Hello, World!"

Он выбрасывает некоторые предупреждения, печатает Hello, World!и возвращает Null PPrriinntt[["" HHeelllloo, Null, "" WWoorrlldd!!]]. При запуске в качестве программы (не в REPL) возвращаемое значение не будет напечатано.

После удаления четных символов:

Print["Hello, World!"]Pit"el,Wrd"

Он печатает Hello, World!и возвращает "el,Wrd" Null Pit.

После удаления нечетных символов:

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

Он печатает Hello, World!и возвращает Null ol! rn[Hlo].

alephalpha
источник
5

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

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

EB 14 00 00 8A 8A 17 16 01 01 B4 B4 09 09 CD CD
21 21 CD CD 20 20 8A 1f 01 B4 09 CD 21 CD 20 48
65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 00 48 48 65
65 6c 6c 6c 6c 6f 6f 2c 2c 20 20 57 57 6f 6f 72
72 6c 6c 64 64 21 21 00 00

Если я правильно помню из моих детских дней, крошечная модель COM начинается с, DS=CS=SSи код загружается, начиная с CS:0100h. Я не предполагаю, что гарантировано, что код загружен в обнуленный блок памяти (если бы это было гарантировано, я мог бы отбросить два байта).

Разборка длинного кода должна быть

  JMP *+14h
  ; 20 irrelevant bytes
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
message:
  DB "Hello, World!\0"
  DB "HHeelllloo,,  WWoorrlldd!!\0\0"

Разборка нечетного кода

  JMP *+00h
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
  ; some irrelevant bytes
message:
  DB "Hello, World!\0"

Разборка четного кода:

  ADC AL,00h
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
  ; some irrelevant bytes
message:
  DB "Hello, World!\0"
Хаген фон Айцен
источник
Молодец! В DOSBox программа не работает. Я не знаю, почему com файл с этой системой заморозить код при запуске.
Евгений Новиков
Проверьте свой код в следующий раз. 8AНа 0116 должен быть BAвместо этого, и строки заканчиваются $, а не NULL.
NieDzejkob
4

Сетчатка , 48 байт

G |`

HHeelllloo,,  WWoorrlldd!!
$_&

(.)\1t?
$1

Попробуйте онлайн!

Нечетные позиции:

G|
Hello, World!
_
()1?$

Попробуйте онлайн!

Четные позиции:

 `
Hello, World!$&
.\t
1

Попробуйте онлайн!

объяснение

Полная программа:

G |`

Это ничего не делает вообще. Это |не существующая опция конфигурации. Это Gделает этап grep, но на самом деле нечего искать, и регулярное выражение пусто, так что это ничего не делает. Цель этого этапа - создать два перевода строки перед основным «Hello, World!» линия, так что один из них всегда переживает сокращение. Причина для того, чтобы сделать это оленем grep, состоит в том, что нам нужно компенсировать четность линий, а стадии grep требуют только одной строки.


HHeelllloo,,  WWoorrlldd!!

Это превращает (пустую) рабочую строку в требуемый вывод с каждым удвоенным символом.

$_&

Это ничего не делает. Регулярное выражение пытается сопоставить a _и a &после конца строки, что, конечно, невозможно. Нам понадобятся эти символы в сокращенной версии, опять же, чтобы справиться с исчезающими переводами строки.

(.)\1t?
$1

Наконец, мы удаляем дубликаты символов, заменяя их (.)\1на $1. t?Никогда не используется , но снова будет необходимо в сокращенных версиях.

Странная программа:

G|
Hello, World!

GНе может соответствовать пустой входной сигнал, но именно поэтому у нас есть , |чтобы альтернативный пустой матч. Это превращает пустую рабочую строку в желаемый вывод.

_
()1?$

Это заменяет подчеркивания на ()1?$, но в строке нет подчеркиваний, так что это ничего не делает.

Четная программа:

 `
Hello, World!$&

`Просто обозначает пустую строку конфигурации, поэтому мы снова использовать пустое регулярное выражение для замены рабочей строки с выходом. На этот раз мы также вставляем, $&но это само совпадение, которое, конечно, пустое, поэтому ничего не делает.

.\t
1

Это заменит любой символ, за которым следует вкладка, с символом a 1, но у нас нет никаких вкладок, так что это тоже неактивен.

Мартин Эндер
источник
4

Луа , 106 байт

----[[[[
print("Hello, World!")
--[[
---- ] ]
---- ] ]
pprriinntt((""HHeelllloo,,  WWoorrlldd!!""))
----]]

Попробуйте онлайн!

Альтернатива 1:

--[[
rn(Hlo ol!)-[
--]]--  
print("Hello, World!")--]

Попробуйте онлайн!

Альтернатива № 2:

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

Попробуйте онлайн!

Сценарий генератора: попробуйте онлайн!

CalculatorFeline
источник
2

PHP, 70 байт

"";echo'Hello, World!'.""//pprriinntt''HHeelllloo,,  WWoorrlldd!!''
;;

Странные символы:

";coHlo ol!."/print'Hello, World!';

Четные персонажи:

"eh'el,Wrd'"/print'Hello, World!'
;
user63956
источник
2

Haskell , 92 байта

{---- }

mmaaiinn==ppuuttSSttrr""HHeelllloo,,  WWoorrlldd!!""----}main=putStr"Hello, World!"

Попробуйте онлайн! Похоже, злоупотребление комментариями слишком много для подсветки синтаксиса. {- ... -}это встроенный или многострочный комментарий, тогда как --начинается строчный комментарий.

Странные символы:

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

Попробуйте онлайн!

Четные персонажи:

-- 
main=putStr"Hello, World!"--}anptt"el,Wrd"

Попробуйте онлайн!

Laikoni
источник
2

Zsh , 54 байта

<<<Hello\ world!||eecchhoo  HHeelllloo\\  wwoorrlldd!!

Попробуйте онлайн!

Основная программа успешно выполняет первый оператор, поэтому оператор после логического значения ||игнорируется.

Для нечетного / четного, он <<<Hello\ world!становится либо неопределенным, <<heredocлибо <fileпредоставленным на stdin. В любом случае, ||становится |, и поэтому все, что выводится первой командой, передается и игнорируется echo.

GammaFunction
источник
1

LOGO , 71 байт

;;\\
pr[Hello, World!]er "|

pprr[[HHeelllloo,,  WWoorrlldd!!]]
;;\\
|

(в программе есть завершающий перевод строки)

Две удаленные версии:

;\p[el,Wrd]r"
pr[Hello, World!]
;\|

и

;\
rHlo ol!e |
pr[Hello, World!];\

(в программе есть завершающий перевод строки)

Для объяснения, что prи erделать, смотрите этот пост . В данном случае erэто фид со словом определить имя процедуры.

Это \экранирующий символ в Logo, который будет экранировать символ новой строки после конца комментария, поэтому сделайте вторую строку ( rHlo ol!e |) второй удаленной программы комментарием.

user202729
источник
1

Javascript, 68 байт

//**
alert`Hello, World`//**//aalleerrtt``HHeelllloo,,  WWoorrlldd``

Нечетные персонажи:

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

Четные персонажи:

/*
lr`el,Wrd/*/alert`Hello, World`

Модифицированная версия моего ответа на другой.

SuperStormer
источник
1
Зачем вам нужно место на старте?
CalculatorFeline
Это не выглядит синтаксически допустимым, когда вы берете 1-й, 3-й и т. Д. Символы. Кроме того, он отсутствует lв HHeelllloo.
Арно
@ CalculatorFeline, @ Арно, исправлено
SuperStormer
1

BotEngine , 180 178 байт

На основании моего ответа на этот вопрос.

 vv 
 v < 
 eHH 
 eee 
 ell 
 ell 
 eoo 
 e,, 
 e   
 eWW 
 eoo 
 err 
 ell 
 edd 
 e!! 

>>P          e     e     e     e     e     e     e     e     e     e     e     e     e P

Нечетные символы (обратите внимание на несколько завершающих пробелов в последней строке):

 v
v<
eH
ee
el
el
eo
e,
e 
eW
eo
er
el
ed
e!
>P                                          

Четные персонажи:

v     H  e  l  l  o  ,     W  o  r  l  d  ! 
>     e  e  e  e  e  e  e  e  e  e  e  e  eP  
SuperJedi224
источник
0

Рунические чары , 52 байта

 L @""H!edlllroo,W  W,oorlllde!H"" ~@"!dlroW ,olleH"

Попробуйте онлайн!

Руническая система обычно не очень хорошо справляется с радиацией, поскольку случайное удаление символов управления потоком делает отслеживание выполнения огромной болью, но предсказуемое излучение, как у любого другого персонажа? Легко, мы просто кодируем две программы, которые обращены друг к другу и чередуются, затем добавляем третью копию для базового выполнения и контролируем, какая из них выполняется одним символом. В программе 2 третья копия - это мусор, который никогда не видели, а в программе 3 он сохраняет кавычки, позволяя извлекать его, не печатая.

Программа 1 выполняет только эту часть:

 L                                  @"!dlroW ,olleH"

Программа 2 выполняет только эту часть:

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

Как это:

  "Hello, World!" @!lo olH

Попробуйте онлайн!

Программа 3 выполняет только эту часть:

 L @ " ! d l r o W   , o l l e H " ~ " d r W , l e "

Как это:

L@"!dlroW ,olleH"~"drW,le"

Попробуйте онлайн!

"drW,le"Часть выполнена, но ~сразу всплывает его из стека, сохраняя желаемый результат.

Наивно может показаться, что преобразование ответа> <> приведет к более короткой программе, весом до 45 байт:

! ```!!ddllrrooWW  oolllleeHH`!!`` R~$ LR $ L

Однако у Runic есть одно ограничение, которого нет у> <>: максимальный размер стека 10 + маны IP (который изначально равен 10). И !!ddllrrooWW oolllleeHHсодержит 24 символа, из-за чего IP истекает мана до истечения срока действия непосредственно перед выполнением Rкоманды, что не приводит к выводу для базовой программы.

Попробуйте онлайн!

Draco18s
источник