Dame tu cansado, tu pobre, tus masas acurrucadas anhelando respirar libre

19

Una placa de bronce en el pedestal de la Estatua de la Libertad muestra el poema " El nuevo coloso " de Emma Lazarus, parte del cual dice:

Dame tu cansado, tu pobre,
tus masas acurrucadas que anhelan respirar libremente,
la basura miserable de tu orilla llena.
¡Envíenme a estos, los desamparados, la tormenta de lluvia,
levanto mi lámpara al lado de la puerta dorada!

Para simplificar esta sección del poema para este desafío, lo pondremos todo en mayúscula y reemplazaremos las nuevas líneas con barras ( /), manteniendo las comas y otros signos de puntuación como es:

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!

Llamaremos a esta cadena S. Tiene md5 hash 8c66bbb9684f591c34751661ce9b5cea . Opcionalmente, puede suponer que tiene una nueva línea final, en cuyo caso el hash md5 es 0928ff6581bc207d0938b193321f16e6.

Escriba un programa o función que tome una sola cadena. Cuando la cadena es S, salida en orden , una por línea, las seis frases que describen el tipo de personas que el poema representa a Lady Liberty pidiendo:

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

(Esta cadena precisa, opcionalmente seguida de una nueva línea final, debe ser su salida para la entrada S.)

Para al menos una cadena de entrada que no es S, su salida debe ser cualquier cadena distinta de las seis líneas anteriores. Esto podría ser tan simple como generar solo TIREDsi la entrada es solo GIVE ME YOUR TIRED. Esta regla es para evitar la codificación pura. De lo contrario, cuando la cadena de entrada no es S, su código puede hacer cualquier cosa.

Esto es esencialmente un desafío de salida constante donde se le da una entrada que está relativamente cerca de la salida. Por supuesto, podría ignorar la entrada y codificar la salida, pero puede ser mejor, por ejemplo, quitar las subcadenas de la entrada necesaria para la salida.

Como referencia, aquí están los índices basados ​​en cero y las longitudes de las seis líneas de salida en S:

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

El código más corto en bytes gana.

Pasatiempos de Calvin
fuente
Según las reglas, parece que simplemente podemos generar la entrada cuando no es igual a S. ¿Es eso correcto?
Arnauld
Esa es una opción válida, sí.
Calvin's Hobbies
1
¿Importa si la salida es una cadena única real con líneas nuevas frente al programa que genera una matriz de líneas, que en la consola no se distinguirá de la cadena?
briantist
3
No creo que fuera necesaria la prohibición de codificación porque la codificación es demasiado larga.
xnor
1
@briantist Eso suena bien.
Calvin's Hobbies

Respuestas:

9

Jalea , 19 bytes

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

Pruébalo en línea! o inténtalo con otro texto .

¿Cómo?

Índices en la lista de todos los sectores contiguos no vacíos de la cadena de entrada y se une con los avances de línea.

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

Código anterior, 22 bytes:

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

Particiona la cadena de entrada, toma cada segundo elemento y se une con los avances de línea. “ÇŒȷœ%LRw⁹ƊƓɠ‘es una lista de índices de páginas de códigos, hace una lista de ceros con unos en esos índices, œṗdivide la entrada en los índices verdaderos de esa lista, elimina el primer elemento, m2toma cada segundo elemento y se Yune con los avances de línea.

Jonathan Allan
fuente
7

JavaScript (ES6), 128 69 bytes

Puede generar líneas vacías o algo de basura cuando la entrada es diferente de 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
fuente
3

Mathematica , 71

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

PowerShell , 72 bytes

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

Pruébalo en línea!

Explicación

Esta es una solución regex bastante mala.

Dividiendo la cadena en una matriz en /o .o ,y luego reemplazando partes de cada cadena que coinciden con el primer patrón, lo que da una matriz de -replacecadenas d, luego usa el -matchoperador para devolver una matriz de los elementos que coinciden con el segundo patrón (que se elimina de las líneas en blanco y 2 líneas que no se filtraron antes).

briantista
fuente
1

Mathematica, 86 bytes

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

Función sin nombre que toma una lista de caracteres como entrada y devuelve una cadena. Simplemente extrae las subcadenas relevantes de la entrada y concatena con nuevas líneas.

Greg Martin
fuente
1
Mi formato de entrada no es Stringsino una lista de Characters.
Greg Martin el
0

TI-Basic, 58 bytes

Muy sencillo Dispes como println, entonces hay nuevas líneas en el medio.

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

Retina , 38 32 bytes

Probablemente se pueda mejorar, ¡pero este es un trabajo para expresiones regulares!

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

Pruébalo en línea!

León
fuente