Periyodik tablo ile scrabble oyna


13

Periyodik tablodaki sembollerle bir dizi fayansınız var. Her sembol bir kez görünür. Yapacak kelimeleri düşünüyorsun ama bunun mümkün olup olmadığını bilmek istiyorsun.

Meydan okuma

En sevdiğiniz dilde bir girdi parametresi olarak bir dize alacak bir program yazın. Girişin boş olmadığını, boşluk içermediğini ve ASCII karakterlerinden oluştuğunu varsayabilirsiniz.

Programınız bu dizeyi almalı ve eğer bu sözcük periyodik elemanlar tablosundaki sembollerden oluşabiliyorsa doğru bir değer ve eğer kelime yapamazsa bir falsey değeri vermelidir.

Bu zorluğu daha da zorlaştırmak için bir sembolü iki kez kullanamazsınız. Nitrojen Nkullanırsanız Naynı kelimede tekrar kullanamazsınız .

kurallar

Standart boşluklara izin verilmez. 1-118 arasındaki elemanlardan (Hidrojenden Ununoktiyuma) sembolleri kullanabilirsiniz. Burada tüm elemanların bir listesini bulabilirsiniz . İsterseniz, bir dosyadaki sembollerin listesini veya giriş argümanlarını okuyabilirsiniz.

Test Durumları:

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

Bu bir kod golf meydan okuma, en kısa kod kazanır.

DUPLICATE OLARAK KAPATMADAN ÖNCE: Bu zorluğa benzer görünse de, farklı olduğunu düşünüyorum çünkü 'Periyodik tablodan mümkün olan tüm kelimelerin bir listesini oluşturma' değil, 'Keyfi girdi al ve belirle periyodik tablodan yapılabilir '


2
Orada bu kadar yakından ilişkili ancak kendisi bağlantılı meydan tekrarı olarak kapalı olduğunu hangi. Sanırım sadece bir kez bir sembol kullanabilmeniz zorluklar arasındaki en büyük farktır. Golf açısından, tüm olası kelimeleri zorlamaktan ve girişin aralarında olup olmadığını kontrol etmekten daha iyi bir yol olduğundan şüpheliyim.
Martin Ender

1
"İsterseniz bir dosyadaki sembollerin listesini okuyabilirsiniz." - nasıl sayarız? Dosyanın boyutu kod uzunluğuna eklenmiş mi? Yoksa ücretsiz olarak kullanabilir miyiz?
Qwertiy

2
Öğelerin listesini programa argüman olarak alabilir miyiz?
Emigna

1
@Qwertiy, dosyanın boyutu ücretsiz, ancak okunacak baytlar değil.
JamesENL

9
Bor, Radyum, İyot, Azot, Flor, Uranyum, Karbon, Potasyum.
Neil

Yanıtlar:


3

05AB1E, 16 bayt

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

Açıklaması

œ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

Uyarı: Son derece yavaş. Çevrimiçi yorumlayıcıdaki çok daha küçük bir öğe alt kümesinde test yapmanızı öneririm.

Öğelerin listesini ilk argüman olarak alır.
İkinci argüman olarak test etmek için kelime alır.
True için 1 ve false için 0 döndürür.

Küçük bir öğe alt kümesinde çevrimiçi deneyin


3

Brachylog , 7 bayt

spc~@l.

Girdi olarak sembollerin listesini (tümü küçük harf) ve Çıktı olarak kelimeyi arayın, ör run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe")..

Uyarı: Tüm semboller listede olduğunda bu son derece etkisizdir.

açıklama

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 açıklamak ister misiniz?
16'da ölümcül

1

JavaScript (Firefox 48 veya öncesi), 103 bayt

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 bayt

Sadece küçük harfli girişin herhangi bir bölümünün periyodik tablodaki tüm parçalara sahip olup olmadığını kontrol eder.

sm.A}RQd./rzZ

Mobil cihazlarda, böylece gerçek bir test takımı kurmak, ancak deneyin olamazdı bu .


1
Bunu bir telefona yazdın !?
JamesENL

Bu, bir öğenin birden çok kez kullanılmamasını sağlamaz. Misal.
PurkkaKoodari

1

Pyth, 11 bayt

s}RySQSM./z

Çevrimiçi deneyin. Test odası.

Telefonumda yazıldı, ancak çalışmalı. Çok sayıda eleman veya uzun bir dize için çok yavaş.

açıklama

  • ./Girişin ( z) tüm bölümlerini ( ) alın .
  • SHer bölümü ( M) sırala ( ).
  • Her bölüm ( R) için, input ( ) olarak verilen periyodik tablonun }tüm altkümeleri ( y) listesinde ( ) olup olmadığına bakın .SQ
  • sSonuçta elde edilen booleans listesi ( ).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.