Pomóż PPCG Mikołajowi dostarczyć prezenty
Przegląd
PPCG Claus spóźnia się z dostarczaniem prezentów, ponieważ w dzisiejszych czasach mamy tak wiele dziwnych dzieciaków. To sprawia, że PPCG Claus znacznie trudniej jest dostać wszystkie prezenty we właściwe miejsce. Twoim zadaniem jest pomóc mu poprawnie dostarczyć prezenty.
Kompleksowość
Biorąc pod uwagę listę wielkich nazwisk reprezentujących dzieci, które ma dostarczyć, oraz listę prezentów reprezentowanych przez liczby, musisz dowiedzieć się, jak rozdzielić prezenty między te dzieci. Oczywiście jest pewien haczyk ....
W dzisiejszych czasach dzieci stają się wybredne, jeśli dzieciak jest dziwnym facetem (pierwszy inicjał to kod ASCII), chce dziwnego prezentu! Jeśli jest parzysty (pierwszy inicjał to nawet kod ASCII), to oczywiście musi otrzymać parzystą! Każde dziecko podzielne przez 3 jest jednak niegrzecznym, niegrzecznym chłopcem, więc PPCG Claus musi je całkowicie zignorować, aby zachowały się w przyszłym roku. Aby uznać swoją drogę za sukces, musi dostarczyć wszystkie prezenty wszystkim dzieciom, które na nie zasługują, i nie może dawać jednemu dziecku zbyt wielu prezentów. Jeśli jakieś dziecko dostanie ponad 3 prezenty więcej niż jego rówieśnicy, ryzykuje, że w przyszłym roku stanie się niegrzecznym dzieckiem, i to po prostu nie tak! Ponadto, jeśli jakieś dobre dziecko otrzyma prezent, gdy inne dobre dziecko tego nie zrobi, to również obróci to dziecko w zło.
Przykład
Dzieci są następujące:
Kids = ["Amy", "Betty", "Clyde", "Dave", "Francine"] = [A,B,C,D,F] = [65,66,67,68,70]
- Betty jest zmorą ludzkości, wyraźnie w liczbie 3.
- Amy i Clyde byli dziwakami od urodzenia i nie chcieliby otrzymywać nawet prezentów.
- Dave i Francine to normalne dzieciaki; powinni otrzymywać tylko prezenty!
Prezenty są następujące:
Presents = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
Jednym z możliwych wyników byłoby:
[
['Amy',[1,3,5]],
['Betty',[]],
['Clyde',[7,9,11,13]],
['Dave',[2,4,6,8]],
['Francine',[10,12,14]]
]
Scenariusze wyjątków
Jednak fakt, że PPCG Claus jest gotowy i chętny, nie oznacza, że PPCG Claus może. Oto lista scenariuszy wyjątków, w których musisz przekazać złe wieści PPCG Claus z komunikatem:
PPCGmas is cancelled!
Następujące scenariusze spowodują anulowanie Świąt Bożego Narodzenia:
- Nie ma dzieci.
[],[1,2,3]
- Wellp, dali.
- Nie ma dobrych dzieci.
["Betty"],[1,2,3]
- Poważnie, pieprzyć Betty.
- Nie ma prezentów lub mniej prezentów niż dobre dzieci.
["Amy","Charles"],[]
- Jeden lub więcej nie otrzyma żadnych prezentów.["Amy","Charles"],[1]
- Jeden lub więcej nie otrzyma żadnych prezentów.
- Nie ma żadnych dziwnych / parzystych prezentów, które zadowolą wszystkie dobre dzieci.
["Amy","Dave"],[2,4,6]
- Amy jest zepsuta.
Oto lista scenariuszy, które nie powinny mieć wpływu na PPCGmas:
- Resztki prezentów (wszystkie dzieci powinny otrzymać maksymalną liczbę prezentów).
["Amy","Dave"],[2,4,6,8,10,12,14,7,9] = [["Amy",[7,9]],["Dave",[2,4,6,8]]]
Główne zasady powtórzone
- Dobre dzieci są parzyste lub nieparzyste, na podstawie ich pierwszego inicjału.
- Złe dzieci mają pierwszą początkową całkowicie podzielną przez 3.
- Wszystkie dobre dzieci muszą otrzymać co najmniej jeden prezent.
- Żadne dobre dziecko nie może otrzymać więcej niż 2 prezentów więcej niż jakiekolwiek inne dobre dziecko.
- Jeśli mają pozostać prezenty, musisz je maksymalnie rozprowadzić, nie naruszając 4.
- Złe dzieci nie mogą w ogóle otrzymywać prezentów.
- Jeśli DOWOLNY z nich zostanie naruszony, musisz dokładnie wydrukować
PPCGmas is cancelled!
.
Wymagania dotyczące formatu we / wy
- Pierwsze wejście musi być ciągiem pełnych nazw rozdzielonych tablicą / listą / przecinkiem, a nie tylko pierwszym inicjałem.
- Drugie wejście musi być ciągiem dodatnich liczb całkowitych rozdzielonych tablicą / listą / przecinkami.
- Wynikiem może być dowolne oznaczenie sposobu dystrybucji prezentów, które ma sens; lub
PPCGmas is Cancelled!
.
Zwycięskie kryterium: golf golfowy
TL; DR: Betty to palant, nie rywalizuj.
źródło
3
? EDYCJA : Jeśli ktoś powinien „pieprzyć Betty”, dlaczego w ogóle jest w wyzwaniu?Odpowiedzi:
APL, 171 bajtów
Traktuje to prezenty jako lewy argument, a dzieci jako prawy argument i zwraca macierz, w której pierwsza kolumna zawiera nazwy dzieci, a druga kolumna zawiera prezenty, które otrzymują.
Przypadki testowe:
Wersja bez golfa tutaj.
źródło
JavaScript (ES6),
525492454453 bajtów-71 bajtów dzięki @Guedes -1 bit dzięki @Jake Cobb
Wypróbuj online!
Wersja bez golfa
Myślę, że może być bardziej golfa. Właśnie zrobiłem dosłowne tłumaczenie wersji bez golfa.
Jest to teraz mniej niż suma CharCode składającego się na „santa” (115 + 97 + 110 + 116 + 97 = 535). Tak
źródło
C[0]
zamiastC.charCodeAt(0)
oszczędza 11 bajtów. Ponadto, gdy właściwość powtarza się wiele razy, możesz zapisać jej nazwę jakL='length'
i użyći[L]
zamiasti.length
.P(["Amy", "Betty", "Clyde"],[1,2,3,4,5,6,7,8,9,10,11,12,13,14]);
Python 2,
334355354 bajtyUtracono 21 bajtów, aby obsłużyć przypadki dzieci parzystych lub nieparzystych.
Zapisano 1 bajt dzięki @TuukkaX.
źródło
ord('A')%3==0
jest,False
ale1-ord('A')%3
jest-1
.%3<1
powinno działać.JavaScript (ES6),
218216 bajtówDane wyjściowe (jeśli nie jest to ciąg błędu) to obiekt, którego kluczami są imiona dzieci; wartość to tablica prezentów otrzymywanych przez dziecko.
Zaoszczędziłem dwa bajty, gdy zdałem sobie sprawę, że mam parę zbędnych nawiasów.
Wersja bez golfa:
źródło