“你好,世界!”(其他角色,第2部分)


18

作为《你好,世界》的第二部分 (每个其他字符),编写一个程序,使所有这三个程序都显示“ Hello,World!”:整个程序,程序的第1,第3,第5等字符,以及第2,第4,第6,等等

如果您的程序是:

abc
def

它应该输出“ Hello,World!”,但是应该输出

acdf

b
e

内置的“ Hello,World!”没有解决方案。


6
为什么不只更改“ Hello,World!”中的文字呢?去别的东西?
科纳·奥布莱恩

1
我认为这样可以避免漏洞,并且“您好,世界!” 是规范的。
Leo Tenenbaum'7

24
IMO很高兴看到与“ Hello,World!”不同的字符串。偶尔(这只是我的观点)
Conor O'Brien

1
空格和换行符是否算作字符?
Officialaimm

6
@ ConorO'Brien具有令人愉悦的副作用,几乎没有其他语言会为每个其他字符串内置内置函数。
丹尼斯,

Answers:


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.COMRIGHT.COM

它如何工作以及如何运行

见第一部分的答案

魔法

如果要使用一个参数0xCD执行0xAB操作码命令,则编写

魔法

发电机

运行代码,获取十六进制。转换成二进制

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!")
""

在线尝试!


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]


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阶段,但是实际上没有什么可以grep的,并且正则表达式是空的,因此这无能为力。此阶段的目的是在主“ Hello,World!”前面有两个换行符。线,以便其中之一始终在还原中幸存下来。使其成为grep标记的原因是,我们需要抵消行的奇偶校验,并且grep阶段仅需要一行。


HHeelllloo,,  WWoorrlldd!!

这样会将(空)工作字符串转换为所需的输出,每个字符加倍。

$_&

这什么也没做。正则表达式试图匹配字符串末尾的a _和a &,这当然是不可能的。不过,我们仍然需要精简版本中的那些字符,以再次处理消失的换行符。

(.)\1t?
$1

最后,我们将替换(.)\1为来删除重复的字符$1。在t?从未使用过,但有必要再度在缩小版本。

奇怪的程序:

G|
Hello, World!

G所无法比拟的空的输入,但是这就是为什么我们有|允许替代空匹配。这会将空的工作字符串转换为所需的输出。

_
()1?$

这会用代替下划线()1?$,但是字符串中没有下划线,因此不会执行任何操作。

偶数程序:

 `
Hello, World!$&

`只是表示一个空的配置字符串,所以我们再次使用正则表达式空,以取代与输出工作的字符串。这次我们也插入了,$&但这就是匹配项本身,当然是空的,因此它什么也没做。

.\t
1

这会用替换制表符后跟的任何字符1,但我们没有任何制表符,因此这也是禁忌操作。




2

PHP,70个字节

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

奇数字符:

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

偶数字符:

"eh'el,Wrd'"/print'Hello, World!'
;

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"

在线尝试!


2

Zsh,54个字节

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

在线尝试!

主程序成功执行了第一条语句,因此布尔值之后的语句将||被忽略。

对于奇/偶,stdin上的<<<Hello\ world!变为未终止<<heredoc或已<file提供。无论哪种方式,the都会||变成|,因此第一个命令输出的任何内容都会通过管道传递给,并被忽略echo


1

LOGO,71字节

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

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

(程序末尾有换行符)

删除了两个版本:

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

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

(程序末尾有换行符)

有关说明什么prer做什么,看到这个帖子。在这种情况下,er用单词feed来确定程序名称。

\Logo中的is转义字符,它将在注释结束后对换行符进行转义,因此使第二rHlo ol!e |个被删除程序的第二行()成为注释。


1

Javascript,68个字节

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

奇数字符:

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

偶数字符:

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

我对另一个答案的修改版本。


1
为什么一开始需要空间?
CalculatorFeline

当您使用第1个,第3个等字符时,这在语法上似乎无效。另外,它缺少lin HHeelllloo
Arnauld

@ CalculatorFeline,@ Arnauld已修复
SuperStormer


1

BotEngine180个 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  

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

但是,符文有一个限制,即> <>不具备:最大堆栈大小为10 + IP的法力值(最初为10)。并且!!ddllrrooWW oolllleeHH包含24个字符,导致IP流失法力,直到它在执行R命令之前到期为止,导致基本程序无输出。

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.