你好,世界!人物重复次数有限


79

用您选择的语言编写一个程序,该程序精确输出字符,Hello world!后跟换行符。编码:

  • 最多使用两次字符(字母数字,符号,空格...任何其他字符)
  • 不应使用任何外部资源
  • 不应使用任何用户输入
  • 不应该输出其他任何东西

有效的python程序的示例:

print("He%so world!"%(2*'l'))

无效的python程序的示例(字符'r'被使用了3次):

print("Hel"+chr(108)+'o world!')

获胜者是14天后获得票数最多的人。

编辑:获胜者已被选中!感谢大家在这个问题上所做的工作!


25
在“有效” python示例中重复的字母o怎么办?还有这些:-“'()
Adam Speight 2014年

15
@AdamSpeight是什么意思?根据规格,该字母仅使用两次。
2014年

5
@AdamSpeight ...实际上是相同的。
VisioN

4
我认为您是说一个字符不应出现两次以上,也就是说,不应重复多次。
Michael Kay 2014年

56
我想Brainfuck
不可能的

Answers:


61

红宝石(1.9+)

由于这是一次人气竞赛,所以我们不要使用“ Hello world!”中的任何字符。同时最多只能使用两次其他字符:

puts("S\107VsbG8gV29ybGQhCg".unpack(?m))

大约是40个字符。

重击

而这个使用了unicode魔术。

笔记:

  • 尽管原始字符出现在其他位置(与ruby示例不同),但打印的字符串仅包含非ASCII字符。
  • 三个空格中的两个实际上是制表符,因此没有utf-8字符出现两次以上
  • 作为二进制文件,某些八位字节确实出现了两次以上,希望这不违反规则。我正在尝试解决它们。

码:

echo '𝓗𝐞𝑙𝒍𝓸 𝓦𝗈𝖗𝖑𝘥¡'|iconv -t  asCIi//TRANSLIT

对于那些没有安装正确字体的人,它看起来像这样:

code as image

这是十六进制转储:

00000000  65 63 68 6f 20 27 f0 9d  93 97 f0 9d 90 9e f0 9d  |echo '..........|
00000010  91 99 f0 9d 92 8d f0 9d  93 b8 e2 80 8a f0 9d 93  |................|
00000020  a6 f0 9d 97 88 f0 9d 96  97 f0 9d 96 91 f0 9d 98  |................|
00000030  a5 c2 a1 27 7c 69 63 6f  6e 76 09 2d 74 09 61 73  |...'|iconv.-t.as|
00000040  43 49 69 2f 2f 54 52 41  4e 53 4c 49 54 0a        |CIi//TRANSLIT.|
0000004e

您必须在默认字符集为utf-8的计算机上运行它。我在以下环境中使用iTerm2在OSX10.8上尝试过:

bash running in iTerm2

PHP 5.4

