你好,世界!(每个其他字符)


129

编写一个打印“ Hello,World!”的程序。而且,如果仅使用程序的第一个,第三个,第五个等字符,则生成的程序仍应打印“ Hello,World!”。

如果您的程序是:

abc
def

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

acdf

没有少于2个字符的解决方案。


2
输出周围是否可以有空格?
vroomfondel

18
惊人的第一篇文章!
亚当

11
看到“ HHeelllloo”的所有答案,使我想起了鲸鱼。
Brian Minton

32
避免出现“ Hello,World!”的专业提示 内置挑战,例如:使用稍有不同的相似复杂度的字符串,例如“问候,地球人!”
Martin Ender

6
“没有少于2个字符的解决方案。” 惊人。
罗伯特·格兰特

Answers:


195

Python 3,61字节

rant="partisn't"
print(("HHeelllloo,,  WWoorrlldd!!"""[::2]))

在线尝试!

滥用print在Python 3 中是函数的事实:)

您可以在PPCG上找到最少的党派解决方案。

成为

rn=print
rn("Hello, World!"[:])

48
这很漂亮。
musicman523

1
@ musicman523但是,在这种情况下,REPL不会用单引号引起来的文本。
Officialaimm

1
@officialaimm是的,我想是的
musicman523

1
@ yamboy1尝试删除所有其他字母
vroomfondel

1
我不知道[:]实际工作过:o不错!
HyperNeutrino

56

基数,29字节

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

在线尝试!

删除所有其他字符会删除所有换行符,结果仍为Hello, World!

%"Hello, World!

在线尝试!

这样做的原因是%创建了四个指令指针,它们在四个基本方向中的每个方向上移动。离开源代码的IP只需删除即可。因此,在第一种情况下,仅保留了向南的IP,而在第二种情况下,仅保留了向东的IP,所有其他IP都被丢弃。无论哪种情况,执行的程序都是"Hello, World!。的"切换到的字符串模式,其中每个小区被简单地打印到STDOUT。我们不需要终止字符串,因为保留源代码仍会终止程序。

