Jakiś czas temu kupiłem nowy portfel, który może pomieścić 8 kart (4 po obu stronach). Wydaje mi się jednak, że mam o wiele więcej kart i muszę dokonać wyboru, które z nich chcę ze sobą nosić. Niektóre karty używam częściej niż inne, ale karty, które wolę mieć przy sobie, niekoniecznie są tymi, których używam najczęściej.
Wyzwanie
Biorąc pod uwagę stos kart, zwróć układ mojego portfela w najlepszy możliwy sposób, zgodnie z moimi preferencjami i ograniczeniami. Układ powinien wyglądać następująco:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
Obecnie posiadam następujące karty - stosy zawsze będą się składać z wybranych z nich:
- 1 dowód osobisty ( ID )
- 1 prawo jazdy ( DL )
- 2 karty kredytowe ( CC )
- 5 kart debetowych ( DC )
- 1 karta transportu publicznego ( PC )
- 1 karta dostępu do siłowni ( GC )
- 9 kart członkowskich z losowych sklepów i magazynów ( MC )
Mam pewne preferencje i ograniczenia:
- Karty posortowane według priorytetu: ID, DL, CC, DC, PC, GC, MC
- Karty posortowane według częstotliwości użytkowania: CC, DC, PC, GC, MC, ID, DL
- Ze względów bezpieczeństwa łączna liczba kart debetowych i kredytowych w moim portfelu może być najwyżej o 1 większa niż suma wszystkich innych kart, które trafią do mojego portfela ( N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1).
- Jeśli jest obecny, mój dowód tożsamości i prawo jazdy powinny zawsze znajdować się w rzędzie 1. Nie oznacza to, że inne karty nie mogą zajmować miejsc w rzędzie 1.
- Najczęściej używane karty ze stosu powinny zawsze znajdować się w rzędzie 4.
Zasady
- Żadne 2 karty nie mogą zajmować tego samego miejsca.
- Karty o wyższym priorytecie są zawsze preferowane przed kartami o niższym priorytecie, chyba że włączy się ograniczenie DC / CC.
- ID / DL w wierszu 1 zastępuje regułę częstotliwości: jeśli podany zostanie tylko identyfikator, przejdzie do wiersza 1, a wiersz 4 będzie pusty!
- Formatowanie danych wejściowych można wykonać w dowolny sposób, pod warunkiem zachowania kolejności stosu wejściowego. np.
ID,CC,PC,MC,MC,MC,DL
może być również dostarczony jako np .1ID 1CC 1PC 3MC 1DL 0DC 0GC
lubID CC PC MC MC MC DL
. Formatowanie wyjściowe ma kilka ograniczeń: wiersze muszą zaczynać się od nowej linii, kolumny muszą być w jakiś sposób rozdzielane. Puste miejsca mogą być prezentowane w dowolny sposób, o ile nie psuje układu 4x2.
Może być więcej niż jedno rozwiązanie / zamówienie, od Ciebie zależy, które z nich podasz jako wynik.
- Możesz założyć, że karty tego samego typu będą zawsze grupowane na wejściu.
- Oprócz powyższego standard golf-golf obowiązują zasady i luki.
Premia
Możesz usunąć 15% swojego bytecount, jeśli zwrócisz również karty, które nie trafiły do portfela. Drukuj „Pasuje!” w przypadku braku pozostałych kart. Ten dodatkowy wynik powinien być wyraźnie oddzielony od układu retainnd.
Przykłady
Wejście:
ID, DL, CC, GC, MC
2 możliwe wyjścia:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
Wejście:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2 możliwe wyjścia:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
Wejście:
DC, DC, CC, CC, GC, DL
2 możliwe wyjścia:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
Wejście:
CC, DC, DC, DC
2 możliwe wyjścia:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
Wejście:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2 możliwe wyjścia:
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)
Wejście:
MC, MC, MC, MC, MC, MC, MC
2 możliwe wyjścia:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
Wejście:
ID, CC
2 możliwe wyjścia:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
To jest golf-golf, więc wygrywa najkrótszy kod (w bajtach).
Odpowiedzi:
Java 10,
385384382 bajtówChociaż nie było to zbyt trudne, rozumiem, dlaczego nie udzielono odpowiedzi. Zwłaszcza ta reguła dotycząca „ N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1 ” kosztuje obecnie sporo bajtów ..
A ponieważ minęło około 2,5 roku, odkąd to wyzwanie ma został opublikowany, OP mógł mieć i tak kolejny portfel ...; s
-1 bajt dzięki @Jakob .
Wypróbuj online.
Wyjaśnienie:
Java 10, 390.15 (459 bajtów - 15% premii)
Wypróbuj online.
źródło
F
pomocą{"CC","DC","PC","GC","MC"}
.