Zadanie
Biorąc pod uwagę listę liczb całkowitych L i kolejna liczba całkowita s , celem jest obliczenie sumy kolumn mądry wszystkich ów -Długość (potencjalnie nakładają się) plastry L , a dotyczące ich położenia w stosunku do L (patrz niżej).
Definicje
Gdy s -długość (pokrywające się) plastry z listy L są stycznym podsekwencjami (bez opakowania) w L , które mają długość y .
W celu uzyskania pozycji wycinków s względem L można sobie wyobrazić zbudowanie „drabiny”, w której każdy wycinek s i ma przesunięcie pozycji i od początku.
Okular
- y jest liczbą całkowitą większa niż 1 i ściśle mniejszy od długości L .
- L zawsze będzie zawierać co najmniej 3 elementy.
- Możesz konkurować w dowolnym języku programowania i możesz przyjmować dane wejściowe i generować dane wyjściowe za pomocą dowolnej standardowej metody , zwracając uwagę, że te luki są domyślnie zabronione. To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach) dla każdego języka .
Przykłady i przypadki testowe
Oto działający przykład:
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
-------------------------------- (+) | column-wise summation
[1, 4, 9, 12, 15, 18, 21, 16, 9]
I jeszcze kilka przypadków testowych:
[1, 3, 12, 100, 23], 4 -> [1, 6, 24, 200, 23]
[3, -6, -9, 19, 2, 0], 2 -> [3, -12, -18, 38, 4, 0]
[5, 6, 7, 8, 2, -4, 7], 3 -> [5, 12, 21, 24, 6, -8, 7]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3 -> [1, 4, 9, 12, 15, 18, 21, 16, 9]
[1, 1, 1, 1, 1, 1, 1], 6 -> [1, 2, 2, 2, 2, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
code-golf
array-manipulation
subsequence
Pan Xcoder
źródło
źródło
s
jest większy niżL/2
. Może dodać więcej przypadków testowych, gdy tak jest[1, 1, 1, 1, 1, 1, 1], 6 ->
[1, 2, 2, 2, 2, 2, 1] `lub[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
?Odpowiedzi:
J ,
11, 98 bajtów-1 bajt dzięki milom!
Jak to działa?
Lewy argument to s, prawy - L
]\
- dzieli L na podlisty o długości s/.
- wyciąga ukośne przekątne (anty przekątne)+/
- dodaje je[:
- robi widelec z powyższych czasownikówOto przykładowa sesja J dla pierwszego przypadku testowego:
Wypróbuj online!
źródło
/.
, w przeciwieństwie do głównej przekątnej od góry do lewej.,/\
z]\
Haskell ,
5956 bajtówWypróbuj online!
Definiuje funkcję,
(#)
która przyjmuje listęs
i liczbęn
jako argumenty.Jest to oparte na spostrzeżeniu, że dla
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
in = 3
jest taki sam jak
Aby wygenerować tę początkowo rosnącą, potem stałą i ostatecznie malejącą listę, możemy zacząć
co daje
[1, 2, 3, 4, 5, 4, 3, 2, 1]
. Dodanien
dominimum
wyrażenia dodatkowego ograniczenia daje poprawną[1, 2, 3, 3, 3, 3, 3, 2, 1]
odpowiedź na listęn = 3
, chociaż dlan = 6
(lub ogólnie dowolnegon > lengths s/2
)length s + 1 - n
potrzebne jest dodatkowe ograniczenie :lub krócej:
W przypadku mnożenia par
[1..length s]
jest spakowanes
, a ponieważzip
obcina dłuższą listę do długości krótszej,[1..]
można użyć listy nieskończonej :źródło
JavaScript (ES6),
656258 bajtówZaoszczędź 4 bajty dzięki @Shaggy
Pobiera dane wejściowe w składni curry
(a)(n)
.Przypadki testowe
Pokaż fragment kodu
źródło
a=>n=>a.map((v,i)=>v*Math.min(++i,n,a.length+1-(n>i?n:i)))
działa na 58 bajtów?Java 8, 83 bajty
Ten pierwszy przypadek testowy (i dwa ostatnie, które dodałem) przykręcił mnie wiele razy, ale w końcu teraz działa ...: D
Zmienia tablicę wejściową zamiast zwracać nową.
Wyjaśnienie:
Wypróbuj online.
źródło
05AB1E , 12 bajtów
Wypróbuj online!
źródło
Mátl , 8 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Rozważ dane wejściowe
[1, 3, 12, 100, 23]
i4
.źródło
APL (Dyalog Unicode) ,
1914 bajtów SBCS-5 dzięki ngn.
Anonimowa funkcja ukrytej poprawki przyjmuje s jako lewy argument, a L jako prawy argument. Zakłada
⎕IO
( I ndex O rigin), że jest taki,0
jak domyślny w wielu systemach.Wypróbuj online!
Objaśnienie z przykładowym przypadkiem
[1,3,12,100,23]
(
…)
Zastosuj następującą anonimową funkcję ukrytą:,/
nakładające się okna tego rozmiaru;[[1,3,12],[3,12,100],[12,100,23]]
(
…)\
Łącznie zastosuj to milczenie następującą anonimową funkcję milczącą:⊢
właściwy (najbardziej) argument0,
z zero po lewej stronieSkumulowana redukcja oznacza, że wstawiamy funkcję w każdą „przestrzeń” między kolejnymi terminami, przesuwając się od prawej do lewej. Dla każdego „spacji” funkcja odrzuci lewy argument, ale doda dodatkowe zero. Skutecznie dodaje to tyle zer do każdego terminu, ile jest „spacji” po jego lewej stronie, więc pierwszy element otrzymuje zero spacji, drugi otrzymuje jeden, a trzeci otrzymuje dwa:
[[1,3,12],[0,3,12,100],[0,0,12,100,23]]
↑
awansować, łącząc listy w jedną matrycę, wypełniając je zerami;┌ ┐
│1 3 12 0 0│
│0 3 12 100 0│
│0 0 12 100 23│
└ ┘
∘
następnie+⌿
sumuj w pionie;[1,6,36,200,23]
źródło
⊢,⍨¨0⍴⍨¨⍳∘≢
->{0,⍵}\
+⌿∘↑((0,⊢)\,/)
bardziej elegancki.2{(⊃⌽⍺),⊃⍵}/⊢
->2{⊃¨(⌽⍺)⍵}/⊢
Galaretka , 6 bajtów
Wypróbuj online!
Jak to działa
źródło
Japt , 13 bajtów
Zajęło to zdecydowanie zbyt długo, gdy
s
>L/2
!Spróbuj
Wyjaśnienie
źródło
s > L/2
! ” Miałem dokładnie to samo. Inne przypadki testowe są łatwe, ale ten pierwszy (i dwa, które dodałem na końcu) był denerwujący! .. +1 ode mnie!Wolfram Language (Mathematica) , 42 bajty
Wypróbuj online!
źródło
Julia , 41 bajtów
Wypróbuj online!
\
operatora.a[L=end]
jest krótszą alternatywą dlaL=length(a)
.źródło
Japt ,
1312 bajtów-1 bajt dzięki @ETHproductions
Wypróbuj online!
źródło
R ,
5251 bajtówWypróbuj online!
Jest to równoważne z odpowiedzią Laikoni .
seq(l)
produkuje indeksy,1...length(l)
ponieważlength(l)>1
(w przeciwnym razie produkowałby1...l[1]
). Zapisuję go jakox
, zapisuję jego odwrotność jakoy
i biorę pierwszy elementy
(length(l)
), aby starannie przenieść odpowiedź Laikoni i zapisać bajt!Oryginalna odpowiedź, 52 bajty
Wypróbuj online!
Wyjście
l
elementwise pomnożona przez minimums
, indeks 1 opartego na elemenciex
,length(l)-x+1
ilength(L)-s+1
.Jest to również równoważne z odpowiedzią Laikoni, używaną
L-x
zamiast,rev(x)
ponieważ jest krótsza.źródło
APL + WIN, 25 bajtów
Monituje o wprowadzenie ekranu L, a następnie s
Wyjaśnienie:
źródło
K (oK) , 30 bajtów
Rozwiązanie:
Wypróbuj online!
Przykład:
Wyjaśnienie:
Nie sądzę, żebym mógł konkurować z J na tym. Wygeneruj listę zer, które chcesz dołączyć i dodać do listy przesuwnych okien, a następnie podsumuj:
Podział jest następujący ... choć nadal wydaje się niezdarny.
źródło
Łuska , 4 bajty
Wypróbuj online!
Wykorzystuje pomysł z odpowiedzi J. Galena Iwanowa .
Wyjaśnienie
źródło
C (gcc) , 100 bajtów
Wypróbuj online!
źródło
Python 2 ,
6866 bajtów-2 bajty dzięki Laikoni
Wypróbuj online!
źródło
max(i,n-1)
zamiast[i,n-1][n>i]
.Perl 5 , 63 bajtów
Wypróbuj online!
źródło
C (gcc) ,
838179 bajtówZasadniczo manipulowanie listą obejmuje trzy „fazy”: zwiększanie, podtrzymywanie i ochładzanie. Idąc wzdłuż listy, zwiększamy nasz współczynnik, aż osiągniemy maksimum. Jeśli pełny zestaw plasterków może zmieścić się na liście, to maksimum będzie takie samo jak długość plasterków. W przeciwnym razie będzie taka sama, jak liczba pasujących plasterków. Z drugiej strony ponownie zmniejszymy współczynnik, aby wylądować na 1 na ostatnim elemencie.
Długość faz przyspieszania i ochładzania rezerwujących ten płaskowyż jest o jeden mniejsza niż ten maksymalny czynnik.
Niefundowane pętle przed ich połączeniem mają nadzieję, że są wyraźniejsze (R = długość fazy rozruchu):
Trzy pętle to o wiele za dużo, więc decyzja o współczynniku na podstawie r daje nam jedną pętlę (użycie s dla R do zapisania niektórych bajtów):
Wypróbuj online!
źródło
Perl,
4544 bajtówObejmuje +4
-ai
Zauważ również, że ten kod daje 2 ostrzeżenia perl przy uruchomieniu. Możesz je wyłączyć kosztem jednego pociągnięcia, dodającX
opcjęPodaj długość maski po
-i
opcji i tablicę w jednym wierszu na STDIN:Tylko kod:
źródło
Rubin , 62 bajty
Wypróbuj online!
Zasadniczo port odpowiedzi na javascript Arnaulda , z tym wyjątkiem, że potrzeba
with_index
jest o wiele bardziej bolesna.W czasie, gdy musiałem zdecydować się na przesłanie tego, grałem w golfa od tej 70-bajtowej wersji, która jest bliższa algorytmowi Dennisa .
źródło
Clojure, 72 bajty
źródło
Pyt , 106 bajtów
Pobiera L w pierwszym wierszu jako tablicę i przyjmuje s w drugiej linii
Wyjaśnienie:
Wypróbuj online!
źródło
Python + numpy, 64 bajty
Nazwij to l jako listą, a N jako długością.
źródło