请注意,相同的想法在Beeswax中也可以使用*代替%`代替"(这是因为Beeswax在很大程度上受Cardinal启发,但使用了六角形网格)。

在线尝试!(垂直)| | 在线尝试!(水平)


49

C,125字节

xpxuxtxs( ) { }xuxs ( ) { } main( ) {puts ( "Hello, World!" ) ; } mxaxixn ( ) {xpxuxtxs ( " H e l l o ,   W o r l d ! " ) ; }

在线尝试!

除去偶数字符后:

xxxx(){}us(){}mi(){us("el,Wrd");}main(){puts("Hello, World!");}

在线尝试!


31

实际上,2个字节

HH

说明:

H如您所料,将压Hello, World!入堆栈。

主程序(HH)将遇到第一个程序H并压入Hello, World!堆栈。H但是,在第二个方法上,它将尝试使用两个参数(因为堆栈需要为空,才能推送Hello, World!)并失败。但是,此错误将被忽略,然后Hello, World!将被隐式打印。

第二个程序(H)将推送Hello, World!一次,并且将被隐式打印。

这类似于Fatalize的2字节答案,但这并不是真正的“欺骗”。

在线尝试!


4
好的解决方案,但是我认为这不应该算,因为它太像一个字符的解决方案了。
Leo Tenenbaum

32
@LeoTenenbaum为什么不呢?它完全符合规则。
Okx

2
您所解释的不是这种情况,H只会压入Hello, World!一个空堆栈,如果堆栈不为空,则将需要2个参数,因此将出现错误,并且错误将被忽略。而且,No实际上并不隐式仅打印最顶层的元素。
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer糟糕。将修复。
Okx

这就是为什么实际上是我最喜欢的高尔夫语言。这是愚蠢的完美水平。
RShields

22

Lua,89个字节

--- [ [
print("Hello, World!")
--[[ ] ]
pCrAiLnCtU(L"AHTeOlRlFoE,L IWNoEr:lDd !:"D)
---]]

在线尝试!如语法突出显示所示,这是大量的注释滥用。

备用:

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

在线尝试!

为了方便起见,将程序转换为其他所有字符形式的程序:在线尝试!


我喜欢这一个!Lua的注释格式似乎类似于T-SQL,我将尝试为该语言开发一种。
BradC

3
这种技巧应适用于具有块注释和行注释(C,JS等)的任何语言
CalculatorFeline

2
CALCULATORFELINE:D:D
凌晨

2
HHeelllloo WWoorrlldd!!有点无聊:P
CalculatorFeline

19

视网膜,39字节


HHeelllloo,,  WWoorrlldd!!


(.).x?
$1

在线尝试!

换个其他字符可得出:


Hello, World!
()x
1

在线尝试!

第一个程序创建一个带有重复问候语的字符串。然后,它将每对字符替换为第一个字符。还有一个空的阶段,用它们之间的空字符串替换所有空字符串,但这无济于事。第二个程序无法匹配字母“ x”,因此创建问候语后它不会替换任何内容。

也许更有趣的是,如果第三阶段稍作更改,则第一组字符不必是相同的消息。这可能会导致许多相同长度的解决方案,例如完全一半


17

木炭,25字节

H→e→l→l→o→,→ →W→o→r→l→d→!

在线尝试!

如果删除偶数字符,则只需删除指示下一个文本方向的箭头命令,并留下以下代码:

Hello, World!

在线尝试!

那也打印问候。


17

Haskell,85个字节

{--}main=putStr"Hello, World!"--} m a i n = p u t S t r " H e l l o ,   W o r l d ! "

在线尝试!

每隔两个字符删除:

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

在线尝试!

这利用了Haskell中的两种注释格式:{- -}用于行内注释或多行注释,以及--注释行的其余部分。


16

Javascript,67个字节

/**/alert`Hello, World`// * / a l e r t ` H e l l o ,   W o r l d `

第二个字母删除:

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

就像Laikoni的Haskell回答一样,这利用了注释。


好答案,+ 1!通过在Java 8 answer中创建您的答案的端口来节省2个字节,并在我将其更改为时// * /再增加一个字节//**/(不幸的是,由于/**/alert`Hello, World` 字节数奇特,在您的情况下是不可能的,而不是像我这样。
凯文Cruijssen

14

Brachylog,4个字节

Ḥ~wḤ

在线尝试!

说明

~w将其right变量写入STDOUT,并忽略其left参数。是的"Hello, World!",所以打印出来了Hello, World!

如果仅采用第一个和第三个字符,则得到Ḥw。在这种情况下,w写入其left变量,而忽略其right变量,因此它也会打印Hello, World!

2字节

ḤḤ

在线尝试!

从技术上讲,这是一个有效的答案,但这统一了程序的输出变量,而不是打印到STDOUT,所以我想4字节程序更符合挑战精神。


我不认为2个字节的答案是“技术上”有效,为挑战美国印刷
Okx

1
@Okx打印,就像在纸上一样?
theonlygusti

@theonlygusti表示打印到STDOUT。
Okx

5
@theonlygusti ...这就是默认情况下print的含义。
Okx

3
@Okx,您正试图迷恋于使解决方案无效,但实际上没有什么无效的。挑战仅显示“输出”。
theonlygusti

11

Haskell,102字节

完整程序:

main= putStr"Hello, World!";;
putSt   x ="p u t S t r  \" H e l l o ,   W o r l d !\"";
mmaaiin = main

并删除所有其他字符:

mi=ptt"el,Wrd";ptt x=putStr "Hello, World!";main=mi

您可以通过删除之间的空间起飞2个字节p u t S t r\"
精神分裂主义O'Zaic,

11

x86机器码,162个字节

演示

PROG.COM 下载并在MS-DOS仿真器(例如DOSBox)中运行它。

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

删除后的MINI.COM 下载

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

怎么跑?

为Ubuntu / Debian安装DOSBox

sudo apt install dosbox

运行

dosbox

在DOSBOX中

mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM

如何运作?

机器操作代码代表汇编语言说明

在MS-DOS中打印字符,您将设置寄存器并产生中断。AH寄存器将为0x02,DL寄存器包含您的字符。中断向量为0x21。

mov ah,0x2  ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21    ;0x21 interrupt     (CD 21)

MS-DOS COM文件很小的模型很不错,因为它没有任何标题。它受64K限制,但在我们的情况下这无关紧要。

要停止程序,请使用0x20中断

int 0x20    ;0x20 interrupt     (CD 20)

魔法

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

AB CD

PROG.COM

90 B3 AB AB CD 90
nop         ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop         ; No operation (90)

MINI.COM

90 AB CD
nop         ; No operation (90)
AB CD command (AB CD)

它是相等的机器代码,如果你不使用BL寄存器

发电机

将十六进制文本文件转换为十六进制二进制文件

cat hex_file | xxd -r -p > exec.com


删除-52字节的所有“ 90 90”。
NieDzejkob

而且,永远不会达到终点。
NieDzejkob

10

Pyth,31个字节

p% 2"HHeelllloo,,  WWoorrlldd!!

在线尝试!

成为

p "Hello, World!

感谢@CalculatorFeline指出错误并删除一个字节。


保留的字符从第一个开始,而不是第二个。您可以删除领先空间。
CalculatorFeline

啊,谢谢@CalculatorFeline。我在规范中将“ Take”读为“ Remove”。
vroomfondel


7

05AB1E,29个字节

”™ ,ï‚‚ï ! ”# ¦2 ä ø¨øJð ý

在线尝试!

说明

”™ ,ï‚‚ï ! ”                # push the string "Weekly Hello , Changed World ! "
               #               # split on spaces
                               # RESULT: ['Weekly','Hello',',','Changed','World','!','']
                ¦              # remove the first element (Weekly)
                 2ä            # split in 2 parts
                               # RESULT: [['Hello', ',', 'Changed'], ['World', '!', '']]
                   ø           # zip
                               # RESULT: [['Hello', 'World'], [',', '!'], ['Changed', '']]
                    ¨          # remove the last element
                     ø         # zip
                               # RESULT: [['Hello', ','], ['World', '!']]
                      J        # join each inner list
                       ðý      # join on space

删除所有其他字符后,我们剩下的代码

”Ÿ™,‚ï!” 2äøøðý

在线尝试!

说明

”Ÿ™,‚ï!”       # push the string "Hello, World!"
        2ä     # split in 2 parts
               # RESULT: ['Hello, ', 'World!']
          ø    # zip, as the string has an odd length the space is lost
               # RESULT: ['HW', 'eo', 'lr', 'll', 'od', ',!']
           ø   # zip again
               # RESULT: ['Hello,', 'World!']
            ðý # join on space

7

Mathematica,62个字节

P0r0i0n0t0@0"0H0e0l0l0o0,0 0W0o0r0l0d0!0"Print@"Hello, World!"

它返回"0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0],并打印Hello, World!为副作用。当作为程序运行(不在REPL中)时,将不打印返回值。

删除所有其他字符后:

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

它返回Null ol! rn[Hlo]并打印Hello, World!


7

果冻26 25字节

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »

在线尝试!

删除所有第二个字符后,剩下的代码如下。

“3a;»“3ḅaė;œ»

在线尝试!

这个怎么运作

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »  Main link.

““3ḅaė;œ»                  Index into Jelly's dictionary to yield
                           ["", "Hello, World!"]. 
          “ 3 ḅ a ė ; œ »  Index into Jelly's dictionary to yield.
                          " FullERebitingBEfluffiest adoptable".
         ḷ                 Take the left result.
“3a;»“3ḅaė;œ»  Main link.

“3a;»          Index into Jelly's dicrionary to yield " N-".
               Set the argument and the return value to the result.
     “3ḅaė;œ»  Index into Jelly's dicrionary to yield "Hello, World!".
               Set the return value to the result.

7

立方 V2.1,222个字节

+0503 @@6 :22 //1 +050501 @@6 :55 +0502 @@6@6 :33 //1 +050502 @@6 :55 +03 //1 +04 @@6 :55 //1 +03 @@6 :55 +01 //1 +0504 @@6 :33 //1 +050502 @@6 :55 +01 //1 +050502 @@6 :55 +0502 @@6 :11 //1 +050501 @@6 :55 +01 //1 +03 @@6

在线尝试!

每隔一个字母:

+53@6:2/1+551@6:5+52@66:3/1+552@6:5+3/1+4@6:5/1+3@6:5+1/1+54@6:3/1+552@6:5+1/1+552@6:5+52@6:1/1+551@6:5+1/1+3@6

在线尝试!





6

PHP,53字节

#
echo date(
$e_c_h_o='\H\e\l\l\o\,\ \W\o\r\l\d\!
');

除去所有其他字符:

#eh ae
echo'Hello, World!';

6

八度,49 45字节

由于Octave不需要方括号来进行索引,因此节省了4个字节。

'HHeelllloo,,  WWoorrlldd!! ' (1:2 : 3 ^ 3)''

在线尝试!

并简化为:

'Hello, World!'(:    )'

在线尝试!

说明:

初始代码中的字符串中的字母是重复的,因此Hello, World!每秒钟删除一次,我们就可以使用。添加一些空格以确保保留括号和撇号。

索引确实是1:2:end。有27个字符,我们不能使用end27因为必须删除一个字符,所以我们3 ^ 3改用了。当我们删除第三个字符时,索引就会变成(:)(以及一些其他空格)。

(:)意思是“变平并变成垂直向量”。因此,我们需要使用进行转置'。我们不需要在原始代码中转置字符串,但是可以进行双重转置,因此第一个字符串使用进行了两次转置'',第二个字符串仅进行了一次转置。


6

APL(Dyalog)35 34字节

-1感谢Martin Ender。

'0H0e0l0l0o0,0 0W0o0r0l0d0!0'~  0

在线尝试!

'0H0e0l0l0o0,0 0W0o0r0l0d0!0' 带零的消息作为可移动填充符

~ 除了

 格式化(字符串化)

0 数字零

只剩下奇数字符,它变成 'Hello, World!'


5

T-SQL,75个字节

---
PRINT 'Hello, World!'
/*
-P-R-I-N-T-'-H-e-l-l-o-,- -W-o-r-l-d-!-'
---*/

单行和多行注释滥用,受CalculatorFeline的LUA版本启发

删除所有偶数字符后,其中一些是换行符:

--PIT'el,Wrd'/
PRINT'Hello, World!'--/

5

Javascript,73个字节

a ='a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/';eval(a.replace(/0/g,''))

a用content 构造一个字符串a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/,然后删除所有0的给定alert`Hello, World!`//eval'd'。

采取该程序的其他所有特征

a=alert`Hello, World!`//;vlarpae//,')

Hello, World使用模板字符串语法以与整个程序中相同的方式发出警报,然后将调用结果存储在其中a并包含具有洞察力的注释//;vlarpae//,')


5

> <>,47个字节

原版的:

| v~" H e l l o ,   W o r l d ! "

~o<< ;!!!? l

每删除第二个字符:

|v"Hello, World!"
o<;!?l

在线尝试:原创,已修改

原始程序会推送“ Hello,World!”字符。到堆栈中(以相反的顺序),并在其中插入空格,然后交替打印一个字符并删除一个字符,直到堆栈的长度为零。第二个程序执行相同的操作,只是删除指令~不见了。

如果您不介意因错误而停顿,我们可以从Martin Ender的Cardinal书中摘下来:修改后的代码是

\"!dlroW ,olleH"!#o#

原始字符是相同的,但是在所有字符之间插入了换行符,为39个字节。在线尝试:原始版本修改版本


5

,,, 34 字节

 2"Hteoltlaol,l yWhourmladn!! "⟛

在删除偶数字符时...

 "Hello, World!"

说明

具有所有字符:

 2"..."⟛

               no-op
 2             push 2 to the stack
  "..."        push "Hteoltlaol,l yWhourmladn!! " to the stack
       ⟛      pop 2 and the string and push every 2nd character of the string
               implicit output

没有偶数字符:

 "..."

               no-op
 "..."         push "Hello, World!" to the stack
               implicit output

5
意味着您不必说这是非竞争性的。
FryAmTheEggman

2
但是您应该保留所有偶数索引字符...(0索引)...
HyperNeutrino

哎呀,固定的。只需添加另一个字符,大声笑。
完全人类

4

Brainfuck,155个字节

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

在线尝试!

每隔两个字符删除:

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

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.