import%20marimo%0A%0A__generated_with%20%3D%20%220.11.25%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20%E5%85%85%E8%B6%B3%E5%8F%AF%E8%83%BD%E6%80%A7%E5%95%8F%E9%A1%8C%E3%81%A8%E9%87%8D%E3%81%BF%E4%BB%98%E3%81%8D%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20%E9%87%8D%E3%81%BF%E4%BB%98%E3%81%8D%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20-%20%E5%A4%89%E6%95%B0%20%24x_j%20%5Cin%20D_j%24%20(%24j%20%3D%201%2C%20%5Cdots%2C%20n%24)%20(%E5%90%84%20%24D_j%24%20%E3%81%AF%E6%9C%89%E9%99%90%E9%9B%86%E5%90%88)%0A%20%20%20%20%20%20%20%20-%20%E5%88%B6%E7%B4%84%20%24C_i%20%5Csubset%20D_1%20%5Ctimes%20%5Cdots%20%5Ctimes%20D_n%24%20(%24i%20%3D%201%2C%20%5Cdots%2C%20m%24)%0A%0A%20%20%20%20%20%20%20%20%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%81%A8%E3%81%AF%2C%20%E4%B8%8A%E8%A8%98%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%20%24(x_1%2C%20%5Cdots%2C%20x_n)%24%20%E3%82%92%201%20%E7%B5%84%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B(%E3%81%8B%E8%A7%A3%E3%81%8C%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%82%92%E8%A8%BC%E6%98%8E%E3%81%99%E3%82%8B%E3%81%8B)%E5%95%8F%E9%A1%8C%E3%81%AE%E3%81%93%E3%81%A8.%20%0A%0A%20%20%20%20%20%20%20%20%E5%88%B6%E7%B4%84%E3%81%8B%E3%82%89%E3%81%AE%E9%80%B8%E8%84%B1%E9%87%8F%20%24g_i(x)%24%20%E3%81%8C%E5%AE%9A%E7%BE%A9%E3%81%A7%E3%81%8D%E3%82%8C%E3%81%B0%E3%81%93%E3%82%8C%E3%82%92%E6%9C%80%E5%B0%8F%E3%81%AB%E3%81%99%E3%82%8B%E5%95%8F%E9%A1%8C%E3%81%A8%E3%81%97%E3%81%A6%E3%82%82%E5%AE%9A%E5%BC%8F%E5%8C%96%E3%81%A7%E3%81%8D%E3%82%8B.%20%0A%20%20%20%20%20%20%20%20%E5%90%84%E5%88%B6%E7%B4%84%E3%81%AE%E9%87%8D%E3%81%BF%E3%82%92%20%24w_i%24%20%E3%81%A8%E3%81%97%E3%81%A6%E9%87%8D%E3%81%BF%E4%BB%98%E3%81%8D%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%81%AF%0A%0A%20%20%20%20%20%20%20%20%5Cbegin%7Balign%7D%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bminimize%7D%20%5Cquad%20%5Csum_%7Bi%3D1%7D%5Em%20w_i%20g_i(x)%20%5C%5C%0A%20%20%20%20%20%20%20%20%26%5Ctext%7Bs.t.%7D%20%5Cquad%20x_j%20%5Cin%20D_j%20%5Cquad%20%5Ctext%7B(for%20%24j%20%3D%201%2C%20%5Cdots%2C%20n%24)%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Balign%7D%0A%0A%20%20%20%20%20%20%20%20%E6%9C%80%E9%81%A9%E5%8C%96%E3%82%BD%E3%83%AB%E3%83%90%E3%83%BC%20SCOP%20%E3%81%8C%E7%B4%B9%E4%BB%8B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8C%2C%20%E6%99%82%E9%96%93%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%82%84%E3%82%8B...%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20%E6%99%82%E9%96%93%E5%89%B2%E4%BD%9C%E6%88%90%E5%95%8F%E9%A1%8C%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%20%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%0A%0A%20%20%20%20%20%20%20%20-%20%E6%8E%88%E6%A5%AD%20%24i%24%0A%20%20%20%20%20%20%20%20-%20%E6%95%99%E5%AE%A4%20%24k%24%0A%20%20%20%20%20%20%20%20-%20%E6%95%99%E5%93%A1%20%24l%24%0A%20%20%20%20%20%20%20%20-%20%E5%AD%A6%E7%94%9F%0A%20%20%20%20%20%20%20%20-%20%E6%9C%9F%20%24t%24%3A%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%201%20%E9%80%B1%E9%96%93(5%20%E6%97%A5%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%206%20%E6%97%A5%EF%BC%89%E3%81%AE%E5%90%84%E6%99%82%E9%99%90%E3%82%92%E8%80%83%E3%81%88%E3%82%8B.%20%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20%E6%99%82%E9%96%93%E5%89%B2%E3%82%92%E7%B5%84%E3%82%80%E6%9D%A1%E4%BB%B6%0A%0A%20%20%20%20%20%20%20%20-%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%8E%88%E6%A5%AD%E3%82%92%E3%81%84%E3%81%9A%E3%82%8C%E3%81%8B%E6%9C%9F%E3%81%B8%E5%89%B2%E5%BD%93%0A%20%20%20%20%20%20%20%20-%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%8E%88%E6%A5%AD%E3%82%92%E3%81%84%E3%81%9A%E3%82%8C%E3%81%8B%E6%95%99%E5%AE%A4%E3%81%B8%E5%89%B2%E5%BD%93%0A%20%20%20%20%20%20%20%20-%20%E5%90%84%E6%9C%9F%2C%201%20%E3%81%A4%E3%81%AE%E6%95%99%E5%AE%A4%E3%81%A7%E3%81%AF%201%20%E3%81%A4%E4%BB%A5%E4%B8%8B%E3%81%AE%E6%8E%88%E6%A5%AD%0A%20%20%20%20%20%20%20%20-%20%E5%90%8C%E3%81%98%E6%95%99%E5%93%A1%E3%81%AE%E5%8F%97%E6%8C%81%E3%81%A1%E8%AC%9B%E7%BE%A9%E3%81%AF%E7%95%B0%E3%81%AA%E3%82%8B%E6%9C%9F%E3%81%B8%0A%20%20%20%20%20%20%20%20-%20%E5%89%B2%E5%BD%93%E6%95%99%E5%AE%A4%E3%81%AF%E5%8F%97%E8%AC%9B%E5%AD%A6%E7%94%9F%E6%95%B0%E4%BB%A5%E4%B8%8A%E3%81%AE%E5%AE%B9%E9%87%8F%E3%82%92%E3%82%82%E3%81%A4%0A%20%20%20%20%20%20%20%20-%20%E5%90%8C%E3%81%98%E5%AD%A6%E7%94%9F%E3%81%8C%E5%8F%97%E3%81%91%E3%82%8B%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B%E6%8E%88%E6%A5%AD%E3%81%AE%E9%9B%86%E5%90%88(%E3%82%AB%E3%83%AA%E3%82%AD%E3%83%A5%E3%83%A9%E3%83%A0)%E3%81%AF%2C%20%E7%95%B0%E3%81%AA%E3%82%8B%E6%9C%9F%E3%81%B8%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20%E4%BB%98%E5%8A%A0%E6%9D%A1%E4%BB%B6%0A%0A%20%20%20%20%20%20%20%20-%201%20%E6%97%A5%E3%81%AE%E6%9C%80%E5%BE%8C%E3%81%AE%E6%9C%9F%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%89%E3%82%8C%E3%82%8B%E3%81%A8%E5%B1%A5%E4%BF%AE%E5%AD%A6%E7%94%9F%E6%95%B0%E5%88%86%E3%81%AE%E3%83%9A%E3%83%8A%E3%83%AB%E3%83%86%E3%82%A3%0A%20%20%20%20%20%20%20%20-%201%20%E4%BA%BA%E3%81%AE%E5%AD%A6%E7%94%9F%E3%81%8C%E5%B1%A5%E4%BF%AE%E3%81%99%E3%82%8B%E6%8E%88%E6%A5%AD%E3%81%8C%203%20%E9%80%A3%E7%B6%9A%E3%81%99%E3%82%8B%E3%81%A8%E3%83%9A%E3%83%8A%E3%83%AB%E3%83%86%E3%82%A3%0A%20%20%20%20%20%20%20%20-%201%20%E4%BA%BA%E3%81%AE%E5%AD%A6%E7%94%9F%E3%81%AE%E6%8E%88%E6%A5%AD%E6%95%B0%E3%81%8C%201%20%E6%97%A5%E3%81%AB%201%20%E3%81%A4%E3%81%AA%E3%82%89%E3%81%B0%E3%83%9A%E3%83%8A%E3%83%AB%E3%83%86%E3%82%A3(0%20%E3%81%8B%202%20%E4%BB%A5%E4%B8%8A%E3%81%8C%E6%9C%9B%E3%81%BE%E3%81%97%E3%81%84)%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20%E5%AE%9A%E5%BC%8F%E5%8C%96%0A%0A%20%20%20%20%20%20%20%20%23%23%23%23%20%E5%A4%89%E6%95%B0%0A%0A%20%20%20%20%20%20%20%20-%20%24x_%7Bit%7D%24%3A%20%E6%8E%88%E6%A5%AD%20%24i%24%20%E3%82%92%E6%9C%9F%20%24t%24%20%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B%E3%81%A8%E3%81%8D%20%241%24%2C%20%E3%81%9D%E3%81%86%E3%81%A7%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%20%240%24%0A%20%20%20%20%20%20%20%20-%20%24y_%7Bik%7D%24%3A%20%E6%8E%88%E6%A5%AD%20%24i%24%20%E3%82%92%E6%95%99%E5%AE%A4%20%24k%24%20%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B%E3%81%A8%E3%81%8D%20%241%24%2C%20%E3%81%9D%E3%81%86%E3%81%A7%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%20%240%24%0A%0A%20%20%20%20%20%20%20%20%23%23%23%23%20%E5%88%B6%E7%B4%84%0A%0A%20%20%20%20%20%20%20%20-%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%8E%88%E6%A5%AD%E3%82%92%E3%81%84%E3%81%9A%E3%82%8C%E3%81%8B%E6%9C%9F%E3%81%B8%E5%89%B2%E5%BD%93%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bt%7D%20x_%7Bit%7D%20%3D%201%24%20(for%20all%20%24i%24)%0A%20%20%20%20%20%20%20%20-%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%8E%88%E6%A5%AD%E3%82%92%E3%81%84%E3%81%9A%E3%82%8C%E3%81%8B%E6%95%99%E5%AE%A4%E3%81%B8%E5%89%B2%E5%BD%93%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bk%7D%20y_%7Bik%7D%20%3D%201%24%20(for%20all%20%24i%24)%0A%20%20%20%20%20%20%20%20-%20%E5%90%84%E6%9C%9F%20%24t%24%20%E3%81%AE%E5%90%84%E6%95%99%E5%AE%A4%20%24k%24%20%E3%81%B8%E3%81%AE%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E6%8E%88%E6%A5%AD%E3%81%AF%20%241%24%20%E4%BB%A5%E4%B8%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bi%7D%20x_%7Bit%7D%20y_%7Bik%7D%20%5Cleq%201%24%20(for%20all%20%24t%2C%20k%24)%20%E2%80%BB%20AND%20%E5%88%B6%E7%B4%84%E3%81%AA%E3%81%AE%E3%81%A7%E7%B7%9A%E5%BD%A2%E5%88%B6%E7%B4%84%E3%81%A7%E8%A1%A8%E7%8F%BE%E5%8F%AF%E8%83%BD%0A%20%20%20%20%20%20%20%20-%20%E5%90%8C%E3%81%98%E6%95%99%E5%93%A1%E3%81%AE%E5%8F%97%E6%8C%81%E3%81%A1%E8%AC%9B%E7%BE%A9%E3%81%AF%E7%95%B0%E3%81%AA%E3%82%8B%E6%9C%9F%E3%81%B8%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%0A%20%20%20%20%20%20%20%20%20%20-%20%E6%95%99%E5%93%A1%20%24l%24%20%E3%81%AE%E5%8F%97%E3%81%91%E6%8C%81%E3%81%A1%E8%AC%9B%E7%BE%A9%E3%81%AE%E9%9B%86%E5%90%88%E3%82%92%20%24E_l%24%20%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bi%20%5Cin%20E_l%7D%20x_%7Bit%7D%20%5Cleq%201%24%20(for%20all%20%24l%2C%20t%24)%0A%20%20%20%20%20%20%20%20-%20%E5%89%B2%E5%BD%93%E6%95%99%E5%AE%A4%E3%81%AF%E5%8F%97%E8%AC%9B%E5%AD%A6%E7%94%9F%E6%95%B0%E4%BB%A5%E4%B8%8A%E3%81%AE%E5%AE%B9%E9%87%8F%E3%82%92%E3%82%82%E3%81%A4%0A%20%20%20%20%20%20%20%20%20%20-%20%E6%8E%88%E6%A5%AD%20%24i%24%20%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84(%E5%AE%B9%E9%87%8F%E3%82%92%E8%B6%85%E9%81%8E%E3%81%99%E3%82%8B)%E6%95%99%E5%AE%A4%E3%81%AE%E9%9B%86%E5%90%88%E3%82%92%20%24K_i%24%20%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_i%20%5Csum_%7Bk%20%5Cin%20K_i%7D%20y_%7Bik%7D%20%5Cleq%200%24%0A%20%20%20%20%20%20%20%20-%20%E5%90%8C%E3%81%98%E5%AD%A6%E7%94%9F%E3%81%8C%E5%8F%97%E3%81%91%E3%82%8B%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B%E6%8E%88%E6%A5%AD%E3%81%AE%E9%9B%86%E5%90%88(%E3%82%AB%E3%83%AA%E3%82%AD%E3%83%A5%E3%83%A9%E3%83%A0)%E3%81%AF%E7%95%B0%E3%81%AA%E3%82%8B%E6%9C%9F%E3%81%B8%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%0A%20%20%20%20%20%20%20%20%20%20-%20%E3%82%AB%E3%83%AA%E3%82%AD%E3%83%A5%E3%83%A9%E3%83%A0%20%24j%24%20%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E6%8E%88%E6%A5%AD%E3%81%AE%E9%9B%86%E5%90%88%E3%82%92%20%24C_j%24%20%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bi%20%5Cin%20C_j%7D%20x_%7Bit%7D%20%5Cleq%201%24%20(for%20all%20%24j%2C%20t%24)%0A%20%20%20%20%20%20%20%20-%201%20%E6%97%A5%E3%81%AE%E6%9C%80%E5%BE%8C%E3%81%AE%E6%9C%9F%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%89%E3%82%8C%E3%82%8B%E3%81%A8%E5%B1%A5%E4%BF%AE%E5%AD%A6%E7%94%9F%E6%95%B0%E5%88%86%E3%81%AE%E3%83%9A%E3%83%8A%E3%83%AB%E3%83%86%E3%82%A3%0A%20%20%20%20%20%20%20%20%20%20-%201%E6%97%A5%E3%81%AE%E6%9C%80%E5%BE%8C%E3%81%AE%E6%9C%9F%E3%81%AE%E9%9B%86%E5%90%88%E3%82%92%20%24L%24%2C%20%E6%8E%88%E6%A5%AD%20%24i%24%20%E3%81%AE%E5%B1%A5%E4%BF%AE%E5%AD%A6%E7%94%9F%E6%95%B0%E3%82%92%20%24w_i%24%20%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bi%7D%20%5Csum_%7Bt%20%5Cin%20L%7D%20w_i%20x_%7Bit%7D%20%5Cleq%200%24%0A%20%20%20%20%20%20%20%20-%201%20%E4%BA%BA%E3%81%AE%E5%AD%A6%E7%94%9F%E3%81%8C%E5%B1%A5%E4%BF%AE%E3%81%99%E3%82%8B%E6%8E%88%E6%A5%AD%E3%81%8C%203%20%E9%80%A3%E7%B6%9A%E3%81%99%E3%82%8B%E3%81%A8%201%20%E3%83%9A%E3%83%8A%E3%83%AB%E3%83%86%E3%82%A3%0A%20%20%20%20%20%20%20%20%20%20-%20%24T%24%20%E3%82%92%201%20%E6%97%A5%E3%81%AE%E3%81%86%E3%81%A1%E3%81%A7%E6%9C%80%E5%BE%8C%E3%81%AE%202%20%E6%99%82%E9%96%93%E3%81%A7%E3%81%AA%E3%81%84%E6%9C%9F%E3%81%AE%E9%9B%86%E5%90%88%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bi%20%5Cin%20C_j%7D%20(x_%7Bi%2C%20t%7D%20%2B%20x_%7Bi%2C%20t%2B1%7D%20%2B%20x_%7Bi%2C%20t%2B2%7D)%20%5Cleq%202%24%20(for%20all%20%24t%20%5Cin%20T%24)%0A%20%20%20%20%20%20%20%20-%201%20%E4%BA%BA%E3%81%AE%E5%AD%A6%E7%94%9F%E3%81%AE%E6%8E%88%E6%A5%AD%E6%95%B0%E3%81%8C%201%20%E6%97%A5%E3%81%AB%201%20%E3%81%A4%E3%81%AA%E3%82%89%E3%81%B0%201%20%E3%83%9A%E3%83%8A%E3%83%AB%E3%83%86%E3%82%A3(0%20%E3%81%8B%202%20%E4%BB%A5%E4%B8%8A%E3%81%8C%E6%9C%9B%E3%81%BE%E3%81%97%E3%81%84)%0A%20%20%20%20%20%20%20%20%20%20-%20%E5%90%84%E6%97%A5%20%24d%24%20%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E6%9C%9F%E3%81%AE%E9%9B%86%E5%90%88%E3%82%92%20%24T_d%24%20%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%E6%97%A5%20%24d%24%20%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%AB%E3%83%AA%E3%82%AD%E3%83%A5%E3%83%A9%E3%83%A0%20%24j%24%20%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E6%8E%88%E6%A5%AD%E6%95%B0%E3%81%8C%20%240%24%20%E3%81%8B%20%242%24%20%E4%BB%A5%E4%B8%8A%E3%81%AA%E3%81%AE%E3%81%8B%E3%82%92%E8%A1%A8%E3%81%99%200-1%20%E5%A4%89%E6%95%B0%20%24z_%7Bjd%7D%24%20%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bt%20%5Cin%20T_d%7D%20%5Csum_%7Bi%20%5Cin%20C_j%7D%20x_%7Bit%7D%20%5Cleq%20%7CT_d%7C%20z_%7Bjd%7D%24%20(for%20all%20%24d%2C%20j%24)%0A%20%20%20%20%20%20%20%20%20%20-%20%24%5Csum_%7Bt%20%5Cin%20T_d%7D%20%5Csum_%7Bi%20%5Cin%20C_j%7D%20x_%7Bit%7D%20%5Cgeq%202%20z_%7Bjd%7D%24%20(for%20all%20%24d%2C%20j%24)%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20OR-tools%20(cp-sat)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20ortools.sat.python%20import%20cp_model%0A%20%20%20%20import%20ortools%0A%0A%20%20%20%20ortools.__version__%0A%20%20%20%20return%20cp_model%2C%20ortools%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20%E7%B0%A1%E5%8D%98%E3%81%AA%E4%BE%8B%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cp_model)%3A%0A%20%20%20%20_model%20%3D%20cp_model.CpModel()%0A%20%20%20%20_var_upper_bound%20%3D%20max(50%2C%2045%2C%2037)%0A%20%20%20%20_x%20%3D%20_model.new_int_var(0%2C%20_var_upper_bound%2C%20%22x%22)%0A%20%20%20%20_y%20%3D%20_model.new_int_var(0%2C%20_var_upper_bound%2C%20%22y%22)%0A%20%20%20%20_z%20%3D%20_model.new_int_var(0%2C%20_var_upper_bound%2C%20%22z%22)%0A%20%20%20%20_model.add(2%20*%20_x%20%2B%207%20*%20_y%20%2B%203%20*%20_z%20%3C%3D%2050)%0A%20%20%20%20_model.add(3%20*%20_x%20-%205%20*%20_y%20%2B%207%20*%20_z%20%3C%3D%2045)%0A%20%20%20%20_model.add(5%20*%20_x%20%2B%202%20*%20_y%20-%206%20*%20_z%20%3C%3D%2037)%0A%20%20%20%20_model.maximize(2%20*%20_x%20%2B%202%20*%20_y%20%2B%203%20*%20_z)%0A%20%20%20%20_solver%20%3D%20cp_model.CpSolver()%0A%20%20%20%20_status%20%3D%20_solver.solve(_model)%0A%0A%20%20%20%20if%20_status%20%3D%3D%20cp_model.OPTIMAL%3A%0A%20%20%20%20%20%20%20%20print(f%22Maximum%20of%20objective%20function%3A%20%7B_solver.objective_value%7D%22)%0A%20%20%20%20%20%20%20%20print()%0A%20%20%20%20%20%20%20%20print(f%22x%20value%3A%20%7B_solver.value(_x)%7D%22)%0A%20%20%20%20%20%20%20%20print(f%22y%20value%3A%20%7B_solver.value(_y)%7D%22)%0A%20%20%20%20%20%20%20%20print(f%22z%20value%3A%20%7B_solver.value(_z)%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20%E5%85%A8%E3%81%A6%E3%81%AE%E8%A7%A3%E3%81%AE%E5%88%97%E6%8C%99%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cp_model)%3A%0A%20%20%20%20class%20VarArraySolutionPrinter(cp_model.CpSolverSolutionCallback)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Print%20intermediate%20solutions.%22%22%22%0A%0A%20%20%20%20%20%20%20%20def%20__init__(self%2C%20variables)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20cp_model.CpSolverSolutionCallback.__init__(self)%0A%20%20%20%20%20%20%20%20%20%20%20%20self.__variables%20%3D%20variables%0A%20%20%20%20%20%20%20%20%20%20%20%20self.__solution_count%20%3D%200%0A%0A%20%20%20%20%20%20%20%20def%20on_solution_callback(self)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20self.__solution_count%20%3D%20self.__solution_count%20%2B%201%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20v%20in%20self.__variables%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print('%25s%3D%25i'%20%25%20(v%2C%20self.value(v))%2C%20end%3D'%20')%0A%20%20%20%20%20%20%20%20%20%20%20%20print()%0A%0A%20%20%20%20%20%20%20%20%40property%0A%20%20%20%20%20%20%20%20def%20solution_count(self)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20self.__solution_count%0A%20%20%20%20return%20(VarArraySolutionPrinter%2C)%0A%0A%0A%40app.cell%0Adef%20_(VarArraySolutionPrinter%2C%20cp_model)%3A%0A%20%20%20%20%23%20Creates%20the%20model.%0A%20%20%20%20_model%20%3D%20cp_model.CpModel()%0A%0A%20%20%20%20%23%20Creates%20the%20variables.%0A%20%20%20%20_num_vals%20%3D%203%0A%20%20%20%20_x%20%3D%20_model.new_int_var(0%2C%20_num_vals%20-%201%2C%20'x')%0A%20%20%20%20_y%20%3D%20_model.new_int_var(0%2C%20_num_vals%20-%201%2C%20'y')%0A%20%20%20%20_z%20%3D%20_model.new_int_var(0%2C%20_num_vals%20-%201%2C%20'z')%0A%0A%20%20%20%20%23%20Create%20the%20constraints.%0A%20%20%20%20_model.add(_x%20!%3D%20_y)%0A%0A%20%20%20%20%23%20Create%20a%20solver%20and%20solve.%0A%20%20%20%20_solver%20%3D%20cp_model.CpSolver()%0A%20%20%20%20_solution_printer%20%3D%20VarArraySolutionPrinter(%5B_x%2C%20_y%2C%20_z%5D)%0A%20%20%20%20_solver.parameters.enumerate_all_solutions%20%3D%20True%0A%20%20%20%20_status%20%3D%20_solver.solve(_model%2C%20_solution_printer)%0A%0A%20%20%20%20print('Status%20%3D%20%25s'%20%25%20_solver.StatusName(_status))%0A%20%20%20%20print(f'Number%20of%20solutions%20found%3A%20%7B_solution_printer.solution_count%7D')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20%E4%BE%8B%E9%A1%8C%3A%20%E8%A6%86%E9%9D%A2%E7%AE%97%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%E5%90%84%E6%96%87%E5%AD%97%E3%81%AB%20%240%24%20%E3%81%8B%E3%82%89%20%249%24%20%E3%81%AE%E6%95%B0%E5%AD%97%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E7%AD%89%E5%BC%8F%20%24SEND%2BMORE%3DMONEY%24%20%E3%82%92%E6%88%90%E7%AB%8B%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84.%20%0A%20%20%20%20%20%20%20%20%E3%81%9F%E3%81%A0%E3%81%97%2C%20%E6%95%B0%E5%AD%97%E3%81%AB%E9%87%8D%E8%A4%87%E3%81%8C%E3%81%82%E3%81%A3%E3%81%A6%E3%81%AF%E3%81%AA%E3%82%89%E3%81%9A%E5%85%88%E9%A0%AD%E3%81%AE%E6%96%87%E5%AD%97%E3%81%AB%20%240%24%20%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cp_model)%3A%0A%20%20%20%20model%20%3D%20cp_model.CpModel()%0A%20%20%20%20S%20%3D%20model.new_int_var(1%2C%209%2C%20'S')%0A%20%20%20%20E%20%3D%20model.new_int_var(0%2C%209%2C%20'E')%0A%20%20%20%20N%20%3D%20model.new_int_var(0%2C%209%2C%20'N')%0A%20%20%20%20D%20%3D%20model.new_int_var(0%2C%209%2C%20'D')%0A%20%20%20%20M%20%3D%20model.new_int_var(1%2C%209%2C%20'M')%0A%20%20%20%20O%20%3D%20model.new_int_var(0%2C%209%2C%20'O')%0A%20%20%20%20R%20%3D%20model.new_int_var(0%2C%209%2C%20'R')%0A%20%20%20%20Y%20%3D%20model.new_int_var(0%2C%209%2C%20'Y')%0A%20%20%20%20model.add(1000%20*%20S%20%2B%20100%20*%20E%20%2B%2010%20*%20N%20%2B%20D%20%2B%201000%20*%20M%20%2B%20100%20*%20O%20%2B%2010%20*%20R%20%2B%20E%20%3D%3D%2010000%20*%20M%20%2B%201000%20*%20O%20%2B%20100%20*%20N%20%2B%2010%20*%20E%20%2B%20Y)%0A%20%20%20%20model.add_all_different(%5BS%2C%20E%2C%20N%2C%20D%2C%20M%2C%20O%2C%20R%2C%20Y%5D)%0A%20%20%20%20_solver%20%3D%20cp_model.CpSolver()%0A%20%20%20%20_status%20%3D%20_solver.solve(model)%0A%20%20%20%20if%20_status%20%3D%3D%20cp_model.OPTIMAL%3A%0A%20%20%20%20%20%20%20%20for%20_v%20in%20%5BS%2C%20E%2C%20N%2C%20D%2C%20M%2C%20O%2C%20R%2C%20Y%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(f'%7B_v%7D%20%3D%20%7B_solver.value(_v)%7D')%0A%20%20%20%20return%20D%2C%20E%2C%20M%2C%20N%2C%20O%2C%20R%2C%20S%2C%20Y%2C%20model%0A%0A%0A%40app.cell%0Adef%20_(D%2C%20E%2C%20M%2C%20N%2C%20O%2C%20R%2C%20S%2C%20VarArraySolutionPrinter%2C%20Y%2C%20cp_model%2C%20model)%3A%0A%20%20%20%20_solution_printer%20%3D%20VarArraySolutionPrinter(%5BS%2C%20E%2C%20N%2C%20D%2C%20M%2C%20O%2C%20R%2C%20Y%5D)%0A%20%20%20%20_solver%20%3D%20cp_model.CpSolver()%0A%20%20%20%20_solver.parameters.enumerate_all_solutions%20%3D%20True%0A%20%20%20%20_status%20%3D%20_solver.solve(model%2C%20_solution_printer)%0A%20%20%20%20print(f%22Status%20%3D%20%7B_solver.status_name(_status)%7D%22)%0A%20%20%20%20print(f%22Number%20of%20solutions%20found%3A%20%7B_solution_printer.solution_count%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%20%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C%3A%20%E8%A6%86%E9%9D%A2%E7%AE%97%0A%0A%20%20%20%20%20%20%20%20%E3%81%82%E3%81%A8%E3%81%A7%E3%82%84%E3%82%8D%E3%81%86...%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20%E4%BE%8B%E9%A1%8C%3A%20%E9%AD%94%E6%96%B9%E9%99%A3%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%E9%AD%94%E6%96%B9%E9%99%A3%E3%81%A8%E3%81%AF%20%24n%20%5Ctimes%20n%24%E3%81%AE%E6%AD%A3%E6%96%B9%E5%BD%A2%E3%81%AE%E6%96%B9%E9%99%A3%E3%81%AB%20%241%24%20%E3%81%8B%E3%82%89%20%24n%5E2%24%20%E3%81%BE%E3%81%A7%E3%81%AE%E6%95%B4%E6%95%B0%E3%82%921%E3%81%A4%E3%81%9A%E3%81%A4%E5%85%A5%E3%82%8C%E3%81%A6%E7%B8%A6%E3%83%BB%E6%A8%AA%E3%83%BB%E5%AF%BE%E8%A7%92%E7%B7%9A%E3%81%AE%E3%81%84%E3%81%9A%E3%82%8C%E3%81%AE%E5%88%97%E3%81%AE%E5%92%8C%E3%82%82%E5%90%8C%E3%81%98%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%82%E3%81%AE%E3%82%92%E3%81%84%E3%81%86.%20%0A%20%20%20%20%20%20%20%20(%E4%B8%80%E5%88%97%E3%81%AE%E5%92%8C%E3%81%AF%20%24n%20(n%5E2%20%2B%201)%20%2F%202%24%20%E3%81%A8%E3%81%AA%E3%82%8B)%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cp_model)%3A%0A%20%20%20%20_n%20%3D%2012%20%23%20n%20%3D%2012%20%E3%82%88%E3%82%8A%E5%A4%A7%E3%81%8D%E3%81%84%E5%80%A4%E3%81%A7%E8%A9%A6%E3%81%95%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8(%E5%88%A5%E3%81%AB%E8%A9%A6%E3%81%97%E3%81%A6%E3%82%82%E5%95%8F%E9%A1%8C%E3%81%AF%E3%81%AA%E3%81%84)%0A%20%20%20%20_model%20%3D%20cp_model.CpModel()%0A%20%20%20%20_x%20%3D%20%7B%7D%0A%20%20%20%20for%20_i%20in%20range(_n)%3A%0A%20%20%20%20%20%20%20%20for%20_j%20in%20range(_n)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_x%5B_i%2C%20_j%5D%20%3D%20_model.new_int_var(1%2C%20_n%20*%20_n%2C%20f'x(%7B_i%7D%2C%7B_j%7D)')%0A%20%20%20%20_x_list%20%3D%20%5B_x%5B_i%2C%20_j%5D%20for%20_i%20in%20range(_n)%20for%20_j%20in%20range(_n)%5D%0A%20%20%20%20_model.add_all_different(_x_list)%0A%20%20%20%20_s%20%3D%20_n%20*%20(_n%20**%202%20%2B%201)%20%2F%2F%202%0A%20%20%20%20for%20_i%20in%20range(_n)%3A%0A%20%20%20%20%20%20%20%20_model.add(sum(%5B_x%5B_i%2C%20_j%5D%20for%20_j%20in%20range(_n)%5D)%20%3D%3D%20_s)%0A%20%20%20%20for%20_j%20in%20range(_n)%3A%0A%20%20%20%20%20%20%20%20_model.add(sum(%5B_x%5B_i%2C%20_j%5D%20for%20_i%20in%20range(_n)%5D)%20%3D%3D%20_s)%0A%20%20%20%20_model.add(sum(%5B_x%5B_i%2C%20_i%5D%20for%20_i%20in%20range(_n)%5D)%20%3D%3D%20_s)%0A%20%20%20%20_model.add(sum(%5B_x%5B_i%2C%20_n%20-%20_i%20-%201%5D%20for%20_i%20in%20range(_n)%5D)%20%3D%3D%20_s)%0A%20%20%20%20_solver%20%3D%20cp_model.CpSolver()%0A%20%20%20%20_status%20%3D%20_solver.solve(_model)%0A%20%20%20%20for%20_i%20in%20range(_n)%3A%0A%20%20%20%20%20%20%20%20for%20_j%20in%20range(_n)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(_solver.value(_x%5B_i%2C%20_j%5D)%2C%20end%3D'%20')%0A%20%20%20%20%20%20%20%20print()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%20%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C%3A%20%E5%AE%8C%E5%85%A8%E6%96%B9%E9%99%A3%0A%0A%20%20%20%20%20%20%20%20%E3%81%82%E3%81%A8%E3%81%A7%E3%82%84%E3%82%8D%E3%81%86...%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20%E4%BE%8B%E9%A1%8C%3A%20%E6%95%B0%E7%8B%AC%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%E6%95%B0%E7%8B%AC%E3%81%AF%20%249%20%5Ctimes%209%24%20%E3%81%AE%E6%AD%A3%E6%96%B9%E5%BD%A2%E3%81%AE%E6%9E%A0%E5%86%85%E3%81%AB%20%241%24%20%E3%81%8B%E3%82%89%20%24n%24%20%E3%81%BE%E3%81%A7%E3%81%AE%E6%95%B0%E5%AD%97%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B%E3%83%91%E3%82%BA%E3%83%AB%E3%81%A7%E3%81%82%E3%82%8B.%20%0A%20%20%20%20%20%20%20%20%E5%88%9D%E6%9C%9F%E9%85%8D%E7%BD%AE%E3%81%AB%E4%B8%8E%E3%81%88%E3%82%89%E3%82%8C%E3%81%9F%E6%95%B0%E5%AD%97%E3%81%AF%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A8%E3%81%97%2C%20%E7%B8%A6%E3%83%BB%E6%A8%AA%E3%81%AE%E5%90%84%E5%88%97%E3%81%A8%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%A8%E3%82%88%E3%81%B0%E3%82%8C%E3%82%8B%20%243%20%5Ctimes%203%24%20%E3%81%AE%E5%B0%8F%E6%AD%A3%E6%96%B9%E5%BD%A2%E3%81%AE%E6%9E%A0%E5%86%85%E3%81%AB%E3%81%AF%E5%90%8C%E3%81%98%E6%95%B0%E5%AD%97%E3%82%92%E9%87%8D%E8%A4%87%E3%81%97%E3%81%A6%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E3%82%82%E3%81%AE%E3%81%A8%E3%81%99%E3%82%8B.%20%0A%0A%20%20%20%20%20%20%20%20%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E3%81%AF%2C%20%E6%95%B0%E5%AD%97%E3%81%AE%20%240%24%20%E3%81%8C%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E6%9E%A0%E3%81%AF%E7%A9%BA%E7%99%BD%E3%81%A7%E3%81%82%E3%82%8B%E3%81%A8%E3%81%99%E3%82%8B.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cp_model)%3A%0A%20%20%20%20import%20math%0A%20%20%20%20_problem%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%5B1%2C%200%2C%200%2C%200%2C%200%2C%207%2C%200%2C%209%2C%200%5D%2C%0A%20%20%20%20%20%20%20%20%5B0%2C%203%2C%200%2C%200%2C%202%2C%200%2C%200%2C%200%2C%208%5D%2C%0A%20%20%20%20%20%20%20%20%5B0%2C%200%2C%209%2C%206%2C%200%2C%200%2C%205%2C%200%2C%200%5D%2C%0A%20%20%20%20%20%20%20%20%5B0%2C%200%2C%205%2C%203%2C%200%2C%200%2C%209%2C%200%2C%200%5D%2C%0A%20%20%20%20%20%20%20%20%5B0%2C%201%2C%200%2C%200%2C%208%2C%200%2C%200%2C%200%2C%202%5D%2C%0A%20%20%20%20%20%20%20%20%5B6%2C%200%2C%200%2C%200%2C%200%2C%204%2C%200%2C%200%2C%200%5D%2C%0A%20%20%20%20%20%20%20%20%5B3%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%200%5D%2C%0A%20%20%20%20%20%20%20%20%5B0%2C%204%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%207%5D%2C%0A%20%20%20%20%20%20%20%20%5B0%2C%200%2C%207%2C%200%2C%200%2C%200%2C%203%2C%200%2C%200%5D%0A%20%20%20%20%5D%0A%20%20%20%20model_sudoku%20%3D%20cp_model.CpModel()%0A%20%20%20%20_n%20%3D%20len(_problem)%0A%20%20%20%20_cell_size%20%3D%20math.ceil(math.sqrt(_n))%0A%20%20%20%20_line_size%20%3D%20_cell_size%20**%202%0A%20%20%20%20line%20%3D%20range(0%2C%20_line_size)%0A%20%20%20%20_cell%20%3D%20range(0%2C%20_cell_size)%0A%20%20%20%20x%20%3D%20%7B%7D%0A%20%20%20%20for%20_i%20in%20line%3A%0A%20%20%20%20%20%20%20%20for%20_j%20in%20line%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x%5B_i%2C%20_j%5D%20%3D%20model_sudoku.new_int_var(1%2C%20_line_size%2C%20f'x(%7B_i%7D%2C%7B_j%7D)')%0A%20%20%20%20for%20_i%20in%20line%3A%0A%20%20%20%20%20%20%20%20model_sudoku.add_all_different(%5Bx%5B_i%2C%20_j%5D%20for%20_j%20in%20line%5D)%0A%20%20%20%20for%20_j%20in%20line%3A%0A%20%20%20%20%20%20%20%20model_sudoku.add_all_different(%5Bx%5B_i%2C%20_j%5D%20for%20_i%20in%20line%5D)%0A%20%20%20%20for%20_i%20in%20_cell%3A%0A%20%20%20%20%20%20%20%20for%20_j%20in%20_cell%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_one_cell%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20_di%20in%20_cell%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20_dj%20in%20_cell%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_one_cell.append(x%5B_i%20*%20_cell_size%20%2B%20_di%2C%20_j%20*%20_cell_size%20%2B%20_dj%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20model_sudoku.add_all_different(_one_cell)%0A%20%20%20%20for%20_i%20in%20line%3A%0A%20%20%20%20%20%20%20%20for%20_j%20in%20line%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20_problem%5B_i%5D%5B_j%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20model_sudoku.add(x%5B_i%2C%20_j%5D%20%3D%3D%20_problem%5B_i%5D%5B_j%5D)%0A%20%20%20%20_solver%20%3D%20cp_model.CpSolver()%0A%20%20%20%20_status%20%3D%20_solver.solve(model_sudoku)%0A%20%20%20%20for%20_i%20in%20line%3A%0A%20%20%20%20%20%20%20%20for%20_j%20in%20line%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(_solver.value(x%5B_i%2C%20_j%5D)%2C%20end%3D'%20')%0A%20%20%20%20%20%20%20%20print()%0A%20%20%20%20return%20line%2C%20math%2C%20model_sudoku%2C%20x%0A%0A%0A%40app.cell%0Adef%20_(VarArraySolutionPrinter%2C%20cp_model%2C%20line%2C%20model_sudoku%2C%20x)%3A%0A%20%20%20%20_solver%20%3D%20cp_model.CpSolver()%0A%20%20%20%20_solution_printer%20%3D%20VarArraySolutionPrinter(%5Bx%5B_i%2C%20_j%5D%20for%20_i%20in%20line%20for%20_j%20in%20line%5D)%0A%20%20%20%20_solver.parameters.enumerate_all_solutions%20%3D%20True%0A%20%20%20%20_status%20%3D%20_solver.solve(model_sudoku%2C%20_solution_printer)%0A%20%20%20%20print('Status%20%3D%20%25s'%20%25%20_solver.status_name(_status))%0A%20%20%20%20print('Number%20of%20solutions%20found%3A%20%25i'%20%25%20_solution_printer.solution_count)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%20%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C%3A%20%E6%95%B0%E7%8B%AC%0A%0A%20%20%20%20%20%20%20%20%E6%B0%97%E3%81%8C%E5%90%91%E3%81%84%E3%81%9F%E3%82%89%E3%82%84%E3%82%8B...%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%20%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C%3A%20%E4%B8%8D%E7%AD%89%E5%BC%8F%E3%83%91%E3%82%BA%E3%83%AB%0A%0A%20%20%20%20%20%20%20%20%E3%82%84%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
04e7568f3c635900d5ffe9f26505cfc01a2b3546fcbae7e1e6ee1158629d1c9e