Skip to content

Latest commit

 

History

History
880 lines (682 loc) · 54.3 KB

README_RU.md

File metadata and controls

880 lines (682 loc) · 54.3 KB

Go report Release GitHub repo size GitHub repo license GitHub repo issues

Shadify

Сосредоточьтесь на создании невероятных и красивых приложений не беспокоясь о сложной логике.

Быстрый обзор

Shadify – это мощный сервис генерации данных и выполнения различной логики на стороне сервера для создания разного рода приложений и игр. Для взаимодействия с сервисом используются HTTP-запросы, которые возвращают удобные ответы в формате JSON. Shadify может быть очень полезен разработчикам, которые занимаются Frontend-разработкой. Благодаря уже имеющимся модулям, Вы можете полностью сосредоточиться на создании красивых UI для приложений, которые обогатят ваше портфолио.

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

Документация

Сервис разделен на независимые модули. Каждый модуль начинается с краткого описания того, на что ориентирован данный модуль (будь-то игра, головоломка, задача и т.д.) . Далее идет подробное описание каждого HTTP-эндпоинта с описанием возможных параметров и возвращаемых ответов.

Sudoku

Sudoku

Судоку – популярная головоломка с числами. Суть игры заключается в заполнении свободных клеток цифрами от 1 до 9 так, чтобы в каждой строке, в каждом столбце и в каждом малом квадрате 3×3 каждая цифра встречалась бы только один раз.

  • Генерация случайного судоку
GET https://shadify.dev/api/sudoku/generator
Параметр Описание
fill Опциональный
Число от 0 до 50, которое соответствует уровню заливки поля (в процентном соотношении).
Значение по умолчанию – 30.

Возвращаемый ответ:

{
    "grid": [
        [9, 8, 7, 3, 2, 1, 5, 6, 4],
        [6, 5, 4, 9, 8, 7, 2, 3, 1],
        [3, 2, 1, 6, 5, 4, 8, 9, 7],
        [7, 6, 5, 1, 9, 8, 3, 4, 2],
        [1, 9, 8, 4, 3, 2, 6, 7, 5],
        [4, 3, 2, 7, 6, 5, 9, 1, 8],
        [8, 7, 6, 2, 1, 9, 4, 5, 3],
        [5, 4, 3, 8, 7, 6, 1, 2, 9],
        [2, 1, 9, 5, 4, 3, 7, 8, 6]
    ],
    "task": [
        [0, 8, 7, 0, 0, 0, 0, 0, 4],
        [0, 0, 0, 9, 0, 0, 2, 0, 0],
        [0, 2, 1, 6, 5, 4, 0, 0, 7],
        [0, 0, 0, 1, 0, 8, 0, 4, 2],
        [0, 9, 8, 4, 3, 0, 0, 0, 0],
        [4, 0, 2, 0, 0, 0, 0, 0, 0],
        [8, 0, 6, 2, 0, 0, 0, 0, 0],
        [5, 0, 3, 0, 0, 6, 0, 2, 9],
        [0, 0, 0, 0, 4, 0, 0, 0, 0]
    ]
}
  • grid - полностью решённый судоку.
  • task - задание, которое необходимо решить заполнив нулевые значения правильными цифрами.
  • Проверка судоку

Для проверки судоку можно использовать GET-запрос с обязательным query-параметром

GET https://shadify.dev/api/sudoku/verifier
Параметр Описание
task Обязательный
Строка вида 123-123-123, которая соответствует полю судоку, где каждая строка (row) разделена знаком тире.

Пример GET-запроса:

https://shadify.dev/api/sudoku/verifier?task=123564897-456897231-789231564-234675918-567918342-891342675-345786129-678129453-912453786

Так же, для удобства, можно использовать POST-запрос с body в формате JSON

POST https://shadify.dev/api/sudoku/verifier

Пример body для POST-запроса:

