Pull to refresh

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

Reading time 2 min
Views 3.2K
Как помочь продавцу определить, есть ли товар с нужными характеристиками?

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

Дано


Список вариаций. Каждая вариация в свою очередь содержит список атрибутов и их значений.

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.



Задача применима как:

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

Просьба: не выкладывать в комментариях решение задачи.
Only registered users can participate in poll. Log in, please.
Задача для разработчика уровня
69.74% Джуниор 53
26.32% Мидл 20
3.95% Синьёр 3
76 users voted. 33 users abstained.
Tags:
Hubs:
-3
Comments 26
Comments Comments 26

Articles