Twoim zadaniem jest, biorąc pod uwagę kwadratową siatkę cyfr ( 0-9
), wygenerować jeden ze sposobów, w jaki cyfry można pogrupować, aby:
- Każda cyfra jest częścią dokładnie jednej grupy
- Wszystkie grupy mają tę samą liczbę cyfr
- Wszystkie grupy są ograniczone jednym kształtem wielokąta (oznacza to, że każda cyfra w grupie znajduje się obok [lewej, prawej, góry, dołu] co najmniej jednej innej cyfry tej samej grupy, chyba że każda grupa ma 1 element).
- Wszystkie grupy mają tę samą sumę
Siatka wejściowa zawsze będzie kwadratem: możesz wybrać dowolną metodę wprowadzania (w tym dostarczanie argumentów do funkcji lub metody). Ponadto dane wejściowe podadzą liczbę grup, w których program powinien pogrupować cyfry.
Przykładowe dane wejściowe:
Załóżmy, że masz format wejściowy stringOfDigits numberOfGroups
.
Przykładowym wejściem byłoby:
156790809 3
co tłumaczyłoby (siatka sqrt(9) * sqrt(9)
)
1 5 6
7 9 0
8 0 9
które musielibyście podzielić na 3 grupy, z których każda powinna zawierać 9 / 3 = 3
elementy o tej samej sumie.
Dane wyjściowe: dane wyjściowe powinny być ciągiem cyfr, z opcjonalnymi spacjami i znakami nowej linii do formatowania, a każda cyfra po niej musi zawierać literę a-z
wskazującą jej grupę. W numberOfTotalDigits / numberOfGroups
każdej grupie powinny znajdować się dokładnie elementy. Nigdy nie będziesz musiał dzielić czegoś na więcej niż 26 grup.
Przykładowe dane wyjściowe:
1a 5a 6b
7c 9a 0b
8c 0c 9b
Należy zauważyć, że zastąpienie wszystkich a
s z b
s i b
s z a
s jest równie ważny. Tak długo, jak każda grupa jest oznaczona odrębną literą, dane wyjściowe są ważne.
Ponadto oczekuję, że większość programów wypisze coś w tym kierunku, ponieważ znaki nowej linii / spacje są opcjonalne:
1a5a6b7c9a0b8c0c9b
W takim przypadku dodanie wszystkich cyfr grupy a
, b
lub c
sprawia , że 15. 15. Ponadto wszystkie grupy są powiązane jakimś wielokątem.
Nieprawidłowe dane wyjściowe:
1a 5a 6b
7c 9a 0c
8c 0b 9b
ponieważ grupy nie tworzą wielokątów (konkretnie 6b
jest izolowane i 0c
samotne).
1a 5a 6b
7c 9a 0b
8c 0b 9b
ponieważ grupa b
ma 4 elementy, a c
tylko 2.
Itp.
Jeśli nie ma prawidłowego rozwiązania, twój program może zrobić cokolwiek (tj. Zatrzymać, zawiesić się, działać wiecznie), ale jeśli twój program drukuje, None
gdy nie ma prawidłowego rozwiązania, -15
twój wynik.
Jeśli istnieje więcej niż jedno rozwiązanie, musisz wydrukować tylko jedno, ale -20
jeśli twój program wydrukuje je wszystkie oddzielone separatorem.
To jest golf golfowy, więc wygrywa najkrótszy kod (z bonusami)!
6b
jest izolowany, a nie0b
.156790889 3
wydaje się, że powinno być156790809 3
Odpowiedzi:
Pyth , 122-20-20 = 87
Zmiany:
130 -> 120: Przełączono na wejście oddzielone znakiem nowej linii.
120 -> 134: Naprawiono błąd dotyczący grup o rozmiarach innych niż długość boku matrycy.
134 -> 120: Drukuje wszystkie rozwiązania, w tym równoważne w ramach zmiany nazwy grupy.
120 -> 122: Naprawiono błąd, w którym generowane były tylko ścieżki zamiast wszystkich legalnych grup.
Testowe uruchomienie:
Wyjaśnienie:
źródło
JavaScript (ES6) 361 (376-15)
372(Może jeszcze można trochę golfa)
Jako funkcja, pierwszy parametr to ciąg cyfr, a drugi parametr to liczba grup.
To naiwne wyszukiwanie rekurencyjne, zatrzymujące się przy pierwszym znalezionym rozwiązaniu (brak premii -20).
Potrzebujesz więcej przypadków testowych, aby zweryfikować wydajność przy większych wejściach.
Nieskluczone i wyjaśnione
Testuj w konsoli FireFox / FireBug
F("156790809",3)
wynik1c5c6b7a9c0b8a0a9b
F("156790819",3)
wynikNone
źródło