Uh, nó là một haiku?


19

Vì vậy, bạn muốn tạo ra một haiku, nhưng bạn không chắc chắn nếu nó tuân theo các quy tắc âm tiết cho một haiku.

Tôi không thể bận tâm để viết một blurb thích hợp như tôi thường làm, vì vậy bạn sẽ phải làm điều này. Hãy mắc kẹt ngay.

Tìm một haiku trong tự nhiên

Đối với mục đích của thử thách này, chúng tôi sẽ kiểm tra xem bài thơ đã cho có thỏa mãn các tiêu chí sau không:

  • Có ba dòng.
  • Dòng đầu tiên có 5 âm tiết.
  • Dòng thứ hai có 7 âm tiết.
  • Dòng thứ ba có 5 âm tiết.

Mỗi dòng bao gồm một hoặc nhiều từ, được phân tách bằng các nhóm khoảng trắng. Những từ này không nhất thiết phải là từ tiếng Anh hợp lệ.

Mỗi từ được chia thành các âm tiết, và sau đó những âm tiết đó được tính để có được tổng số âm tiết của dòng.

Một âm tiết có 2 hoặc 3 phần với nó: phần đầu, phần cuối và có thể là phần giữa. Mỗi phần là một nhóm phụ âm (còn được gọi là cụm phụ âm, chẳng hạn như s, skhoặc spl) hoặc một nhóm nguyên âm (chẳng hạn như i, eahoặc oui).

Nếu bắt đầu là một nhóm phụ âm thì giữa sẽ là một nhóm nguyên âm và cuối sẽ là một nhóm phụ âm. Nếu bắt đầu là một nhóm nguyên âm, kết thúc sẽ là một nhóm phụ âm và sẽ không có âm giữa.

Ví dụ, từ examplenày được tạo thành từ ba âm tiết ex, ample. plekhông có kết thúc vì nó bị cắt ngắn vào cuối từ.

Một ví dụ khác, từ này syllablecũng có ba âm tiết syll, able, cũng không có kết thúc.

Đối với một ví dụ cuối cùng, từ wordnày có một âm tiết, wordkết thúc bằng một nhóm phụ âm.

Các thách thức

Đưa ra một chuỗi, danh sách các chuỗi, danh sách các danh sách hoặc bất kỳ định dạng hợp lý nào khác đại diện cho một bài thơ có ít nhất một dòng, xác định xem nó có đáp ứng các tiêu chí của một haiku được nêu ở trên không và trả về kết quả.

Bạn có thể trả về kết quả ở bất kỳ định dạng nào sau đây:

  • Một giá trị trung thực nếu bài thơ là một haiku và một giả mạo khác.
  • Một giá trị giả nếu bài thơ là một haiku và một sự thật khác.
  • Một giá trị từ một phạm vi hữu hạn của các giá trị được chỉ định trong bài nộp nếu bài thơ là haiku và một giá trị từ một phạm vi hữu hạn loại trừ lẫn nhau của các giá trị cũng được chỉ định trong bài.

Bạn cũng có thể cho rằng bài thơ không chứa các ký tự không theo thứ tự chữ cái, nhưng bạn không thể cho rằng nó hoàn toàn bằng chữ hoa hoặc chữ thường.

Đối với mục đích của thử thách này, Ylà một nguyên âm.

Các trường hợp thử nghiệm

Sự thật

This is a haiku
Yes it truly is one
See what I did man

I am so tired
of writing this already
when can I stop this

Writing another
Of these horrific things
Come on please

Consonant only
Counts as one syllable
ghjk tgh knmb wrts vbc

Giả

oh boy writing non haiku is so much easier

This is
so good
on my
poor dear brain

The syllables do not match
at least I do not think so
I have not checked

It does not really matter
these test cases will help
At least I think they will

I am done here
This is enough
Goodbye

Chấm điểm

Vì đây là
câu trả lời ngắn nhất sẽ mang lại
may mắn cho tất cả các bạn



Câu trả lời:


4

Thạch ,  25  23 byte

-2 nhờ Erik the Outgolfer (sử dụng danh sách các dòng làm đầu vào)

e€Øy0;ŒgP€
ḲLÐfÇ€ḣ8µ€ḣ4

Một liên kết đơn âm lấy một danh sách các danh sách các ký tự (các dòng) và trả về một danh sách các danh sách các số 0 và các số. Haiku hợp lệ sẽ có độ dài 3 và một khi bất kỳ danh sách sâu nhất nào là số 0 duy nhất được thay thế bằng một danh sách duy nhất, tổng các danh sách được làm phẳng sẽ lần lượt là 5, 7 và 5. Sự hình thành (dù chạy chữ là phụ âm và chỉ lấy 8 chữ đầu tiên của mỗi lên đến chỉ có 4 dòng) đảm bảo chỉ có hữu hạn của mỗi người trong số các dãy hợp lệ và không hợp lệ.

