KenKen Puzzle Helper - Menjatuhkan urutan tanpa urutan

Aug 19 2020

Dalam contoh berikut, saya membuat semua varian dari a $9 \times 9$ Teka-teki KenKen yang datang dalam kelompok tiga menggunakan penjumlahan yang menghasilkan$18$.

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

Ini menghasilkan

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

Saya kemudian dapat melakukan sesuatu untuk mencari kasus berulang tanpa urutan

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

Ini menghasilkan (saya ingin menghapus semua setelah itu $198$ dari data, tetapi melakukannya untuk setiap set unik tiga digit).

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

Pendekatan ini memiliki dua kelemahan, saya harus tahu urutan pengujiannya, lalu saya dapat menggunakannya untuk menghapus semua pengulangan dari data. Saya harus mengulangi ini untuk urutan unik berikutnya.

Apakah ada cara sederhana untuk berkreasi

 data2 = some_fancy_command[data]

Ini menghasilkan data2 (catatan - saya juga tidak peduli dengan koma), yang hanya memiliki nomor 3 digit unik terlepas dari urutannya

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

Apa cara termudah untuk melakukannya?

Perhatikan bahwa saya sudah familiar dengan https://community.wolfram.com/groups/-/m/t/478684/, tetapi hanya menginginkan penolong sebagai lawan pemecah.

Selain: Tujuan saya adalah memiliki alat yang dapat menduplikasi secara efektif https://homepages.bluffton.edu/~nesterd/apps/kenkenhelp.html karena mungkin CDF hanya sebuah Notebook MMA di mana saya memasukkan semua kandang, jenisnya, ukuran teka-teki dan memberikan petunjuk tentang semua nomor yang bisa masuk ke dalam kandang.

Jawaban

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

Jika Anda mengizinkan nomor berulang maka:

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