얼마 전에 저는 8 장의 카드를 넣을 수있는 새로운 지갑을 구입했습니다 (양쪽에 4 개). 그러나 나는 그보다 더 많은 카드를 가지고있는 것 같아서 가지고 다니고 싶은 카드를 선택해야합니다. 다른 카드보다 자주 사용하는 카드도 있지만, 가지고 다니고 싶은 카드가 반드시 가장 많이 사용되는 카드는 아닙니다.
도전
카드 묶음이 주어지면 내 선호도 및 제한 사항이 가능한 한 가장 좋은 방법으로 지갑 레이아웃을 반환하십시오. 레이아웃은 다음과 같아야합니다.
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
현재 나는 다음 카드를 제시합니다-스택은 항상 다음 중에서 선택으로 구성됩니다.
- 1 신분증 ( ID )
- 1 운전 면허증 ( DL )
- 신용 카드 2 개 ( CC )
- 직불 카드 5 개 ( DC )
- 대중 교통 카드 1 대 ( PC )
- 1 체육관 액세스 카드 ( GC )
- 무작위 상점 및 창고에서 9 개의 멤버십 카드 ( MC )
선호도 및 제한 사항이 있습니다.
- 우선 순위별로 정렬 된 카드 : ID, DL, CC, DC, PC, GC, MC
- 사용 빈도별로 정렬 된 카드 : CC, DC, PC, GC, MC, ID, DL
- 안전상의 이유로 지갑에있는 직불 카드 및 신용 카드의 총 수는 지갑에 들어갈 다른 모든 카드의 합계보다 최대 1 배 더 많을 수 있습니다 ( N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1).
- 존재하는 경우, 본인의 신분증과 운전 면허증은 항상 1 열에 있어야합니다. 이는 다른 카드가 1 열의 자리를 차지하지 않을 수도 있습니다.
- 스택에서 가장 많이 사용되는 카드는 항상 4 열에 있어야합니다.
규칙
- 2 장의 카드가 같은 지점을 차지할 수는 없습니다.
- DC / CC 제한이 적용되지 않는 한 우선 순위가 높은 카드가 우선 순위가 낮은 카드보다 우선합니다.
- 행 1의 ID / DL은 빈도 규칙을 무시합니다. ID 만 제공하면 행 1에 들어가고 행 4는 비어있게됩니다!
- 입력 스택의 순서가 유지되는 한 원하는 방식으로 입력 형식을 지정할 수 있습니다. 예
ID,CC,PC,MC,MC,MC,DL
를 들어1ID 1CC 1PC 3MC 1DL 0DC 0GC
또는 같이 공급 될 수도있다ID CC PC MC MC MC DL
. 출력 형식에는 몇 가지 제한이 있습니다. 행은 모두 새 줄에서 시작해야하고 열은 어떤 방식 으로든 구분해야합니다. 4x2 레이아웃을 엉망으로 만들지 않는 한 빈 점은 원하는 방식으로 표시 될 수 있습니다.
둘 이상의 솔루션 / 주문이있을 수 있으며 출력으로 제공하는 것은 사용자에게 달려 있습니다.
- 동일한 유형의 카드는 항상 입력시 그룹화된다고 가정 할 수 있습니다.
- 상기 외에, 표준 코드 골프 규칙과 허점이 적용됩니다.
보너스
지갑에 넣지 않은 카드도 반환하면 바이트 수의 15 % 를 제거 할 수 있습니다. "맞습니다!" 남은 카드가없는 경우. 이 추가 출력은 returend 레이아웃과 명확하게 분리되어야합니다.
예
입력:
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!
이것은 코드 골프따라서 가장 짧은 코드 (바이트)가 이깁니다.