Wprowadzenie:
Kilka dni temu przeczytałem ten post z tym samym tytułem, gdy natknąłem się na niego w HNQ. W tym pytaniu dyskutuje się, czy roszczenie kandydata na prezydenta Bernie Sandersa, który twierdził, co następuje:
Dzisiaj 26 najbogatszych na świecie, 26 miliarderów, ma obecnie tyle samo bogactwa, co najbiedniejszych 3,8 miliarda ludzi na świecie, połowa populacji świata.
Link do wideo
jest prawdą czy nie. Proszę przejść do samego pytania w celu uzyskania odpowiedzi i dyskusji.
Jeśli chodzi o faktyczne wyzwanie oparte na tym twierdzeniu:
Wyzwanie:
Dwa wejścia: malejąca posortowana lista liczb i liczba (gdzie to ). Wydajność: najdłuższy sufiks podmenu z dla których suma jest sumy pierwszego wartości w zestawieniu .L ≤ n L
Przykład:
Wejścia: = i .
Wydajność:[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
[125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
Czemu?
Pierwsze wartości z listy ( ) sumują się do . Jeśli weźmiemy wszystkie przyrostki pozostałych liczb, a także ich sumy:[500,200]
700
Suffix: Sum:
[-3] -3
[-2,-3] -5
[0,-2,-3] -5
[1,0,-2,-3] -4
[2,1,0,-2,-3] -2
[2,2,1,0,-2,-3] 0
[3,2,2,1,0,-2,-3] 3
[5,3,2,2,1,0,-2,-3] 8
[5,5,3,2,2,1,0,-2,-3] 13
[5,5,5,3,2,2,1,0,-2,-3] 18
[5,5,5,5,3,2,2,1,0,-2,-3] 23
[10,5,5,5,5,3,2,2,1,0,-2,-3] 33
[10,10,5,5,5,5,3,2,2,1,0,-2,-3] 43
[20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 63
[30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 93
[30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 123
[40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 163
[50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 213
[55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 268
[75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 343
[75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 418
[100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 518
[125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 643
[150,125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 793
[150,150,125,100,75,75,55,50,40,30,30,20,10,10,5,5,5,5,3,2,2,1,0,-2,-3] 943
Najdłuższy przyrostek, którego suma jest mniejsza lub równa, 700
to [125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
suma 643
, więc taki jest nasz wynik.
Zasady konkursu:
- Wartości w pierwszym prefiksie nie są liczone do sufiksu wyjściowego. Tj. Wejścia = i spowodują , a nie .
[10,5,5,3]
[5,3]
[5,5,3]
- I / O jest elastyczny. Możesz wprowadzić jako listę / strumień / tablicę liczb całkowitych / dziesiętnych / ciągów, pojedynczy ciąg rozdzielany, jeden po drugim poprzez STDIN itp. Możesz również wyprowadzać jako listę / strumień / tablicę liczb całkowitych / dziesiętnych / ciągów, wydrukuj / zwróć rozdzielany ciąg, wydrukuj numer na każdej nowej linii itp. Twoje połączenie.
- Dane wyjściowe gwarantują, że nie będą puste. Więc nie będzie mieć do czynienia z przypadków testowych, takich jak = a skutkuje . n = 2
[-5,-10,-13]
[]
- Zarówno (jak i oba) dane wejściowe i / lub wyjściowe mogą być również w porządku rosnącym zamiast malejącym, jeśli chcesz.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa 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 z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Inputs: L=[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3], n=2
Output: [125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
Inputs: L=[10,5,5,3], n=2
Output: [5,3]
Inputs: L=[7,2,1,-2,-4,-5,-10,-12], n=7
Output: [-12]
Inputs: L=[30,20,10,0,-10,-20,-30], n=1
Output: [20,10,0,-10,-20,-30]
Inputs: L=[100,35,25,15,5,5,5,5,5,5,5,5,5,5,5,5,5], n=1
Output: [15,5,5,5,5,5,5,5,5,5,5,5,5,5]
Inputs: L=[0,-5,-10,-15], n=2
Output: [-10,-15]
Inputs: L=[1000,999,998,900,800,766,525,525,400,340,120,110,80,77,33,12,0,-15,-45,-250], n=2
Output: [525,525,400,340,120,110,80,77,33,12,0,-15,-45,-250]
Inputs: L=[10,5,5], n=1
Output: [5,5]
[131000000000, 96500000000, 82500000000, 76000000000, (7.7 billion more entries)]
:: pL = [-5,-10,-13]
in=2
wynikowymi[]
. ” Ponadto lista wejściowa jest gwarantowana posortowana malejąco (lub rosnące, jeśli zdecydujesz), więc[1,2,3]
nie jest prawidłową listą wejściową na początek (chyba że wybierzesz rosnące wejście, w takim przypadku[1,2]
byłby to wynik).Odpowiedzi:
C # (interaktywny kompilator Visual C #) ,
8881696863 bajtów-4 bajty dzięki LiefdeWen
Wypróbuj online!
źródło
+b
wSkip
rozmowie; sprawdzanie pierwszejn
listy jest zbędne , ale myślę, że nadal jest poprawne.EXAPUNKS (2 EXA, 30 instrukcji, 594-bajtowy plik rozwiązania)
Przez jakiś czas chciałem spróbować gry w golfa w EXAPUNKS, a wyglądałaś na najlepszą formę, jaką mogłem znaleźć, więc gratulacje!
Wprowadź za pomocą plików 200 i 201, odpowiednio dla L i n. Wyjście przez nowy plik. L i dane wyjściowe są w porządku rosnącym.
Zasadniczo XA sumuje ostatnie n wartości w L, a następnie wysyła je do XB. Następnie szuka początku L i wysyła każdą wartość jeden po drugim do XB. XB najpierw otrzymuje sumę z XA i przechowuje ją w rejestrze X. Następnie otrzymuje wartości jeden po drugim od XA, odejmując nową wartość od X i zapisując te wartości w pliku wyjściowym, aż do X <0.
XA
XB
JavaScript dla poziomu tutaj
źródło
Python 2 , 60 bajtów
Wypróbuj online!
Wyjaśnienie:
Najpierw pobiera sumę pierwszych
n
elementów.Następnie suma każdej podlisty jest porównywana z tą sumą. Gdy tylko jeden nie jest większy, przestajemy.
Następnie drukowana jest wynikowa (najdłuższa) podlista.
źródło
05AB1E ,
1412 bajtówZaoszczędzono 2 bajty dzięki Grimy
Wypróbuj online!
Wyjaśnienie
źródło
.$.sʒO²¹£O>‹}θ
. :)|
napisałem tolast-input
ciekawe.|
tutaj powoduje, że wynik|
staje się ostatnim wejściem zamiast tego, co faktycznie było ostatnim wejściem.J , 18 bajtów
Wypróbuj online!
Wyjaśnienie:
Czasownik dynastyczny,
n
jako lewy argument iL
- jako prawy argument.źródło
Rubinowy ,
4743 bajtów-4 bajty przez dokładniejsze przeczytanie specyfikacji.
Wypróbuj online!
źródło
R , 53
55bajtów@Giuseppe oszczędził mi 2 bajty, zmieniając sposób usunięcia
Wypróbuj online! Przyjmuje dane wejściowe jako malejące, a dane wyjściowe - rosnąco zgodnie z zasadą 4.
Y
oznacza revL
z 1: n usuniętym za pomocą0:-n
Y
suma skumulowana jest mniejsza niż równa sumieL[X]
źródło
X
użycie,-(1:n)
ale oczywiście był tego samego rozmiaru, więc zostawiłemJavaScript (ES6), 66 bajtów
Pobiera dane wejściowe jak
(a)(n)
w liście rosnącej.Wypróbuj online!
Skomentował
źródło
Python 2 , 59 bajtów
Kompatybilny również z Python 3
Wypróbuj online!
Wyjaśnienie
Suma sufiksu jest porównywana z połową sumy całej listy. Jeśli suma sufiksu jest mniejsza lub równa, sufiks jest zwracany. Jeśli nie, funkcja jest wywoływana rekurencyjnie z wyskakującym pierwszym elementem sufiksu.
źródło
Pyth ,
1615 bajtówWypróbuj online!
Oczekuje się, że lista danych wejściowych zostanie posortowana w kolejności rosnącej, a nie malejącej, jak w przykładach.
W takich momentach naprawdę chciałbym, aby Pyth miał jeden operator tokenu, który miał dostęp do drugiego wejścia więcej niż raz (
E
ocenia następny wiersz danych wejściowych, ale powtarzane połączenia odrzucają odczytaną poprzednią wartość).Edycja: zapisano 1 bajt dzięki MrXcoder
źródło
JavaScript, 64 bajty
Wypróbuj online!
źródło
Stax , 12 bajtów
Uruchom i debuguj na staxlang.xyz!
Ładniejsza wersja
Rozpakowane (14 bajtów) i objaśnienie:
W drodze konsensusu mogę pozostawić ten wynik na stosie. Stax podejmie próbę niejawnego wydruku, który może się nie powieść, ale dołączenie
m
do rozpakowanego programu pozwala dobrze wyświetlić wynik.Wygląda na
{ ... }j
to, że jest taki sam jak{ ... fh
. Huh Edycja: Nie do końca tak jest; jedyny z nich zatrzyma się, gdy osiągnie prawdziwy wynik, prawdopodobnie unikając później skutków ubocznych lub fatalnego błędu.źródło
APL + WIN, 27 bajtów
Monituje o wprowadzenie L, a następnie n.
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
źródło
Japt , 16 bajtów
Spróbuj
źródło
Galaretka ,
1312 bajtówWypróbuj online!
Dzięki @JonathanAllan za uratowanie bajtu!
Wyjaśnienie
źródło
ṫḊÐƤS>¥ÞḣS¥Ḣ
Gaia , 12 bajtów
Wypróbuj online!
Myślę, że istnieje bajt, w którym mogę grać w golfa, jeśli uda mi się uzyskać stos.
źródło
Haskell , 46 bajtów
Niezadowolony z tego, jak to wygląda; mam nadzieję, że po prostu brakuje mi oczywistych golfów.
Wypróbuj online!
Próbowałem uzyskać prefiks i sufiks
splitAt
oraz dopasowanie wzorca w osłonie, ale okazało się, że to 3 bajty więcej. Planujesz później spróbować przekonwertować na funkcję rekurencyjną ze strażnikami, aby sprawdzić, czy to obniży liczbę bajtów.Wyjaśnienie
To, co nazywam „prefiksem”, to pierwsze
n
elementy, a „sufiks” to reszta listy.źródło
APL (Dyalog Unicode) ,
2321 bajtów SBCSWypróbuj online!
{
}
⍺
⍵
⌽⍵
+\
przedrostek sum tego(
…)<
Maska boolowska, gdzie mniej niż:⍺↑⍵
+/
zsumuj je⊥⍨
liczyć końcowe prawdy⍺⌈
⍵↓⍨
źródło
MATL ,
1312 bajtów1 bajt zapisany dzięki @Giuseppe , na podstawie odpowiedzi @MickyT .
Wyjście jest w porządku rosnącym.
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Rozważ dane wejściowe
2
i[500,200,150,150,125,100,75,75,55,50,40,30,30,20,10,10,8,5,5,5,3,2,2,1,0,-2,-3]
.źródło
PowerShell ,
9997 bajtówWypróbuj online!
Pobiera listę w kolejności rosnącej, wyniki maleją (ponieważ łatwiej było porównać do przypadków testowych: ^))
Przechodzi przez listę
do tyłudo przodu, porównując akumulator do ostatnion
dodanych wpisów (poprzez sklejenie ich razem+
zs i przekazanie powstałego ciąguinvoke-expression
). Pętla Until potrzebowała dodatkowej logiki, by poradzić sobie z wejściem do bogatego sąsiedztwa, ponieważ nie zatrzymałby się, gdybyśmy nie byli bogatsi od bogatych facetów, dopóki nie przejdziemy przez całą listę.Rozwinięty:
źródło
Retina 0.8.2 , 99 bajtów
Wypróbuj online! Link zawiera tylko niektóre przypadki testowe; Mogłem sprawić, że zadziała w niektórych przypadkach z liczbami ujemnymi kosztem 12 bajtów (w szczególności pierwsze
n
wpisyL
nadal muszą być dodatnie; teoretycznie prawdopodobnie mógłbym wymagać tylko sumy pierwszychn
wpisów, aby były dodatnie). Wyjaśnienie:Konwertuj na unary.
Wstaw znacznik na początku
L
.Przenieś go w dół listy
n
razy, sumując w miarę, jak idziemy. Usuwa się,n
ale przecinek pozostaje.Utwórz wpis dla każdego sufiksu
L
.Zastąp środek kopią sufiksu.
Zsumuj kopię przyrostka.
Weź pierwszy wpis, w którym suma sufiksu nie przekracza sumy prefiksu.
Usuń sumy.
Konwertuj na dziesiętny.
Usuń końcowy przecinek, który pojawił się wcześniej
n
.źródło
r
opcji, więc teraz połączyłem ją z niektórymi przypadkami testowymi.Węgiel drzewny , 17 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Czerwony , 63 bajty
Wypróbuj online!
źródło
PowerShell , 86 bajtów
Wypróbuj online!
Rozwinięty:
źródło
MathGolf , 13 bajtów
Wypróbuj online!
Wyjaśnienie
Pobiera dane wejściowe jako
n L
Powodem tego jest fakt, że w pierwszym etapie faktycznie dzielimy listę na dwie pokrywające się części. Na przykład
L = [4, 3, 2, 1], n = 2
podzieli listę jako[3, 2, 1]
i[4, 3]
. Powodem posiadania dodatkowego elementu na pierwszej liście jest to, że w pętli pierwszą rzeczą, która się dzieje, jest odrzucenie. Jeśli dodatkowy element nie zostałby poprzedzony, przypadki, w których dane wyjściowe powinny stanowić całą resztę listy, zakończyłyby się niepowodzeniem.źródło
Wolfram Language (Mathematica) , 40 bajtów
Wypróbuj online!
źródło
Clojure,
6675 bajtówNiestety, wydaje się, że nie ma krótszego idiomu dla całkowitej sumy sekwencji.
Edycja : Och, dodając przykłady do Wypróbuj online! link Zauważyłem, że oryginalna odpowiedź dawała złe wyniki, gdy obecnych było wiele liczb ujemnych.
Do
doseq
zastosowań „Keys” destructuring tak powinno być nieco jasne końce, które dane w której symbol.#(...)
jest funkcją anonimową, tutaj wiążę ją z symbolemf
:Wydajność:
źródło
APL (NARS), 32 znaki, 64 bajty
test i komentarze:
Podałem błędnie długość bajtu ...
źródło
MS SQL Server 2017 , 271 bajtów
Wiem, że użycie bardziej podobnej do relacji tabeli do przechowywania danych wejściowych może sprawić, że kod będzie bardziej zwięzły, ale używając typu danych znakowych do przechowywania listy numerycznej i
STRING_SPLIT
funkcji, skracamBuild Schema
część :)Bardziej czytelna wersja:
Wypróbuj na SQL Fiddle !
źródło
Python 3.8 (wersja wstępna) , 59 bajtów
Wyjście jest w porządku rosnącym
Wypróbuj online!
źródło