{
    "task": [
        [9, 6, 3, 2, 8, 5, 7, 4, 1],
        [8, 5, 2, 1, 7, 4, 6, 3, 9],
        [1, 7, 4, 3, 9, 6, 8, 5, 2],
        [6, 3, 9, 8, 5, 2, 3, 1, 7],
        [5, 2, 8, 7, 4, 1, 3, 9, 6],
        [7, 4, 1, 9, 6, 3, 5, 2, 8],
        [4, 1, 7, 6, 3, 9, 2, 8, 5],
        [3, 9, 6, 5, 2, 8, 1, 7, 4],
        [2, 8, 5, 4, 1, 7, 9, 6, 3]
    ]
}

Возвращаемый ответ:

{
    "isValid": false,
    "position": "row-4"
}

Takuzu

Takuzu

Takuzu (так же известная как Binairo) – занимательная головоломка с простыми правилами. Всё, что Вам нужно сделать, это заполнить квадратное поле определенного размера плитками двух цифр (или цветов), придерживаясь при этом трёх простых правил:

  1. Каждый столбец и каждая строка должны быть уникальны между собой
  2. В каждой строке и каждом столбце должно быть равное количество плиток каждой цифры
  3. Нельзя ставить более двух плиток с одной и той же цифрой подряд (110001 – неправильно, 110010 – правильно).

Для примера, можете посмотреть мою реализацию этой головоломки.

  • Генерация Takuzu
GET https://shadify.dev/api/takuzu/generator
Параметр Описание
size Опциональный
Чётное число от 4 до 12, которое задает размерность поля.
Значение по умолчанию – 8.
fill Опциональный
Число от 0 до 100, которое соответствует уровню заливки поля (в процентном соотношении).
Значение по умолчанию – 33.

Возвращаемый ответ:

{
    "size": 8,
    "field": [
        ["1", "1", "0", "0", "1", "1", "0", "0"],
        ["1", "1", "0", "1", "0", "0", "1", "0"],
        ["0", "0", "1", "0", "1", "1", "0", "1"],
        ["0", "1", "1", "0", "0", "1", "1", "0"],
        ["1", "0", "0", "1", "1", "0", "0", "1"],
        ["0", "0", "1", "1", "0", "0", "1", "1"],
        ["0", "1", "1", "0", "1", "1", "0", "0"],
        ["1", "0", "0", "1", "0", "0", "1", "1"]
    ],
    "task": [
        ["1", "1", "0", "0", "x", "x", "0", "0"],
        ["x", "1", "0", "x", "0", "x", "x", "x"],
        ["x", "x", "1", "x", "x", "x", "x", "x"],
        ["x", "1", "1", "x", "x", "x", "1", "0"],
        ["x", "x", "x", "x", "x", "x", "x", "1"],
        ["0", "x", "x", "x", "x", "x", "x", "1"],
        ["x", "x", "x", "x", "x", "1", "0", "x"],
        ["x", "x", "x", "x", "x", "x", "1", "1"]
    ]
}
  • Проверка Takuzu

Для проверки Takuzu можно использовать GET-запрос с обязательным query-параметром

GET https://shadify.dev/api/takuzu/verifier
Параметр Описание
task Обязательный
Строка вида 1010-1100-0011-0101, которая соответствует полю Takuzu, где каждая строка (row) разделена знаком тире. Может содержать только 0 и 1, количество строк должно быть равно количеству элементов в каждой строке.

Пример GET-запроса:

https://shadify.dev/api/takuzu/verifier?task=1010-1100-0101-0101

Так же, для удобства, можно использовать POST-запрос с body в формате JSON

POST https://shadify.dev/api/takuzu/verifier

Пример body для POST-запроса:

{
    "task": [
        ["1", "0", "1", "0"],
        ["1", "1", "0", "0"],
        ["0", "0", "1", "1"],
        ["0", "1", "0", "1"]
    ]
}

Возвращаемый ответ:

{
    "isValid": false,
    "message": "duplication",
    "position": ["row-3", "row-4"]
}

Set

Set

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

Для понимания правил почитайте Википедию или посмотрите это интересное видео.

  • Получение всех карт
GET https://shadify.dev/api/set/start

