Wolfram 언어

핵심 언어

계산 능력 테스트

프랑스 TV 쇼 Des Chiffres et des Lettres와 영국 버전인 Countdown은 참가자의 계산 능력을 테스트합니다. 이 게임의 간단한 버전을 구성하고 새로운 함수 Groupings를 사용하여 문제를 해결해봅니다.

계산에 사용할 수 있는 산술 연산을 지정합니다.

In[1]:=
Click for copyable input
ops = {Plus, Subtract, Times, Divide};

지정된 숫자의 집합에서 임의로 선택한 네개의 숫자 목록을 생성합니다.

In[2]:=
Click for copyable input
numbers = RandomChoice[{1, 2, 3, 5, 7, 10}, 4]
Out[2]=

이러한 숫자와 작업에서 얻을 결과 역시 무작위로 생성됩니다.

In[3]:=
Click for copyable input
total = RandomInteger[100]
Out[3]=

각 숫자를 한 번만 사용할 수 있는 가능한 모든 방법을 구축합니다. 순서가 중요한 부분을 차지하는 산술 작업이 있는점을 유의해야합니다.

In[4]:=
Click for copyable input
orderings = Flatten[Permutations /@ Subsets[numbers, {4}], 1]
Out[4]=

지정된 바이너리 조작의 각 순서에 대한 가능한 모든 조합을 생성합니다.

In[5]:=
Click for copyable input
candidates = Groupings[orderings, ops -> 2, HoldForm];

후보 중 0의 나눗셈을 위해 ComplexInfinity 메시지가 표시되는 경우도 있으며, Quiet을 사용하여 메시지를 제거할 수 있습니다.

In[6]:=
Click for copyable input
results = Quiet@ReleaseHold[candidates];

요구된 결과를 도출하는 조합의 수는 다음과 같습니다.

In[7]:=
Click for copyable input
combinations = Thread[Equal[candidates, results]]; Count[Thread[Equal[candidates, results]], _ == total]
Out[7]=

가능한 조합 중 하나를 살펴봅니다.

In[8]:=
Click for copyable input
FirstCase[combinations, _ == total]
Out[8]=

경우에 따라서는 정확한 결과를 얻을 수없는 경우도 발생할 수 있습니다.

In[9]:=
Click for copyable input
total2 = 76; Count[combinations, _ == total2]
Out[9]=

그러한 경우에도 Nearest를 사용하여 결과 중에서 최적의 근사값을 찾을 수있습니다.

In[10]:=
Click for copyable input
total2 = 76; Count[combinations, _ == total2]; DeleteCases[results, ComplexInfinity]; DeleteDuplicates@Nearest[%, total2]
Out[10]=

관련 예제

de en es fr ja pt-br ru zh