Gib mir deine müden, deine armen, deine gedrängten Massen, die sich danach sehnen, frei zu atmen

19

Eine Bronzetafel auf dem Sockel der Freiheitsstatue zeigt das Gedicht " Der neue Koloss " von Emma Lazarus. Ein Teil davon lautet:

Gib mir deine müden, deine armen,
deine gedrängten Massen, die sich danach sehnen, frei zu atmen,
den elenden Müll von deinem wimmelnden Ufer.
Sende diese Obdachlosen zu mir,
ich hebe meine Lampe neben die goldene Tür!

Um diesen Abschnitt des Gedichts für diese Herausforderung zu vereinfachen, werden wir alles in Großbuchstaben schreiben und die Zeilenumbrüche durch Schrägstriche ( /) ersetzen , wobei Kommas und andere Satzzeichen wie folgt beibehalten werden :

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!

Wir werden diese Zeichenkette S nennen. Sie hat md5-Hash 8c66bbb9684f591c34751661ce9b5cea . Optional können Sie davon ausgehen, dass es sich um einen nachgestellten Zeilenumbruch handelt. In diesem Fall lautet der MD5-Hash 0928ff6581bc207d0938b193321f16e6.

Schreiben Sie ein Programm oder eine Funktion, die eine einzelne Zeichenfolge enthält. Wenn die Zeichenfolge S ist , werden die sechs Sätze, die die Art der Personen beschreiben, nach denen Lady Liberty in dem Gedicht gefragt wird, in der Reihenfolge einer pro Zeile ausgegeben :

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

(Diese genaue Zeichenfolge, optional gefolgt von einer einzelnen nachgestellten Zeile, muss Ihre Ausgabe für Eingabe S sein.)

Für mindestens eine Eingabezeichenfolge, die nicht S ist, sollte Ihre Ausgabe eine andere Zeichenfolge als die sechs obigen Zeilen sein. Dies könnte so einfach sein wie nur auszugeben, TIREDwenn die Eingabe nur ist GIVE ME YOUR TIRED. Diese Regel soll eine reine Hardcodierung verhindern. Andernfalls kann Ihr Code alles tun, wenn die Eingabezeichenfolge nicht S ist.

Dies ist im Wesentlichen eine Herausforderung mit konstanter Ausgabe, bei der Sie eine Eingabe erhalten, die der Ausgabe relativ nahe kommt. Sie können natürlich die Eingabe meistens ignorieren und die Ausgabe fest codieren, aber es ist möglicherweise besser, beispielsweise die für die Ausgabe erforderlichen Teilzeichenfolgen der Eingabe zu entfernen.

Als Referenz sind hier die auf Null basierenden Indizes und Längen der sechs Ausgabezeilen in S:

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

Der kürzeste Code in Bytes gewinnt.

Calvins Hobbys
quelle
Gemäß den Regeln scheint es, als könnten wir die Eingabe einfach ausgeben, wenn sie nicht gleich S ist. Ist das richtig?
Arnauld
Das ist eine gültige Option, ja.
Calvins Hobbys
1
Ist es wichtig, ob es sich bei der Ausgabe um eine einzelne Zeichenfolge mit Zeilenumbrüchen handelt, während das Programm eine Reihe von Zeilen ausgibt, die auf der Konsole nicht von der Zeichenfolge unterschieden werden können?
Briantist
3
Ich glaube nicht, dass das Hardcoding-Verbot nötig war, weil das Hardcoding zu lang ist.
30.
1
@ Briantist Das hört sich ok an.
Calvins Hobbys

Antworten:

9

Jelly , 19 Bytes

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

Probieren Sie es online! oder versuchen Sie es mit einem anderen Text .

Wie?

Indexiert in die Liste aller nicht leeren zusammenhängenden Segmente der Eingabezeichenfolge und verknüpft sie mit Zeilenvorschüben.

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

Vorheriger Code, 22 Bytes:

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

Partitioniert die Eingabezeichenfolge, nimmt jedes zweite Element und verbindet sich mit Zeilenumbrüchen. “ÇŒȷœ%LRw⁹ƊƓɠ‘ist eine Liste von Codepage-Indizes, erstellt eine Liste von Nullen mit Einsen an diesen Indizes, œṗpartitioniert die Eingabe an den Wahrheitsindizes dieser Liste, entfernt das erste Element, m2nimmt jedes zweite Element und Yverbindet sich mit Zeilenvorschüben.

Jonathan Allan
quelle
7

JavaScript (ES6), 128 bis 69 Byte

Kann leere Zeilen oder etwas Müll ausgeben, wenn sich die Eingabe von unterscheidet 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
quelle
3

Mathematica , 71

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

PowerShell , 72 Byte

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

Probieren Sie es online!

Erläuterung

Dies ist eine ziemlich beschissene Regex-Lösung.

Teilen Sie die Zeichenfolge in ein Array auf /oder .oder ,und ersetzen Sie dann Teile jeder Zeichenfolge, die mit dem ersten Muster übereinstimmen. Dies ergibt ein Array von -replaced Zeichenfolgen. Verwenden Sie dann den -matchOperator, um ein Array der Elemente zurückzugeben, die mit dem zweiten Muster übereinstimmen (das entfernt wird) der Leerzeilen und 2 Zeilen, die vorher nicht gefiltert wurden).

Briantist
quelle
1

Mathematica, 86 Bytes

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

Unbenannte Funktion, die eine Liste von Zeichen als Eingabe verwendet und eine Zeichenfolge zurückgibt. Extrahiert einfach die relevanten Teilzeichenfolgen der Eingabe und verkettet sie mit Zeilenumbrüchen.

Greg Martin
quelle
1
Mein Eingabeformat ist nicht ein Stringsondern eine Liste von Characters.
Greg Martin
0

TI-Basic, 58 Bytes

Sehr einfach. Dispist wie println, so gibt es zwischen Zeilenumbrüche.

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

Retina , 38 32 Bytes

Es kann wahrscheinlich verbessert werden, aber das ist ein Job für Regexes!

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

Probieren Sie es online!

Löwe
quelle