Kembali ketika saya masih mahasiswa baru di sekolah menengah mengambil kimia, saya akan melihat tabel periodik elemen dan mengeja kata-kata kotor dengan jumlah elemen (HeCK akan menjadi 2619, 2-6-19).
Saya sedang memikirkan hal ini beberapa hari yang lalu ketika saya melihat kemeja luar biasa yang bertuliskan BeEr (4-68)
Jadi tantangan codegolf saya adalah program terpendek untuk menampilkan daftar kata yang dapat Anda eja dengan tabel periodik elemen DAN kode angka yang akan mewakili kata itu.
/ usr / share / dikt / kata atau kamus apa pun yang ingin Anda gunakan untuk daftar kata. Jika Anda menggunakan daftar kata "non-standar", beri tahu kami apa itu!
Jawaban:
GolfScript (
339 303 302 301294 karakter)Dengan kredit ke PhiNotPi yang pengamatannya pada elemen yang tidak perlu memungkinkan saya untuk menyimpan 33 karakter.
Ini adalah IMO GolfScript jauh lebih idiomatik daripada pendekatan rekursif sebelumnya.
Perhatikan bahwa saya membiarkan kata-kata dalam kamus menjadi huruf besar (
L
adalah fungsi untuk huruf kecil dengan asumsi bahwa tidak masalah jika karakter non-alpha rusak) tetapi tolak dengan apostrof atau aksen.Karena ini adalah kode golf, saya telah dioptimalkan untuk panjang kode daripada kecepatan. Ini sangat lambat. Itu mengharapkan daftar kata yang akan disediakan di stdin dan output ke stdout dalam format:
(huruf kecil kata-kata masukan kasus campuran yang ditemukannya cocok).
Jika Anda lebih tertarik pada elemen daripada angka per se, untuk harga rendah rendah
261253 karakter yang dapat Anda gunakanyang memberikan output seperti
sumber
"
tidak mengganggu saya sama sekali. Dan tentu saja peter taylor masuk dan meniup semua orang dengan skrip golf.Ruby -
547393Versi baru, terima kasih atas sarannya:
menggunakan regex. lambat, dan banyak ruang untuk perbaikan tetapi saya harus pergi sekarang :-)
sumber
e='HHeLiBe...LvUusUuo'.scan(/[A-Z][a-z]*/).map &:downcase
. 2) Regex variabel tidak pernah digunakan. 3) Bacalah kata-kata dari input standar:$<.each{|w|...
. Dengan modifikasi ini kode dikurangi menjadi 410 karakter.Python 710 (357 + 261 + 92)
Pasti ada ruang untuk perbaikan di sana di suatu tempat. Perlu juga dicatat bahwa indentasi tingkat kedua menggunakan karakter tab.
Hanya butuh lebih dari 5 detik (di komputer saya) untuk menelusuri seluruh kamus, menghasilkan keluaran seperti ini:
Dengan menambahkan 18 karakter lain, Anda bisa mendapatkan output dengan huruf besar yang tepat:
Anda juga dapat memeriksa setiap kata:
sumber
Python - 1328 (975 + 285 karakter kode + 68 kode kamus)
Untuk bagian kamus:
sumber
C,
775771 karakterInput : Kata per baris, harus huruf kecil.
usr/share/dict/words
baik-baik saja.Output : Word dan angka, mis .:
acceptances,89,58,15,73,7,6,99
Logika :
c(w,o,l)
memeriksa kataw
, dimulai dengan elemenl
.Rekursi dua arah digunakan - jika elemen pertama cocok dengan kepala daftar elemen, periksa sisa-sisa dari
w
daftar elemen lengkap. Jika kecocokan ini gagal, periksa kata di bagian ujung daftar.Buffer
o
mengakumulasi nomor elemen di sepanjang jalur yang berhasil. Setelah pertandingan, itu akan berisi daftar angka, dan dicetak.Masalah :
Daftar ini tidak dikodekan secara efisien - terlalu banyak
"
dan,
". Tapi dengan cara ini mudah digunakan. Saya yakin itu bisa lebih ditingkatkan, tanpa terlalu banyak biaya dalam kode.sumber