这使用zLib :(不幸的是,它确实使用了字符eo

<?=gzuncompress('x▒▒H▒▒▒W(▒/▒IQ▒!qh');

十六进制转储:

00000000  3c 3f 3d 67 7a 75 6e 63  6f 6d 70 72 65 73 73 28  |<?=gzuncompress(|
00000010  27 78 9c f3 48 cd c9 c9  57 28 cf 2f ca 49 51 e4  |'x..H...W(./.IQ.|
00000020  02 00 21 71 04 68 27 29  3b                       |..!q.h');|
00000029

+1

这是我用于测试重复项的ruby 2.0代码:

d=ARGF.read
p [d.split(//),d.unpack('C*')].map{|x|x.inject(Hash.new(0)){|i,s|i[s]+=1;i}.select{|k,v|v>2}}

2
虽然我一直很欣赏Unicode的聪明,但是您的bash尝试似乎不符合问题的规范。“编写一个精确输出字符Hello world!后跟换行符的程序”
FireFly 2014年

14
@FireFly:它确实满足。具有目标编码的iconv ascii//translit会将unicode字符音译为基本ascii。当然echo会添加换行符,因此这符合规范(如果我们不考虑八位字节的相似性)
SztupY 2014年

5
在我的系统获得Hello World?的,而不是Hello World!
马里努斯

1
@SztupY哦,您是对的,我不好。非常聪明,我喜欢!
FireFly 2014年

1
如果您的重复检查器也符合重复的规范,您将获得多少积分?:-)
corsiKa 2014年

55

您必须使用更具表现力的语言。

中文, 6 4   3个字符

喂世!

运行谷歌翻译对此产生 Hello world!

(感谢@sreservoir和@Quincunx进行更新)


33
+1弯曲规则... “以您选择的语言...”
WallyWest'1

4
爱它。但是,该程序到底有多精确?
皮埃尔·阿洛德

3
实际上,您可以将其视为Google翻译语言中的程序-中文作为其副语言:)
Tomas

2
+1。好主意。世界=Shìjiè=世界。你好=nǐhǎo=你好。“世界,你好!” 转换为“ Hello World!”。它可以打得更多一些:你好世!
贾斯汀

2
可以以喂世!……为代价进一步打高尔夫球……好吧,实际上什么也没花。
muhmuhten 2014年

45

HQ9 +,1个字符

H

保持简单:)


7
HQ9 +会输出逗号;)
乔什(Josh

8
我仍然会保留您的答案...毕竟这是一场人气竞赛,规则随风而逝!
2014年

26
@Josh这是罕见的事件之一,我错过了评论上的downvote按钮。如果我们放弃规则,就根本没有任何理由可以证明比赛的合理性。
霍华德

5
@霍华德,我感到肮脏。我支持您和Josh的评论
Cruncher

22
所有print Hello World问题实际上都是who can submit a HQ9+ answer faster问题。
totymedli 2014年

44

C,192个字符

#
#
/*$$@``*/ATION_[]={9.};main(BBCDDEEFFGGHJJKKLLMMPPQQRRSSUUVVWWXXYYZZabbdefgghhjjkkmpqqsstuuvvwxyyzz) {printf("He%clo \
world!%c\
",2^7&!8.&~1|~-1?4|5?0x6C:48:6<3>2>=3<++ATION_[0],'@'^79-5);}

由于这不是高尔夫运动,所以我决定找点乐子,尝试将每个角色准确地使用两次(同时在评论中尽量少用,因为这很无聊)。我意识到我做得不好,因为我的代码也包含了很多无聊的“死”代码(不是字面意义,而是为了满足要求而使用的占位符)。无论如何,由于两个字符的限制,这很难(但很有趣),所以不幸的是我无法提出任何更有趣的东西。它的确给了我一个新问题的主意...

(根据@ugoren的评论更新。)


3
创意令人印象深刻。我喜欢。
2014年

反斜杠“ \”第三和第四行使其成为行的延续,而不是换行符。第四行由EOF终止,使其合法。
2014年

1
我认为您可以.通过分数轻松地取消注释。您也可以声明一个数组并使用[]
ugoren 2014年

@ugoren好电话.; 我只考虑过将其用于结构访问。<s>关于数组声明,,由于printf调用我不在;s中,而且我也不在s中,所以我不确定如何声明一个。</ s> h,我可以替换ATION_。 ..
FireFly 2014年

44

Vim命令(18个击键)

iHeEsc3alEscio WorRightd!Enter

不要重复任何击键两次以上。

有点违反“用户输入”规则,因为仍然是需要输入该序列的用户,但是我想,如果您事先将其存储为宏或nnoremap,它将被计数,因为您只是在不显式执行任何操作的情况下运行它投入使之成为现实。

还需要nocompatible设置它,这可能算作使用外部资源,因此我在下面提供了另一个变体:


Vim命令(21次击键)

iHeEsc3alEscio WorCtrl+[$ad!Enter

不需要nocompatible设置此变体,尽管它确实可以代替使用Esc3次Ctrl+[


16
如果你谈论的人物RightEscEnter,他们不是字面上的字符。Vim处理击键,对于此竞赛,我认为击键等同于字符(并且“不重复两次”规则)。我只使用i两次<Right>击键,一次只击击一次。至于E,我从不使用它-但是我确实使用<Esc>过两次<Enter>
Joe Z. 2014年

6
现在,我很失望Emacs没有Mx hello-world命令...
RemcoGerlich 2014年

4
即使这样,也只有l三秒。
Joe Z. 2014年

1
您应该注意必须:set nocompatible
jazzpi 2014年

1
太神奇了,但是我自己发现使用Right不是很vim。
gefei 2014年

29

Piet-完全没有字符!

Hello world in Piet


7
我认为编码是“字符”。
圣保罗Ebermann

3
@PaŭloEbermann您认为什么是独特的编码?EG不同的形状?颜色?大小?它们的某种组合?
接近

1
@ValekHalfHeart在语言规范中给出了唯一编解码器的定义:它是一个编解码器块,可以简化为单个彩色像素。
plannapus 2014年

@plannapus在那种情况下,我认为Piet在技术上不可能做到这一点。我可能会想出一些创意。
ApproachingDarknessFish

@ValekHalfHeart哦,这不是对这个答案的批评:我喜欢它!无论如何,这个挑战不是代码高尔夫。
plannapus 2014年

26

Perl,29个字符

这个答案包括x级木log!

say"07-8*d<#B+>!"^xRATEDkL0GZ

Perl,23个字符

较短,但没有色情鞋。:-(虽然有相同的基本想法...

say'0@@lo World!'^"x%,"

Perl,20个字符

无聊...

say"Hello Wor\x6Cd!"

7
嗯...变态?+1 :)
乔什(Josh)2014年



18

Scala:34个 29个字符

我为此感到骄傲:

printf("He%c%co world!\n",108,108)

克服重复的'l','r',引号和方括号非常困难。然后,我发现了旧的Java printf函数,该函数将在给定%c格式说明符的情况下将数字愉快地转换为字母。

更新资料

MrWonderful指出了可以通过手动用完字符串中的第二个“ l”来节省一大堆字符的作用,这是一件很棒的事情!

printf("Hel%co world!\n",108)

4
@KCaloux,由于允许最多2'l,所以28时printf(“ Hel%co world \ n”,108)会更好吗?
MrWonderful 2014年

@MrWonderful我认为你是绝对正确的!(我也意识到,我忘了包括'!')
KChaloux 2014年

据我了解,尽管是一个很好的尝试,但这不是一个有效的条目。printf包含了r一样worldo多次使用的字母也是如此。这是基于我对OP中以下语句的解释:“一个无效的python程序的示例(字符'r'被使用了3次):print("Hel"+chr(108)+'o world!')
javatarz 2014年

@JAnderton我有一个ruby程序解析我的脚本,以确保其中包含的字符不超过两次。再次阅读。有2个rs,而不是3个。一个在“ printf”中,一个在“ world”中。python无效的原因是因为它包括chr
KChaloux14年

16

Python 3 [38字节]

exec('import '+chr(95)*2+"h\x65llo__")

我不会考虑import __hello__作为外部资源。


15

Perl:34个字符

$_="He12o wor3d!
";s{\d}{l}g;print

样品运行:

bash-4.1# perl -e '$_="He12o wor3d!
> ";s{\d}{l}g;print'
Hello world!

(没什么大不了的。发布只是为了在我的生活中至少s///使用那些花哨的定界符一次。)


15

PHP,33个字符

我只是爱多少PHP可以原谅和理解!

<?=Hel.str_rot13("yb jbe").'ld!';

在删除它之前(或者如果它仍然存在,我完全是盲目的),我看到一条评论说:“ No brainf * ck?:D”。众所周知,用BrainF * ck编写解决方案几乎是不可能的。但是我设法为lulz编写了代码。

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

如果您没有BF解释器,则上面的代码仅显示PHP一个:P


我什至都不知道像这样的代码是有效的!php标签未关闭,字符串Hel也不被引号引起来。我也从未听说str_rot13过。
AycanYaşıt2014年

1
@AycanYaşıtEOF不需要关闭php标记,如果您在字符串中加上引号,则认为它是未声明的常量,且其名称与内容相同,并给出警告
Einacio 2014年

1
您可以.通过在Hel之前放置来避免警告(并保存第一个警告)<?=
圣保罗Ebermann

4
@PaŭloEbermann– Hel<?=str_rot13("yb jbe")?>ld!
MirroredFate

2
@PaŭloEbermann我会说使用它就像作弊一样,因为它不再是纯PHP了。
Vereos 2014年

13

HTML小提琴 -21个字符

Hel&#108;o World!<br>

这包括结尾的换行符吗?
2014年

h ...错过了这个要求!我将在其中添加<br>。
Briguy37 2014年

7
@netinept:它要求换行符,而不是一个换行符,\n所以我要说很<br>重要
Chris

1
但是字符r在解决方案中重复出现。我是否误解了要求?
javatarz 2014年

2
“ l”和“ o”也可以,但是每个字符最多可以使用两次。
xem 2014年

12

Ruby:27个字符

puts [:Hel,'o wor',"d!"]*?l

样品运行:

bash-4.1# ruby <<ENDOFSCRIPT
> puts [:Hel,'o wor',"d!"]*?l
> ENDOFSCRIPT
Hello world!

Ruby:25个字符

(基于Vache的评论。)

puts 'He'+?l*2+"o world!"

Ruby:23个字符

DankoDurbić的Powershell 答案的副本。)

puts"He#{?l*2}o world!"

puts 'He'+'l'*2+'o world!'短一个字符!
迪,请看

3
但是有6个“'”…
manatwork

哈哈我是如此地专注于字母字符,以至于我从未注意到。没关系!
迪,请看

1
放后删除空间,并使其23 -puts"He#{?l*2}o world!"
零纤维

1
@SampritiPanda,p在输出中包含引号。我宁愿严格遵守所需的输出格式。但是您是对的,不需要空间。谢谢。
manatwork 2014年

12

JavaScript,66个字符

alert('Hel'+window.atob("\x62G8gd29ybGQhCg=="));//rH+in.\x689yQhC;

受FireFly的启发,此代码使用的每个字符正好使用两次。


我认为您只能使用某些字符,并且可以删除注释。
约翰·德沃夏克

2
@JanDvorak-很好,肯定他可以那样做-但我认为这种解决方案值得赞扬,因为每个角色正好使用两次都是血腥的。:-)
Bob Jarvis 2014年

6
+1,但是如果仅添加乱码作为注释,则每个字符正好使用两次很容易。
卡米洛·马丁

11

C-43个字符

main(){printf("Hel%co World!%c",'k'+1,10);}

输出量

Hello World!

字符数

' ' Count: 1    '!' Count: 1    '"' Count: 2    '%' Count: 2    ''' Count: 2
'(' Count: 2    ')' Count: 2    '+' Count: 1    ',' Count: 2    '0' Count: 1
'1' Count: 2    ';' Count: 1    'H' Count: 1    'W' Count: 1    'a' Count: 1
'c' Count: 2    'd' Count: 1    'e' Count: 1    'f' Count: 1    'i' Count: 2
'k' Count: 1    'l' Count: 2    'm' Count: 1    'n' Count: 2    'o' Count: 2
'p' Count: 1    'r' Count: 2    't' Count: 1    '{' Count: 1    '}' Count: 1

不需要main吗?
FireFly 2014年

@FireFly我猜是这样!它确实说要编写程序。
Kirk Ba​​ckus 2014年

那是C,但不是C ++。C ++没有隐式int(并且您不能保留另一个i)。
Ben Voigt 2014年

@BenVoigt Okie dokie!
Kirk Ba​​ckus 2014年


9

nginx.conf

return  200 "He&#x6clo wo&#x72ld!\n";

实际上:

% curl -6 http://localhost/ | lynx -dump -stdin
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    21  100    21    0     0  20958      0 --:--:-- --:--:-- --:--:-- 21000

   Hello world!

%

此解决方案中有4个空格...
2014年

3
@Josh,实际上有5个。但是您难道不认为前四个标签中的两个是制表符,然后最后一个是不可破坏的空间吗?:-)
cnst 2014年

这对我行得通!
2014年

@Josh,实际上,既然我们正在使用HTML,则不再需要set。现在只有3个空格,其中任何一个都可以是制表符!
cnst 2014年

做得非常好。
2014年

9

Emacs命令(15次击键)

He<Ctrl-3>l<Left>o wor<End>d!<Enter>

如果该vim答案是合法的,那么这也必须是:)

撇开开玩笑,宏也可以成为:)

除了更多的废话,我可能还可以再压缩一些,但是暂时看来这已经足够了(因为它击败了vim)。

PS,请忽略我所有的废话(我(很少,但是)也使用vim!)。


2
我仍然认为vim> emacs。
Joe Z. 2014年

6

Befunge 98

a"!dlrow ol":'e'Hck,@

这是每个字符出现两次的版本。

bka!e:dw"H@!dlrow  ol":'e'Hbk,a,@

在堆栈上留下一堆垃圾。

作为奖励,IP可以对每个角色进行处理。


6

马尔博格

(=<`#9]~6ZY32Vw/.R,+Op(L,+k#Gh&}Cdz@aw=;zyKw%ut4Uqp0/mlejihtfrHcbaC2^W\>Z,XW)UTSL53\HGFjW

不幸的是,这似乎是打印的,Hello, world.而不是Hello world!\n:( 在线尝试!令人印象深刻,但无效
。– DLosc

5

其实我不喜欢作弊:P

蟒蛇

print("!dlrow os%eH"[::-1]%('l'*2))

2
您应该指定它适用于python2。在python3中,您将获得反向字符串作为输出,然后得到一个TypeError
Bakuriu 2014年

1
在Py3K中使用时,必须在括号中加上print参数。print("!dlrow os%eH"[::-1]%('l'*2))在(Python2和Py3K)版本中均可使用。
AMK 2014年

4

高尔夫脚本

'He

o world!'n/"l"*

n用两种类型的字符串文字替换两个换行符(幸运的是,替换行需要替换为第三行),这两种类型的字符串文字都避免了引号的四个副本。由于l是唯一在原始字符串中出现两次以上的字符,所以它不太难。


您忘记了“!”。
霍华德

@霍华德,错过了。哎呀。
彼得·泰勒

字母O也重复
亚当斯佩特

1
@AdamSpeight:只有两次字母o。规则说,字符不能超过两次
ProgramFOX

4

在C中,鉴于这些规则,我们只能有一个#define(因为in),最多只能有两个函数调用OR定义(())。

我认为只有一种方法可以做到(尽管我可能错了):

main(){puts("Hello w\x6fr\154d!");}

您仍然需要输出尾随换行符。用C语言做这个挑战很困难...
2014年

1
@Josh我只需要使用puts()而不是printf()
Oberon 2014年

2
但是oin有什么问题world呢?
2014年

@VisioN在相同代码的旧草案中(在我意识到编写这样一个程序实际上很难之前),我在其他地方使用了另一个“ o”。但这不是代码缺陷,所以我想不必修复它。
Oberon 2014年

4
实际上,我不确定为什么每个答案都显示一个字符数。
Oberon 2014年



4

赋格曲

从esolang Wiki:

enter image description here

并且您可以收听源代码


11
我会说这是无效的。我可以在右手看到四个以上的中间c。
贾斯汀

4
更不用说第九小节中四个连续G的字符串了。
Joe Z. 2014年

您是编写还是仅渲染它?假定您已链接到esolang存档的MIDI。
FireFly 2014年

4
-1为窃。这来自esolang Wiki。您不引用它。编辑:已还原,现在引用了esolang Wiki。
贾斯汀

-1用于两次使用相同的音符。
暴民埃里克(Erik the Outgolfer)

4

的PHP

32个字符

注意我为什么不使用一个字符两次以上,因为l!= L

He<?=strtolower("LLO WOR");?>ld!

另请注意,尽管Stack Overflow在表示中删除了它,但在之后仍然有一个换行符!


1
您正在使用三个空格,但是我想可以将其删除,而不要删除PHP标记附近的空格!:P
Vereos 2014年

1
速度很快,尽管我意识到在阅读您的评论之前(实际上是从另一个答案中得出)
Francisco Presencia 2014年

输出“ H”不是大写吗?
大卫·卡里

完全正确,也错过了):
弗朗西斯科·普雷森西亚

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.