Create a Sudoku Solver In Java In 20 Minutes - Full Tutorial

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 พ.ย. 2024

ความคิดเห็น • 347

  • @clo-1588
    @clo-1588 2 ปีที่แล้ว +88

    You're an excellent teacher, John. I find your videos not only extremely helpful, but impressively well-made - and it's not even so much about the format (which is ideal), but the way you teach and the examples you give. You explain things in a logical, progressive way, and you're excellent at providing the right level of exposure. I do wish there were more teachers like you in universities - but then, we might not have you on TH-cam ;) Please keep going with these tutorials, you are contributing to the community in a huge way.

  • @stormybear4986
    @stormybear4986 2 ปีที่แล้ว +9

    This was, legitimately, the most interesting java tutorial I've seen in years! EXCELLENT!!!!!

  • @19joni69
    @19joni69 2 ปีที่แล้ว +55

    Making a sudoku solver was actually the very first project I programmed once I'd learned the basics. This takes me back.

    • @yahia1355
      @yahia1355 2 ปีที่แล้ว +6

      Wow ! I have been coding for arround 5 years and could'nt come up with a solution!

    • @19joni69
      @19joni69 2 ปีที่แล้ว +5

      @@yahia1355 oh I didn't do anything smart. I literally brute forced a solution. Basically going over every single square and trying the first number that works, then if I got to one that had no possible correct number I would go back until the first square that I could have put a different number in and tried the different number. Do that until you can fill every square correctly. Just literally trying every combination until it works. There are much better ways to solve this. But the not so smart solution works.

    • @VishnuvardhanaReddyDeviReddy
      @VishnuvardhanaReddyDeviReddy 7 หลายเดือนก่อน

      @@19joni69 🤣🤣😂

  • @janekk3397
    @janekk3397 ปีที่แล้ว +3

    I'm so glad channels like this one exist. It was a part of my project and I would've never figured that out myself...

  • @jagi7976
    @jagi7976 2 ปีที่แล้ว +3

    It’s beautiful when something that’s educational is also entertaining

  • @penguin7863
    @penguin7863 2 ปีที่แล้ว +2

    Sir before I watch your video I was a student who was struggling to solve recursion problems for my upcoming test. Now I get the idea about how to backtrack in recursion :) Huge thanks from South Korean student!

  • @nikhilraov100
    @nikhilraov100 2 ปีที่แล้ว +2

    This program works perfectly. What a flawless algorithm you have written .

  • @krishnawadhwani5393
    @krishnawadhwani5393 2 ปีที่แล้ว +67

    I had recently discovered this channel, haha, and I started to watch your videos on TV Like I am watching some movies or some kind of entertainment, nice videos keep it up, subscribed after watching 2-3 videos

  • @Nikolai4567
    @Nikolai4567 2 ปีที่แล้ว +2

    I didn't think this solution would have an adequate time complexity. Thanks!

  • @mthsffc
    @mthsffc 2 ปีที่แล้ว +2

    This is exactly what I was looking for to complement my java studies. Projects with step-by-step explained.
    Please, keep it going, unfortunately here on TH-cam, everything seems to be only JavaScript or Python. It would be great more projects with OOP.

  • @wombozombo
    @wombozombo ปีที่แล้ว +2

    Fun way to learn about recursion 👍

  • @joekagerer
    @joekagerer 2 ปีที่แล้ว

    I wrote a Sudoku solver in 2008 in Javascript, but it didn't quite use full recursion (my mistake) so it wouldn't solve moderately difficult puzzles. Mine includes character recognition of uploaded websuduko puzzles. This week I added "paste from clipboard" so that I didn't have to save/load my puzzle images. Today, following your model I finally got mine solving even the "evil" puzzles. Thank You John for this great lesson. Although now I don't feel that "I wrote the code", my page works and I did right the optical character recognition parts. I don't believe that I can share a link here, but I can try.

  • @olayiwolaakinnagbe676
    @olayiwolaakinnagbe676 ปีที่แล้ว

    This is the best video I found online for this problem. You are a great teacher, thank you.

  • @jhuluan-jyun2594
    @jhuluan-jyun2594 2 ปีที่แล้ว +1

    No wonder you’re a lead! Very clear sir, thank you

  • @rajeshg3570
    @rajeshg3570 2 ปีที่แล้ว +1

    This is excellent .. i simply love the naming conventions of the vars..which makes its easy to read and understand the logic

  • @jumpwer
    @jumpwer 2 หลายเดือนก่อน

    Thanks John, I was really confused when I tried to solve questions like this based on the backtracking algo. You explain really well. Cheers :)

  • @saviobatista9619
    @saviobatista9619 2 ปีที่แล้ว +1

    Thank you! Amazing video, where I work I tried several times create something to solve our work schedule with some kind of algorithm but always fail, this was just exactly what I needed and hope to solve my needs. Thank you!

  • @mdrwsh
    @mdrwsh 2 ปีที่แล้ว +1

    it is amazing to see various algorithms that be used to solve sudoku, i made one but using while loop

  • @PathWars
    @PathWars 2 ปีที่แล้ว

    Awesome, exactly the kind of TH-cam channel I wanted:
    Regularly uploaded coding videos.

  • @JannisAdmek
    @JannisAdmek 2 ปีที่แล้ว +30

    You teaching skills are really impressive, great work! I have one minor point to critique, you hardcoded GRID_SIZE 9 but used 3 as a magic number. You could have computed it once sqrt(GRID_SIZE) or just declared it as a constant.

    • @Michael-se7ny
      @Michael-se7ny 2 ปีที่แล้ว +5

      sqrt(GRID_SIZE) would make no sense at all

    • @JannisAdmek
      @JannisAdmek 2 ปีที่แล้ว +5

      @@Michael-se7ny Really? Doesn't a Sudoku box always have side length of sqrt(GRID_SIZE)? But I guess the really clean way would be to define the sudoku in terms of the BOX_SIZE, since GRID_SIZE has to be square number.
      so a normal sudoku is BOX_SIZE = 3. (GRID_SIZE = BOX_SIZE * BOX_SIZE)

    • @p_varma17
      @p_varma17 2 ปีที่แล้ว

      @@JannisAdmek right

  • @razvanungureanu8897
    @razvanungureanu8897 ปีที่แล้ว

    I have reached the part where I didn't find a solution to erase the all the numbers of the board and to retry. I know it needed some recursion, but didn't figure out how. Your explanation was excellent and after reviewing your method, everything makes sense. Thanks and keep it up with these kind of videos!

  • @JonasKeil
    @JonasKeil 2 ปีที่แล้ว +1

    This tutorial is excellent John.

  • @michaelkraemerman2009
    @michaelkraemerman2009 2 ปีที่แล้ว +1

    This was such a good explanation!!! I feel a lot more confident about implementing this. Also thanks for not acting like this is easy/obvious👏

  • @carlostitlan
    @carlostitlan ปีที่แล้ว

    Your explanaition is soo cool! You even make feel this stuff is easy.

  • @rams2478
    @rams2478 2 ปีที่แล้ว

    WOW.. you are amazing....clean.. detailed.. explanation.
    Please do Leetcode problems also.. It will help us.

  • @techtonight882
    @techtonight882 2 ปีที่แล้ว +28

    I think we can use dynamic programming too, to reduce some of the complexity. We can use a HashMap to store if a number at particular position was a valid placement or not.

    • @kesarscorpio
      @kesarscorpio 2 ปีที่แล้ว +17

      i guess this one is for beginners and that's why he chose this way of doing it

    • @cs0576
      @cs0576 2 ปีที่แล้ว +10

      But that is dependent on the previous placements. So I do not immediately see how that improves this algorithm.

    • @smrtfasizmu6161
      @smrtfasizmu6161 2 ปีที่แล้ว

      The argument of the hashmap needs to be both the board and the placement of the number. How does backtracking in your algorithm work? I am not sure how you intended to do it with hashmaps and make the code less complex than what you saw in this video. Can you elaborate further?
      One idea popped up in my mind, but it is more or less a copy of what you saw in the video but without recursion. First you have an array which holds the position which are given in the beginning. Then, you proceed filling in the board and every time you find out that you can't continue filling in the board you backtrack the i and j variables of the loop until you reach the next number which you filled in and continue trying filling it after setting number To Try to be 1+the previous numberToTry.

    • @mr.mirror1213
      @mr.mirror1213 2 ปีที่แล้ว +1

      iirc the whole problem is a system of linear equation , and u can solve it in O(n) if u use multigrid method

  • @kunalkheeva
    @kunalkheeva 2 ปีที่แล้ว +1

    How did you make it so simple, I always appreciate your content. your content is limited on youtube but whenever I get stuck in any problem and you have a video on that, which means, my last destiny is your video. Thank you

  • @luigiq6429
    @luigiq6429 3 ปีที่แล้ว +6

    Great video John. Congrats on 500 subs!

  • @LBCreateSpace
    @LBCreateSpace 16 วันที่ผ่านมา

    This was so nice and easy to follow! Thank you so much

  • @sharadgupta8576
    @sharadgupta8576 3 ปีที่แล้ว +8

    It was just really awesome and in so nice way u described it's just really wow... M so surprised why just so less likes I have watched couple of videos before but u just explained really understanding with gotcha learn some new concept as well successfully found my final year project as well thanks for making this video... I will surely check out your more videos.. Great job 👍

  • @qurdedu4032
    @qurdedu4032 2 ปีที่แล้ว +1

    Great explanation and great mini project
    Thank you so much. Looking for more project like this

  • @b9944236
    @b9944236 ปีที่แล้ว

    Now I can solve it by myself, thanks a lot.

  • @jaydoshi5394
    @jaydoshi5394 2 ปีที่แล้ว

    Watching couple of videos from this channel every day in any order. But still makes sense

  • @BrianRotich-f7g
    @BrianRotich-f7g ปีที่แล้ว

    I learn more in 1 video than in 2 months worth of other tutorials

  • @JikeWimblik
    @JikeWimblik หลายเดือนก่อน

    Reduce sudoku to 7 colours as 1 fixed color as 2, comparative colour as 3. Then reduce the comparison to 2 sat compare with upto 8 colors to get main grid clues. For sudoku grid of any size is In O(n^5)

  • @footballalliance2412
    @footballalliance2412 3 ปีที่แล้ว +10

    Hi John, i have learned a lot from your videos. I hope you won't stop making videos in upcoming days, it is really helpful for us.
    I can guarantee you will get a huge subscribers in coming days.

    • @CodingWithJohn
      @CodingWithJohn  3 ปีที่แล้ว +10

      Thanks! Glad you're getting something out of them. I'll keep making them if people keep watching them!

  • @tonyz2203
    @tonyz2203 2 ปีที่แล้ว

    OMG, I understand how to solve this complex problem now. Thank you so much!

  • @francescopiazza4882
    @francescopiazza4882 2 ปีที่แล้ว

    Great coding John! I got a "Hard Sudoku" solved in a few ms !

  • @surajverma-ut4kj
    @surajverma-ut4kj 2 ปีที่แล้ว

    Just one word for John 🙏🏼
    Big ThankYou ❣️

  • @ChristForAll-143
    @ChristForAll-143 2 ปีที่แล้ว

    Simply Nailed It, AWESOME EXPLANATION

  • @shintaromidorima1552
    @shintaromidorima1552 ปีที่แล้ว

    it is 100% working teacher john and thank you for the source code

  • @northnorth9913
    @northnorth9913 2 ปีที่แล้ว +3

    I like what you doing, Hope you get the chance to do Dijkstra’s algorithm, Time complexity and a few more interview related.
    I like your explanations

  • @Bury11
    @Bury11 2 ปีที่แล้ว +4

    cool project :) i'm fairly new to java, i programmed a small snake'ish game, so i understood the 2d array way better then i thought :D keep up the good work!

  • @sweetysojrani9323
    @sweetysojrani9323 4 หลายเดือนก่อน

    Awesome algorithm. It would be nice, if you could also explain the time complexity of the algorithm in your video.

  • @manusoftar
    @manusoftar 2 ปีที่แล้ว +1

    I think that those nested for loops on the solve method are unecesary, you could add two additional params to send the current row and column and inside the function you just would need to either add the the rows or to the column depending on what you are doing... yes you will have to put some IF's, but the way you did it I think it will do unnecesary iterations, I mean, the last recursive call on a solvable board will put the needed number but there's nothing that would stop the initial call to the solve method from stopping it's iterations. Actually, on each recursive call it will have to traverse as far as possible on the board until sending back a false or a true if solved. You don't need the algorithm to traverse almost the whole board on each recursive call, you just need it to make a single step on the board instead.

  • @navyathamarreddy2807
    @navyathamarreddy2807 2 ปีที่แล้ว +1

    very nicely explained John, I saw few other videos as well for Sudoku Solver, but this is amazing!

  • @alexnovik6223
    @alexnovik6223 2 ปีที่แล้ว

    1. You return only one solution.
    2. It's the brute force method instead of a logical solution.
    But it finally works !! I try to make a smart solution with the possible value exclusion method. It's more interesting in my opinion ))

  • @Pennervomland
    @Pennervomland 2 ปีที่แล้ว +4

    I‘d love to see this exact algorithm but more efficient. Knuths Algorithm X for sudoku sounds very interesting and shows a pretty good method for backtracking. I‘m too dumb to understand how to implement it in java but it could be a cool challenge for you.

  • @surjansr
    @surjansr 3 ปีที่แล้ว +62

    Great explanation.
    Will be great if we can also talk about the time complexity of the solutions

    • @robertoborelli3275
      @robertoborelli3275 2 ปีที่แล้ว +11

      It's like O(k*10^(k^2 -n)) where k is the number of cells in a row and n is the number of placed numbers at the start.
      If you try with k greaters than 9 this algorithm would literally take years to find a solution.
      You can do better using sat solvers and translating the sudoko problem into cnf logical formulas.

    • @smrtfasizmu6161
      @smrtfasizmu6161 2 ปีที่แล้ว

      @@robertoborelli3275 may I ask why do you have zero in the beginning of the expression 0(k * 10^(k^2 - n))
      doesn't it just cancel everything to zero? Also, why do you have 10 to the power of cells to solve, how did you get 10? Did you mean k because with every added unsolved cell you need k times more traversing the loops (assuming that the number of rows = the number of digits you can fill a cell in) ? And why do you have k * in the beginning of the expression?

    • @robertoborelli3275
      @robertoborelli3275 2 ปีที่แล้ว +7

      @@smrtfasizmu6161 it's been a while since I've watched the video and now I don't remember exactly the code but here I give you some explanations:
      1) It's not a 0, but is a big O. This thing is called "Big O notation". Simplifying, you can read it as "the complexity is less or equal than..." but there are some formal and accurate mathematical definitions behind this intuition I gave.
      2) The intuition behind the formula is that this code is clearly exponential in the number of unsolved cells (k^2 - n).
      3) each time you call the function to see if a number is valid in cell you spend O(k) time.
      4) For each cell there are (exactly) k possible values (in the case of normal sudoku k is 9).
      So to sum the important thing here are:
      - exponential in the number of unsolved cells.
      - you take linear time in k, each time you check if a number is valid
      So as I wrote in the previous comment this is a pretty easy solution to write and implement but it's very inefficient since it uses the technique 'guess and verify'.
      It's much better (but also a bit more difficult) to use a sat solver for this kinds of problems.

    • @juanmalpartida1333
      @juanmalpartida1333 2 ปีที่แล้ว

      Time complexity looks to be O(n^3) worst case. Average, eyeballing it, I would say is n^2*log(n)

    • @robertoborelli3275
      @robertoborelli3275 2 ปีที่แล้ว +2

      ​@@juanmalpartida1333 no. just because you have 3 nested loops you can't always say that you have O(n^3).
      Inside this loop there is a recursion!
      This solution is exponential for sure, infact there are situations in which you guessed j correct values, than you are trying to fill the j+1-th value and you discover that there is no such a solution. In this case the algorithm does "backtracking" and there are situations in which all the j guessed valuesare wrong and the algorithm must re guess the entire solution.
      This leads to exponential cost!

  • @vivekjj2986
    @vivekjj2986 2 ปีที่แล้ว

    Thanks so much John. I spent a lot of time searching on youtube for a good tutorial on this. I wish yours was the first video so i could have saved time :(

  • @josueramirez7247
    @josueramirez7247 2 ปีที่แล้ว

    In an intro to programming textbook I own, it mentions in the preface that one difference from prior printings is that it removes the sudoku solver example code from the multidimensional arrays chapter because apparently is it too complex at that point.

  • @stabilini
    @stabilini 2 ปีที่แล้ว

    I made once a Sudoku solver en Excel using Visual Basic using a more human like strategy... placing various plausible numbers in each empty space, and recursevly eliminating invalid ones

    • @CodingWithJohn
      @CodingWithJohn  2 ปีที่แล้ว

      I did the same in Python in AI class in college. I think that's a cooler solution, but I liked the simplicity that this one offered for someone newer to coding, for purposes of this video

  • @jaimesastre6393
    @jaimesastre6393 2 ปีที่แล้ว +1

    Wow, great. So clear.
    I especially appreciate the backtrack!
    So clever, just a 0 and then the loop moves on at the point it stopped, so we get the next possible number that fits in the location.
    Continue with examples like this. It's excellent.

    • @CodingWithJohn
      @CodingWithJohn  2 ปีที่แล้ว +1

      Thanks! Let me know if you have any ideas for programs like this. It's tough because they have to be complex enough to be interesting but small enough to fit in a reasonable video.

    • @jaimesastre6393
      @jaimesastre6393 2 ปีที่แล้ว +1

      @@CodingWithJohn yes, thanks.
      I just bought a book about Ai and python where they also take small projects that can perfectly fit to your devs.
      There is the classic 8puzzle,
      The shortest way,
      Snake,
      Tetris,
      Spam search,
      And I don't know how you say in English :
      O|X|O
      _|X|O
      O|X|_

    • @jaimesastre6393
      @jaimesastre6393 2 ปีที่แล้ว

      @@CodingWithJohn pack man is more complex but can maybe make a video for the moves?

  • @neeldiyora3575
    @neeldiyora3575 ปีที่แล้ว

    Excellent explanation 👏👏👏

  • @abdurrouf4159
    @abdurrouf4159 2 ปีที่แล้ว

    You just nailed it. Mind blowing tutorial, no doubt.

  • @verruu333
    @verruu333 2 ปีที่แล้ว +1

    if you could make a short tutorial about binary search trees and how to understand recursion there..

  • @jefersonlerma5743
    @jefersonlerma5743 ปีที่แล้ว +1

    Pretty nice explanation. I made one sudoku solver but try to improve his performance using a priotityQueue. Basically save in the queue the empty spaces that can take the minimun posible values, so.. the queue delivery the spaces that have less probablity to change... and i reorder the probability of the other spaces that have been afected for add a new number in ther matrix. This consume so much memory but less time...

    • @CodingWithJohn
      @CodingWithJohn  ปีที่แล้ว

      Interesting methodology! This definitely isn't the most efficient way to do it but the board is limited to 9x9, so even with a terrible time complexity any board is still solved pretty quickly

  • @amaralensheriff
    @amaralensheriff ปีที่แล้ว

    As always, thank you John.

  • @alzaeem79
    @alzaeem79 ปีที่แล้ว

    Beautifully well explained, thank you sir.

  • @jamesdepoorter726
    @jamesdepoorter726 2 ปีที่แล้ว +1

    Hello John, why didn't you use TDD in this example? This could be a nice addition, because it constantly keeps the code in check

  • @Garrison86
    @Garrison86 2 ปีที่แล้ว +1

    Amazing! Thanks for this, this helps me stay engaged in java

  • @abubakaradamu6278
    @abubakaradamu6278 3 ปีที่แล้ว

    I think, i just found my best youtuber. Keep up the good work John.

  • @obitouchiha7545
    @obitouchiha7545 2 ปีที่แล้ว

    Wow sir you can explain things very well, let aside being multitasker.

  • @Dragondog-Gaming
    @Dragondog-Gaming 2 ปีที่แล้ว +2

    You don't need an else in "if (solveBoard(board)) " as you don't have to set board[row][column]to 0. It will just be reset to another number when it immediately after is assigned a new number in the for loop. It is only if the for loop fails that you need to set it to 0.

    • @jaimesastre6393
      @jaimesastre6393 2 ปีที่แล้ว

      Oh, yes. Right. It just makes it clear for us maybe.

    • @Leo_banana
      @Leo_banana 2 ปีที่แล้ว

      So, “board[row][column] = 0” can be moved to the place before return false
      For more informations, It must be one of these places, right?

    • @fandusmercius723
      @fandusmercius723 2 ปีที่แล้ว

      wouldn't having it there cause elimination of 1 possibility while going for previously placed index?

    • @Dragondog-Gaming
      @Dragondog-Gaming 2 ปีที่แล้ว

      @@Leo_banana That is correct.

    • @Dragondog-Gaming
      @Dragondog-Gaming 2 ปีที่แล้ว

      @@fandusmercius723 It wouldn't.

  • @nagasivakrishna5660
    @nagasivakrishna5660 2 ปีที่แล้ว

    wow,next level explanation

  • @EminentInception94
    @EminentInception94 2 ปีที่แล้ว

    Plumber, fireman, astronaut, father, and son. Now a JavaScript developer? Johnny Sinns has truly outdone himself

  • @mynameispooop
    @mynameispooop ปีที่แล้ว

    Awesome Tutorial

  • @AdamantlyAdams
    @AdamantlyAdams 2 ปีที่แล้ว

    Bro, thank you for teaching. You are the go to guy!

  • @Maddin1989yo
    @Maddin1989yo 2 ปีที่แล้ว +3

    Great and concise explanation! When this video was suggested, I found it hard to believe that this was doable in a beginner friendly way in only 20 minutes, well done!
    I have one suggestion though: If you have the GRID_SIZE as a static final int, the box size (3, as used as a magic number in isNumberInBox(...) and print(...)) should be, too! Probably it should be initialized as the square root of GRID_SIZE, or vice versa.

  • @sanchitghai1455
    @sanchitghai1455 2 ปีที่แล้ว

    I like that you also play binding of issac 🙂.
    As for the program I loved it. It was well made video for beginners and one can't not understand the concept. Keep it up! 👍

  • @sujay_hegde
    @sujay_hegde 2 ปีที่แล้ว +1

    Wouldn't a better design be to embrace OOPS for what it is, and make Board an object with members Row and Column

    • @christophermcdermit3828
      @christophermcdermit3828 2 ปีที่แล้ว

      It is clearly just a fancy excuse to make a fiercly overpowered recusion process, basically like a 90's batch file. Have you found anyone who made an actual OOPS solver, because I want to watch that if you know where one is?

  • @siddhantanand5751
    @siddhantanand5751 2 ปีที่แล้ว +3

    Hey, John I loved the way you went forward with explaining the video , you made it quite easy to learn the algorithm and fun too, i was curious if we can attach some image recognition tools like OpenCV etc for Java , so that we can scan a sudoku at run time and give an image back? I would love if you could show us how to do this if you like the idea.

  • @codegeek8256
    @codegeek8256 2 ปีที่แล้ว

    Please make a video on the Hand Of Poker (Poker Hands) Game, it seems to be used alot on interview assessments this days. I am sure alot of people need it.

  • @spidernh
    @spidernh 2 ปีที่แล้ว

    I didn't use the tutorial but after seeing some of it I decided to try it myself without any help and this strategy worked, only issue was that my loop variable went from 0-8, so if a number was 9 then it failed

    • @wetsox278
      @wetsox278 2 ปีที่แล้ว

      I was thinking about that as I was watching it, wondering if it was going to capture the 9, being that it is 0 indexed.

  • @ulyses1018
    @ulyses1018 2 ปีที่แล้ว +1

    Great video! Thanks for this kind of tutorials John! :D

  • @ol_gr
    @ol_gr 2 ปีที่แล้ว +1

    the algorithm sounds violently inefficient, but still a cool solution to a complex problem

  • @javawocky
    @javawocky ปีที่แล้ว

    Very nice. I do this stuff for fun. Recently did one of those word search generators which you see kids books all the time. Way more interesting to do than you may initially think.

  • @markjohnson4962
    @markjohnson4962 2 ปีที่แล้ว

    I wrote a similar solver in Pick Basic around 12 years ago. Glad I'm in Pick and not in such a typographical mess of programming syntax.

  • @Gandobilis
    @Gandobilis ปีที่แล้ว

    Very interesting tutorial!

  • @alpaslanbek
    @alpaslanbek 2 ปีที่แล้ว +2

    It violated every clean code principle I know :D

  • @abidoyevictor2780
    @abidoyevictor2780 3 ปีที่แล้ว +1

    Well explained!
    Thanks John

  • @simonetrombotto5627
    @simonetrombotto5627 2 ปีที่แล้ว

    First time I see one of your video, immediately subscribed to your channel as soon as I saw the Isaac icon 😂

  • @staceyonuora5329
    @staceyonuora5329 3 ปีที่แล้ว +2

    Great video, I really enjoyed your explanation. Super thanks, this was very helpful

  • @KrINekroN
    @KrINekroN 2 ปีที่แล้ว

    maybe to continue sudoku solver in next part , about add interface , textbox for enter numbers which we wanna change..etc

  • @widearchshark3981
    @widearchshark3981 2 ปีที่แล้ว

    Good video. I think you could have explained that some cells could contain more than one number. It might seem initially that sudoku boards have just one option per cell, which made the recursion discussion confusing... Maybe!
    Nice though, thank you.

  • @MarkB33313
    @MarkB33313 ปีที่แล้ว

    Great video, still wrapping my head around it lol.
    Does this check that the puzzle has only one solution though?

    • @MarkB33313
      @MarkB33313 ปีที่แล้ว

      Really wondering about this? And if it does not check for more than one solution, would that be easy to add?

  • @PritamShaw
    @PritamShaw ปีที่แล้ว

    Ngl, I was thinking to making a sudoko solver after my exams end. I never told anyone about it, nor did I searched about it. I just searched N queen, as I was thinking of doing it via backtracking.
    And yesterday my exams got over, and this video was in my feed. This is the first time I'm seeing this channel btw.😶

    • @CodingWithJohn
      @CodingWithJohn  ปีที่แล้ว

      Give it a go! This is just one way to do it, there are tons of methods. Let us know how it goes!

  • @ponder2406
    @ponder2406 2 ปีที่แล้ว

    Wow! That’s so cool! This was an awesome video! Very interesting :)

  • @mastershonobi110
    @mastershonobi110 3 ปีที่แล้ว +1

    Gr8 vid. Spent the last 2days working on this really breaking it down. I got a lot outta following and really understanding what’s going on here. Keep them coming…🙌🏿🙌🏿

  • @bartomiejpotaman6973
    @bartomiejpotaman6973 11 หลายเดือนก่อน

    Shit took me a while but I think that's why it was worth it. This video made recursion seem so much more intuitive. Thank you!

  • @antonsilta7248
    @antonsilta7248 2 ปีที่แล้ว

    Interesting fact - I clearly understand everything he did in this video, every single step, but if I would write it myself it wouldn't work or return an error :D

  • @djneils100
    @djneils100 2 ปีที่แล้ว

    this is a quality tutorial

  • @zimbabwe8189
    @zimbabwe8189 3 ปีที่แล้ว +1

    Great video, your explanation was pretty clear!

  • @mqamqa423
    @mqamqa423 2 ปีที่แล้ว

    Really cool video, now I'm thinking if I'm able to solve a sudoku in the same way as it is done in algorithm

    • @CodingWithJohn
      @CodingWithJohn  2 ปีที่แล้ว

      You certainly could, but by the time you get a few numbers in, you'll wish you hadn't!

  • @pendax
    @pendax 2 ปีที่แล้ว +1

    What is the design process that leads to this design? In the video, the thinking is already done. I'd like to hear about the thinking.

  • @sigfigronath
    @sigfigronath 3 ปีที่แล้ว +2

    This was really nice, fun and informative!

  • @stephanc7192
    @stephanc7192 2 ปีที่แล้ว

    You make truly great videos

  • @goodstuff4014
    @goodstuff4014 2 ปีที่แล้ว

    It would be really cool if you would display the board while it is being solved. I realize it will just go through it very fast but it could be slowed down a little and then be really cool.

    • @CodingWithJohn
      @CodingWithJohn  2 ปีที่แล้ว

      That'd be neat! You could certainly do something simple like Thread.sleep(300) along with printing the board for every number it tries, or whatever amount of time you'd like it to wait between prints.

  • @darcipeeps
    @darcipeeps 2 ปีที่แล้ว +1

    Would be interesting to see you make improvements to this algorithm. This cannot be very performant, but throw some more CPU power at it and you can solve individual puzzles which is cool

    • @nordern1
      @nordern1 2 ปีที่แล้ว

      There is a pretty trivial improvement that can be made that makes these brute force solvers hundreds of times faster. Don't go in a fixed order, like left to right, up to down, but instead always search for the next field that has the fewest remaining possibilities.
      It gives you simple solving for free at every step (when a field can only have one value) and it makes it so the guesses it does make have a higher chance of being true, massively cutting down the search space

  • @ThibaultViaene
    @ThibaultViaene ปีที่แล้ว

    John, thank you for everything! Could you maybe make a video on backtracking specificaly? That would be awesome! :)