Dammi il tuo stanco, il tuo povero, le tue masse rannicchiate che desiderano respirare liberamente


19

Una lapide in bronzo nel piedistallo della Statua della Libertà mostra la poesia " Il nuovo colosso " di Emma Lazarus, parte della quale recita:

Dammi il tuo stanco, il tuo povero, le
tue masse rannicchiate che desiderano respirare liberamente,
i rifiuti miserabili della tua costa brulicante.
Mandami questi, il senzatetto, il temporale,
alzo la mia lampada accanto alla porta d'oro!

Per semplificare questa sezione del poema per questa sfida, renderemo tutto in maiuscolo e sostituiremo le nuove righe con barre ( /), mantenendo le virgole e altre punteggiatura così come sono:

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!

Chiameremo questa stringa S. Ha hash md5 8c66bbb9684f591c34751661ce9b5cea . Puoi facoltativamente supporre che abbia una nuova riga finale, nel qual caso l'hash md5 è 0928ff6581bc207d0938b193321f16e6.

Scrivi un programma o una funzione che accetta una singola stringa. Quando la stringa è S, emetti in ordine , uno per riga, le sei frasi che descrivono il tipo di persone che la poesia descrive Lady Liberty chiedendo:

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

(Questa stringa precisa, facoltativamente seguita da una nuova riga finale, deve essere l'output per l'input S.)

Per almeno una stringa di input che non è S, l'output dovrebbe essere qualsiasi stringa diversa dalle sei righe precedenti. Questo potrebbe essere semplice come emettere solo TIREDse l'input è solo GIVE ME YOUR TIRED. Questa regola serve a prevenire il puro hardcoding. Altrimenti, quando la stringa di input non è S, il codice potrebbe fare qualsiasi cosa.

Questa è essenzialmente una sfida di output costante in cui ti viene dato un input che è relativamente vicino all'output. Ovviamente potresti ignorare principalmente l'input e hardcode l'output, ma potrebbe essere meglio, diciamo, eliminare le sottostringhe dell'input necessarie per l'output.

Per riferimento, ecco gli indici e le lunghezze in base zero delle sei linee di output in S:

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

Vince il codice più breve in byte.


Secondo le regole, sembra che possiamo semplicemente emettere l'input quando non è uguale a S. È corretto?
Arnauld,

Questa è un'opzione valida, sì.
Hobby di Calvin il

1
Importa se l'output è una singola stringa effettiva con nuove righe rispetto al programma che genera una matrice di linee, che sulla console saranno indistinguibili dalla stringa?
Briantist

3
Non penso che il divieto di hardcoding fosse necessario perché l'hardcoding è troppo lungo.
xnor

1
@briantist Sembra ok.
Hobby di Calvin il

Risposte:


9

Gelatina , 19 byte

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

Provalo online! o provalo con qualche altro testo .

Come?

Indica nell'elenco di tutte le sezioni contigue non vuote della stringa di input e si unisce ai feed di riga.

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

Codice precedente, 22 byte:

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

Partiziona la stringa di input, prende ogni secondo elemento e si unisce ai feed di riga. “ÇŒȷœ%LRw⁹ƊƓɠ‘è un elenco di indici di code page, crea un elenco di zeri con quelli in quegli indici, œṗsuddivide in partizioni l'input sugli indici di verità di tale elenco, rimuove il primo elemento, m2accetta ogni secondo elemento e si Yunisce ai feed di riga.


7

JavaScript (ES6), 128 69 byte

Può generare righe vuote o un po 'di immondizia quando l'input è diverso da 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 byte

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

Provalo online!

Spiegazione

Questa è una soluzione regex piuttosto scadente.

Dividere la stringa in una matrice su /o .o ,e quindi sostituire parti di ciascuna stringa che corrispondono al primo modello, che fornisce una matrice di -replacestringhe d, quindi utilizzare l' -matchoperatore per restituire una matrice degli elementi che corrispondono al secondo modello (che si libera delle righe vuote e 2 righe che non sono state filtrate prima).


1

Mathematica, 86 byte

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

Funzione senza nome che prende un elenco di caratteri come input e restituisce una stringa. Estrae solo le sottostringhe pertinenti dell'input e si concatena con le nuove righe.


1
Il mio formato di input non è un Stringma un elenco di Characters.
Greg Martin,

0

TI-Basic, 58 byte

Molto semplice. Dispè come println, quindi ci sono nuove linee nel mezzo.

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

0

Retina , 38 32 byte

Probabilmente può essere migliorato, ma questo è un lavoro per regex!

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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.