周期表でスクラブルをプレイ


13

周期表のシンボルを含むタイルのセットがあります。各シンボルは1回表示されます。あなたは作る言葉を考えていますが、それが可能かどうか知りたいです。

チャレンジ

入力パラメーターとして文字列を受け取る、お気に入りの言語でプログラムを作成します。入力はヌルではなく、スペースがなく、ASCII文字で構成されていると想定できます。

プログラムはその文字列を取得し、その単語が元素周期表のシンボルで構成されている場合は真理値を、出力できない場合は偽値を出力する必要があります。

この課題をより困難にするために、シンボルを2回使用しないでください。したがって、窒素を使用Nする場合N、同じ言葉で再び使用することはできません。

ルール

標準の抜け穴は許可されていません。要素1-118(水素からUnunoctium)のシンボルを使用できます。ここですべての要素のリストを見つけることができます。必要に応じて、ファイルまたは入力引数からシンボルのリストを読み取ることができます。

テストケース:

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

これはコードゴルフの挑戦であり、最短のコードが勝ちます。

重複として閉じる前:これはこの課題に似ているように見えるかもしれませんが、「周期表から可能なすべての単語のリストを生成する」ではなく、「任意の入力を取得して、周期表から作成できます」


2
あります。このより密接に関連しているのが、自身がリンクされた課題の重複として閉鎖されました。ただし、シンボルを1回しか使用できないという事実は、課題間の最大の差別化だと思います。ゴルフに関しては、考えられるすべての単語をブルートフォースし、入力がその中にあるかどうかを確認するよりも良い方法があるとは思いません。
マーティンエンダー

1
「必要に応じて、ファイルからシンボルのリストを読み取ることができます。」-どうやって数えるの?ファイルのサイズはコード長に追加されますか?それとも無料で使用できますか?
-Qwertiy

2
要素のリストをプログラムの引数として使用できますか?
エミグナ

1
@Qwertiy、ファイルのサイズは無料ですが、読み込むバイトはそうではありません。
JamesENL

9
ホウ素、ラジウム、ヨウ素、窒素、フッ素、ウラン、炭素、カリウム。
ニール

回答:


3

05AB1E、16バイト

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

説明した

œ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

警告:非常に遅いです。オンラインインタープリターの要素の非常に小さなサブセットでテストすることをお勧めします。

最初の引数として要素のリストを取ります。
テストする単語を2番目の引数として受け取ります。
trueの場合は1、falseの場合は0を返します。

要素の小さなサブセットでオンラインで試してください


3

Brachylog、7バイト

spc~@l.

記号のリスト(すべて小文字)を入力として、単語を出力として呼び出します。たとえば、 run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe").ます。

警告:すべてのシンボルがリストにある場合、これは非常に非効率的です。

説明

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

4
説明する@Downvoterケア?
Fatalize

1

JavaScript(Firefox 48以前)、103バイト

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}
`,`
`)))

1

Pyth-13バイト

小文字の入力のパーティションに周期表のすべての部分があるかどうかを確認するだけです。

sm.A}RQd./rzZ

モバイルでは、その実際のテストスイートを設定しますが、試すことができませんでしたこれを


1
これを電話で書きました!?
JamesENL

これは、要素が複数回使用されないことを保証しません。例。
-PurkkaKoodari

1

Pyth、11バイト

s}RySQSM./z

オンラインでお試しください。 テストスイート。

私の携帯電話で書かれていますが、動作するはずです。多数の要素または長い文字列の場合、非常に遅くなります。

説明

  • ./入力(z)のすべてのパーティション()を取得します。
  • S各パーティション(M)をソート()します。
  • 各パーティション(R)について、入力()として与えられたソート済み()周期表}のすべてのサブセット(y)のリストにあるかどうかを確認SしますQ
  • s結果のブール値のリストを合計()します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.