{"id":86950,"date":"2021-05-07T12:26:29","date_gmt":"2021-05-07T16:26:29","guid":{"rendered":"https:\/\/ibkrcampus.com\/?p=86950"},"modified":"2022-11-21T09:47:27","modified_gmt":"2022-11-21T14:47:27","slug":"how-to-solve-sudoku-with-r-open-source-automation","status":"publish","type":"post","link":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/","title":{"rendered":"How to Solve Sudoku with R &#8211; Open Source Automation"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In this post we discuss how to write an R script to solve any&nbsp;<a href=\"https:\/\/www.websudoku.com\/\">Sudoku puzzle<\/a>. There are some R packages to handle this, but in our case, we\u2019ll write our own solution. For our purposes, we\u2019ll assume the input Sudoku is a 9\u00d79 grid. At the end result, each row, column, and 3\u00d73 box needs to contain exactly one of each integer 1 through 9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><a href=\"https:\/\/365datascience.pxf.io\/c\/2398727\/791349\/11148\">Learn more about data science by checking out the great curriculum at 365 Data Science!<\/a><\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-0-define-a-sample-board\"><strong>Step 0) Define a sample board<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s define a sample Sudoku board for testing. Empty cells will be represented as zeroes.<\/p>\n\n\n\n<p style=\"background-color:#fcfcdb;font-size:11px\" class=\"has-background\"> \nboard <- matrix(<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c(0,0,0,0,0,6,0,0,0,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,9,5,7,0,0,3,0,0,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4,0,0,0,9,2,0,0,5,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7,6,4,0,0,0,0,0,3,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,0,0,0,0,0,0,0,0,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2,0,0,0,0,0,9,7,1,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5,0,0,2,1,0,0,0,9,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,0,7,0,0,5,4,8,0,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,0,0,8,0,0,0,0,0),<br><br>\n          \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byrow = T,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncol = 9<br>\n)\n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"606\" height=\"266\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2021\/05\/sample-sudoku-board-the-automatic-net-1.png\" alt=\"\" class=\"wp-image-86958 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/05\/sample-sudoku-board-the-automatic-net-1.png 606w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/05\/sample-sudoku-board-the-automatic-net-1-300x132.png 300w\" data-sizes=\"(max-width: 606px) 100vw, 606px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 606px; aspect-ratio: 606\/266;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 1) Find the empty cells<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the first step, let\u2019s write a function that will find all of the empty cells on the board.<\/p>\n\n\n\n<p style=\"background-color:#fcfcdb;font-size:11px\" class=\"has-background\"> \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find_empty_cells <- function(board) {<br><br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; which(board == 0, arr.ind = TRUE)<br><br>\n   \n}\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 2) Make sure cell placement is valid<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Next, we need a function that will check if a cell placement is valid. In other words, if we try putting a number into a particular cell, we need to ensure that the number appears only once in that row, column, and box. Otherwise, the placement would not be valid.<\/p>\n\n\n\n<p style=\"background-color:#fcfcdb;font-size:11px\" class=\"has-background\"> \nis_valid <- function(board, num, row, col) {<br><br>\n \n&nbsp;&nbsp;&nbsp;&nbsp;# Check if any cell in the same row has value = num<br>\n&nbsp;&nbsp;&nbsp;&nbsp;if(any(board[row, ] == num)) {<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(FALSE)<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;# Check if any cell in the same column has value = num<br>\n&nbsp;&nbsp;&nbsp;&nbsp;if(any(board[, col] == num)) {<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(FALSE)<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;# Get cells in num&#8217;s box<br>\n&nbsp;&nbsp;&nbsp;&nbsp;box_x <- floor((row - 1) \/ 3) + 1<br>\n&nbsp;&nbsp;&nbsp;&nbsp;box_y <- floor((col - 1) \/ 3) + 1<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;# Get subset of matrix containing num&#8217;s box<br>\n&nbsp;&nbsp;&nbsp;&nbsp;box <- board[(3 * box_x - 2):(3 * box_x), (3 * box_y - 2):(3 * box_y)]<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;# Check if the number appears elsewhere in its box<br>\n&nbsp;&nbsp;&nbsp;&nbsp;if(any(box == num)) {<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(FALSE)<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(TRUE)<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;}<br>\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 3) Recursively solve the Sudoku<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the third step, we write our function to solve the Sudoku. This function will return\u00a0<strong>TRUE<\/strong>\u00a0if the input Sudoku is solvable. Otherwise, it will return\u00a0<strong>FALSE<\/strong>. The final result will be stored in a separate variable.<\/p>\n\n\n\n<p style=\"background-color:#fcfcdb;font-size:11px\" class=\"has-background\"> \nsolve_sudoku <- function(board, needed_cells = NULL, index = 1) {<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;# Find all empty cells<br>\n&nbsp;&nbsp;&nbsp;&nbsp;if(is.null(needed_cells)) <br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;needed_cells <- find_empty_cells(board)<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;if(index > nrow(needed_cells)) {<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set result equal to current value of board<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# and return TRUE<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result <<- board<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(TRUE)<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;} else {<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row <- needed_cells[index, 1]<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col <- needed_cells[index, 2]<br>\n&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;# Solve the Sudoku<br>\n&nbsp;&nbsp;&nbsp;&nbsp;for(num in 1:9) {<br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for valid answers<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!is_valid(board, num, row, col)) {next} else{<br>\n \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;board2 = board<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;board2[row, col] <- num<br><br>\n       \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Retest with input<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(solve_sudoku(board2, needed_cells, index + 1)) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(TRUE)<br><br>\n         \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>\n       \n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>\n     \n&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>\n   \n&nbsp;&nbsp;&nbsp;&nbsp;# If not solvable, return FALSE<br>\n&nbsp;&nbsp;&nbsp;&nbsp;return(FALSE)<br><br>\n   \n}\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Calling the Sudoku solver<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lastly, we call our Sudoku solver. The result is stored in the variable \u201cresult\u201d, as can be seen below.<\/p>\n\n\n\n<p style=\"background-color:#fcfcdb;font-size:11px\" class=\"has-background\"> \nsolve_sudoku(board)\n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"638\" height=\"266\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2021\/05\/sample-sudoku-board-the-automatic-net-2.png\" alt=\"\" class=\"wp-image-86970 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/05\/sample-sudoku-board-the-automatic-net-2.png 638w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/05\/sample-sudoku-board-the-automatic-net-2-300x125.png 300w\" data-sizes=\"(max-width: 638px) 100vw, 638px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 638px; aspect-ratio: 638\/266;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s it for this post! If you enjoyed reading this and want to learn more about R or Python, check out the great data science program at&nbsp;<a href=\"https:\/\/365datascience.pxf.io\/c\/2398727\/791349\/11148\">365 Data Science<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Visit <strong>TheAutomatic.net<\/strong> for additional insight on this topic: <a href=\"https:\/\/theautomatic.net\/2020\/11\/25\/how-to-solve-sudoku-with-r\/\">https:\/\/theautomatic.net\/2020\/11\/25\/how-to-solve-sudoku-with-r\/<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Andrew Treadway shows us how to write our own solution in R to solve a Sudoku puzzle as a 9\u00d79 grid.<\/p>\n","protected":false},"author":388,"featured_media":80184,"comment_status":"closed","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[339,343,338,341,352,344,342],"tags":[806,487,6591,508],"contributors-categories":[13695],"class_list":["post-86950","post","type-post","status-publish","format-standard","has-post-thumbnail","category-data-science","category-programing-languages","category-ibkr-quant-news","category-quant-development","category-quant-north-america","category-quant-regions","category-r-development","tag-data-science","tag-r","tag-rstats","tag-rstudio","contributors-categories-theautomatic-net"],"pp_statuses_selecting_workflow":false,"pp_workflow_action":"current","pp_status_selection":"publish","acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to Solve Sudoku with R &#8211; Open Source Automation<\/title>\n<meta name=\"description\" content=\"Andrew Treadway shows us how to write our own solution in R to solve a Sudoku puzzle as a 9\u00d79 grid.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.interactivebrokers.com\/campus\/wp-json\/wp\/v2\/posts\/86950\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Solve Sudoku with R - Open Source Automation | IBKR Quant Blog\" \/>\n<meta property=\"og:description\" content=\"Andrew Treadway shows us how to write our own solution in R to solve a Sudoku puzzle as a 9\u00d79 grid.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/\" \/>\n<meta property=\"og:site_name\" content=\"IBKR Campus US\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-07T16:26:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-21T14:47:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/03\/R-programing.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"550\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Andrew Treadway\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrew Treadway\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\n\t    \"@context\": \"https:\\\/\\\/schema.org\",\n\t    \"@graph\": [\n\t        {\n\t            \"@type\": \"NewsArticle\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/#article\",\n\t            \"isPartOf\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/\"\n\t            },\n\t            \"author\": {\n\t                \"name\": \"Andrew Treadway\",\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/person\\\/d4018570a16fb867f1c08412fc9c64bc\"\n\t            },\n\t            \"headline\": \"How to Solve Sudoku with R &#8211; Open Source Automation\",\n\t            \"datePublished\": \"2021-05-07T16:26:29+00:00\",\n\t            \"dateModified\": \"2022-11-21T14:47:27+00:00\",\n\t            \"mainEntityOfPage\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/\"\n\t            },\n\t            \"wordCount\": 111,\n\t            \"publisher\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/#primaryimage\"\n\t            },\n\t            \"thumbnailUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/03\\\/R-programing.jpg\",\n\t            \"keywords\": [\n\t                \"Data Science\",\n\t                \"R\",\n\t                \"rstats\",\n\t                \"RStudio\"\n\t            ],\n\t            \"articleSection\": [\n\t                \"Data Science\",\n\t                \"Programming Languages\",\n\t                \"Quant\",\n\t                \"Quant Development\",\n\t                \"Quant North America\",\n\t                \"Quant Regions\",\n\t                \"R Development\"\n\t            ],\n\t            \"inLanguage\": \"en-US\"\n\t        },\n\t        {\n\t            \"@type\": \"WebPage\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/\",\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/\",\n\t            \"name\": \"How to Solve Sudoku with R - Open Source Automation | IBKR Quant Blog\",\n\t            \"isPartOf\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#website\"\n\t            },\n\t            \"primaryImageOfPage\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/#primaryimage\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/#primaryimage\"\n\t            },\n\t            \"thumbnailUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/03\\\/R-programing.jpg\",\n\t            \"datePublished\": \"2021-05-07T16:26:29+00:00\",\n\t            \"dateModified\": \"2022-11-21T14:47:27+00:00\",\n\t            \"description\": \"Andrew Treadway shows us how to write our own solution in R to solve a Sudoku puzzle as a 9\u00d79 grid.\",\n\t            \"inLanguage\": \"en-US\",\n\t            \"potentialAction\": [\n\t                {\n\t                    \"@type\": \"ReadAction\",\n\t                    \"target\": [\n\t                        \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/\"\n\t                    ]\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"@type\": \"ImageObject\",\n\t            \"inLanguage\": \"en-US\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/how-to-solve-sudoku-with-r-open-source-automation\\\/#primaryimage\",\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/03\\\/R-programing.jpg\",\n\t            \"contentUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/03\\\/R-programing.jpg\",\n\t            \"width\": 900,\n\t            \"height\": 550,\n\t            \"caption\": \"R Programming\"\n\t        },\n\t        {\n\t            \"@type\": \"WebSite\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#website\",\n\t            \"url\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/\",\n\t            \"name\": \"IBKR Campus US\",\n\t            \"description\": \"Financial Education from Interactive Brokers\",\n\t            \"publisher\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\"\n\t            },\n\t            \"potentialAction\": [\n\t                {\n\t                    \"@type\": \"SearchAction\",\n\t                    \"target\": {\n\t                        \"@type\": \"EntryPoint\",\n\t                        \"urlTemplate\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/?s={search_term_string}\"\n\t                    },\n\t                    \"query-input\": {\n\t                        \"@type\": \"PropertyValueSpecification\",\n\t                        \"valueRequired\": true,\n\t                        \"valueName\": \"search_term_string\"\n\t                    }\n\t                }\n\t            ],\n\t            \"inLanguage\": \"en-US\"\n\t        },\n\t        {\n\t            \"@type\": \"Organization\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\",\n\t            \"name\": \"Interactive Brokers\",\n\t            \"alternateName\": \"IBKR\",\n\t            \"url\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/\",\n\t            \"logo\": {\n\t                \"@type\": \"ImageObject\",\n\t                \"inLanguage\": \"en-US\",\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/logo\\\/image\\\/\",\n\t                \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/05\\\/ibkr-campus-logo.jpg\",\n\t                \"contentUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/05\\\/ibkr-campus-logo.jpg\",\n\t                \"width\": 669,\n\t                \"height\": 669,\n\t                \"caption\": \"Interactive Brokers\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/logo\\\/image\\\/\"\n\t            },\n\t            \"publishingPrinciples\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/about-ibkr-campus\\\/\",\n\t            \"ethicsPolicy\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/cyber-security-notice\\\/\"\n\t        },\n\t        {\n\t            \"@type\": \"Person\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/person\\\/d4018570a16fb867f1c08412fc9c64bc\",\n\t            \"name\": \"Andrew Treadway\",\n\t            \"description\": \"Andrew Treadway currently works as a Senior Data Scientist, and has experience doing analytics, software automation, and ETL. He completed a master\u2019s degree in computer science \\\/ machine learning, and an undergraduate degree in pure mathematics. Connect with him on LinkedIn: https:\\\/\\\/www.linkedin.com\\\/in\\\/andrew-treadway-a3b19b103\\\/In addition to TheAutomatic.net blog, he also teaches in-person courses on Python and R through my NYC meetup: more details.\",\n\t            \"sameAs\": [\n\t                \"https:\\\/\\\/theautomatic.net\\\/about-me\\\/\"\n\t            ],\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/author\\\/andrewtreadway\\\/\"\n\t        }\n\t    ]\n\t}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Solve Sudoku with R &#8211; Open Source Automation","description":"Andrew Treadway shows us how to write our own solution in R to solve a Sudoku puzzle as a 9\u00d79 grid.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.interactivebrokers.com\/campus\/wp-json\/wp\/v2\/posts\/86950\/","og_locale":"en_US","og_type":"article","og_title":"How to Solve Sudoku with R - Open Source Automation | IBKR Quant Blog","og_description":"Andrew Treadway shows us how to write our own solution in R to solve a Sudoku puzzle as a 9\u00d79 grid.","og_url":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/","og_site_name":"IBKR Campus US","article_published_time":"2021-05-07T16:26:29+00:00","article_modified_time":"2022-11-21T14:47:27+00:00","og_image":[{"width":900,"height":550,"url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/03\/R-programing.jpg","type":"image\/jpeg"}],"author":"Andrew Treadway","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Andrew Treadway","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/#article","isPartOf":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/"},"author":{"name":"Andrew Treadway","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/person\/d4018570a16fb867f1c08412fc9c64bc"},"headline":"How to Solve Sudoku with R &#8211; Open Source Automation","datePublished":"2021-05-07T16:26:29+00:00","dateModified":"2022-11-21T14:47:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/"},"wordCount":111,"publisher":{"@id":"https:\/\/ibkrcampus.com\/campus\/#organization"},"image":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/03\/R-programing.jpg","keywords":["Data Science","R","rstats","RStudio"],"articleSection":["Data Science","Programming Languages","Quant","Quant Development","Quant North America","Quant Regions","R Development"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/","url":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/","name":"How to Solve Sudoku with R - Open Source Automation | IBKR Quant Blog","isPartOf":{"@id":"https:\/\/ibkrcampus.com\/campus\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/#primaryimage"},"image":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/03\/R-programing.jpg","datePublished":"2021-05-07T16:26:29+00:00","dateModified":"2022-11-21T14:47:27+00:00","description":"Andrew Treadway shows us how to write our own solution in R to solve a Sudoku puzzle as a 9\u00d79 grid.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/how-to-solve-sudoku-with-r-open-source-automation\/#primaryimage","url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/03\/R-programing.jpg","contentUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/03\/R-programing.jpg","width":900,"height":550,"caption":"R Programming"},{"@type":"WebSite","@id":"https:\/\/ibkrcampus.com\/campus\/#website","url":"https:\/\/ibkrcampus.com\/campus\/","name":"IBKR Campus US","description":"Financial Education from Interactive Brokers","publisher":{"@id":"https:\/\/ibkrcampus.com\/campus\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ibkrcampus.com\/campus\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ibkrcampus.com\/campus\/#organization","name":"Interactive Brokers","alternateName":"IBKR","url":"https:\/\/ibkrcampus.com\/campus\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/logo\/image\/","url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2024\/05\/ibkr-campus-logo.jpg","contentUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2024\/05\/ibkr-campus-logo.jpg","width":669,"height":669,"caption":"Interactive Brokers"},"image":{"@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/logo\/image\/"},"publishingPrinciples":"https:\/\/www.interactivebrokers.com\/campus\/about-ibkr-campus\/","ethicsPolicy":"https:\/\/www.interactivebrokers.com\/campus\/cyber-security-notice\/"},{"@type":"Person","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/person\/d4018570a16fb867f1c08412fc9c64bc","name":"Andrew Treadway","description":"Andrew Treadway currently works as a Senior Data Scientist, and has experience doing analytics, software automation, and ETL. He completed a master\u2019s degree in computer science \/ machine learning, and an undergraduate degree in pure mathematics. Connect with him on LinkedIn: https:\/\/www.linkedin.com\/in\/andrew-treadway-a3b19b103\/In addition to TheAutomatic.net blog, he also teaches in-person courses on Python and R through my NYC meetup: more details.","sameAs":["https:\/\/theautomatic.net\/about-me\/"],"url":"https:\/\/www.interactivebrokers.com\/campus\/author\/andrewtreadway\/"}]}},"jetpack_featured_media_url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/03\/R-programing.jpg","_links":{"self":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts\/86950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/users\/388"}],"replies":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/comments?post=86950"}],"version-history":[{"count":0,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts\/86950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/media\/80184"}],"wp:attachment":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/media?parent=86950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/categories?post=86950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/tags?post=86950"},{"taxonomy":"contributors-categories","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/contributors-categories?post=86950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}