KenKen Puzzle Helper - Sırasız dizileri düşürme

Aug 19 2020

Aşağıdaki örnekte, bir nesnenin tüm değişkenlerini oluşturuyorum. $9 \times 9$ KenKen bulmacası, toplama ile sonuçlanan üçlü gruplar halinde gelen$18$.

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

Bu üretir

$\{\{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\}\}$

Daha sonra tekrar eden vakaları sırayla aramak için bir şeyler yapabilirim

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

Bu oluşturur (tüm bunları daha sonra silmek istiyorum $198$ verilerden, ancak üç basamaklı her benzersiz set için bunu yapmak için).

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

Bu yaklaşımın iki dezavantajı var, test edilecek diziyi bilmem gerekiyordu, sonra bunu tüm tekrarları verilerden çıkarmak için kullanabilirim. Bunu bir sonraki benzersiz sekans için tekrar etmem gerekecek.

Yaratmanın basit bir yolu var mı

 data2 = some_fancy_command[data]

Sırasına bakılmaksızın yalnızca benzersiz 3 basamaklı sayılara sahip olan data2 üretir (not - virgül de umurumda değil)

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

Bunu yapmanın en kolay yolu nedir?

Aşina olduğumu unutmayın https://community.wolfram.com/groups/-/m/t/478684/, ancak bir çözücünün aksine yalnızca bir yardımcı ister.

Bir kenara: Amacım, etkin bir şekilde kopyalayan bir araca sahip olmaktır. https://homepages.bluffton.edu/~nesterd/apps/kenkenhelp.html Belki de tüm kafesleri, türlerini, bulmacanın boyutunu girdiğim ve kafese girebilecek tüm sayılar hakkında ipuçları sağlayan bir MMA Defterinin CDF'si gibi.

Yanıtlar

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} *)

Tekrarlanan numaralara izin verirseniz:

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