Ketika saya masih muda, saya biasa memainkan permainan kata yang disebut rantai kata . Itu sangat sederhana. Pemain pertama memilih sebuah kata; pemain berikutnya mengatakan kata lain yang dimulai dengan huruf yang sama dengan kata sebelumnya berakhir. Ini berlangsung selamanya sampai seseorang menyerah! Triknya adalah, Anda tidak dapat menggunakan kata yang sama dua kali (kecuali semua orang lupa bahwa kata itu bahkan digunakan!). Biasanya kami bermain dengan topik tertentu untuk membuatnya lebih sulit. Tapi sekarang, saya ingin Anda membuat program untuk melakukan ini untuk saya.
Tantangan
Tulis program atau fungsi lengkap untuk menemukan semua rantai kata yang paling panjang menggunakan serangkaian kata dan mulai kata.
Ini kode-golf , jadi kode terpendek menang!
Memasukkan
Ada dua input: daftar dan kata awal. Kata awal tidak akan ada dalam daftar. Masukan semua huruf kecil ASCII, dan daftar tidak akan berisi kata-kata rangkap.
Keluaran
Semua urutan kata dari daftar sedemikian rupa sehingga:
Kata awal adalah kata pertama dalam urutan.
Setiap kata berikutnya dimulai dengan huruf yang sama dengan huruf terakhir dari kata sebelumnya.
Panjang urutannya adalah yang terpanjang .
Jika ada beberapa urutan terpanjang, hasilkan semuanya.
Urutan tidak harus mengandung semua kata daftar. Terkadang itu tidak mungkin (lihat testcases). Sekali lagi, tidak ada kata yang dapat digunakan dua kali!
Testcases
In: [hello, turtle, eat, cat, people] artistic
Out: [artistic, cat, turtle, eat]
In: [lemonade, meatball, egg, grape] ham
Out: [ham, meatball, lemonade, egg, grape]
In: [cat, cute, ewok] attic
Out: [attic, cute, ewok]
In:[cat, cute, ewok, kilo, to, otter] attic
Out: [attic, cute, ewok, kilo, otter]
In:[cat, today, yoda, attic] ferret
Out: [ferret, today, yoda, attic, cat]
In: [cancel, loitering, gnocchi, improv, vivic, child, despair, rat, tragic, chimney, rex, xylophone] attic
Out: [[attic, child, despair, rat, tragic, cancel, loitering, gnocchi, improv, vivic, chimney], [attic, cancel, loitering, gnocchi, improv, vivic, child, despair, ra', tragic, chimney]]
In: [cat, today, yoda, artistic, cute, ewok, kilo, to, otter] attic
Out: [attic, cat, today, yoda, artistic, cute, ewok, kilo, otter]
Jawaban:
Pyth,
2523 byteSuite uji
Solusi brute force. Terlalu lambat untuk beberapa kasus uji yang lebih besar.
Masukan dalam bentuk:
Output dalam bentuk:
Penjelasan:
sumber
JavaScript (ES6), 164 byte
Penjelasan
Fungsi rekursif yang memeriksa berapa lama daftar output akan untuk semua pilihan yang mungkin.
Mengembalikan array array kata.
Uji
Parameter default tidak digunakan dalam pengujian untuk membuatnya lebih kompatibel lintas-browser.
Tampilkan cuplikan kode
sumber
o[r.length]?
bukannyao.length>r.length?
.o[r.length]
tipnya! Saya tidak tahu bagaimana saya bisa menggunakannyapop
.Python, 104
Saya pikir itu harus berfungsi sekarang ...
Cobalah online .
sumber
Perl 5, 275 byte
Mungkin tidak bermain golf sebanyak itu, tapi, hei, toh itu bukan kemenangan, kan?
Gunakan sebagai berikut:
Peringatan! Penggunaan skrip ini pada daftar panjang membutuhkan banyak memori! Ini bekerja sangat baik untuk saya pada tujuh (enam plus satu tambahan) tetapi tidak pada tiga belas (dua belas ditambah satu).
Ini menghapus input akhir, menghasilkan array dari arrayrefs, di mana arrayrefs adalah semua permutasi, dan menambahkan kata awal kembali di awal. Kemudian ia mendorong setiap permutasi seperti itu ke arrayref lain yang merupakan nilai hash dengan kunci jumlah array yang memiliki properti rantai yang diinginkan. Ia kemudian menemukan kunci maksimum seperti itu dan mencetak semua array.
sumber
C, 373 byte
Saya percaya mungkin ada lebih banyak golf yang bisa saya lakukan di sini jadi saya mungkin akan memperbaruinya.
De-golf
Tautan ideone - Jika saya tidak melakukan ini dengan benar, beri tahu saya: D
sumber