Дай мне свою усталость, свою бедность, Твои толпящиеся массы, жаждущие дышать свободно

19

Бронзовая доска на пьедестале статуи Свободы показывает стихотворение « The New Colossus » Эммы Лазарус, часть которой гласит:

Дай мне свою усталость, свою бедность,
Твои толпящиеся массы, жаждущие свободного дыхания,
Несчастный мусор твоего кишащего берега.
Пошлите это, бездомный, буря ко мне,
я поднимаю лампу рядом с золотой дверью!

Чтобы упростить этот раздел стихотворения для этой задачи, мы сделаем все заглавными и заменим символы новой строки на косую черту ( /), сохраняя запятые и другие знаки пунктуации следующим образом:

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 8c66bbb9684f591c34751661ce9b5cea . При желании вы можете предположить, что у него есть завершающий символ новой строки, и в этом случае хэш md5 равен 0928ff6581bc207d0938b193321f16e6.

Напишите программу или функцию, которая принимает одну строку. Когда строка S, выводите по порядку , по одной на строку, шесть фраз, которые описывают тип людей, в стихотворении изображена Леди Либерти с просьбой:

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

(Эта точная строка, за которой может следовать одна завершающая новая строка, должна быть вашим выходом для ввода S.)

По крайней мере , один входной строки, которая не S, результат должен быть любая строка, кроме шести строк выше. Это может быть так же просто, как вывод, только TIREDесли ввод только GIVE ME YOUR TIRED. Это правило состоит в том, чтобы не допустить чистого жесткого кодирования. В противном случае, когда входная строка не S, ваш код может делать что угодно.

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

Для справки, вот нулевые индексы и длины шести выходных строк в S:

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

Самый короткий код в байтах побеждает.

Кальвин Хобби
источник
По правилам кажется, что мы можем просто вывести входные данные, если они не равны S. Это правильно?
Арно
Это правильный вариант, да.
Увлечения
1
Имеет ли значение, является ли вывод действительной единственной строкой с символами новой строки по сравнению с программой, выводящей массив строк, который на консоли будет неотличим от строки?
бриантист
3
Я не думаю, что запрет жесткого кода был необходим, потому что жесткое кодирование слишком длинное.
xnor
1
@ briantist Это звучит нормально.
Увлечения Кэлвина

Ответы:

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`))

Arnauld
источник
3

Математика , 71

Column@StringTake[#,List@@@{14|18,26|29,37|75,82|118,137|144,147|158}]&
Mr.Wizard
источник
2

PowerShell , 72 байта

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

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

объяснение

Это довольно дурацкое решение для регулярных выражений.

Разделение строки в массив на /или. или ,и затем замена частей каждой строки, которые соответствуют первому шаблону, который дает массив -replaced строк, затем используйте -matchоператор, чтобы возвратить массив элементов, которые соответствуют второму шаблону (который избавляется из пустых строк и 2 строк, которые не были отфильтрованы ранее).

briantist
источник
1

Mathematica, 86 байт

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

Безымянная функция, принимающая список символов в качестве входных данных и возвращающая строку. Просто извлекает соответствующие подстроки ввода и объединяет их с символами новой строки.

Грег Мартин
источник
1
Мой входной формат не Stringявляется списком Characters.
Грег Мартин
0

TI-Basic, 58 байт

Очень просто. Dispэто как println, так что между ними есть новые строки.

Disp "TIRED","POOR",sub(Ans,37,39),sub(Ans,82,37),"HOMELESS",sub(Ans,147,12
Timtech
источник