Всегда возвращает одинаковый массив состоящий из 81 объекта. Каждый объект соответствует одной из карт. Пример карты:

{
    "_id": 0,
    "number": 1,
    "shape": "diamond",
    "color": "red",
    "shading": "solid"
}
  • _id - уникальный идентификатор каждой карты
  • number – количество фигур: 1 / 2 / 3
  • shape – форма фигуры: diamond / squiggle / oval
  • color – цвет фигуры: red / green / purple
  • shading – заливка фигуры: solid / striped / open
  • Генерация новой партии
GET https://shadify.dev/api/set/start
Параметр Описание
possible-sets Опциональный
Строка true/false, которая включает/выключает поиск возможных сетов в текущем layout. Список возможных сетов не обязателен для игры и выступает лишь в качестве подсказок и доказательств того, что в текущем layout существуют сеты.
Значение по умолчанию – true.

Возвращаемый ответ:

{
	"freeCards": [<69 карт>],
	"layout": [<12 карт>],
	"possibleSets": [[<3 карты>]],
	"wonCards": [],
	"state": "20-4-11-10-12-46-70-62-41-23-3-8"
}
  • freeCards – массив объектов соответствующий свободным картам, которые в игре ещё не использовались.
  • layout – массив объектов соответствующий картам, которые доступны для игры, т.е. для поиска сетов.
  • possibleSets – массив содержащий массивы, которые включают в себя ровно по 3 объекта. Каждые 3 объекта соответствуют комбинации из трёх карт образующий сет, которую возможно собрать из карт доступных на текущем layout.
  • wonCards – массив объектов соответствующий выигранным картам, которые в игре участвовать больше не будут.
  • state – уникальный идентификатор для текущего состояния игры. Необходим для выполнения действий по удалению сетов, добавлению дополнительных карт или просто для загрузки текущего состояния игры. Имеет вид 1-2-3@4-5-6, где числа слева от знака @ соответствуют уникальным идентификаторам тех карт, которые находятся в layout, а числа справа – в wonCards.
  • Загрузка состояния
GET https://shadify.dev/api/set/<:state>
Параметр Описание
possible-sets Опциональный
Строка true/false, которая включает/выключает поиск возможных сетов в текущем layout.
Значение по умолчанию – true.
action Опциональный
Строка add/remove, которая позволяет производить соответствующее действие с текущим состоянием игры.
Строка add добавляет в текущий layout 3 случайных карты из текущего массива freeCards (доступно только если размер layout не превышает 20 карт).
Строка remove удаляет из текущего layout указанную комбинацию из трёх карт образующих сет. Для этого необходимо использовать параметр cards.
Значение по умолчанию отсутствует.
cards Обязательный при action=remove
Строка вида 1-2-3, где каждое число соответствует уникальному идентификатору одной из карт образующих сет.
Значение по умолчанию отсутствует.

Примеры запросов с загрузкой состояния:

https://shadify.dev/api/set/0-27-53-10-46-15-16-64-32-23-29-6?possible-sets=false
https://shadify.dev/api/set/41-47-7-53-13-46-25-36-72-60-15-80?action=add
https://shadify.dev/api/set/0-27-53-10-46-15-16-64-32-23-29-6?action=remove&cards=0-16-23

Math

Math-expressions

Модуль для генерации случайных математических выражений. Отлично подойдет для создания различных тренажёров, в которых придётся хорошенько пошевелить мозгами. Кстати, для примера можете посмотреть моё приложение.

  • Генерация выражения со сложением
GET https://shadify.dev/api/math/add
  • Генерация выражения с вычитанием
GET https://shadify.dev/api/math/sub
  • Генерация выражения с умножением
GET https://shadify.dev/api/math/mul
  • Генерация выражения с делением
GET https://shadify.dev/api/math/div

Для выше перечисленных эндпоинтов доступны следующие параметры:

