Mainkan scrabble dengan tabel periodik

13

Anda punya satu set ubin dengan simbol dari tabel periodik. Setiap simbol muncul sekali. Anda sedang memikirkan kata-kata untuk dibuat tetapi Anda ingin tahu apakah itu mungkin atau tidak.

Tantangan

Tulis program dalam bahasa favorit Anda yang akan mengambil string sebagai parameter input. Anda dapat berasumsi bahwa input bukan nol, tidak memiliki spasi dan terdiri dari karakter ASCII.

Program Anda harus mengambil string itu dan menghasilkan nilai yang benar jika kata itu dapat terdiri dari simbol dari tabel elemen periodik, dan nilai falsey jika kata itu tidak bisa.

Untuk membuat tantangan ini lebih sulit, Anda tidak boleh menggunakan simbol dua kali. Jadi, jika Anda menggunakan Nitrogen, NAnda tidak boleh menggunakan Nkata yang sama.

Aturan

Tidak ada celah standar. Anda dapat menggunakan simbol dari elemen 1-118 (Hidrogen ke Ununoctium). Anda dapat menemukan daftar semua elemen di sini . Anda dapat membaca daftar simbol dari file atau masukan argumen jika Anda mau.

Kasus uji:

Laos - true (LaOs)
Amputation - true (AmPuTaTiON)
Heinous - true (HeINoUS)
Hypothalamus - true (HYPoThAlAmUS)
Singapore - true (SiNGaPoRe)
Brainfuck - true (BRaInFUCK)
Candycane - false

Ini adalah tantangan kode golf, kode terpendek menang.

SEBELUM ANDA DITUTUP SEBAGAI DUPLIKAT: Meskipun ini mungkin tampak mirip dengan tantangan ini , saya merasa itu berbeda karena ini bukan 'Buat daftar semua kata yang mungkin dari tabel periodik', itu adalah 'Ambil input sewenang-wenang dan tentukan jika itu bisa dibuat dari tabel periodik '

JamesENL
sumber
2
Ada ini yang lebih dekat tetapi ditutup sebagai duplikat dari tantangan yang Anda tautkan. Saya pikir fakta bahwa Anda hanya dapat menggunakan simbol sekali adalah perbedaan terbesar antara tantangan. Dalam hal bermain golf saya ragu ada cara yang lebih baik daripada brute yang memaksa semua kata yang mungkin dan memeriksa apakah input ada di antara mereka.
Martin Ender
1
"Anda dapat membaca daftar simbol dari file jika Anda mau." - bagaimana kita menghitungnya? Apakah ukuran file ditambahkan ke panjang kode? Atau kita dapat menggunakannya secara gratis?
Qwertiy
2
Bisakah kita mengambil daftar elemen sebagai argumen ke program?
Emigna
1
@ Qwertiy, ukuran file tersebut gratis, tetapi byte untuk membacanya tidak.
JamesENL
9
Boron, Radium, Yodium, Nitrogen, Fluorin, Uranium, Karbon, Kalium.
Neil

Jawaban:

3

05AB1E, 16 byte

œvyŒ€J})˜Ùvy²Q}O

Dijelaskan

œv                # for each permutation of the list of elements
  yŒ              # get all sublist of elements
    €J            # join as strings to form the words possible to spell
      })˜Ù        # convert to list of unique spellable strings
          vy²Q}   # compare each word with input word
               O  # sum giving 1 if the word is found, else 0

Peringatan: Sangat lambat. Saya merekomendasikan pengujian pada subset elemen yang jauh lebih kecil dalam juru bahasa online.

Mengambil daftar elemen sebagai argumen pertama.
Membawa kata untuk diuji sebagai argumen kedua.
Mengembalikan 1 untuk true dan 0 untuk false.

Cobalah online di subset elemen kecil

Emigna
sumber
3

Brachylog , 7 byte

spc~@l.

Panggil dengan daftar simbol (semua huruf kecil) sebagai Input, dan kata sebagai Output, misalnya run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe")..

Peringatan: ini sangat tidak efisien ketika semua simbol ada dalam daftar.

Penjelasan

spc        Create a string from a permutation of a subset of the Input
   ~@l.    This string can unify with the lowercase version of the Output
Fatalisasi
sumber
4
@Downvoter peduli untuk menjelaskan?
Fatalkan
1

JavaScript (Firefox 48 atau yang lebih lama), 103 byte

f=(w,e=`
H
He
... (list of elements not included in the byte count) ...
Uus
Uuo
`)=>!w||e.match(/\w+/g).some(s=>!w.search(s,`i`)&&f(w.slice(s.length),e.replace(`
${s}
`,`
`)))
Neil
sumber
1

Pyth - 13 byte

Hanya memeriksa apakah ada partisi input dengan huruf kecil memiliki semua bagian dalam tabel periodik.

sm.A}RQd./rzZ

Di seluler, jadi tidak bisa menyiapkan ruang tes yang sebenarnya, tetapi coba ini .

Maltysen
sumber
1
Anda menulis ini di telepon !?
JamesENL
Ini tidak memastikan suatu elemen tidak digunakan berulang kali. Contoh.
PurkkaKoodari
1

Pyth, 11 byte

s}RySQSM./z

Cobalah online. Suite uji.

Ditulis di ponsel saya, tetapi harus berfungsi. Sangat lambat untuk sejumlah besar elemen atau string yang panjang.

Penjelasan

  • Ambil semua partisi ( ./) dari input ( z).
  • Sortir ( S) setiap partisi ( M).
  • Untuk setiap partisi ( R), lihat apakah itu ada di ( }) daftar semua himpunan bagian ( y) dari Stabel periodik disortir ( ) yang diberikan sebagai input ( Q).
  • Jumlah ( s) daftar boolean yang dihasilkan.
PurkkaKoodari
sumber