Как помочь продавцу определить, есть ли товар с нужными характеристиками?
Список вариаций. Каждая вариация в свою очередь содержит список атрибутов и их значений.
Нужно составить интерфейс, по которому продавец, выбрав необходимые свойства, может определить, есть ли товар на складе или нет.
Интерфейс представляет из себя список списков, где на первом уровне — тип атрибута, на втором его значение.
Каждый элемент может быть в 3 состояниях:
В начале все элементы доступны для выбора
![](https://habrastorage.org/r/w1560/webt/xx/qs/8q/xxqs8qgxvlspt7_emko-9k7hzti.png)
После выбора одного из атрибутов, все остальные пересматриваются.
![](https://habrastorage.org/r/w1560/webt/as/ut/qa/asutqa5motvn2tighwegk5nqsxw.png)
Мы выбрали 37 (Могли бы начать с коричневого, логика та же). Все остальные размеры белые (т.к. они есть по условию). Синего цвета нет. Он становится серый, остальные есть — белые. 37 есть только на Молнии. Значит молния выбирается автоматически. И тут, внимание! 40 размера молнии нет, значит 40 становиться серым.
Если нам вдруг понадобился синий цвет, то сбрасывается размер (т.к. 37 синего нет) и замок (т.к. 37 молнии нет, если бы был, то он остался бы выбран), автоматически выбираются шнурки (т.к. синий есть только со шнурками), а размеры становятся доступными 38, 39.
![](https://habrastorage.org/r/w1560/webt/b3/qn/ab/b3qnabg5tou88suvnujpk4frtr0.png)
Задача применима как:
Просьба: не выкладывать в комментариях решение задачи.
Пример
Часто придя в магазин обуви и выбрав понравившуюся модель, мы ждём пока продавцы определят, есть ли подходящий размер
Дано
Список вариаций. Каждая вариация в свою очередь содержит список атрибутов и их значений.
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 состояниях:
- Доступен для выбора — Белый
- Активен — Синий
- Доступен при других комбинациях — Серый
В начале все элементы доступны для выбора
![](https://habrastorage.org/webt/xx/qs/8q/xxqs8qgxvlspt7_emko-9k7hzti.png)
После выбора одного из атрибутов, все остальные пересматриваются.
![](https://habrastorage.org/webt/as/ut/qa/asutqa5motvn2tighwegk5nqsxw.png)
Мы выбрали 37 (Могли бы начать с коричневого, логика та же). Все остальные размеры белые (т.к. они есть по условию). Синего цвета нет. Он становится серый, остальные есть — белые. 37 есть только на Молнии. Значит молния выбирается автоматически. И тут, внимание! 40 размера молнии нет, значит 40 становиться серым.
Если нам вдруг понадобился синий цвет, то сбрасывается размер (т.к. 37 синего нет) и замок (т.к. 37 молнии нет, если бы был, то он остался бы выбран), автоматически выбираются шнурки (т.к. синий есть только со шнурками), а размеры становятся доступными 38, 39.
![](https://habrastorage.org/webt/b3/qn/ab/b3qnabg5tou88suvnujpk4frtr0.png)
Задача применима как:
- Практика для изучающих программирование
- Тестовое задание для отбора кандидатов
- Просто интересное времяпрепровождение для опытных разработчиков
Просьба: не выкладывать в комментариях решение задачи.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Задача для разработчика уровня
69.74% Джуниор53
26.32% Мидл20
3.95% Синьёр3
Проголосовали 76 пользователей. Воздержались 33 пользователя.