Dajcie mi wasze zmęczone, wasze biedne, wasze skulone masy pragnące uwolnić się

19

Na brązowej tabliczce na cokole Statuy Wolności znajduje się wiersz „ Nowy kolos ” Emmy Lazarus, którego część brzmi:

Daj mi swoje zmęczone, swoje biedne,
Twoje skulone masy, które pragną uwolnić się,
Nieszczęsna odmowa twojego tętniącego życiem brzegu.
Wyślij do mnie tych bezdomnych, burzliwych, podnoszę
lampę obok złotych drzwi!

Aby uprościć tę sekcję wiersza dla tego wyzwania, dodamy wielkie litery i zastąpimy /znaki nowej linii ukośnikami ( ), zachowując przecinki i inne znaki interpunkcyjne w następujący sposób:

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!

Nazwiemy ten ciąg S. Ma hash md5 8c66bbb9684f591c34751661ce9b5cea . Opcjonalnie możesz założyć, że ma on końcowy znak nowej linii, w którym to przypadku hash md5 0928ff6581bc207d0938b193321f16e6.

Napisz program lub funkcję, która pobiera pojedynczy ciąg. Gdy ciąg znaków to S, wyjście w kolejności , po jednym w wierszu, sześć wyrażeń opisujących rodzaj ludzi, których wiersz przedstawia Lady Liberty, prosząc o:

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

(Ten precyzyjny ciąg, opcjonalnie po nim pojedynczy znak nowej linii, musi być twoją wyjściową wartością wejściową S.)

W przypadku co najmniej jednego ciągu wejściowego, który nie jest literą S, wynikiem powinien być dowolny ciąg inny niż sześć wierszy powyżej. Może to być tak proste, jak wyprowadzanie tylko TIREDwtedy, gdy dane wejściowe są tylko GIVE ME YOUR TIRED. Ta zasada zapobiega czystemu kodowaniu. W przeciwnym razie, gdy ciąg wejściowy nie jest S, kod może zrobić wszystko.

Zasadniczo jest to wyzwanie polegające na ciągłym uzyskiwaniu danych wyjściowych, w którym dane wejściowe są stosunkowo zbliżone do danych wyjściowych. Oczywiście można w większości zignorować dane wejściowe i zakodować dane wyjściowe, ale może być lepiej, powiedzmy, usunięcie podciągu danych wejściowych potrzebnych dla danych wyjściowych.

Dla porównania, oto wskaźniki oparte na zerach i długości sześciu linii wyjściowych w S:

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

Najkrótszy kod w bajtach wygrywa.

Hobby Calvina
źródło
Zgodnie z regułami wydaje się, że możemy po prostu wyprowadzić dane wejściowe, gdy nie są one równe S. Czy to prawda?
Arnauld
To ważna opcja, tak.
Calvin's Hobbies
1
Czy ma znaczenie, czy wynik jest rzeczywiście pojedynczym ciągiem znaków z nowymi wierszami, czy programem wypisującym tablicę wierszy, które na konsoli będą nie do odróżnienia od ciągu?
briantist
3
Nie sądzę, aby zakaz kodowania był potrzebny, ponieważ kodowanie jest zbyt długie.
xnor
1
@briantist To brzmi ok.
Calvin's Hobbies

Odpowiedzi:

9

Galaretka , 19 bajtów

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

Wypróbuj online! lub wypróbuj inny tekst .

W jaki sposób?

Indeksuje do listy wszystkich niepustych ciągłych wycinków ciągu wejściowego i łączy się ze znakami linii.

Ẇ“©ØḌ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

Poprzedni kod, 22 bajty:

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

Dzieli ciąg wejściowy, pobiera co drugi element i łączy się z liniami. “ÇŒȷœ%LRw⁹ƊƓɠ‘jest listą indeksów stron kodowych, tworzy listę zer z zerami w tych indeksach, œṗdzieli dane wejściowe według prawdziwych indeksów tej listy, usuwa pierwszy element, m2przyjmuje co drugi element i Yłączy się z liniami.

Jonathan Allan
źródło
7

JavaScript (ES6), 128 69 bajtów

Może wyświetlać puste wiersze lub śmieci, gdy dane wejściowe są inne niż 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
źródło
3

Mathematica , 71

Column@StringTake[#,List@@@{14|18,26|29,37|75,82|118,137|144,147|158}]&
Mr.Wizard
źródło
2

PowerShell , 72 bajty

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

Wypróbuj online!

Wyjaśnienie

To dość kiepskie rozwiązanie wyrażenia regularnego.

Podział łańcucha na tablicę na /lub .lub, ,a następnie zastąpienie części każdego łańcucha pasującego do pierwszego wzorca, co daje tablicę -replaceciągów d, a następnie użyć -matchoperatora, aby zwrócić tablicę elementów pasujących do drugiego wzorca (który się pozbywa pustych linii i 2 linii, które wcześniej nie były filtrowane).

briantist
źródło
1

Mathematica, 86 bajtów

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

Funkcja bez nazwy, która przyjmuje listę znaków jako dane wejściowe i zwraca ciąg znaków. Po prostu wyodrębnia odpowiednie podciągi wejściowe i łączy się z nowymi liniami.

Greg Martin
źródło
1
Mój format wejściowy nie Stringjest listą Characters.
Greg Martin
0

TI-Basic, 58 bajtów

Bardzo proste. Dispjest jak println, więc między nimi są nowe linie.

Disp "TIRED","POOR",sub(Ans,37,39),sub(Ans,82,37),"HOMELESS",sub(Ans,147,12
Timtech
źródło
0

Siatkówka , 38 32 bajtów

Prawdopodobnie można to poprawić, ale jest to zadanie dla wyrażeń regularnych!

!`(?<=R |HE ).*?(?=[,.])|\w+-\w+

Wypróbuj online!

Lew
źródło