Параметр Описание
min-first, max-first Опциональный
Параметры изменяющие диапазон генерируемых чисел только для первого числа имеющегося в выражении.
Значение по умолчанию для min-first – 1, для max-first – 99.
min-second, max-second Опциональный
Параметры изменяющие диапазон генерируемых чисел только для второго числа имеющегося в выражении. Эти параметры не влияют на выражения с делением, поскольку второе число выбирается случайным образом из списка возможных делителей первого числа.
Значение по умолчанию для min-second – 1, для max-second – 99.
negative Опциональный
Число 0/1 которое отключает/включает возможность появления результата с отрицательным значением для выражений с вычитанием. Изначально при генерации выражения с вычитанием первое число всегда больше второго. Для изменения этого поведения используйте этот параметр.
Значения по умолчанию – 0.

Возвращаемый ответ:

{
    "first": 17,
    "second": 56,
    "operation": "+",
    "expression": "17 + 56",
    "answer": 73
}
  • Генерация квадратного уравнения

Quadratic-equation

Квадратное уравнение – это уравнение вида ax2 + bx + c = 0, где коэффициенты a, b и c – произвольные числа.

GET https://shadify.dev/api/math/quad
Параметр Описание
min-a, max-a Опциональный
Минимальное и максимальное значение коэффициента А.
Значение по умолчанию для min-a – 1, для max-a – 20.
min-b, max-b Опциональный
Минимальное и максимальное значение коэффициента B.
Значение по умолчанию для min-b – 1, для max-b – 40.
min-c, max-c Опциональный
Минимальное и максимальное значение коэффициента C.
Значение по умолчанию для min-c – 1, для max-c – 20.

Возвращаемый ответ:

{
    "equation": "1x^2 + 14x + 24 = 0",
    "a": 1,
    "b": 14,
    "c": 24,
    "discriminant": 100,
    "x1": "-12.000",
    "x2": "-2.000"
}

Schulte

Таблицы Шульте – таблицы со случайно расположенными объектами (обычно числами или буквами), служащие для проверки и развития быстроты нахождения этих объектов в определённом порядке (как правило в порядке возрастания для цифр и в алфавитном порядке для букв). Упражнения с таблицами позволяют улучшить периферическое зрительное восприятие, что положительно повлияет на навык скорочтения.

  • Генерация случайной таблицы

Schulte

GET https://shadify.dev/api/schulte/generator
Параметр Описание
size Опциональный
Размер генерируемой таблицы. Доступный диапазон от 1 до 15.
Значение по умолчанию – 5.
mode Опциональный
Строка number / alphabet, которая определяет генерируемые значения для таблицы: числа или буквы. При выборе alphabet параметр size всегда будет равняться 5.
Значение по умолчанию – number.

Возвращаемый ответ:

{
    "grid": [
        [9, 18, 6, 1, 5],
        [11, 24, 25, 15, 19],
        [13, 7, 10, 21, 23],
        [20, 22, 12, 17, 16],
        [2, 8, 4, 14, 3]
    ]
}

Minesweeper

Minesweeper

Сапёр – компьютерная игра-головоломка, в которой игровое поле разделено на смежные ячейки, некоторые из которых заминированы. Количество заминированных ячеек известно. Целью игры является открытие всех ячеек, не содержащих мины. Это игра стала довольно популярной среди пользователей Windows, поскольку была предустановлена по умолчанию на более старых версиях этой ОС.

  • Генерация случайного поля
GET https://shadify.dev/api/minesweeper/generator
Параметр Описание
start Обязательный
Строка вида 1-2, которая задает стартовую позицию игрока. В этой позиции и вокруг неё никогда не будет мин. Первое число это координата по оси Х (от 1 до значения параметра widht), второе число – координата по оси Y (от 1 до значения параметра height)
Значение по умолчанию отсутствует.
width Опциональный
Число задающее ширину генерируемого поля. Общее количество ячеек на поле не должно превышать 1000 штук.
Значение по умолчанию – 9.
height Опциональный
Число задающее высоту генерируемого поля. Общее количество ячеек на поле не должно превышать 1000 штук.
Значение по умолчанию – 9.
mines Опциональный
Число задающее количество мин на поле. Количество мин не должно превышать 25% от общего количества ячеек на поле.
Значение по умолчанию – 12.