Hãy thử trực tuyến! hoặc xem bộ thử nghiệm (thậm chí khó hiểu hơn!)


Đây là một phiên bản  32  30 byte dễ dàng hơn nhiều , chỉ cần xuất ra 1 hoặc 0:

e€Øy0;ŒgP€SȯL$
ḲLÐfÇ€Sµ€⁼5,7,5

Hãy thử cái này hoặc xem bộ thử nghiệm của nó .


Tôi không nghĩ rằng "phạm vi" của các khả năng không phải là Haiku là hữu hạn - bạn có thể có số lượng từ / dòng không giới hạn trong đó.
Ørjan Johansen

Ôi chết tiệt khi sự thay đổi được thực hiện Tôi nghĩ rằng đó chỉ là phạm vi haiku cần hữu hạn. Điều đó đặt nó trở lại 32 byter tôi nghĩ.
Jonathan Allan

Địa chỉ OK cho bốn byte bằng cách giới hạn các từ trên mỗi dòng thành tám và dòng thành bốn.
Jonathan Allan

Tôi nghĩ bạn có thể loại bỏ Ỵµ, vì bạn có thể lấy một danh sách các dòng.
Erik the Outgolfer

3

JavaScript (ES6), 84 75 byte

Đưa đầu vào như một danh sách các danh sách các từ. Trả về truecho haiku hoặc falsecho không haiku.

a=>a.map(s=>(s.map(w=>w.match(/[aeiouy]+/gi))+'').split`,`.length)=='5,7,5'

Các trường hợp thử nghiệm



2

Python 2 , 126 125 120 121 byte

lambda s:[len(split('\s+',sub('[aeiouy][^aeiouy ]+','X ',t,0,I).strip()))for t in s.split('\n')]==[5,7,5]
from re import*

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


Chỉnh sửa cuối cùng của bạn đã phá vỡ yêu cầu rằng các từ chỉ phụ âm được tính là 1 âm tiết.
Ørjan Johansen

@ Rjan Johansen: Đã sửa; cám ơn!
Chas Brown


1
Bạn có thể loại bỏ một số byte dễ dàng bằng cách lấy đầu vào làm danh sách các dòng và thay thế s.split () chỉ bằngs
Rɪᴋᴇʀ


1

Sạch , 162 ... 115 byte

import StdEnv,StdLib
@t=[sum[max(sum(map hd(group[sum[1\\v<-:"AaEeIiOoUuYy"|c==v]\\c<-w])))1\\w<-l]\\l<-t]==[5,7,5]

Xác định chức năng @, lấy [[[Char]]](danh sách danh sách các từ) và cho Bool.
Trả về Truekhi đầu vào là một haiku, Falsenếu không.

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


Có vẻ thất bại trong trường hợp góc từ chỉ phụ âm.
Ørjan Johansen

@ ØrjanJohansen đã được sửa
Οurous

1

Toán học 119 byte

Đây là một phiên bản phù hợp với các quy tắc nhất định cho các âm tiết:

Tr/@Map[Length@StringCases[#,("a"|"e"|"i"|"o"|"u"|"y")..]/. 0->1&,(s=StringSplit)/@s[ToLowerCase@#,"\n"],{2}]=={5,7,5}&

Đây là một phiên bản 83 byte thực sự đếm các âm tiết:

Tr/@Map[Length@WordData[#,"Hyphenation"]&,(s=StringSplit)/@s[#,"\n"],{2}]=={5,7,5}&

ví dụ

%@"This is a haiku
Yes it truly is one
See what I did man"

trả về Falsevì dòng thứ hai có sáu âm tiết thay vì bảy yêu cầu.


Điều này thất bại vì thử thách xác định rõ ràng số lượng âm tiết của chính nó, không sử dụng các quy tắc tiếng Anh thông thường.
Ørjan Johansen

Vâng cảm ơn vì đã không downvote. Tôi thấy một nỗ lực tại một định nghĩa của một âm tiết, nhưng nó không rõ ràng. Tôi đoán "một" có hai âm tiết theo định nghĩa này. Hình như mọi người chỉ đang đếm các nguyên âm tiếp giáp nhau.
Kelly Lowder

Hầu như, nhưng những từ không có nguyên âm được tính là một âm tiết. Xem các bình luận câu hỏi. Tôi cho rằng nó chỉ khó hiểu về những gì phải làm về các nhóm phụ âm, nhưng điều đó thực sự không ảnh hưởng đến số lượng cuối cùng.
Ørjan Johansen

"một" có hai nguyên âm và chúng không liền nhau.
Kelly Lowder

Phải, vì vậy họ tính là hai âm tiết.
Ørjan Johansen
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.