주기율표로 글자 맞추기


13

주기율표의 기호가있는 타일 세트가 있습니다. 각 기호는 한 번 나타납니다. 할 말을 생각하고 있지만 가능 여부를 알고 싶습니다.

도전

문자열을 입력 매개 변수로 사용하는 프로그램을 선호하는 언어로 작성하십시오. 입력이 널이 아니며 공백이없고 ASCII 문자로 구성되어 있다고 가정 할 수 있습니다.

프로그램이 해당 문자열을 가져와 해당 단어가 주기율표의 기호로 구성 될 수있는 경우 참 값을 출력하고, 단어가 실패 할 경우 거짓 값을 출력해야합니다.

이 도전을 더 어렵게하기 위해 심볼을 두 번 사용하지 않을 수 있습니다. 따라서 질소 N를 사용 N하면 같은 단어로 다시 사용할 수 없습니다 .

규칙

표준 허점은 허용되지 않습니다. 요소 1-118 (수소에서 우노 녹튬까지)의 기호를 사용할 수 있습니다. 여기 에서 모든 요소의 목록을 찾을 수 있습니다 . 원하는 경우 파일 또는 입력 인수에서 기호 목록을 읽을 수 있습니다.

테스트 사례 :

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

이것은 코드 골프 도전, 가장 짧은 코드 승리입니다.

중복으로 종료하기 전에 : 이 과제 와 비슷해 보일 수 있지만 , '주기율표에서 가능한 모든 단어 목록을 생성하십시오'가 아니기 때문에 '다름을 느낍니다. 주기율표에서 만들 수 있습니다. '


2
거기에 더 밀접한 관련이 있지만, 그 자체가 당신이 링크 된 과제의 중복으로 폐쇄했다된다. 한 번만 심볼을 사용할 수 있다는 사실은 도전 과제 사이의 가장 큰 차이점이라고 생각합니다. 골프의 관점에서 나는 가능한 모든 단어를 강요하고 입력이 그들 사이에 있는지 확인하는 것보다 더 나은 방법이 있는지 의심합니다.
Martin Ender

1
"원하는 경우 파일에서 기호 목록을 읽을 수 있습니다." -우리는 어떻게 계산합니까? 파일 크기가 코드 길이에 추가됩니까? 아니면 무료로 사용할 수 있습니까?
Qwertiy

2
요소 목록을 프로그램의 인수로 사용할 수 있습니까?
Emigna

1
@ Qwertiy, 파일의 크기는 무료이지만 읽을 수있는 바이트는 없습니다.
JamesENL

9
붕소, 라듐, 요오드, 질소, 불소, 우라늄, 탄소, 칼륨.
Neil

답변:


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

경고 : 매우 느립니다. 온라인 인터프리터에서 훨씬 작은 요소 하위 집합을 테스트하는 것이 좋습니다.

요소 목록을 첫 번째 인수로 사용합니다.
단어를 두 번째 인수로 사용합니다.
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가 설명해 줄까?
16:23에

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) 목록 ( )에 있는지 확인하십시오 .SQ
  • s결과 부울 목록을 합산 ( )합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.