Некоторое время назад я купил новый кошелек, который может вместить 8 карт (по 4 с обеих сторон). Тем не менее, у меня, кажется, гораздо больше карт, и мне нужно выбирать, какие из них я хочу взять с собой. Некоторые карты я использую чаще, чем другие, но карты, которые я предпочитаю носить с собой, не обязательно те, которые я использую чаще всего.
Соревнование
Получив стопку карт, верните макет моего кошелька наилучшим из возможных способов с учетом моих предпочтений и ограничений. Макет должен быть следующим:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
В настоящее время у меня есть следующие карты - стопки всегда будут состоять из следующих карт:
- 1 удостоверение личности ( ID )
- 1 водительское удостоверение ( DL )
- 2 кредитные карты ( CC )
- 5 дебетовых карт ( DC )
- 1 карта общественного транспорта ( ПК )
- 1 карточка доступа в спортзал ( GC )
- 9 членских карточек из случайных магазинов и складов ( MC )
У меня есть некоторые предпочтения и ограничения:
- Карты отсортированы по приоритету: ID, DL, CC, DC, ПК, GC, MC
- Карты отсортированы по частоте использования: CC, DC, ПК, GC, MC, ID, DL
- В целях безопасности общее количество дебетовых и кредитных карт в моем кошельке может быть не более чем на 1 больше, чем сумма всех других карт, которые войдут в мой кошелек ( N DC + N CC ≤ N ID + N DL + N ПК + N GC + N MC +1).
- Если они есть, моя идентификационная карта и водительские права должны всегда указываться в строке 1. Это не означает, что другие карты могут не занимать места в строке 1.
- Наиболее часто используемые карты из стопки всегда должны идти в строке 4.
правила
- Никакие 2 карты не могут занимать одно и то же место.
- Карты с более высоким приоритетом всегда предпочтительнее, чем карты с более низким приоритетом, если только не введено ограничение DC / CC.
- ID / DL в строке 1 отменяет правило частоты: если указан только идентификатор, он будет идти в строке 1, а строка 4 будет пустой!
- Форматирование ввода может быть выполнено любым способом, если порядок входного стека сохраняется. Например,
ID,CC,PC,MC,MC,MC,DL
может также поставляться как, например,1ID 1CC 1PC 3MC 1DL 0DC 0GC
илиID CC PC MC MC MC DL
. Форматирование вывода имеет несколько ограничений: все строки должны начинаться с новой строки, столбцы должны быть каким-то образом разделены. Пустые места могут быть представлены любым способом, если он не портит макет 4х2.
Может быть более одного решения / заказа, вам решать, какое из них вы предоставите в качестве вывода.
- Вы можете предположить, что карты одного типа всегда будут сгруппированы на входе.
- Помимо вышеуказанного, стандарт Код-гольф правила и лазейки применяются.
бонус
Вам разрешается удалить 15% от вашего счета, если вы также вернете карты, которые не вошли в кошелек. Распечатать "Это подходит!" в случае отсутствия оставшихся карт. Этот дополнительный вывод должен быть четко отделен от макета повторного использования.
Примеры
Входные данные:
ID, DL, CC, GC, MC
2 возможных выхода:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
Входные данные:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2 возможных выхода:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
Входные данные:
DC, DC, CC, CC, GC, DL
2 возможных выхода:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
Входные данные:
CC, DC, DC, DC
2 возможных выхода:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
Входные данные:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2 возможных выхода:
MC MC MC DC
PC GC or DC GC
DC DC PC MC
CC CC CC CC
optional: e.g. (DC, DC, DC, MC, MC, MC, MC) or (3DC, 4MC)
Входные данные:
MC, MC, MC, MC, MC, MC, MC
2 возможных выхода:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
Входные данные:
ID, CC
2 возможных выхода:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
Это Код-гольфпоэтому самый короткий код (в байтах) выигрывает.