Возвращаемый ответ:

{
    "start": "3-5",
    "width": 9,
    "height": 9,
    "board": [
        ["o", "o", "1", "x", "3", "x", "2", "x", "2"],
        ["1", "1", "1", "2", "x", "2", "2", "2", "x"],
        ["x", "1", "o", "1", "1", "1", "o", "1", "1"],
        ["1", "1", "o", "o", "o", "o", "o", "o", "o"],
        ["o", "o", "o", "1", "1", "1", "o", "o", "o"],
        ["2", "2", "1", "1", "x", "1", "o", "o", "o"],
        ["x", "x", "2", "2", "1", "1", "o", "1", "1"],
        ["x", "4", "x", "1", "o", "o", "o", "1", "x"],
        ["1", "2", "1", "1", "o", "o", "o", "1", "1"]
    ],
    "mines": 12
}

Wordsearch

Wordsearch

Головоломка по поиску слов – головоломка, представляющая собой прямоугольную таблицу из букв, в которой спрятаны слова — вертикально, горизонтально и по диагонали, в прямом и обратном порядке.

  • Генерация случайного поля
GET https://shadify.dev/api/wordsearch/generator
Параметр Описание
width Опциональный
Число от 5 до 20, задающее ширину генерируемого поля. Общее количество ячеек на поле не должно превышать 256 штук.
Значение по умолчанию – 9.
height Опциональный
Число от 5 до 20, задающее высоту генерируемого поля. Общее количество ячеек на поле не должно превышать 256 штук.
Значение по умолчанию – 9.

Возвращаемый ответ:

{
    "width": 9,
    "height": 9,
    "wordsCount": 10,
    "grid": [
        ["e", "n", "r", "w", "r", "o", "l", "o", "c"],
        ["t", "o", "o", "o", "a", "l", "n", "b", "p"],
        ["e", "o", "o", "l", "z", "a", "w", "r", "a"],
        ["l", "n", "s", "p", "r", "e", "o", "u", "n"],
        ["h", "r", "t", "w", "e", "m", "t", "g", "t"],
        ["t", "e", "e", "o", "l", "t", "n", "b", "s"],
        ["a", "t", "r", "n", "l", "a", "w", "y", "t"],
        ["v", "f", "s", "s", "e", "o", "o", "f", "j"],
        ["i", "a", "b", "d", "t", "z", "d", "s", "n"]
    ],
    "words": [
        { "word": "color", "position": { "start": [9, 1], "end": [5, 1] } },
        { "word": "downtown", "position": { "start": [7, 9], "end": [7, 2] } },
        { "word": "teller", "position": { "start": [5, 9], "end": [5, 4] } },
        { "word": "pants", "position": { "start": [9, 2], "end": [9, 6] } },
        { "word": "athlete", "position": { "start": [1, 7], "end": [1, 1] } },
        { "word": "afternoon", "position": { "start": [2, 9], "end": [2, 1] } },
        { "word": "snowplow", "position": { "start": [4, 8], "end": [4, 1] } },
        { "word": "rooster", "position": { "start": [3, 1], "end": [3, 7] } },
        { "word": "rugby", "position": { "start": [8, 3], "end": [8, 7] } },
        { "word": "oatmeal", "position": { "start": [6, 8], "end": [6, 2] } }
    ]
}

Anagram

Anagram

Анаграммы – это целый вид головоломок связанный с составлением все возможных слов из заданного набора букв. Данный модуль реализует самую простую вариацию анаграмм: задается случайное слово, из букв которого, необходимо составить как можно больше других слов.

Для составления используются только английские существительные, список которых можно найти в этом репозитории по пути ./data/nouts.txt.

GET https://shadify.dev/api/anagram/generator

Возвращаемый ответ:

{
    "task":"possibility",
    "words":[
        "bit","bolt","boy","lip","list","loss","oil",
        "pilot","plot","toy","pot","slip","soil","soy",
        "spot","spy","stop","tip","top"
    ]
}
  • task - слово из которого необходимо составлять другие слова.
  • words - массив всех возможных слов, которые составляются из task.

