Młoda schemat jest ułożenie pudełek w lewo-uzasadnione wierszy i kolumn top-uzasadnione. Dla każdego pola wszystkie pola nad nim i po jego lewej stronie są zajęte.
XXXXX
XXX
XXX
X
Długość haczyk pudełka jest liczba pól po jego prawej stronie, w tym samym rzędzie, i poniżej niej w tej samej kolumnie, a także liczyć się raz. Na przykład drugie pudełko ma haczyk o długości 6:
X****
X*X
X*X
X
Oto wszystkie długości haków:
86521
532
421
1
Twoim celem jest obliczenie iloczynu długości haka tutaj 8*6*5*2*1*5*3*2*4*2*1*1 = 115200
.
(Przeczytaj o formule długości haka, jeśli jesteś zainteresowany, dlaczego to wyrażenie ma znaczenie.)
Dane wejściowe: zbiór rozmiarów wierszy w postaci liczb takich jak [5,3,3,1]
lub jako powtarzający się symbol jednoargumentowy jak [[1,1,1,1,1], [1,1,1], [1,1,1], [1]]
lub "XXXXX XXX XXX X"
. Możesz oczekiwać, że lista zostanie posortowana rosnąco lub malejąco, jak chcesz. Lista będzie niepusta i będzie zawierać wyłącznie dodatnie liczby całkowite.
Wyjście: iloczyn długości haka, który jest dodatnią liczbą całkowitą. Nie martw się o przepełnienie liczb całkowitych lub środowisko wykonawcze.
Wbudowane funkcje specyficzne dla schematów Younga lub partycji całkowitych są niedozwolone.
Przypadki testowe:
[1] 1
[2] 2
[1, 1] 2
[5] 120
[2, 1] 3
[5, 4, 3, 2, 1] 4465125
[5, 3, 3, 1] 115200
[10, 5] 798336000
{ee::+W%}_q~%z%:+:*
(19 bajtów) Format wejściowy:[[1][1 1 1][1 1 1][1 1 1 1 1]]
%
: PJ, 24 bajty
25 bajtów (z wyjaśnieniem):
Pobiera dane wejściowe jako listę rosnących list jednych cyfr podobnych do przykładu
[[1], [1,1,1], [1,1,1], [1,1,1,1,1]]
.Stosowanie:
metoda
Wyniki pośrednie wyświetlane na wejściu
1 1 1 1 1;1 1 1;1 1 1;1 (5,3,3,1 in unary)
( dotyczy poprzedniej wersji z malejącymi długościami, ale przy użyciu tej samej metody ):Wersja jawna o tej samej długości:
Wypróbuj online tutaj.
źródło
Pyth - 21 bajtów
Tracę dużo bajtów w obliczeniach pionowych. Skupię się na tym.
Przyjmuje dane wejściowe jak
[5, 3, 3, 1]
.Wypróbuj tutaj online .
źródło
Pyth, 18 bajtów
Pobiera dane wejściowe w kolejności rosnącej, np
[1, 3, 3, 5]
.Demonstracja.
Alternatywne rozwiązanie, 19 bajtów
źródło
Python 2,
8988 bajtów(Dzięki @xnor za jeden szalony zapis bajtów poprzez połączenie
p
ij
)d.get
Wygląda trochę podejrzanie mi, ale poza tym jestem względnie zadowolony z tego. Próbowałem innych metod, takich jak rekurencja i kompresowanie, ale to jedyne, które udało mi się uzyskać poniżej 100.Pobiera dane wejściowe ze STDIN jako listę w porządku rosnącym, np
[1, 3, 3, 5]
.źródło
Haskell, 68 bajtów
Przykład użycia:
p [5,4,3,2,1]
->4465125
f
skanuje od lewej do prawej, mnożąc długość najbardziej wysuniętego haka przez rekurencyjne wywołanie do siebie, w którym każdy element listy wejściowej jest redukowany przez1
(upuszczenie go po osiągnięciu0
).p
skanuje od góry do dołu, mnożącf
całą listęp
przez ogon.źródło
R, 174 bajtów
Więc ... To rozwiązanie jest dość długie i prawdopodobnie mogłoby być bardziej golfem. Pomyślę o tym !
Nie golfowany:
źródło
Python 2,
135128 bajtówPobiera listę typów Python ze standardowego wejścia:
Jest to bardzo kanoniczna implementacja, ale jak dotąd nie wymyśliłem nic mądrzejszego. Mam wrażenie, że rozwiązania będą znacznie krótsze, nawet w przypadku „prawdziwych” języków programowania.
Otrzymujemy liczbę pól w każdym rzędzie jako dane wejściowe. To rozwiązanie najpierw liczy liczbę pól w każdej kolumnie, w której jest przechowywany
c
(w rzeczywistości jest to liczba minus 1, aby uprościć jego użycie w późniejszych obliczeniach). Następnie iteruje wszystkie pola i mnoży długości haczyków. Sama długość haka jest łatwa do obliczenia, gdy masz już liczbę pól w każdym rzędzie i kolumnie.źródło
m
?JavaScript ( ES6 ) 69
Funkcja przyjmująca tablicę liczb całkowitych w porządku rosnącym .
Uruchom fragment kodu, aby przetestować (tylko Firefox)
źródło
Python,
9591 bajtówTo jest implementacja Pythona odpowiedzi Haskella . Sugestie dotyczące gry w golfa mile widziane.
źródło
z and _ or 1
takz==[]or _
, gdyz
jest lista, wykorzystując fakt, żeTrue==1
. Deklaracje funkcji Pythona są bardziej sformułowane niż Haskell, więc często daje dobrą korzyść w celu zdefiniowania pojedynczej funkcji rekurencyjnej, która wykonuje zarówno wewnętrzną, jak i zewnętrzną pętlę rekurencyjną, chociaż nie wiem, jak to możliwe.