Bana yorgunluğunu ver, fakirlerini, özgür nefes almak için özlenen kitlelerin


19

Özgürlük Anıtı'nın kaidesinde bulunan bir bronz plak , bir kısmı şu metni okuyan Emma Lazarus'un " Yeni Colossus " şiirini gösteriyor :

Bana
yorgununu ver, fakirlerini, özgür nefes almak için özlenen kitlelerinizi
, içkili kıyılarının sefil reddi.
Bunları gönder, evsiz, fırtınalı bana,
altın kapının yanındaki lambamı kaldırıyorum!

Bu meydan okuma için şiirin bu bölümünü basitleştirmek için, hepsini büyük harfle yapacağız ve yeni satırları /virgül ve diğer noktalama işaretlerini olduğu gibi kesik çizgilerle ( ) değiştireceğiz :

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!

Bu dizeyi S olarak adlandıracağız . Md5 hash'i var 8c66bbb9684f591c34751661ce9b5cea . İsteğe bağlı olarak son satırsonu olduğunu varsayabilirsiniz, bu durumda md5 karması vardır 0928ff6581bc207d0938b193321f16e6.

Tek bir dize alan bir program veya işlev yazın. Dize S olduğunda, sırayla çıktı , her satırda bir tane, şiirin Lady Liberty'nin talep ettiği insan türünü tanımlayan altı kelime öbeği:

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

(Bu kesin dize, isteğe bağlı olarak tek bir sondaki yeni satır, S girişi için çıktınız olmalıdır.)

İçin en az bir Girdi dizesinin değil S, çıktı yukarıda altı çizgileri dışında herhangi bir dize olmalıdır. Bu TIRED, yalnızca girdi yalnızca çıktı almak kadar basit olabilir GIVE ME YOUR TIRED. Bu kural saf kodlamayı önlemek içindir. Aksi takdirde, giriş dizesi S olmadığında, kodunuz her şeyi yapabilir.

Bu, esas olarak, çıktıya nispeten yakın bir girdi verdiğiniz sabit çıktı sorunudur. Tabii ki çoğunlukla girişi görmezden gelebilir ve çıktıyı sabit kodlayabilirsiniz, ancak örneğin, çıkış için gereken girişin alt dizelerini çıkarmak daha iyi olabilir.

Referans için, S'deki altı çıkış hattının sıfır temelli endeksleri ve uzunlukları şunlardır:

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

Bayt cinsinden en kısa kod kazanır.


Kurallara göre, girişi S'ye eşit olmadığında basitçe çıkarabiliriz gibi görünüyor. Bu doğru mu?
Arnauld

Bu geçerli bir seçenek, evet.
Calvin'in Hobileri

1
Çıktının, bir satır dizisi çıkaran programa karşı yeni satırları olan gerçek bir tek dize olup olmadığı önemli midir? Konsolda dizeden ayırt edilemez mi?
Briantist

3
Hardcoding yasağının gerekli olduğunu düşünmüyorum çünkü hardcoding çok uzun.
xnor

1
@briantist Kulağa hoş geliyor.
Calvin'in Hobileri

Yanıtlar:


9

Jöle , 19 bayt

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

Çevrimiçi deneyin! veya başka bir metinle deneyin.

Nasıl?

Giriş dizesinin boş olmayan bitişik dilimlerinin listesini dizine ekler ve satır feed'leriyle birleşir.

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

Önceki kod, 22 bayt:

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

Giriş dizesini bölümlere ayırır, her ikinci öğeyi alır ve satır feed'leriyle birleşir. “ÇŒȷœ%LRw⁹ƊƓɠ‘kod sayfası dizinlerinin bir listesidir, bu dizinlerde bulunanlarla sıfırların bir listesini yapar œṗ, girdiyi bu listenin doğruluk dizinlerinde bölümler , ilk öğeyi kaldırır, m2her ikinci öğeyi alır ve Ysatır beslemelerine katılır.


7

JavaScript (ES6), 128 69 bayt

Girdiden farklı olduğunda boş satırlar veya bazı çöpler çıkabilir 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 bayt

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

Çevrimiçi deneyin!

açıklama

Bu oldukça berbat bir regex çözümüdür.

Yarma bir diziye dize /veya .veya ,daha sonra bir dizi veren ilk desen, eşleşen her dizgenin değiştirilmesi parça ve -replaced yaylar, daha sonra kullanmak -matchkurtulur ikinci desen eşleşen elemanların bir dizi (dönmek için operatör boş satırlar ve daha önce filtrelenmemiş 2 satır).


1

Mathematica, 86 bayt

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

Adsız işlev, karakter listesini girdi olarak alan ve bir dize döndüren. Sadece girdinin ilgili alt dizelerini çıkarır ve yeni satırlarla birleştirir.


1
Giriş biçimim bir Stringdeğil, bir liste Character.
Greg Martin

0

TI-Basic, 58 bayt

Çok basit. Dispgibi println, bu yüzden yeni satırlar arasında bulunmaktadır.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.