habrahabr

Задача по программированию о розничной торговле

  • воскресенье, 4 ноября 2018 г. в 00:19:01
https://habr.com/post/428662/
  • JavaScript
  • Бизнес-модели
  • Занимательные задачки
  • Программирование
  • Промышленное программирование


Как помочь продавцу определить, есть ли товар с нужными характеристиками?
Пример
Часто придя в магазин обуви и выбрав понравившуюся модель, мы ждём пока продавцы определят, есть ли подходящий размер

Дано


Список вариаций. Каждая вариация в свою очередь содержит список атрибутов и их значений.
example-data.json
[
  {
    "Size": 37,
    "Color": "Brown",
    "Lock": "Zipper"
  },
  {
    "Size": 37,
    "Color": "Black",
    "Lock": "Zipper"
  },
  {
    "Size": 38,
    "Color": "Blue",
    "Lock": "Laces"
  },
  {
    "Size": 39,
    "Color": "Blue",
    "Lock": "Laces"
  },
  {
    "Size": 39,
    "Color": "Brown",
    "Lock": "Zipper"
  },
  {
    "Size": 39,
    "Color": "Brown",
    "Lock": "Laces"
  },
  {
    "Size": 40,
    "Color": "Brown",
    "Lock": "Laces"
  }
]

Нужно составить интерфейс, по которому продавец, выбрав необходимые свойства, может определить, есть ли товар на складе или нет.

Условия:


  • Вариация содержит полный список атрибутов (не может быть вариации с не известными значениями, если атрибут присутствует в одной вариации, то он есть во всех)
  • Длина списка вариантов значений атрибута варьируется от атрибута к атрибуту (один атрибут может принимать одно из двух значений, другой — одно из четырёх и т.п.)
  • Один атрибут может иметь только одно значение

Функционал:


Интерфейс представляет из себя список списков, где на первом уровне — тип атрибута, на втором его значение.

Каждый элемент может быть в 3 состояниях:
  • Доступен для выбора — Белый
  • Активен — Синий
  • Доступен при других комбинациях — Серый

В начале все элементы доступны для выбора


После выбора одного из атрибутов, все остальные пересматриваются.

Мы выбрали 37. Все остальные размеры белые (т.к. они есть по условию). Синего цвета нет. Он становится серый, остальные есть — белые. 37 есть только на Молнии. Значит молния выбирается автоматически. И тут, внимание! 40 размера молнии нет, значит 40 становиться серым.

Если нам вдруг понадобился синий цвет, то сбрасывается размер (т.к. 37 синего нет) и замок (т.к. 37 молнии нет, если бы был, то он остался бы выбран), автоматически выбираются шнурки (т.к. синий есть только со шнурками), а размеры становятся доступными 38, 39.


Задача применима как:
  • Практика для изучающих программирование
  • Тестовое задание для отбора кандидатов
  • Просто интересное времяпрепровождение для опытных разработчиков


Просьба: не выкладывать в комментариях решение задачи