Hãy cho tôi sự mệt mỏi, tội nghiệp của bạn, quần chúng lộn xộn của bạn khao khát được thở tự do


19

Một tấm bảng bằng đồng ở bệ tượng Nữ thần tự do hiển thị bài thơ " Bức tượng khổng lồ mới " của Emma Lazarus, một phần trong đó có đoạn:

Hãy cho tôi sự mệt mỏi, tội nghiệp
của bạn , quần chúng lộn xộn của bạn khao khát được thở tự do,
Sự từ chối khốn khổ của bờ biển đầy ý nghĩa của bạn.
Gửi những thứ này, người vô gia cư, tạm thời đến tôi,
tôi nhấc đèn bên cạnh cánh cửa vàng!

Để đơn giản hóa phần này của bài thơ cho thử thách này, chúng tôi sẽ làm cho tất cả chữ hoa và thay thế các dòng mới bằng dấu gạch chéo ( /), giữ dấu phẩy và dấu chấm câu khác như sau:

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!

Chúng ta sẽ gọi chuỗi này S. Nó có băm md5 8c66bbb9684f591c34751661ce9b5cea . Bạn có thể tùy ý giả sử nó có một dòng mới, trong trường hợp đó là băm md5 0928ff6581bc207d0938b193321f16e6.

Viết chương trình hoặc hàm có trong một chuỗi. Khi chuỗi là S, đầu ra theo thứ tự , một dòng trên sáu dòng, sáu cụm từ mô tả loại người mà bài thơ miêu tả Lady Liberty yêu cầu:

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

(Chuỗi chính xác này, tùy chọn theo sau bởi một dòng mới, phải là đầu ra của bạn cho đầu vào S.)

Đối với ít nhất một chuỗi đầu vào không phải là S, đầu ra của bạn phải là bất kỳ chuỗi nào ngoài sáu dòng trên. Điều này có thể đơn giản như chỉ xuất ra TIREDnếu đầu vào là duy nhất GIVE ME YOUR TIRED. Quy tắc này là để ngăn chặn mã hóa thuần túy. Mặt khác, khi chuỗi đầu vào không phải là S, mã của bạn có thể làm bất cứ điều gì.

Đây thực chất là một thách thức đầu ra không đổi trong đó bạn được cung cấp một đầu vào tương đối gần với đầu ra. Tất nhiên bạn có thể bỏ qua đầu vào và mã hóa đầu ra, nhưng tốt hơn là, loại bỏ các chuỗi con của đầu vào cần thiết cho đầu ra.

Để tham khảo, đây là các chỉ số và độ dài dựa trên số không của sáu dòng đầu ra trong S:

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

Mã ngắn nhất tính bằng byte thắng.


Theo các quy tắc, có vẻ như chúng ta chỉ có thể xuất đầu vào khi nó không bằng S. Điều đó có đúng không?
Arnauld

Đó là một lựa chọn hợp lệ, vâng.
Sở thích của Calvin

1
Liệu đầu ra có phải là một chuỗi đơn thực tế với dòng mới so với chương trình xuất ra một mảng các dòng, mà trên bàn điều khiển sẽ không thể phân biệt được với chuỗi?
nghĩa quân phiệt

3
Tôi không nghĩ lệnh cấm mã hóa là cần thiết vì mã hóa quá dài.
xnor

1
@briantist Nghe có vẻ ok.
Sở thích của Calvin

Câu trả lời:


9

Thạch , 19 byte

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

Hãy thử trực tuyến! hoặc thử nó với một số văn bản khác .

Làm sao?

Lập chỉ mục vào danh sách tất cả các lát liền kề không trống của chuỗi đầu vào và nối với các nguồn cấp dữ liệu.

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

Mã trước đó, 22 byte:

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

Phân vùng chuỗi đầu vào, lấy mọi phần tử thứ hai và tham gia với nguồn cấp dữ liệu dòng. “ÇŒȷœ%LRw⁹ƊƓɠ‘là một danh sách các chỉ mục trang mã, tạo một danh sách các số 0 với các chỉ mục đó, œṗphân vùng đầu vào tại các chỉ mục trung thực của danh sách đó, loại bỏ phần tử đầu tiên, m2lấy mọi phần tử thứ hai và Ynối với các nguồn cấp dữ liệu.


7

JavaScript (ES6), 128 69 byte

Có thể xuất các dòng trống hoặc một số rác khi đầu vào khác với 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

Toán học , 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]'

Hãy thử trực tuyến!

Giải trình

Đây là một giải pháp regex khá nhảm nhí.

Tách chuỗi thành một mảng trên /hoặc .hoặc ,sau đó thay thế các phần của mỗi chuỗi khớp với mẫu đầu tiên, tạo ra một -replacechuỗi các chuỗi d, sau đó sử dụng -matchtoán tử để trả về một mảng các phần tử khớp với mẫu thứ hai (loại bỏ trong số các dòng trống và 2 dòng không được lọc trước đó).


1

Toán học, 86 byte

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

Hàm không tên lấy danh sách các ký tự làm đầu vào và trả về một chuỗi. Chỉ cần trích xuất các chuỗi con có liên quan của đầu vào và nối với các dòng mới.


1
Định dạng đầu vào của tôi không phải là Stringmột danh sách Characters.
Greg Martin

0

TI-Basic, 58 byte

Rất đơn giản. Displà như printlnvậy, vì vậy có những dòng mới ở giữa.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.