Як допомогти продавцю визначити, чи є товар з потрібними характеристиками?
ПрикладЧасто прийшовши в магазин взуття і вибравши вподобану модель, ми чекаємо поки продавці визначать, чи є відповідний розмір
Дано
Список варіацій. Кожна варіація у свою чергу містить список атрибутів і їхніх значень.
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.
Завдання застосоване як:
- Практика для вивчають програмування
- Тестове завдання для відбору кандидатів
- Просто цікаве проведення часу для досвідчених розробників