Kontynuacja tego pytania .
Zadanie
Biorąc pod uwagę tablicę dodatnich liczb całkowitych, znajdź największy element k, dla którego:
Istnieje pewna dodatnia odległość całkowita n , tak że element w tablicy umieszczony n miejsc po lewej lub prawej stronie od k jest równy n .
Tablica z pewnością zawiera przynajmniej jeden element spełniający ten warunek.
Najkrótszy kod (w bajtach) wygrywa. Możesz wybrać dowolny format we / wy.
Przykład
Biorąc pod uwagę wkład
[4, 6, 7, 9, 3, 6, 5, 7, 2]
Dopuszczalne wartości to:
4
, Jak tam jest7
położony 7 pozycji do swojego prawa- Pierwszy
6
, ponieważ3
po jego prawej stronie znajdują się 3 pozycje 3
, Jak tam jest4
położony 4 pozycje po jego lewej stronie5
, Jak tam jest2
usytuowany 2 pozycje do swojego prawa- Drugi
7
, ponieważ3
po lewej stronie znajdują się 3 pozycje.
Z tych wartości największa jest 7
.
Przypadki testowe
[1, 13] → 13
[2, 9, 8, 3, 72, 2] → 8
[5, 28, 14, 5, 6, 3, 4, 7] → 14
[1, 3, 5, 15, 4, 1, 2, 6, 7, 7] → 7
[5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3] → 5
[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5] → 10
Odpowiedzi:
Galaretka , 9 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
05AB1E , 21 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
Haskell,
615755 bajtówPrzykład użycia:
(f.zip[0..]) [5,28,14,5,6,3,4,7]
->14
.(Mniej więcej) bezpośrednia implementacja definicji: dla każdego indeksu
n
listy wejściowejx
należy zachować,a := x!!n
jeśli istnieje indeks, wi
którymb := x!!i
jest równyabs(n-i)
. Znajdź maksimum.Edycja: @xnor zapisał dwa bajty. Dzięki!
źródło
x
, definiowanie funkcjiz
i komponowanie powinno być krótszezip[0..]
.Galaretka , 10 bajtów
Wypróbuj online!lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Python 3,
858072 bajtyEdycja: -8 bajtów dzięki @Dennis
źródło
EXCEL:
3230 bajtów=MAX(IF(A:A-ROW(A:A)<0,A:A,0))
Nadal nie mogę uwierzyć, że mam tak krótko ...
Sposób użycia:
wklej to w DOWOLNĄ komórkę Z WYJĄTKIEM komórek kolumny A. Po wklejeniu, podczas edycji, naciśnij
control
+shift
+,enter
aby poprawnie wprowadzić.umieść swoje wartości w kolumnie A, 1 wartość na komórkę (zgodnie z wpisem CSV).
Jeśli chcesz dowiedzieć się, jak to działa, zamieściłem dodatkową wskazówkę w moich Poradach dotyczących gry w golfa w pytaniu Excel .
źródło
JavaScript (ES6), 61 bajtów
źródło
Perl, 45 bajtów
Obejmuje +2 za
-ap
Podaj liczby w wierszu na STDIN:
largest.pl
:Jeszcze jeden bajt można uzyskać, zastępując
^P
dosłownie znak kontrolny, ale prowadzi to do ostrzeżenia STDERR o ostatnich perlach.Zakłada
largest number + array length < 2^32
źródło
Pyth,
1917 bajtówDzięki @ Pietu1998 za -2 bajty
Program, który pobiera dane z listy na STDIN i drukuje wynik.
Wypróbuj online
Jak to działa
źródło
}#
jest taki sam jak@
. Ponadto, jeśli przestawisz ostatni bit,-kb+bk
, możesz usunąć ostatni,k
ponieważ Pyth automatycznie wstawia go.MATL, 13 bajtów
Dane wejściowe muszą być wektorem kolumny. Oznacza to, że dane wejściowe są oddzielone średnikami, jak [1; 2; 3], lub przecinki oddzielone transpozycją zaznaczenia na końcu, jak [1,2,3] ”.
Wypróbuj online!
Wszystkie przypadki testowe: (A) , (B) , (C) , (D) , (E) , (F)
Dzięki Suever za sugestie w czacie MATL, aby zapisać 2 znaki.
Wyjaśnienie:
Ogólna strategia jest taka sama jak moja odpowiedź Octave / MATLAB, w której wyjaśniono podstawową koncepcję: https://codegolf.stackexchange.com/a/94161/42247
Konkretny kod w tej odpowiedzi MATL jest zbudowany w następujący sposób:
Rdzeniem metody jest konstrukcja macierzy Toeplitza, której ij'ty wpis to abs (ij). Najpierw konstruujemy macierz Toeplitz z wpisami abs (i-1) +1 za pomocą polecenia TOTlitz MATL YT w następujący sposób:
Aby zobaczyć, jak to działa, wywołajmy wektor wejściowy do tego fragmentu kodu „v”. „N” znajduje długość v, a następnie „:” konstruuje wektor 1: długość (v). Następnie „t” tworzy kolejną kopię 1: długość (v) na stosie; ta dodatkowa kopia jest potrzebna z powodu dobrze znanego błędu w funkcji YT w MATL (odpowiednik MATL toeplitz ()), w którym oczekuje dwóch kopii danych wejściowych zamiast 1. Następnie YT bierze dwie kopie tego wektora 1 : length (v) poza stosem i tworzy z nich macierz abs (ij) +1 Toeplitz.
Teraz musimy odjąć 1 od tej macierzy, aby uzyskać macierz Toeplitz z wpisami abs (ij) i znaleźć lokalizacje ij, w których ta macierz Toeplitz abs (ij) jest równa macierzy wszystkich wektorów kolumn zawierających kopie kolumn danych wejściowych wektor v. Odbywa się to w następujący sposób:
Pierwsze „t” tworzy dodatkową kopię danych wejściowych i zapisuje je na stosie. „N: tYT” tworzy macierz toeplitz, jak opisano wcześniej, i wysyła ją do stosu. Następnie „q” odejmuje 1 od macierzy Toeplitza, a „=” dokonuje porównania równości elementarnej między macierzą abs (ij) a wektorem, którego kolumny są kopiami danych wejściowych. Zauważ, że porównując wektor kolumny z macierzą, domyślnie wykorzystujemy reguły nadawania przez operatora MATLAB / MATL (wektor kolumny w porównaniu jest kopiowany w celu utworzenia macierzy bez wydawania poleceń).
Na koniec musimy znaleźć indeksy wierszy i, w których znajduje się kolumna j, taka, że ij'ty wpis w różnicy macierzy skonstruowanej powyżej wynosi 1, a następnie uzyskamy wartość wektora wejściowego odpowiadającego tym indeksom, a następnie weźmy maksimum. To w następujących trzech krokach:
1) Znajdź indeksy dla dowolnego wiersza zawierającego niezerową:
2) Wyodrębnij elementy wektora wejściowego odpowiadające tym indeksom:
3) Znajdź i zwróć maksymalny element:
źródło
YT
zmieniło się w wersji 20.2.2 . Teraz domyślnie używa 1 danych wejściowych (co jest ogólnie bardziej przydatne). Chociaż zaoszczędziłoby Ci to 1 bajt tutaj (usuńt
wcześniejYT
), nie można go wykorzystać, ponieważ zmiana języka jest późniejsza niż wyzwanie. Ale powoduje to, że twoja odpowiedź nie jest już ważna w nowej wersji, która jest teraz dostępna w TIOn:
przezf
Rubin, 66 bajtów
źródło
Octave / MATLAB, 40 bajtów
Dane wejściowe muszą być wektorem kolumny.
Podziękowania dla Luisa Mendo za sugestie oszczędzające 3 bajty (patrz komentarz)
Dzięki Suever za sugestie oszczędzające 4 bajty więcej (zastępując ~~ (sum ()) dowolnymi ())
Wyjaśnienie:
Biorąc pod uwagę wektor wejściowy v, problem ten jest równoważny ze znalezieniem wszystkich rozwiązań i, j następującego równania dyskretnego,
gdzie abs () jest funkcją wartości bezwzględnej. Każde v (i), dla którego rozwiązano to równanie, jest jednym z kandydujących rozwiązań, które możemy zmaksymalizować.
Jako dyskretna funkcja i i j, wszystkie możliwości lewej strony mogą być ułożone w matrycy toeplitz, która wygląda mniej więcej tak:
A ponieważ prawa strona nie zależy od i, wszystkie możliwości można ułożyć w macierz, w której wszystkie kolumny są kopiami danych wejściowych,
Aby znaleźć wszystkie rozwiązania równania, odejmujemy te dwie macierze i znajdujemy lokalizacje, w których występuje zero. Wiersze, w których występuje zero, odpowiadają pożądanym indeksom i, w których istnieje aj, tak że abs (ij) = v (i).
Inne sztuczki:
źródło
v
jako wektor kolumny, po prostu zaznacz to w odpowiedzi. Ponadto, zastąpieniefind
przez~~
Aby zapisać kolejne dwa bajtytoeplitz
(YT
), domyślnie wykorzystuje dwa wejścia (nie jedno)Mathematica, 69 bajtów
Funkcja anonimowa. Pobiera listę liczb całkowitych jako dane wejściowe i zwraca liczbę całkowitą jako dane wyjściowe. Zignoruj wygenerowane wiadomości.
źródło
Scala, 94 bajty
źródło
PHP, 128 bajtów
źródło
Java 7,
125123 bajty2 bajty zapisane dzięki @mrco .
Niegolfowany (rodzaj) i kod testowy:
Wypróbuj tutaj.
Wydajność:
źródło
,y
. I rzeczywiście doszedłem do tego samego wniosku dotyczącego pojedynczego trójskładnika jeśli. Oczywiście jest to możliwe, ale zrobisz to dwukrotnie, dzięki czemu będzie znacznie dłuższy.Java, 118 bajtów
źródło
Python, 58 bajtów
Na podstawie Tony S. Ruby odpowiedź . Ta odpowiedź działa w Python 2 i 3. Sugestie dotyczące gry w golfa są mile widziane.
Ungolfing
źródło
Ruby 56 bajtów
Moje najmniejsze rubinowe rozwiązanie.
Całkiem łatwy do przetestowania w konsoli szynowej
Zaczęło się to od 63 bajtów, dzięki za sugestie, które pomogą go przyciąć!
źródło
.map
zamiast tego możesz użyć.each
(x) if (y)
można również zastąpić(y)&&(x)
a<<b
zamiasta+=[b]
Właściwie 17 bajtów
Ta odpowiedź jest w rzeczywistości portem mojej odpowiedzi w języku Python . Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
T-SQL (sqlserver 2016), 132 bajty
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
JavaScript (ES6),
5654 bajtówźródło
Clojure, 68 bajtów
Na przykład
(map-indexed (juxt - +) [3 4 1 2])
jest([-3 3] [-3 5] [1 3] [1 5])
(indeks+/-
jego wartości), są one używane do wyszukiwania wartości z oryginalnego wektora (domyślnie poza zakresem0
) i zostaje znaleziona maksymalna wartość. Nadal czuję się trochę gadatliwy, ale przynajmniej muszę to wykorzystaćjuxt
:)źródło