Я собираюсь начать *большой* проект, Sudoku Hinter. Я люблю судоку и люблю изучать новые техники. Когда я застреваю на сложной головоломке, я хотел бы знать подсказку о том, что делать дальше.

Большинство решателей судоку раскрывают пропущенное число или решение всей головоломки. Однако это не помогает мне учиться. Я ищу то, что дает мне правильный намек. Возможно, что-то вроде: используйте эту технику, или вы сможете исключить 7 как вариант.

Потом я нашел этот сайт. Это все, что я хочу! Он предоставляет подсказки и объяснение для этой подсказки. К сожалению, он не совместим с мобильными устройствами, а это значит, что я не использую его так часто, как хотелось бы. Итак, это привело меня к моему большому проекту: Sudoku Hinter! Не только Sudoku Solver (хотя это также должно быть частью проекта, чтобы проверить, действительна ли головоломка). Подсказка судоку, которая поможет вам учиться на этом пути.

Это довольно большие амбиции для меня. Это будет полный стек, так как у меня будет внешний интерфейс (мобильный пользовательский интерфейс, или, возможно, я даже попытаюсь сделать его мобильным приложением), промежуточное программное обеспечение (решатель и логика для следующей подсказки) и, возможно, даже базу данных для сохранения головоломок, чтобы я мог вернуться к ним.

С чего начать этот большой проект? Сначала я спросил: что я хочу, чтобы это приложение делало? Я пришел к этим двум целям:

  • Разрешить пользователю войти в наполовину готовую головоломку
  • Дайте подсказки пользователю на следующем шаге

Имея в виду эти цели, я сделал еще несколько шагов:

  • Войдите в головоломку
  • Сохраните введенную головоломку локально
  • Проверьте, можно ли решить головоломку
  • Знайте различные методы решения головоломки, от самых простых до самых сложных.
  • Определите следующий самый простой шаг, чтобы решить головоломку
  • Предоставьте подсказку для этого следующего шага, которая может раскрываться поэтапно (например, подсказка с названием метода, затем задействованным числом, затем задействованными ячейками и строками, затем окончательным решением для этого шага)

Затем я нарисовал несколько диаграмм последовательности. Я рассмотрел их с учетом объектно-ориентированного дизайна (большое спасибо книге Санди Мец). Ключевые принципы объектно-ориентированного программирования, которые я хочу учитывать в своих диаграммах последовательности, следующие:

  • Сосредоточьтесь на сообщениях, а не на объектах. Объекты существуют только потому, что им нужно ответить или отправить сообщение.
  • Для каждого объекта сосредоточьтесь на том, «чего я хочу», а не на том, «как это сделать». Это делает каждый объект более пригодным для повторного использования.
  • Уменьшите количество публичных интерфейсов. Это делает код более надежным.
  • Думайте о внедрении зависимостей как об инструменте, помогающем объектам быть более независимыми от контекста.

На данный момент это то, что у меня есть. Я предполагаю, что есть много способов оптимизировать это. Пожалуйста, дайте мне знать, как! Я хотел бы получить отзывы о нем.