Countries

Модуль Countries позволяет генерировать викторины, такие как "угадай столицу" или "угадай страну по изображению флага". Это простой и полезный модуль для создания приложений для проверки и тренировки знаний по всем странам мира.

  • Генерация задания "угадай столицу"

Guess capital

GET https://shadify.dev/api/countries/capital-quiz
Параметр Описание
variants Опциональный
Число от 2 до 6, соответствует количеству различных вариантов, из которых вы должны выбрать правильную столицу заданной страны.
Значение по умолчанию – 4.
amount Опциональный
Число от 1 до 20 которое отвечает за количество возвращаемых заданий. Использование этого параметра гарантирует, что среди всех полученных заданий все будут уникальными.
Значение по умолчанию – 1.

Возвращаемый ответ:

{
	"country": "Cyprus",
	"flag": "https://flagcdn.com/w320/cy.png",
	"variants": [
		"Nicosia",
		"Juba",
		"Oslo",
		"Jamestown"
	],
	"answer": "Nicosia"
}
  • country - страна для которой вы должны угадать столицу.
  • flag - изображение флага страны (взято из Flagpedia API, можно кастомизировать).
  • variants - массив возможных вариантов ответа.
  • answer - правильный ответ.
  • Генерация задания "угадай страну по изображению флага"

Guess country

GET https://shadify.dev/api/countries/country-quiz
Параметр Описание
variants Опциональный
Число от 2 до 6, соответствует количеству различных вариантов, из которых вы должны выбрать правильную страну по заданному изображению флага.
Значение по умолчанию – 4.
amount Опциональный
Число от 1 до 20 которое отвечает за количество возвращаемых заданий. Использование этого параметра гарантирует, что среди всех полученных заданий все будут уникальными.
Значение по умолчанию – 1.

Возвращаемый ответ:

{
	"flag": "https://flagcdn.com/w320/dk.png",
	"variants": [
		"Yemen",
		"Denmark",
		"Norfolk Island",
		"Vietnam"
	],
	"answer": "Denmark"
}
  • flag - изображение флага страны, которую вы должны угадать.
  • variants - массив возможных вариантов ответа.
  • answer - правильный ответ.

Camp

Camp

Головоломка лагерь – это логическая головоломка с простыми правилами и сложными решениями. Правила игры просты:

  1. Разместите палатку в соседней по горизонтали или вертикали клетке рядом с каждым деревом на игровом поле. Каждому дереву должна соответствовать одна и только одна палатка.
  2. Палатки не могут быть размещены в соседних клетках, даже по диагонали.
  3. Числа снаружи игрового поля отражают количество палаток в соответствующем ряду/столбце.
  • Генерация случайного задания
GET https://shadify.dev/api/camp/generator
Параметр Описание
width Опциональный
Число от 5 до 15, соответствующее ширине генерируемого поля.
Значение по умолчанию – 7.
height Опциональный
Число от 5 до 15, соответствующее высоте генерируемого поля.
Значение по умолчанию – 7.
solution Опциональный
Строка со значением true/false определяющая, следует ли отправлять решение вместе с задачей или нет.
Значение по умолчанию – true.

Возвращаемый ответ:

