testing-exercize

У нас есть склад, на котором лежат тканевые маски разных размеров.

type Store = Array<{
  size: number
  quantity: number
}>

На склад приходит заказ, который содержит id покупателей и один или два размера тканевой маски, которые ему подходят. Причем второй размер, если он есть, на единицу больше первого. Если покупателю подходят 2 размера, то он дополнительно указывает приоритетный размер (masterSize), который он хотел бы получить, s1, если приоритетным размером является первый и s2, если второй.

type Order = Array<
  | {
      id: number
      size: [number]
    }
  | {
      id: number
      size: [number, number]
      masterSize: "s1" | "s2"
    }
>

Необходимо написать функцию process, которая первым аргументом принимает sore: Store, вторым - order: Order и возвращает:

type Result = {
  stats: Array<{ size: number; quantity: number }>
  assignment: Array<{ id: number; size: number }>
  mismatches: number
}

где stats - отсортированный по возрастанию размеров массив, содержащий информацию о выданных размерах и их кол-ве; assignment - массив, содержащий сведения о том, кто какой размер получил mismatches - кол-во покупателей, у которых выданный размер НЕ совпал с приоритетным.

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

[
  {
    "store": [{ "size": 2, "quantity": 1 }],
    "order": [{ "id": 102, "size": [1, 2], "masterSize": "s1" }],
    "isPossible": true,
    "mismatches": 1
  },
  {
    "store": [{ "size": 3, "quantity": 1 }],
    "order": [{ "id": 102, "size": [1, 2], "masterSize": "s1" }],
    "isPossible": false,
    "mismatches": 0
  },
  {
    "store": [{ "size": 2, "quantity": 4 }],
    "order": [
      { "id": 101, "size": [2] },
      { "id": 102, "size": [1, 2], "masterSize": "s2" }
    ],
    "isPossible": true,
    "mismatches": 0
  },
  {
    "store": [
      { "size": 1, "quantity": 1 },
      { "size": 2, "quantity": 2 },
      { "size": 3, "quantity": 1 }
    ],
    "order": [
      { "id": 100, "size": [1] },
      { "id": 101, "size": [2] },
      { "id": 102, "size": [2, 3], "masterSize": "s1" },
      { "id": 103, "size": [1, 2], "masterSize": "s2" }
    ],
    "isPossible": true,
    "mismatches": 1
  }
]

Код писать на JS

Результаты кейсов в консоли

HERE