KenKen Puzzle Helper - Eliminando sequências sem ordem

Aug 19 2020

No exemplo a seguir, estou gerando todas as variantes de um $9 \times 9$ Quebra- cabeça KenKen que vêm em grupos de três usando adição que resulta em$18$.

  data = Select[Tuples[Range[9], 3], Plus @@ # == 18 &]

Isso gera

$\{\{1,8,9\},\{1,9,8\},\{2,7,9\},\{2,8,8\},\{2,9,7\},\{3,6,9\},\{3,7,8\},\{3,8,7\},\{3,9,6\},\{4,5,9\},\{4,6,8\},\{4,7,7\},\{4,8,6\},\{4,9,5\},\{5,4,9\},\{5,5,8\},\{5,6,7\},\{5,7,6\},\{5,8,5\},\{5,9,4\},\{6,3,9\},\{6,4,8\},\{6,5,7\},\{6,6,6\},\{6,7,5\},\{6,8,4\},\{6,9,3\},\{7,2,9\},\{7,3,8\},\{7,4,7\},\{7,5,6\},\{7,6,5\},\{7,7,4\},\{7,8,3\},\{7,9,2\},\{8,1,9\},\{8,2,8\},\{8,3,7\},\{8,4,6\},\{8,5,5\},\{8,6,4\},\{8,7,3\},\{8,8,2\},\{8,9,1\},\{9,1,8\},\{9,2,7\},\{9,3,6\},\{9,4,5\},\{9,5,4\},\{9,6,3\},\{9,7,2\},\{9,8,1\}\}$

Posso então fazer algo para procurar casos repetidos sem ordem

  Cases[data, {OrderlessPatternSequence[1, 8, 9]}]

Isso gera (eu quero deletar todos aqueles depois $198$ de dados, mas para fazer isso para cada conjunto único de três dígitos).

$$\{\{1,8,9\},\{1,9,8\},\{8,1,9\},\{8,9,1\},\{9,1,8\},\{9,8,1\}\}$$

Essa abordagem tem duas desvantagens, eu tinha que saber a sequência a ser testada, então posso usar isso para eliminar todas as repetições dos dados. Eu teria que repetir isso para a próxima sequência única.

Existe uma maneira simples de criar

 data2 = some_fancy_command[data]

Ele produz data2 (nota - eu também não me importo com as vírgulas), que tem apenas números únicos de 3 dígitos, independentemente da ordem

$$\{\{189\},\{279\},\{288\}\},\{369\},\{378\}\}... $$

Qual é a maneira mais fácil de fazer isso?

Observe que estou familiarizado com https://community.wolfram.com/groups/-/m/t/478684/, mas deseja apenas um ajudante em vez de um solucionador.

À parte: meu objetivo é ter uma ferramenta que duplique efetivamente https://homepages.bluffton.edu/~nesterd/apps/kenkenhelp.html como talvez um CDF de apenas um Notebook de MMA onde eu insiro todas as gaiolas, seu tipo, o tamanho do quebra-cabeça e fornece dicas sobre todos os números que podem entrar na gaiola.

Respostas

2 flinty Aug 19 2020 at 03:31
triples = Select[Sort /@ IntegerPartitions[18,{3},Range[9]], DuplicateFreeQ]

FromDigits /@ triples
(* {189, 279, 369, 459, 378, 468, 567} *)

Se você permitir números repetidos:

FromDigits@*Sort /@ IntegerPartitions[18, {3}, Range[9]]
(* {189, 279, 369, 459, 288, 378, 468, 558, 477, 567, 666} *)