{
    "width": 7,
    "height": 7,
    "trees": 9,
    "rowTents": [1, 2, 2, 1, 0, 2, 1],
    "columnTents": [1, 1, 0, 2, 0, 2, 3],
    "task": [
        [0, 0, 0, 1, 0, 0, 1],
        [0, 0, 0, 0, 0, 1, 0],
        [0, 0, 0, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 1, 0],
        [0, 0, 0, 0, 0, 0, 1],
        [0, 0, 0, 0, 0, 0, 1],
        [1, 0, 0, 1, 0, 0, 0]
    ],
    "solution": [
        [0, 0, 0, 1, 0, 2, 1],
        [0, 0, 0, 2, 0, 1, 2],
        [0, 2, 0, 0, 0, 2, 0],
        [0, 1, 0, 0, 0, 1, 2],
        [0, 0, 0, 0, 0, 0, 1],
        [2, 0, 0, 2, 0, 0, 1],
        [1, 0, 0, 1, 0, 0, 2]
    ]
}
  • width – ширина генерируемого поля.
  • heigth – высота генерируемого поля.
  • trees – общее количество деревьев на поле (и, следовательно, общее количество палаток, которые необходимо установить).
  • rowTents – массив значений, соответствующий количеству палаток, которые должны быть размещены в соответствующем ряду от 1 до значения heigth.
  • columnTents – массив значений, соответствующий количеству палаток, которые должны быть размещены в соответствующей колонке от 1 до значения width.
  • task – задача, которую необходимо решить. Значения единиц - это деревья, вокруг которых нужно разместить значения двоек, соответствующие палаткам.
  • solution – полностью решенная задача, где значения единиц - деревья, а значения двоек - палатки.
  • Проверка решения
POST https://shadify.dev/api/camp/verifier

Пример JSON body:

{
    "rowTents": [1, 2, 2, 1, 0, 2, 1],
    "columnTents": [1, 1, 0, 2, 0, 2, 3],
    "solution": [
        [0, 0, 2, 1, 0, 2, 1],
        [0, 0, 0, 0, 0, 1, 2],
        [0, 2, 0, 0, 0, 2, 0],
        [0, 1, 0, 0, 0, 1, 2],
        [0, 0, 0, 0, 0, 0, 1],
        [2, 0, 0, 2, 0, 0, 1],
        [1, 0, 0, 1, 0, 0, 2]
    ]
}

Возвращаемый ответ:

{
    "isValid": false,
	"position": "row-1",
	"message": "the number of tents in each row must match the assignment"
}

Kuromasu

Kuromasu

Kuromasu это головоломка, в которую играют на прямоугольной сетке. В некоторых из этих клеток есть цифры. Каждая клетка может быть либо черной, либо белой (либо любая другая пара цветов). Задача состоит в том, чтобы определить, к какому типу относится каждая клетка, соблюдая простые правила:

  1. Каждое число на доске обозначает количество белых клеток, которые видны из этой клетки, включая ее саму. Клетка видна из другой клетки, если обе клетки находятся в одной строке или столбце, и между ними в этой строке или столбце нет черных клеток.
  2. Пронумерованные клетки не должны быть черными.
  3. Две черные клетки не должны быть соседними по горизонтали или вертикали.
  4. Все белые клетки должны быть соединены по горизонтали или вертикали.
  • Генерация случайной сетки
GET https://shadify.dev/api/kuromasu/generator
Параметр Описание
width Опциональный
Число от 4 до 15, соответствующее ширине генерируемого поля.
Значение по умолчанию – 5.
height Опциональный
Число от 4 до 15, соответствующее высоте генерируемого поля.
Значение по умолчанию – 5.
fill Опциональный
Число от 10 до 50, соответствующее %-ному уровню заполнения сетки ячейками содержащими числа.
Значение по умолчанию – 30.

Возвращаемый ответ:

{
  "width": 5,
  "height": 5,
  "task": [
    ["o", "o", "o", "o", "6"],
    ["o", "o", "8", "o", "9"],
    ["o", "o", "o", "7", "o"],
    ["5", "o", "o", "o", "o"],
    ["9", "o", "8", "5", "o"]
  ],
  "solution": [
    ["6", "4", "x", "4", "6"],
    ["9", "7", "8", "7", "9"],
    ["9", "7", "8", "7", "9"],
    ["5", "x", "4", "x", "5"],
    ["9", "5", "8", "5", "9"]
  ]
}
  • width – ширина генерируемой сетки.
  • heigth – высота генерируемой сетки.
  • task – задача, которую нужно решить, расставив значения x в нужные клетки.
  • solution – полностью решенная задача, где ячейки со значениями x - это коробки, а числа - это просто счетчики видимости для каждой конкретной ячейки.
  • Проверка решения
