Sebuah haiku adalah puisi dengan tiga baris, dengan 5/7/5 suku kata hitungan, masing-masing.
Sebuah haiku-w adalah puisi dengan tiga baris, dengan 5/7/5 kata hitungan, masing-masing.
Tantangan
Tulis program yang akan mengembalikan true jika inputnya adalah haiku-w, dan false jika tidak.
Input haiku-w yang valid harus terdiri dari 3 baris, dipisahkan oleh baris baru.
- Baris 1 harus terdiri dari 5 kata, setiap kata dipisahkan oleh spasi.
- Baris 2 harus terdiri dari 7 kata, setiap kata dipisahkan oleh spasi.
- Baris 3 harus terdiri dari 5 kata, setiap kata dipisahkan oleh spasi.
Contohnya
The man in the suit
is the same man from the store.
He is a cool guy.
Hasil: Benar
Whitecaps on the bay:
A broken signboard banging
In the April wind.
Hasil: Salah
Aturan
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
- Lubang kode standar golf berlaku. Kecurangan dilarang.
- Nilai pengembalian boolean lainnya, seperti
1
dan0
, dapat diterima. - Daftar panjang-3 string sebagai input juga dapat diterima.
- Input haiku-w yang valid seharusnya tidak memiliki spasi di depan atau di belakang, atau beberapa spasi yang memisahkan kata.
code-golf
decision-problem
DomTheDeveloper
sumber
sumber
Jawaban:
JavaScript (ES6),
73726463544239 byteTerima kasih kepada Neil untuk menghemat 13 byte
Penjelasan
Ini adalah fungsi panah gemuk yang mengambil array string sebagai argumen. Ini menggantikan setiap baris dengan jumlah kata-katanya. Jika itu haiku-w,
a
sekarang berisi array dari lima, tujuh dan lima lagi. Karena JavaScript tidak memungkinkan kami untuk membandingkan 2 array pada saat yang sama, array dikonversi menjadi string terlebih dahulu, dan kemudian dibandingkan. Ini menghasilkan boolean yang dikembalikan.sumber
%
dan*
memiliki prioritas yang sama, jadi Anda tidak perlu()
s, meskipun saya pikir(d*2|5)
mungkin juga berfungsi. Anda juga bisa lolos dengan satu&
, meskipun saya pikir Anda dapat meningkatkan bahkan dengan menggunakan(b...).length==3>b.some(...length-...)
.a=>a.map(c=>c.split
.length)=='5,7,5'
.+''
-==
stringify jika argumen lain adalah string.AWK (GNU Awk),
24,30,28, 20 byteGolf
Akan menampilkan "517253" untuk True , dan string kosong untuk False .
Panduan Pengguna Awk GNU
Bagaimana itu bekerja
Setiap pernyataan awk (aturan) terdiri dari pola (atau ekspresi) dengan tindakan terkait:
Awk akan membaca input baris demi baris (record by record) dan mengevaluasi ekspresi pola untuk melihat apakah tindakan yang sesuai akan dipanggil.
Kode di atas adalah ekspresi awk mandiri (pola) tanpa blok tindakan, yang tersirat
{print $0}
dalam kasus tersebut.Itu harus dibaca dari kanan ke kiri:
q=q NF NR
Tambah sebuah N Banyaknya F ields (kata) dan N Banyaknya R ecords (yaitu nomor baris saat ini), untuk variabel q .
Dengan cara ini, saat memproses Haiku-w yang tepat, q akan diatur ke:
$0=q
Tetapkan nilai q yang baru dihitung menjadi $ 0 (yang menyimpan seluruh baris / catatan saat ini secara default).
517253==$0
Bandingkan dengan "tanda tangan" untuk Haiku-w (517253) yang tepat, jika ada kecocokan, seluruh ekspresi dievaluasi menjadi "benar" dan tindakan yang sesuai (implisit
print $0
) dijalankan, mengirimkan "517253" ke stdout (Benar) , jika tidak, output akan kosong (Salah).Perhatikan bahwa ini akan mengenali Haiku-w dengan benar, bahkan jika itu diikuti oleh jumlah saluran sampah yang sewenang-wenang, tetapi saya yakin itu tidak masalah, seperti:
(yaitu kita dapat mengasumsikan input panjangnya 3 baris)
Uji
Cobalah secara Online!
sumber
Python , 42 byte
Cobalah online!
Mengambil input sebagai daftar baris, dengan kata-kata dipisahkan oleh spasi tunggal.
Karena kami dijamin tidak akan ada spasi awal atau spasi, dan hanya spasi tunggal yang akan memisahkan setiap kata, kami dapat memverifikasi w-haiku dengan hanya menghitung spasi di setiap baris.
Kami melakukan ini dalam pemahaman daftar, untuk membuat daftar penghitungan ruang. Jika itu haiku yang benar, itu akan terlihat seperti
[4, 6, 4]
, jadi kami membandingkannya dengan ini dan mengembalikan hasilnya.sumber
map(str.count,l,' ')
.Jelly ,
109 byteCobalah online!
Penjelasan
sumber
ċ€⁶⁼4,6,4
danċ€⁶⁼464D¤
... Saya tidak dapat menemukan sesuatu yang lebih pendek. (Oh, Anda dapat flip itu, juga:464D⁼ċ€⁶$
)ċ€⁶Ḍ=464
berfungsi dengan baik untuk 8.Batch, 102 byte
Keluar dengan tingkat kesalahan non-nol segera setelah membaca baris dengan jumlah kata yang salah.
sumber
Mathematica, 21 byte
Fungsi tanpa nama mengambil daftar daftar karakter sebagai input dan pengembalian
True
atauFalse
. Cukup hitung berapa banyak ruang di setiap daftar karakter, yang di bawah aturan tantangan berkorelasi sempurna dengan jumlah kata di setiap baris.Pengajuan sebelumnya:
Mathematica, 31 byte
Fungsi tanpa nama mengambil daftar string sebagai input dan kembali
True
atauFalse
.sumber
Haskell,
3433 byteCobalah online! .
Sunting: terima kasih kepada @xnor untuk satu byte!
sumber
f l=[sum[1|' '<-c]|c<-l]==[4,6,4]
.Retina , 12 byte
(Ada spasi tambahan setelah baris pertama)
Cobalah online!
M%`
- Hitung jumlah spasi di setiap baris.M
- Mode Kecocokan - mencetak jumlah kecocokan.%
- untuk setiap baris`
- Pisahkan konfigurasi dan pola regex^4¶6¶4$
- Harus ada 4, 6, dan 4 spasi, dan tepat tiga garis.¶
cocok dengan baris baru. Selebihnya adalah ekspresi reguler yang sederhana.Mencetak
1
untuk input yang valid,0
untuk yang tidak valid.sumber
Python,
5844 byte-14 oleh tbodt
sumber
split("\n")
.lambda h:[len(l.split())for l in h]==[5,7,5]
Perl , 26 byte
24 byte kode + 2 byte untuk
-ap
flag.Cobalah online!
sumber
Pyth, 9 byte
Program yang mengambil input dari daftar
"quoted strings"
dan hasil cetakTrue
atauFalse
sesuai kebutuhan.Suite uji
Bagaimana itu bekerja
sumber
Japt , 11 byte
Banyak byte yang disimpan berkat @ETHproductions
Ini mengambil array tiga string sebagai input.
Jalankan secara online!
sumber
PowerShell , 43 byte
Cobalah online!
Penjelasan
Mengambil input sebagai string yang dipisahkan baris baru.
Hapus semua non-spasi putih, lalu periksa untuk melihat bahwa itu cocok dengan "4 spasi, baris baru, 6 spasi, baris baru, 4 spasi baris baru" persis, menggunakan regex.
Grup tangkapan cocok dengan 4 spasi, referensi kembali
\1
mengacu pada itu. Baris baru disematkan dalam string. Perhatikan bahwa baris kedua regex berisi dua spasi setelah referensi balik.sumber
Pyke,
119 byteCoba di sini!
Setelah
u
byte ada byte berikut:0x03 0x04 0x06 0x04
sumber
J, 12 byte
Input adalah daftar string dalam kotak.
Penjelasan
Ini adalah garpu dengan tine kiri konstan. Ini memeriksa hasil dari tine yang tepat
#@;:@>
,, untuk kesetaraan dengan4 6 4
. Waktu yang tepat menghapus kotak masing-masing (>
), lalu (@
) mengubah setiap string menjadi kata-kata (;:
), lalu (@
) membutuhkan panjang masing-masing (#
).sumber
R, 48 byte
Membaca vektor karakter 3-panjang dari stdin dan bekerja dengan menghitung jumlah spasi. Untuk menghitung jumlah spasi, kami menggunakan
str_count
daristringr
paket yang dapat menghitung kejadian berdasarkan pola regex.Pendekatan alternatif tanpa menggunakan paket bisa berupa:
sumber
el
sebelumnya, terima kasih untuk itu.C 142 byte
Versi tidak disatukan:
Mengembalikan 1 untuk 5/7/5 urutan yang lain 0.
Testcase positif:
sumber
C ++, 357 byte
Agak baru untuk kode golf, tetapi ini adalah yang terbaik yang bisa saya lakukan dengan cepat
sumber
Ruby 1.9.3
Bukan golf, tapi itu sendiri haiku-w
atau...
Sayangnya tidak berfungsi dengan memimpin spasi putih pada baris apa pun, tetapi mengatasi trailing.
sumber
Python 2 ,
5764 byteSunting Diperbaiki dengan penambahan 7 byte setelah umpan balik dari @Dada. Terima kasih!
Cobalah online!
Bukan jawaban Python terpendek dengan cara panjang tetapi hanya ingin menggunakan trik baru yang saya pelajari baru-baru ini untuk menggunakan
input()
output dan menyimpanprint
pernyataan. Mengambil daftar garis sebagai input. Membutuhkan Ctrl C (atau tombol-tekan lainnya dalam hal ini) untuk mengakhiri program (dengan pengecualian) di terminal tetapi berfungsi dengan baik tanpa di TIO.sumber
MATL, 16 byte
Input adalah array sel string dan mengembalikan array yang benar atau salah .
Cobalah secara Online
Penjelasan
sumber
MATLAB / Oktaf, 38 byte
Solusi ini menerima array sel string sebagai input, menghitung jumlah spasi di setiap baris dan kemudian membandingkan hasilnya dengan array
[4 6 4]
dan menghasilkan array yang benar (semua nilai adalah 1) atau falsey (nilai apa pun adalah nol).Demo online
sumber
Perl 6 , 25 byte
sumber
Clojure, 44 byte
Input adalah daftar string. Fungsi hanya menemukan spasi dan menghitungnya. Penjelasan ini adalah Haiku. :)
sumber
Java 7, 154 byte
Persyaratan program dan potensi memiliki kurang dari tiga baris, tidak terlalu menyebutkan verbositas Java itu sendiri, menyebabkan kode 'golf' ini menjadi cukup besar ..
Tidak Disatukan:
Coba di sini.
sumber
SimpleTemplate, 77 byte
Sayangnya, pendekatan ekspresi reguler adalah yang terpendek.
Mengharuskan teks diberikan sebagai argumen pertama, dengan baris baru * NIX-style. Ini tidak akan berfungsi dengan baris baru bergaya Windows.
Tidak Disatukan:
Berbasis non-regex, 114 bye
Ini mengharuskan setiap baris diberikan sebagai argumen ke fungsi.
Tidak Disatukan:
sumber
Ditumpuk, 22 byte
Mengambil input dari atas tumpukan sebagai daftar string karakter, seperti:
Penjelasan
sumber
Java (OpenJDK) , 82 byte
-2 byte terima kasih kepada @ corvus_192!
Cobalah online!
Ini terlihat sangat golf tetapi tanpa fungsi peta bawaan , saya tidak dapat menemukan cara yang baik. Iterasi melalui array beberapa byte lebih lama, seperti menulis fungsi peta menggunakan stream.
Ekspresi Lambda mengambil array dari Strings dan mengembalikan Boolean.
sumber
Arrays.stream
, tapi itu cukup lama sehingga mungkin tidak layak digunakan (terutama jika Anda perlu mengimporArrays
)&
alih-alih&&
menyimpan dua byteSmileBASIC,
9694 bytesumber
R, 100 byte
Dibawa sebagai argumen, daftar panjang-3 string. Mungkin tidak akan bermain golf lebih jauh karena bermain golf lebih jauh menjadi jawaban @ Billywob.
sumber