Biorąc pod uwagę listę liczb całkowitych, Twoim zadaniem jest wyprowadzenie drugiej największej wartości w pierwszych k elementach, dla każdego k między 2 a długością listy wejściowej.
Innymi słowy, wypisz drugą co do wielkości wartość dla każdego prefiksu wejścia.
Możesz podać dowolną wartość dla pierwszego elementu (gdzie k = 1) lub po prostu pominąć tę wartość, ponieważ nie ma drugiego maksimum dla listy 1 elementu. Możesz założyć, że na wejściu są co najmniej 2 elementy.
Najkrótszy kod wygrywa.
Przykłady
Input:
1 5 2 3 5 9 5 8
Output:
1 2 3 5 5 5 8
Input:
1 1 2 2 3 3 4
Output:
1 1 2 2 3 3
Input:
2 1 0 -1 0 1 2
Output:
1 1 1 1 1 2
code-golf
number
array-manipulation
jimmy23013
źródło
źródło
k
określa?1
nie jest, ściśle rzecz biorąc, drugą największą wartość z1,1
(2nd przykład) to druga wartość, gdy sortowane malejąco.-1, 0, 0, 1, 1, 2
dla ostatniego przypadku testowego.)Odpowiedzi:
05AB1E , 5 bajtów
Wypróbuj online!
Zwraca
[]
(dowolna wartość) dla pierwszego.źródło
η¦ε{¨θ
powinien działać przez 6 bajtówZ©KZ®‚¹sÃ
było to, co myślałem, nie wiedziałem, żeà
to nawet coś!Áθ
zamiast tego.Łuska ,
97 bajtówZaoszczędź bajt lub dwa dzięki @Zgarb
Zwraca
0
za pierwsze „drugie maksimum”Wyjaśnienie
Wypróbuj online!
źródło
→hO
tego możesz zmapować i zapisać bajt.Python 2 , 54 bajty
Wypróbuj online!
źródło
JavaScript (ES6),
585150 bajtówZapisano 1 bajt dzięki @Neil
Dołącza
undefined
dla k = 1 .Przypadki testowe
Uwaga: ten fragment
JSON.stringify()
kodu jest używany do odczytu, który - jako efekt uboczny - przekształcaundefined
się wnull
.Pokaż fragment kodu
źródło
a=>a.map(e=>(b=[e,...b]).sort((a,b)=>b-a)[1],b=[])
jest tylko 50.Pyth , 8 bajtów
Wypróbuj online! lub Wypróbuj pakiet testowy!
W jaki sposób?
Spowoduje to wyświetlenie pierwszego elementu listy jako pierwszej wartości na liście, zgodnie ze specyfikacją Możesz wygenerować dowolną wartość dla pierwszego elementu .
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Pierwszą wartością będzie zawsze 0, a kolejne liczby będą drugimi maksimami każdego prefiksu.
Wyjaśnienie
źródło
Java (OpenJDK 8) ,
8786 bajtówWypróbuj online!
źródło
int x,y=x=
. Nie wiedziałem, że w tym samym oświadczeniu można by wykonać oddzielną deklarację i przypisanie.Python 2 , 45 bajtów
Wypróbuj online!
Prawa strona kodu jest oczywista. Co jednak umieszczamy po lewej stronie
and
? Ponieważ rekurencyjnie łączymy części listy, potrzebujemy, aby lewa strona była prawdziwa, jeślil
ma 2 lub więcej elementów, a pustą listę w przeciwnym razie.l[1:]
ładnie spełnia to kryterium.źródło
C # (mono) , 81 bajtów
Wypróbuj online!
źródło
Brachylog , 10 bajtów
Wypróbuj online!
źródło
Partia, 123 bajty
źródło
APL (Dyalog) , 15 bajtów
Wypróbuj online!
źródło
05AB1E , 5 bajtów
Znalazłem kolejny 5-bajtowy, bardzo różny od rozwiązania Erika . Dowolna wartość jest pierwszym elementem listy.
Wypróbuj online!
Wyjaśnienie
Weźmy przykład, aby ułatwić zrozumienie.
Najpierw otrzymujemy niejawny wkład, powiedzmy, że jest
[1, 5, 2, 3, 5, 9, 5, 8]
.Następnie wypychamy jego prefiksy za pomocą
η
-[[1], [1, 5], [1, 5, 2], [1, 5, 2, 3], [1, 5, 2, 3, 5], [1, 5, 2, 3, 5, 9], [1, 5, 2, 3, 5, 9, 5], [1, 5, 2, 3, 5, 9, 5, 8]]
.Teraz kod mapuje listę i sortuje każdy prefiks za pomocą
{
-[[1], [1, 5], [1, 2, 5], [1, 2, 3, 5], [1, 2, 3, 5, 5], [1, 2, 3, 5, 5, 9], [1, 2, 3, 5, 5, 5, 9], [1, 2, 3, 5, 5, 5, 8, 9]]
.Następnie podjąć bardzo ostatni element i przenieść go na początku:
[[1], [5, 1], [5, 1, 2], [5, 1, 2, 3], [5, 1, 2, 3, 5], [9, 1, 2, 3, 5, 5], [9, 1, 2, 3, 5, 5, 5], [9, 1, 2, 3, 5, 5, 5, 8]]
.Oczywiście, teraz kod pobiera ostatni element każdej podlisty za pomocą
θ
-[1, 1, 2, 3, 5, 5, 5, 8]
(pierwszy jest wartością arbitralną.źródło
CJam , 16 bajtów
Wypróbuj online!
Zwraca pierwszy element dla pierwszego.
-2 dzięki Challenger5 .
źródło
{_,,:)\f{<$-2=}}
jest dwa bajty krótszy.R ,
5449 bajtówDzięki Giuseppe -5 bajtów. Nie znałem tej funkcji
seq()
.Wypróbuj online!
źródło
seq(x<-scan())
jest krótszy o kilka bajtów.Japt ,
1210 bajtówTablica wyjściowa składa się z pierwszego elementu w tablicy wejściowej, po której następuje pożądana sekwencja.
Sprawdź to
Wyjaśnienie
Domniemane wejście tablicy
U
.Mapuj
U
, gdzieY
jest bieżący indeks.Plasterek
U
od0
doY+1
.Sortuj malejąco.
Zdobądź drugi element.
Niejawnie wypisuje wynikową tablicę.
źródło
MATL ,
1910 bajtówPodziękowania dla Luisa Mendo za zgolenie 9 bajtów!
Spróbuj tutaj .
Wyjaśnienie
źródło
J, 13 bajtów
Wypróbuj online!Pierwszym elementem jest zawsze 1.
Wyjaśnienie
Przestrzeń ma znaczenie.
źródło
Ohm ,
108 bajtów-2 bajty dzięki produktom ETH.
Wypróbuj online!
Uh, to dziwne, ale nie wiem jak inaczej naciskać liczbę ujemną ...Nie bardzo wiem oma. : Pźródło
0 2-
wydaje się bardzo dziwny ...2~
?Mathematica, 45 bajtów
Wypróbuj online!
źródło
Perl 5 , 42 + 1 (-a) = 43 bajty
Wypróbuj online!
źródło
Swift 3 , 67 bajtów
Pakiet testowy.
Swift 3 , 65 bajtów
Pakiet testowy.
Jak je uruchomić?
Pierwszy to kompletna funkcja, która przyjmuje dane wejściowe jako parametr funkcji i wypisuje wynik. Możesz ich używać dokładnie tak, jak pokazano w linku testowym. Zdecydowałem się jednak dodać instrukcje, ponieważ drugi typ funkcji jest używany bardzo rzadko i większość ludzi nawet nie wie o jego istnieniu. Stosowanie:
Drugi to funkcja anonimowa, jak lambdas. Możesz używać go dokładnie tak, jak robisz Python, deklarując zmienną
f
i wywołując ją:lub zawiń go w nawiasach i wywołaj bezpośrednio (
(...)(ArrayGoesHere)
):źródło
PHP, 53 bajty
pobiera dane wejściowe z argumentów wiersza poleceń. Dane wyjściowe są ograniczone, wiodące i ciągnione przez średnik.
Uruchom
-nr
lub wypróbuj online .Daje ostrzeżenie w PHP 7.1; zastąpić
a&
z""<
do naprawienia.Lub użyj
for(;++$i<$argc;rsort($a),print$a[1]._)$a[]=$argv[$i];
(54 bajtów)źródło
Mathematica 42 bajtów
Niezależnie dotarł do odpowiedzi bardzo podobnej do @Jenny_mathy, ale o 3 bajty krótszy
Uświadomiłem sobie, że pierwsze uruchomione maksimum zajmuje tylko 15 bajtów i dwa wywołania funkcji !:
Można to zrobić tak zwięźle, ponieważ
Max
ma atrybutyFlat
iOneIdentity
ale nie jest to prawdą dlaRankedMax
którego byłby logiczny zamiennik. Niestety definiowanie atrybutów lub modyfikowanie ich w istniejących funkcjach zajmuje zbyt wiele bajtów, więc spłaszczanie należy wykonać w inny sposób.Wszystkie n-te działające maksima można znaleźć w 48 bajtach:
źródło
Pyth, 15 bajtów
FNr2hlQ@_S<QN1
Wypróbuj tutaj: https://pyth.herokuapp.com/?code=FNr2hlQ%40_S%3CQN1&input=%5B1%2C+5%2C+2%2C+3%2C+5%2C+9%2C+5% 2C + 8% 5D i debugowanie = 0
Wyjaśnienie
FNr2hlQ
- Dla pętli z licznikiem 2 <= N <= długość listy@_S<QN1
- Drugi element, gdy pierwsze N elementów listy jest sortowanych w kolejności rosnącej, a następnie odwróconych (sortowanych w kolejności malejącej)źródło
k , 13 bajtów
Wypróbuj online!
źródło
Oktawa, 51 bajtów
- Zwrócono dowolną wartość dla pierwszego elementu.
Wypróbuj online!
źródło
JavaScript (ES6),
4351 bajtówEdycja: Dodano 8 bajtów, ponieważ pożądane jest sortowanie numeryczne.
:(
Trzymam to tutaj, ponieważ jest krótsze, pod warunkiem, że chce się uporządkować leksykograficznie:
Oba wyrażenia tworzą
undefined
pierwszy element.Kod testowy
Pokaż fragment kodu
źródło
10
, jako.sort()
rodzaju leksykograficznie Domyślnie (tj 1,10,100,11,12,13, ..., 2,20,21, ...). Musisz podać(a,b)=>a-b
lub podobny, aby posortować według numeru.Clojure, 56 bajtów
Być może istnieje lepszy sposób na wygenerowanie tych prefiksów.
źródło