Objektif
Dari Wikipedia :
Akronim rekursif adalah akronim yang merujuk pada dirinya sendiri dalam ekspresi yang digunakannya.
Tujuan Anda adalah untuk memeriksa apakah string adalah akronim rekursif.
- Akronim adalah kata pertama
- Kata-kata tidak peka huruf besar kecil, dipisahkan dengan satu spasi tunggal.
- String yang diberikan tidak mengandung tanda baca atau apostrof.
- Hanya huruf pertama dari setiap kata yang dapat menjadi bagian dari akronim.
Anda juga harus memberikan kata-kata fungsi . Untuk kesederhanaan, setiap kata dapat dianggap sebagai kata fungsi.
Contoh
f("RPM Package Manager") => { true, [] }
f("Wine is not an emulator") => { true, ["an"] }
f("GNU is not Unix") => { true, ["is"] }
f("Golf is not an acronym") => { false }
f("X is a valid acronym") => { true, ["is","a","valid","acronym"] }
Anda dapat memberikan program atau fungsi lengkap.
String input dapat diambil dari STDIN atau sebagai argumen fungsi.
Hasil keluaran bisa benar / salah, 0/1, ya / tidak ...
Daftar kata-kata fungsi (format daftar apa pun valid) harus diberikan jika dan hanya jika ini adalah akronim rekursif (bahkan jika daftar itu kosong) . Anda tidak harus mempertahankan penggunaan huruf besar untuk kata fungsi.
Kriteria menang
Ini adalah kode-golf , kode terpendek menang.
Jawaban:
GolfScript,
5150 karakterMungkin bisa bermain golf lebih lanjut. Mengambil input pada STDIN. Boolean adalah 0/1.
Tes online
Penjelasan:
sumber
Regex, .NET flavor, 62 byte
Anda bisa mengujinya di sini . Jika input adalah akronim rekursif, ini akan menghasilkan kecocokan, dan menangkap grup
w
akan berisi semua kata fungsi. Jika tidak, maka tidak akan ada kecocokan.Ini memang mempertahankan kapitalisasi kata fungsi (tetapi cocok dengan case-insensitive).
Sayangnya, tester tidak menampilkan seluruh tumpukan grup penangkap bernama, tetapi jika Anda menggunakannya di mana saja di .NET,
w
grup akan berisi semua kata fungsi secara berurutan.Berikut ini cuplikan C # untuk membuktikan bahwa:
Berikut ini penjelasan singkatnya. Saya menggunakan grup penyeimbang .NET untuk membuat tumpukan akronim dalam grup yang diberi nama
c
, dengan cuplikan iniTriknya adalah saya membutuhkan huruf kedua di atas tumpukan dan yang terakhir di bagian bawah. Jadi saya menempatkan semua ini di belakang yang cocok dengan posisi setelah akronim. Ini membantu, karena .NET cocok terlihat di belakang dari kanan ke kiri, sehingga ia menemukan huruf terakhir terlebih dahulu.
Setelah saya mendapatkan tumpukan itu, saya mencocokkan sisa kata string demi kata. Entah kata itu dimulai dengan huruf di atas tumpukan akronim. Dalam hal ini saya mengeluarkan surat itu dari tumpukan:
Jika tidak, saya tetap mencocokkan kata dan mendorong ke
w
tumpukan yang kemudian akan berisi semua kata fungsi:Pada akhirnya saya memastikan saya mencapai akhir string dengan
$
dan juga memastikan bahwa saya telah menggunakan semua huruf dari akronim, dengan memeriksa bahwa tumpukan kosong:Uji di ideone.
sumber
Python (158, tanpa regex)
Bukannya saya tidak suka regex. Itu karena saya tidak mengenal mereka.
Oh, saya juga punya versi tanpa ungolfed:
sumber
Python 2.7 -
131126 byteMembuat daftar huruf dalam kata pertama dari akronim. Kemudian, untuk setiap kata dalam string penuh, singkirkan elemen pertama dari daftar yang kami buat jika sama dengan huruf pertama dari kata itu. Kalau tidak, tambahkan kata itu ke daftar kata fungsi. Untuk menghasilkan, kembali
not a
(Dalam python, daftar apa pun selain daftar kosong adalahTrue
-y, dan daftar kosong jika itu adalah singkatan rekursif) dan daftar jikanot a
.Terima kasih kepada @ace untuk membantu saya memperbaiki kesalahan / menyimpan beberapa byte.
sumber
SyntaxError: invalid syntax
di akhirreturn
baris.for w in s:f+=0*a.pop(0)if a and w[0]==a[0]else[w]
mana yang lebih pendek dan tidak bergantung pada tab. Adapunreturn
pernyataan itu, saya menemukan0if a else(1,f)
yang lebih pendek dari aslinya.Python - 154 karakter
Usaha kode golf pertama kali. Saya pikir python bukan bahasa terbaik untuk itu, mengingat semua kata kunci panjang. Juga, saya tidak berpikir fungsi ini sangat mudah. Ini berfungsi untuk input OP, tapi saya yakin saya bisa memikirkan pengecualian.
sumber
ECMAScript 6 (105 byte):
Masukkan fungsi di konsol browser Firefox, lalu panggil fungsi tersebut, seperti ini:
sumber
The function words list ... must be given if and only if this is a recursive acronym
. Ini akan mengingatkan mereka bagaimanapun.Haskell - 287 byte
Bukan entri terpendek (hei ini Haskell, apa yang Anda harapkan?), Tapi masih banyak yang menyenangkan untuk ditulis.
Diuji dengan
Output yang diharapkan
Tidak disatukan
sumber
JavaScript (ECMAScript 6) - 97 Karakter
Tes:
sumber
Rebol - 133
Tidak Disatukan:
Diuji dengan:
Keluaran:
sumber
Julia - 116 byte
Kurang Golf:
Pada
0
akhirnya membuatnya menjadi 0. Jika tidak, itu menghasilkan array yang berisi1
diikuti oleh kata-kata fungsi. Sebagai contoh:sumber
Brachylog , 29 byte
Cobalah online!
Output kata-kata fungsi melalui variabel output jika input adalah singkatan rekursif, dan gagal jika tidak.
Tanpa harus menampilkan kata-kata fungsi (memperlakukan ini sebagai masalah keputusan murni ), hasilnya hanya 12 byte, karena
∧Zt
dapat dijatuhkan untuk -3,Y
dapat diganti dengan.
untuk -1, dan yang paling penting;0zpᵐz{ċ₂ˢ}ᵐZh
dapat diganti dengan⊇
untuk a kekalahan -13:ḷṇ₁Xh.∧X⊇hᵐc
sumber
Cobra - 187
sumber
Ruby - 173
Dapat menjadi lebih baik...
Memanggil func:
Keluaran:
sumber
Jawa - 195
Sayangnya, Java tidak memiliki dukungan tuple bawaan.
Jadi, ini adalah kelas yang menyimpan boolean di 'b' dan daftar kata fungsi di 'x'.
Di sini, fungsinya adalah konstruktor kelas.
Uji
sumber
string[]
:null
berarti salah, kosong berarti benar dann
elemen berarti benar dengann
kata-kata fungsi.Awk - 145
Uji:
sumber
Coffeescript - 144
Sebut saja dengan, misalnya:
z "GNU is not Unix"
JS yang dikompilasi:
Ini membagi string menjadi kata-kata dan kemudian loop melalui setiap kata. Jika karakter pertama kata tidak cocok dengan yang berikutnya dalam akronim, kata tersebut disimpan. Penghitung (
g
) digunakan untuk melacak berapa banyak kata yang dilewati. Jika jumlah kata yang dilewati ditambah panjang akronim cocok dengan panjang frasa, itu cocok, jadi kembalikan 1 dan kata-kata yang dilewati. Jika tidak, itu tidak valid, jadi kembalikan 0.sumber
C # - 234
sumber
Python (108)
sumber