Wejście:
Lista liczb całkowitych (które nigdy nie będą zawierać zera)
Wynik:
Lista tego samego rozmiaru z liczbą opartą na następujących elementach:
- Jeśli bieżący element jest ujemny: Spójrz na wszystkie elementy przed tym elementem i policz, ile razy cyfry wystąpiły w tych innych liczbach
- Jeśli zamiast tego bieżący element jest dodatni: spójrz na wszystkie elementy po tym elemencie i policz, ile razy cyfra wystąpiła w tych innych liczbach
Jest jeden zwrot: jeśli wielkość listy jest parzysta, liczymy każdą liczbę tylko raz (nawet jeśli pasuje do wielu cyfr), a jeśli wielkość jest nieparzysta, liczymy każdą cyfrę liczb dla każdej cyfry bieżącego elementu (powielona cyfry są liczone wiele razy).
Podajmy kilka przykładów, aby to trochę wyjaśnić:
Przykład z listą parzystą:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
Rozmiar listy jest parzysty , więc każdą liczbę liczymy tylko raz.
4
: Jest pozytywny, więc czekamy z niecierpliwością. Istnieją trzy numery zawierające cyfrę4
(42
,-942
,8374
). Więc zaczynamy od3
.10
: Jest pozytywny, więc czekamy z niecierpliwością. Istnieją dwie liczby zawierające cyfrę1
i / lub0
(-10
,-200
). Więc drugie wyjście to2
.42
: Znowu pozytywne, więc naprzód. Istnieją cztery numery zawierające albo cyfrę4
i / lub2
(-942
,8374
,728
,-200
). Tak więc trzeci wynik to4
.-10
: Tym razem jest to negatywne, więc patrzymy wstecz. Jest tylko jedna liczba zawierająca cyfrę1
i / lub0
(ignorujemy znak minus) (10
). Więc czwarte wyjście to1
.- itp.
Przykład z nieparzystą listą:
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
Rozmiar listy jest nieparzysty , dlatego liczymy każdą cyfrę.
382
: Jest pozytywny, więc czekamy z niecierpliwością. Jest jedna3
w pozostałych liczbach (381
), sześć8
w pozostałych liczbach (-82, -8, 381, 228, 28, -28
), a sześć2
w pozostałych liczbach (-82, 228, 28, -28, 2
). Więc zaczynamy od13
.-82
: Jest negatywny, więc do tyłu. Jest jeden3
pod drugim numerem (382
) i jeden8
pod drugim numerem (382
). Więc drugie wyjście to2
.- ...
228
: To pozytywne, więc naprzód. Istnieją trzy2
„sw innych numerów (28
,-28
,-2
), a kolejne trzy2
” s, a dwa8
„s w innych liczb (28
,-28
). Więc ten wynik to8
.- itp.
Zasady konkursu:
- Możesz założyć, że dane wejściowe nigdy nie będą zawierać
0
jako element, ponieważ nie są ani dodatnie, ani ujemne. - Możesz założyć, że lista wejściowa zawsze będzie zawierać co najmniej dwa elementy.
- I / O jest elastyczny. Dane wejściowe / wyjściowe mogą być tablicą / listą liczb całkowitych, ciągiem rozdzielanym, matrycą cyfr / znaków itp.
- Jeśli pierwsza liczba na liście jest liczbą ujemną lub ostatnia liczba na liście jest liczbą dodatnią, będzie to 0 na wynikowej liście.
- W przypadku list nieparzystych liczby zawierające tę samą cyfrę wiele razy są liczone wiele razy, podobnie jak
228
w powyższym nieparzystym przykładzie, w którym8
zamiast (3 + 3 + 2) zamiast5
(3 + 2).
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9, 1, 7, 3, 5, 5, 3, 7, 1, 9 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2, 8, 4, 5, 6, 3, 8, 1, 10, 0 ]
Input: [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8, 9, 3, 9, 3, 4, 5, 4, 12 ]
Input: [-1, 11, 11, 1]
Output: [0, 2, 1, 0]
Input: [1, 11, 11, -1]
Output: [3, 2, 1, 3 ]
Input: [-1, 11, 1]
Output: [0, 2, 0]
Input: [1, 11, -1]
Output: [3, 2, 3 ]
δ¢
, nigdy nie widziałem dobrze używanego podwójnego wektora, ładny.Python 2 ,
149148121116111107 bajtówWypróbuj online!
źródło
Java (JDK 10) , 204 bajty
Wypróbuj online!
Kredyty
źródło
[1,11,-1]
powinien wrócić[3,2,3]
. To nieparzysta lista, więc wszystkie cyfry się liczą. Pierwszy1
: czekam trzy1
s W sumie:11,-1
. Po drugie11
: czekaj na każdą cyfrę: jeden1
+ jeden1
. Po trzecie-1
: Spójrz do tyłu, trzy1
s W sumie:-1,11
. (Przy listach nieparzystych powinieneś spojrzeć na każdą cyfrę, nawet taką samą. Wyjaśnię to w wyzwaniu, ale ten nieparzysty przykład z liczbą228
nieco to wyjaśnia.),t
i zmieniai+(a[i]>0?1:-1)
sięi+(t=a[i]>0?1:-1)
, a następnie po prostu użyćj+=t
zamiastj+=a[i]>0?1:-1
.Perl 6 ,
10085 bajtówWypróbuj online!
Używa dużego operatora mnożenia ⊍.
źródło
Perl 5
-n
, 92 bajtówWypróbuj online!
źródło
JavaScript (Node.js) ,
164.158.140139 bajtówWypróbuj online!
źródło
Rubin , 126 bajtów
Wypróbuj online!
źródło
Galaretka ,
4342 bajtyWypróbuj online!
źródło