POST https://shadify.dev/api/kuromasu/verifier

Пример JSON body:

{
  "solution": [
    ["6", "4", "x", "4", "x"],
    ["9", "7", "8", "7", "9"],
    ["9", "7", "8", "7", "9"],
    ["5", "x", "4", "x", "5"],
    ["9", "5", "8", "5", "9"]
  ]
}

Возвращаемый ответ:

{
	"isValid": false,
	"position": {
		"row": 1,
		"column": 4
	}
}

Memory

Memory - это головоломка, которая отлично подходит для тренировки памяти. Вам дается поле со случайным набором элементов, причем каждый элемент на поле встречается несколько раз (обычно 2 или 3). У вас есть некоторое время, чтобы запомнить расположение всех элементов на поле, а затем все они будут спрятаны, и ваша задача - открывать пары одинаковых элементов по одному, стараясь допускать как можно меньше ошибок.

  • Генерация случайной сетки
GET https://shadify.dev/api/memory/generator
Параметр Описание
width Опциональный

Число, соответствующее ширине создаваемой сетки. Общее количество ячеек в сетке не должно превышать 52 умноженное на pair-size.

Значение по умолчанию – 6.
height Опциональный

Число, соответствующее высоте создаваемой сетки. Общее количество ячеек в сетке не должно превышать 52 умноженное на pair-size.

Значение по умолчанию – 4.
pair-size Опциональный

Число, соответствующее размеру пары одинаковых элементов. Значение должно быть кратным общему количеству ячеек в сетке. Доступные значения: 2, 3, 4.

Значение по умолчанию – 3.
show-positions Опциональный

Значение true/false, определяющее, отправлять ли координаты расположения элементов каждой пары.

Значение по умолчанию – true.

Возвращаемый результат:

{
    "width": 6,
    "height": 4,
    "pairSize": 3,
    "totalPairs": 8,
    "grid": [
        ["e", "g", "f", "a", "h", "d"],
        ["c", "d", "e", "d", "g", "a"],
        ["c", "h", "e", "b", "c", "b"],
        ["f", "a", "b", "h", "f", "g"],
    ],
    "pairPositions": [
        {"value": "a", "positions": [[1, 4], [2, 6], [4, 2]]},
        {"value": "b", "positions": [[3, 4], [3, 6], [4, 3]]},
        {"value": "c", "positions": [[2, 1], [3, 1], [3, 5]]},
        {"value": "d", "positions": [[1, 6], [2, 2], [2, 4]]},
        {"value": "e", "positions": [[1, 1], [2, 3], [3, 3]]},
        {"value": "f", "positions": [[1, 3], [4, 1], [4, 5]]},
        {"value": "g", "positions": [[1, 2], [2, 5], [4, 6]]},
        {"value": "h", "positions": [[1, 5], [3, 2], [4, 4]]},
    ]
}

Все элементы сетки grid - это обычные буквы английского алфавита. Сначала используются буквы нижнего регистра, а затем верхнего. Пул букв расходуется в алфавитном порядке в зависимости от количества необходимых элементов для сетки. Поэтому вы можете с легкостью создать свою собственную карту соответствий, где каждой букве будет соответствовать, например, определенное изображение.

Запуск локального сервера

  1. Склонируйте этот репозиторий к себе на компьютер:
git clone https://github.com/cheatsnake/shadify.git
  1. Установить зависимости:
go mod download
  1. Находясь в корне проекта запустите следующую команду:
go run cmd/server/main.go

Для удобства тестирования используйте готовую коллекцию для Insomnia. Откройте Settings > Data > Import Data > From URL и вставьте ссылку на файл insomnia.shadify.json. Наслаждайтесь!

Запуск сервера в Docker

Запуск Docker-контейнера для разработки (после любых изменений сервер будет перезапускаться):

docker compose up

Запуск production-сервера:

docker build -t shadify . --target prod
docker run --rm -p 5000:5000 --name shadify shadify
Made with ♥
LICENSE 2022-2023