diff --git a/README.md b/README.md index 98f600f..51a97a7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MariaDB Jupyter Kernel -[![badge](https://img.shields.io/badge/Try%20MariaDB-@%20binder-579ACA.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/MariaDB/mariadb_kernel.git/master?urlpath=lab/tree/binder/try_it_out.ipynb) +[![badge](https://img.shields.io/badge/Try%20MariaDB-@%20binder-579ACA.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFkAAABZCAMAAABi1XidAAAB8lBMVEX///9XmsrmZYH1olJXmsr1olJXmsrmZYH1olJXmsr1olJXmsrmZYH1olL1olJXmsr1olJXmsrmZYH1olL1olJXmsrmZYH1olJXmsr1olL1olJXmsrmZYH1olL1olJXmsrmZYH1olL1olL0nFf1olJXmsrmZYH1olJXmsq8dZb1olJXmsrmZYH1olJXmspXmspXmsr1olL1olJXmsrmZYH1olJXmsr1olL1olJXmsrmZYH1olL1olLeaIVXmsrmZYH1olL1olL1olJXmsrmZYH1olLna31Xmsr1olJXmsr1olJXmsrmZYH1olLqoVr1olJXmsr1olJXmsrmZYH1olL1olKkfaPobXvviGabgadXmsqThKuofKHmZ4Dobnr1olJXmsr1olJXmspXmsr1olJXmsrfZ4TuhWn1olL1olJXmsqBi7X1olJXmspZmslbmMhbmsdemsVfl8ZgmsNim8Jpk8F0m7R4m7F5nLB6jbh7jbiDirOEibOGnKaMhq+PnaCVg6qWg6qegKaff6WhnpKofKGtnomxeZy3noG6dZi+n3vCcpPDcpPGn3bLb4/Mb47UbIrVa4rYoGjdaIbeaIXhoWHmZYHobXvpcHjqdHXreHLroVrsfG/uhGnuh2bwj2Hxk17yl1vzmljzm1j0nlX1olL3AJXWAAAAbXRSTlMAEBAQHx8gICAuLjAwMDw9PUBAQEpQUFBXV1hgYGBkcHBwcXl8gICAgoiIkJCQlJicnJ2goKCmqK+wsLC4usDAwMjP0NDQ1NbW3Nzg4ODi5+3v8PDw8/T09PX29vb39/f5+fr7+/z8/Pz9/v7+zczCxgAABC5JREFUeAHN1ul3k0UUBvCb1CTVpmpaitAGSLSpSuKCLWpbTKNJFGlcSMAFF63iUmRccNG6gLbuxkXU66JAUef/9LSpmXnyLr3T5AO/rzl5zj137p136BISy44fKJXuGN/d19PUfYeO67Znqtf2KH33Id1psXoFdW30sPZ1sMvs2D060AHqws4FHeJojLZqnw53cmfvg+XR8mC0OEjuxrXEkX5ydeVJLVIlV0e10PXk5k7dYeHu7Cj1j+49uKg7uLU61tGLw1lq27ugQYlclHC4bgv7VQ+TAyj5Zc/UjsPvs1sd5cWryWObtvWT2EPa4rtnWW3JkpjggEpbOsPr7F7EyNewtpBIslA7p43HCsnwooXTEc3UmPmCNn5lrqTJxy6nRmcavGZVt/3Da2pD5NHvsOHJCrdc1G2r3DITpU7yic7w/7Rxnjc0kt5GC4djiv2Sz3Fb2iEZg41/ddsFDoyuYrIkmFehz0HR2thPgQqMyQYb2OtB0WxsZ3BeG3+wpRb1vzl2UYBog8FfGhttFKjtAclnZYrRo9ryG9uG/FZQU4AEg8ZE9LjGMzTmqKXPLnlWVnIlQQTvxJf8ip7VgjZjyVPrjw1te5otM7RmP7xm+sK2Gv9I8Gi++BRbEkR9EBw8zRUcKxwp73xkaLiqQb+kGduJTNHG72zcW9LoJgqQxpP3/Tj//c3yB0tqzaml05/+orHLksVO+95kX7/7qgJvnjlrfr2Ggsyx0eoy9uPzN5SPd86aXggOsEKW2Prz7du3VID3/tzs/sSRs2w7ovVHKtjrX2pd7ZMlTxAYfBAL9jiDwfLkq55Tm7ifhMlTGPyCAs7RFRhn47JnlcB9RM5T97ASuZXIcVNuUDIndpDbdsfrqsOppeXl5Y+XVKdjFCTh+zGaVuj0d9zy05PPK3QzBamxdwtTCrzyg/2Rvf2EstUjordGwa/kx9mSJLr8mLLtCW8HHGJc2R5hS219IiF6PnTusOqcMl57gm0Z8kanKMAQg0qSyuZfn7zItsbGyO9QlnxY0eCuD1XL2ys/MsrQhltE7Ug0uFOzufJFE2PxBo/YAx8XPPdDwWN0MrDRYIZF0mSMKCNHgaIVFoBbNoLJ7tEQDKxGF0kcLQimojCZopv0OkNOyWCCg9XMVAi7ARJzQdM2QUh0gmBozjc3Skg6dSBRqDGYSUOu66Zg+I2fNZs/M3/f/Grl/XnyF1Gw3VKCez0PN5IUfFLqvgUN4C0qNqYs5YhPL+aVZYDE4IpUk57oSFnJm4FyCqqOE0jhY2SMyLFoo56zyo6becOS5UVDdj7Vih0zp+tcMhwRpBeLyqtIjlJKAIZSbI8SGSF3k0pA3mR5tHuwPFoa7N7reoq2bqCsAk1HqCu5uvI1n6JuRXI+S1Mco54YmYTwcn6Aeic+kssXi8XpXC4V3t7/ADuTNKaQJdScAAAAAElFTkSuQmCC)](https://mybinder.org/v2/gh/MariaDB/mariadb_kernel.git/binder-humg-hanoi-2024?urlpath=lab/tree/binder/sudoku.ipynb) ![GitHub](https://github.com/MariaDB/mariadb_kernel/workflows/CI/badge.svg) ![badge](https://img.shields.io/badge/version-v0.2.0-yellow) diff --git a/binder/Dockerfile b/binder/Dockerfile index 363e327..5959259 100644 --- a/binder/Dockerfile +++ b/binder/Dockerfile @@ -1,4 +1,4 @@ -FROM jupyter/scipy-notebook:lab-3.1.4 +FROM jupyter/scipy-notebook:latest USER root diff --git a/binder/mariadb_config.json b/binder/mariadb_config.json index 69db5a7..a92ff82 100644 --- a/binder/mariadb_config.json +++ b/binder/mariadb_config.json @@ -3,7 +3,8 @@ "host": "localhost", "password": "", "start_server": "True", - "client_bin": "mysql", - "server_bin": "mysqld", - "db_init_bin": "mysql_install_db" + "client_bin": "mariadb", + "server_bin": "mariadbd", + "db_init_bin": "mariadb-install-db", + "extra_server_config": ["--skip-host-cache", "--skip-name-resolve"] } diff --git a/binder/sudoku.ipynb b/binder/sudoku.ipynb new file mode 100644 index 0000000..d5d8b7a --- /dev/null +++ b/binder/sudoku.ipynb @@ -0,0 +1,591 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "58e790a4-4cee-4c6b-abc4-432868c7fb06", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "id": "587fd50b-19fb-44b6-85d7-951a36e0dff0", + "metadata": {}, + "source": [ + "Based on https://www.sqlservercentral.com/articles/solve-sudoku-with-t-sql-part-1-1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ae2958a-1638-47b7-a5ff-a49906bed69f", + "metadata": {}, + "outputs": [], + "source": [ + "select version();" + ] + }, + { + "cell_type": "markdown", + "id": "d28bc38c-c136-4c8b-83b8-518236b71b68", + "metadata": {}, + "source": [ + "/* 81 long number table of row, column and block mapping */" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87bcccf1-b3ac-48dc-9162-82bde5817e32", + "metadata": {}, + "outputs": [], + "source": [ + "create table tGrid (CoordinateID int primary key, RowNum int, ColumnNum int, BlockNum int);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e86aae8b-0770-445e-b8b3-2733d5dd04be", + "metadata": {}, + "outputs": [], + "source": [ + "INSERT INTO tGrid\n", + "SELECT seq+1 AS CoordinateID,\n", + " seq div 9 +1 AS RowNum,\n", + " seq MOD 9 +1 AS ColumnNum,\n", + " (seq div 27)*3 + 1 + ((seq div 3) MOD 3) AS BlockNum\n", + "FROM seq_0_to_80;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2f44a5d-ac98-4f2f-b918-00bafeebdb73", + "metadata": {}, + "outputs": [], + "source": [ + "select * from tGrid order by CoordinateID limit 28;" + ] + }, + { + "cell_type": "markdown", + "id": "3b0c00db-4d77-43f8-a36a-de835b88649e", + "metadata": {}, + "source": [ + "Table of what we've already solved" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7badf2c-1b10-450a-a53c-456b2d5e9454", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE OR REPLACE TABLE tFixed (CoordinateID INT PRIMARY KEY, Value CHAR(1));" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ee1dd2a5-4d80-4a16-ae30-708d2ebbc8b9", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '023780460000620000060304080001000534280000097439000100010205040000036000056018370';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7153939a-1fa6-4427-a6f3-9b2ccdf5c32d", + "metadata": {}, + "outputs": [], + "source": [ + "INSERT INTO tFixed (CoordinateID, Value)\n", + "SELECT CoordinateID, SUBSTRING(@PuzzleIn, CoordinateID, 1) AS Value\n", + "FROM tGrid\n", + "WHERE SUBSTRING(@PuzzleIn, CoordinateID, 1) != '0';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9d998e48-0760-43af-84ec-738bed530d75", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE OR REPLACE TABLE tOption (CoordinateID INT, Value INT, Key (CoordinateID));" + ] + }, + { + "cell_type": "markdown", + "id": "6017bb83-2b85-4a0c-8c75-12403d0bd094", + "metadata": {}, + "source": [ + "All possible values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "072a5325-5e68-4326-8295-36774adb332f", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT CoordinateID, b.seq FROM tGrid AS a CROSS JOIN seq_1_to_9 AS b;" + ] + }, + { + "cell_type": "markdown", + "id": "4cef8f14-3210-40c2-884e-d0829aa7a3f4", + "metadata": {}, + "source": [ + "All possible values, excluding known values that are fixed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "152177f2-c911-4bbc-8061-5dd114a5db69", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT CoordinateID,\n", + " b.seq\n", + "FROM tGrid AS a\n", + "LEFT JOIN tFixed f USING (CoordinateID)\n", + "CROSS JOIN seq_1_to_9 AS b\n", + "WHERE f.CoordinateID IS NULL;" + ] + }, + { + "cell_type": "markdown", + "id": "bbacd89a-bd80-4521-9119-f4d604e497ba", + "metadata": {}, + "source": [ + "Same query using subquery" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6057cd49-9efb-499f-996f-bb36de3cd0b7", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT CoordinateID,\n", + " b.seq\n", + "FROM tGrid AS a\n", + "CROSS JOIN seq_1_to_9 AS b\n", + "WHERE NOT EXISTS\n", + " (SELECT 1\n", + " FROM tFixed c\n", + " WHERE a.CoordinateID = c.CoordinateID );" + ] + }, + { + "cell_type": "markdown", + "id": "350965b8-89ed-4b0d-9112-973b915da036", + "metadata": {}, + "source": [ + "In addition to exluding the fixed values we know about, exclude same value on the same row" + ] + }, + { + "cell_type": "markdown", + "id": "00b53344-7b9e-4038-a5ed-91336679690b", + "metadata": {}, + "source": [ + "AND NOT EXISTS (\n", + " SELECT 1 FROM tFixed c\n", + " INNER JOIN tGrid d ON c.CoordinateID = d.CoordinateID\n", + " WHERE a.RowNum = d.RowNum AND b.seq = c.Value\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "581efa8a-8d20-4409-801f-7b9ee2842d04", + "metadata": {}, + "source": [ + "And same value on the same column" + ] + }, + { + "cell_type": "markdown", + "id": "8779113a-196a-4d3d-b998-e580a271c00f", + "metadata": {}, + "source": [ + "AND NOT EXISTS (\n", + " SELECT 1 FROM tFixed c\n", + " INNER JOIN tGrid d ON c.CoordinateID = d.CoordinateID\n", + " WHERE a.ColumnNum = d.ColumnNum AND b.seq = c.Value\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "db7eef0c-b27e-4341-820d-8eaf9d9aa2ed", + "metadata": {}, + "source": [ + "And same value in the same grid" + ] + }, + { + "cell_type": "markdown", + "id": "d23b147b-6b4f-4f0d-95e9-663b576a6493", + "metadata": {}, + "source": [ + "AND NOT EXISTS (\n", + " SELECT 1 FROM tFixed c\n", + " INNER JOIN tGrid d ON c.CoordinateID = d.CoordinateID\n", + " WHERE a.BlockNum = d.BlockNum AND b.seq = c.Value\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "103c5010-6155-4ee4-9e9e-275ae68ee82e", + "metadata": {}, + "source": [ + "And to this list of options append the fixed values we had" + ] + }, + { + "cell_type": "markdown", + "id": "889e8b5e-28de-460d-bb71-a5d01eefc834", + "metadata": {}, + "source": [ + "UNION\n", + "SELECT CoordinateID, Value FROM tFixed;" + ] + }, + { + "cell_type": "markdown", + "id": "ddd5b7ce-08c1-41c2-9a5c-6241ee304f49", + "metadata": {}, + "source": [ + "Resulting query" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c33e449-8c50-46d1-80b7-91948d41668c", + "metadata": {}, + "outputs": [], + "source": [ + "INSERT INTO tOption (CoordinateID, Value)\n", + "SELECT CoordinateID,\n", + " seq\n", + "FROM tGrid AS a\n", + "CROSS JOIN seq_1_to_9 AS b\n", + "WHERE NOT EXISTS\n", + " (SELECT 1\n", + " FROM tFixed c\n", + " WHERE a.CoordinateID = c.CoordinateID )\n", + " AND NOT EXISTS\n", + " (SELECT 1\n", + " FROM tFixed c\n", + " INNER JOIN tGrid d ON c.CoordinateID = d.CoordinateID\n", + " WHERE a.RowNum = d.RowNum\n", + " AND b.seq = c.Value )\n", + " AND NOT EXISTS\n", + " (SELECT 1\n", + " FROM tFixed c\n", + " INNER JOIN tGrid d ON c.CoordinateID = d.CoordinateID\n", + " WHERE a.ColumnNum = d.ColumnNum\n", + " AND b.seq = c.Value )\n", + " AND NOT EXISTS\n", + " (SELECT 1\n", + " FROM tFixed c\n", + " INNER JOIN tGrid d ON c.CoordinateID = d.CoordinateID\n", + " WHERE a.BlockNum = d.BlockNum\n", + " AND b.seq = c.Value )\n", + "UNION\n", + "SELECT CoordinateID,\n", + " Value\n", + "FROM tFixed;" + ] + }, + { + "cell_type": "markdown", + "id": "897119da-c965-4d31-94e3-c9ab7a7724d5", + "metadata": {}, + "source": [ + "Duplicates exist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "713604b2-0aa3-4387-a003-2d42217a3249", + "metadata": {}, + "outputs": [], + "source": [ + "select * from tOption order by CoordinateID limit 10;" + ] + }, + { + "cell_type": "markdown", + "id": "6eea7e88-846b-49e5-84a4-ceeb0c843445", + "metadata": {}, + "source": [ + "So with 81 Coordinates (9 x 9 grid), cross join them all. Use SQL to generate SQL" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdfa7207-1c90-4ef9-a305-9fbe0cceb6aa", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT @SelectQuery := GROUP_CONCAT(' (SELECT Value AS `',\n", + " CoordinateID,\n", + " '` FROM tOption WHERE CoordinateID = ',\n", + " CoordinateID,\n", + " ') AS `',\n", + " CoordinateID,\n", + " '`'\n", + " SEPARATOR ' CROSS JOIN ')\n", + "FROM\n", + " (SELECT DISTINCT CoordinateID\n", + " FROM tOption) AS b;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68d88531-f7b4-4399-aa9f-5eaf74d58ecb", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT @ExclusionQuery := GROUP_CONCAT('`', l.CoordinateID, '` <> `', r.CoordinateID, '`' SEPARATOR ' AND ')\n", + "FROM tGrid l\n", + "CROSS JOIN tGrid r\n", + "WHERE (l.RowNum = r.RowNum\n", + " OR l.ColumnNum = r.ColumnNum\n", + " OR l.BlockNum = r.BlockNum)\n", + " AND r.CoordinateID > l.CoordinateID;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "243b6f9b-249c-44ad-a552-cea9652dc5a5", + "metadata": {}, + "outputs": [], + "source": [ + "select @columns := group_concat('`', seq, '`' SEPARATOR ',') from seq_1_to_81;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "114d72fb-bda3-4298-8737-62c08dff8ec3", + "metadata": {}, + "outputs": [], + "source": [ + "EXECUTE IMMEDIATE concat('SELECT ROW_NUMBER() OVER (ORDER BY `1` ASC) AS SolutionID, ',\n", + " @columns,\n", + " ' FROM ( SELECT * FROM',\n", + " @SelectQuery,\n", + " ' WHERE ',\n", + " @ExclusionQuery,\n", + " ') AS x');" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "639cbb2f-6c82-44b1-9423-ccf844296a8d", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT @SelectQuery50 := GROUP_CONCAT(' (SELECT Value AS `', CoordinateID, '` FROM tOption WHERE CoordinateID = ', CoordinateID, ') AS `', CoordinateID, '`' SEPARATOR ' CROSS JOIN ')\n", + "FROM\n", + " (SELECT seq AS CoordinateID\n", + " FROM seq_1_to_50) b;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15ce1946-8da6-466d-82b5-571dc51ec74d", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT @ExclusionQuery50 := GROUP_CONCAT('`', l.CoordinateID, '` <> `', r.CoordinateID, '`' SEPARATOR ' AND ')\n", + "FROM tGrid l\n", + "CROSS JOIN tGrid r\n", + "WHERE (l.RowNum = r.RowNum\n", + " OR l.ColumnNum = r.ColumnNum\n", + " OR l.BlockNum = r.BlockNum)\n", + " AND r.CoordinateID > l.CoordinateID\n", + " AND r.CoordinateID <= 50\n", + " AND l.CoordinateID <= 50;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e455c964-29de-483d-a540-2e33d6035451", + "metadata": {}, + "outputs": [], + "source": [ + "EXECUTE IMMEDIATE concat('create or replace table tOption50( CoordinateID int, key (CoordinateID)) select * FROM ',\n", + " @SelectQuery50,\n", + " ' WHERE ',\n", + " @ExclusionQuery50);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1fb346b6-667d-4eed-8898-f89f0d6cc908", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT @SelectQuery81 := GROUP_CONCAT(' (SELECT Value AS `', CoordinateID, '` FROM tOption WHERE CoordinateID = ', CoordinateID, ') AS `', CoordinateID, '`' SEPARATOR ' CROSS JOIN ')\n", + "FROM\n", + " (SELECT seq AS CoordinateID\n", + " FROM seq_51_to_81) b;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7f1c10e-c2b4-471e-8a76-cd18b95f2559", + "metadata": {}, + "outputs": [], + "source": [ + "EXECUTE IMMEDIATE concat('SELECT ROW_NUMBER() OVER (ORDER BY `1` ASC) AS SolutionID, ',\n", + " @columns,\n", + " ' FROM ( SELECT * FROM tOption50 CROSS JOIN ',\n", + " @SelectQuery81,\n", + " ' WHERE ',\n", + " @ExclusionQuery,\n", + " ') AS x');" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0182a68a-fd32-4aac-bc7c-dc5e0f6167fc", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '023780460000620000060304080001000534280000097439000100010205040000036000056018370';\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "badf9d48-b16a-47eb-96d8-3d6d6f2790e6", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '600050002010702040000346000084000590509000207032000480000165000020407060300090004';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b4a53d3-e8b2-495d-a0ce-591ae34f9786", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '800259004040010070000407000302080506580302091607040302000504000060090020700826009';\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3f5132c-1d25-43ab-8f8c-3c7e83b3a8e1", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '703200104054019380000500000070000805060000030308000090000001000035920460407008903';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f6902e6e-97a8-4fb2-a2ac-5f0a2b68f46e", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '700200008020405070004080300060508037009000800180607020001070600050903010600004003';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e67c1aba-b63e-44cd-849f-6260b638abe9", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '000400000004063200809000503090030005040658030600010070901000804005840100000007000';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0ece6a76-40f3-4942-a137-d0ebcd7c5f96", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '007400803000206001000085700026000039004000100370000680908620000000108000630009200';\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d347850-cbca-41b1-9957-a98671e186ae", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '019600430000098000002005100098074001020000080700850620007500800000730000056001970';\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f958cb94-7ca4-47e1-a49c-45e4fcee78a3", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '280060079100007006070930080907000605008000700040000090090025060800600002650010047';" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ededf2a5-d4a3-4066-8ba9-21c91cb7b7f0", + "metadata": {}, + "outputs": [], + "source": [ + "set @PuzzleIn = '107608209840050036000000000300106004060000090200305007000000000430060052508209301';" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "MariaDB", + "language": "SQL", + "name": "mariadb_kernel" + }, + "language_info": { + "name": "" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}