给我你的疲倦,贫穷,拥挤的群众向往自由呼吸


19

自由女神像基座上的一块青铜牌上陈列着艾玛·拉扎鲁斯(Emma Lazarus)的诗“ 新巨像 ”,其中一部分写着:

给我你的疲倦,你的贫穷,
你拥挤的群众,向往自由的呼吸,
你茂密的岸边那可怜的垃圾。
把这些无家可归的暴风雨寄给我,
我把灯抬到金门旁边!

为了简化针对这一挑战的诗的这一部分,我们将其全部大写,并用斜杠(/)替换换行符,并保持逗号和其他标点符号不变:

GIVE ME YOUR TIRED, YOUR POOR,/YOUR HUDDLED MASSES YEARNING TO BREATHE FREE,/THE WRETCHED REFUSE OF YOUR TEEMING SHORE./SEND THESE, THE HOMELESS, TEMPEST-TOST TO ME,/I LIFT MY LAMP BESIDE THE GOLDEN DOOR!

我们将此字符串称为S。它具有md5 hash 8c66bbb9684f591c34751661ce9b5cea。您可以选择假定它具有尾随换行符,在这种情况下,md5哈希为0928ff6581bc207d0938b193321f16e6

编写一个包含单个字符串的程序或函数。当字符串为S时,按顺序输出,每行一个,描述这首诗所描绘的人的类型的六个短语描述了Lady Liberty要求:

TIRED
POOR
HUDDLED MASSES YEARNING TO BREATHE FREE
WRETCHED REFUSE OF YOUR TEEMING SHORE
HOMELESS
TEMPEST-TOST

(此精确的字符串,可以选择后跟一个尾随的换行符,必须是输入S的输出。)

对于至少一个 S的输入字符串,您的输出应该是上述六行以外的任何字符串。仅TIRED当输入为only时,这和输出一样简单GIVE ME YOUR TIRED。此规则是为了防止纯硬编码。否则,当输入字符串不是S时,您的代码可能会执行任何操作。

从本质上讲,这是一个恒定的输出挑战,您将获得相对接近输出的输入。当然,您可以大体上忽略输入并对输出进行硬编码,但是,最好剥离掉输出所需的输入子字符串。

作为参考,以下是S中六条输出线的从零开始的索引和长度:

13 5, 25 4, 36 39, 81 37, 136 8, 146 12

以字节为单位的最短代码获胜。


根据规则,似乎我们可以简单地在不等于S的情况下输出输入。这是正确的吗?
Arnauld

这是一个有效的选项,是的。
加尔文的业余爱好

1
输出是否是带有换行符的实际单个字符串与输出行数组的程序(在控制台上与字符串无法区分)是否有关系?
briantist

3
我认为不需要硬编码禁令,因为硬编码太长。
xnor

1
@briantist听起来还可以。
加尔文的业余爱好

Answers:


9

果冻,19 字节

Ẇ“©ØḌKAƑ⁶2ɼU’b8ȷ¤ịY

在线尝试!或者尝试使用其他一些文字

怎么样?

索引输入字符串的所有非空连续切片的列表,并与换行符连接。

Ẇ“©ØḌKAƑ⁶2ɼU’b8ȷ¤ịY - Main link: s
                ¤   - nilad followed by link(s) as a nilad
 “©ØḌKAƑ⁶2ɼU’       - base 250 number, 27003436588466956354336
              8ȷ    - 8 * 1e3 = 8000
             b      - convert to base, [824,635,7086,6796,1544,2336]
                 ị  - index into
Ẇ                   - all non-empty contiguous slices of s
                  Y - join with line feeds

先前的代码,22个字节:

“ÇŒȷœ%LRw⁹ƊƓɠ‘ṬœṗµḊm2Y

对输入字符串进行分区,获取第二个元素并与换行符连接。“ÇŒȷœ%LRw⁹ƊƓɠ‘是代码页索引的列表,创建一个在这些索引处带有零的零œṗ列表,在该列表的真实索引处对输入进行分区,删除第一个元素,m2获取第二个元素,并Y与换行符连接。


7

JavaScript(ES6),128 69字节

输入不同于时,可能会输出空行或一些垃圾S

let f =

s=>[837,1604,2343,5221,8712,9356].map(n=>s.substr(n>>6,n&63)).join`
`

console.log(f(`GIVE ME YOUR TIRED, YOUR POOR,
YOUR HUDDLED MASSES YEARNING TO BREATHE FREE,
THE WRETCHED REFUSE OF YOUR TEEMING SHORE.
SEND THESE, THE HOMELESS, TEMPEST-TOST TO ME,
I LIFT MY LAMP BESIDE THE GOLDEN DOOR!`))

console.log(f(`THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG`))



3

Mathematica,71

Column@StringTake[#,List@@@{14|18,26|29,37|75,82|118,137|144,147|158}]&

2

PowerShell,72字节

"$args"-split'[/,.]'-replace'^.*?(YOUR|\bTHE) |^ | TO ME'-match'^[^S G]'

在线尝试!

说明

这是一个非常糟糕的正则表达式解决方案。

将字符串分割为/.或上的数组,,然后替换每个字符串中与第一个模式匹配的部分,这将提供-replaced个字符串数组,然后使用-match运算符返回与第二个模式匹配的元素数组(这将被去除空行和之前未过滤的2行)。


1

Mathematica,86个字节

Riffle[s=#;s~Take~#&/@{{14,18},{26,29},{37,75},{82,118},{137,144},{147,158}},"
"]<>""&

未命名函数,将字符列表作为输入并返回一个字符串。只需提取输入的相关子字符串并与换行符连接即可。


1
我的输入格式不是,String而是的列表Character
格雷格·马丁

0

TI-Basic,58个字节

非常简单。Disp就像println,所以中间有换行符。

Disp "TIRED","POOR",sub(Ans,37,39),sub(Ans,82,37),"HOMELESS",sub(Ans,147,12

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.