Wyzwanie
Otrzymujesz tablicę liczb całkowitych. Za pomocą ruchu możesz zwiększyć lub zmniejszyć element tablicy o 1 . Twoim zadaniem jest wyrównanie tablicy, czyli wyrównanie wszystkich elementów tablicy poprzez wykonanie niektórych ruchów . Ale to nie wystarczy! Chcemy także, aby jak kilka ruchów , jak to możliwe .
Wkład
- Niepusty Tablica liczb całkowitych
- Opcjonalnie, długość od .
Wydajność
- Minimalną liczbę ruchów potrzebnych do wyrównania tablicy .
Zasady
- Standardowe zasady dotyczące prawidłowych zgłoszeń , I / O , luki zastosowania.
- To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie (w bajtach). Jak zwykle, nie pozwól, aby absurdalnie krótkie rozwiązania w językach golfowych zniechęcały Cię do publikowania dłuższych odpowiedzi w wybranym języku.
- Nie jest to regułą, ale twoja odpowiedź będzie lepiej odebrana, jeśli będzie zawierała link do przetestowania rozwiązania i wyjaśnienie, jak to działa.
Przykłady
Input --> Output
[10] --> 0
[-1, 0, 1] --> 2
[4, 7] --> 3
[6, 2, 3, 8] --> 9
[5, 8, 12, 3, 2, 8, 4, 5] --> 19
[1,10,100] --> 99
code-golf
array-manipulation
Delfad0r
źródło
źródło
Median
jest trochę zbyt trudny dla niektórych ezoterycznych języków.JavaScript (Node.js) ,
5048 bajtówZaoszczędź 2 bajty dzięki Arnauldowi
Wypróbuj online!
Posortuj tablicę rosnąco, a następnie zsumuj:
źródło
a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
.05AB1E , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
ZL€αOW
była moja próba ._.Perl 6 ,
2928 bajtów-1 bajt dzięki nwellnhof
Wypróbuj online!
Wyjaśnienie
źródło
X-
operandy, aby zapisać bajt.Japt, 7 bajtów
Spróbuj
Wyjaśnienie
źródło
JavaScript (ES6),
605655 bajtówZaoszczędzono 1 bajt dzięki @Shaggy
Wypróbuj online!
W jaki sposób?
Jeśli nie brakuje mi jakiegoś triku, obliczenie mediany w JS okazuje się dłuższe. Prawdopodobnie około 65 bajtów z powodu wymaganego wywołania zwrotnego w
sort()
celu obejścia domyślnego sortowania leksykograficznego i dość długiegoMath.abs()
:Zamiast tego próbujemy wszystkich wartości w oryginalnej tablicy jako wartości wyrównującej .
źródło
r
w ciągu pierwszegomap
.Haskell , 34 bajty
Wypróbuj online!
Znajduje całkowitą odległość wszystkich elementów od mediany, testując każdy element na liście jako potencjalną medianę i biorąc najmniejszy wynik.
źródło
Galaretka , 4 bajty
Wypróbuj online!
Jak to działa
źródło
Python 2 , 46 bajtów
Wypróbuj online!
n
Jako argument przyjmuje długość listy . Oblicza sumę górnej połowy minus sumę dolnej połowy, dzieląc posortowaną listę na pierwszyn/2
i ostatnin/2
element.Wyrażenie
l[-~n/2:l.sort()]
odpowiada obliczeniowejl.sort()
, która modyfikuje się listę w miejscu, to sposóbl[-~n/2:None]
, w którym lista ignoruje krojenia górna granicaNone
żel.sort()
wyprodukowane. Może się wydawać, że lista została posortowana zbyt późno, aby można ją było odpowiednio pociąć, ale Python wydaje się oceniać argumenty plasterka przed „zablokowaniem” listy, która ma zostać pocięta.Python 2 , 47 bajtów
Wypróbuj online!
Nudna metoda sumowania odległości każdej wartości od mediany.
n
Jako argument przyjmuje długość .Python , 51 bajtów
Wypróbuj online!
Sortuje listę na miejscu, a następnie wielokrotnie dodaje ostatni (najwyższy pozostały) wpis minus pierwszy (najniższy pozostały) wpis i powraca na liście bez tych elementów, aż pozostanie tylko 0 lub 1. Usings
pop
s”dostaje taką samą długość:l.pop()-l.pop(0)+f(l)
.l.sort()
Tkwi w miejscu, gdzieNone
jest zwracana nie ma żadnego wpływu. Plasterl[None:1]
jest taki sam, jakl[:1]
ponieważNone
s w plasterkach są ignorowane.Python , 54 bajty
Wypróbuj online!
Urocze zrozumienie listy, które ignoruje iterację argumentu i modyfikuje listę przez wielokrotne wstawianie pierwszego i ostatniego elementu. Zapewniamy, że zrozumienie listy odbywa się
len(l)//2
razy, powtarzając każdy inny elementl
pomijania pierwszego, wykonanego zl[1::2]
.l.sort()
ProducingNone
może tkwić w nieużywanym końcowego kawałek argumentu.źródło
APL (Dyalog), 12 bajtów
Brutuj siły, testując każdą liczbę jako korektor. Nie jestem pewien, czy milczenie jest krótsze, ale nie mogę tego rozgryźć.
TIO
źródło
TI-Basic,
186 bajtów-12 bajtów od Miszy Ławrow ( od jakiegoś czasu nie używałem TI-Basic i zapomniałem, że listy to potrafią)
TI-Basic to tokenizowany język . Wszystkie tokeny użyte w tej odpowiedzi są jednobajtowe.
Pobiera dane wejściowe jako
{1,2,3,4}:prgmNAME
Zasadniczo ten sam pomysł jak w przypadku większości innych odpowiedzi: odejmij przez medianę, a następnie weź sumę.
Wyjaśnienie:
źródło
sum(abs(Ans-median(Ans
działa również. (A „TI-84 Plus CE” wydaje się zbyt specyficzny; zadziała to przynajmniej na każdym kalkulatorze z serii 83, a prawdopodobnie także na 73 i 82.)Röda , 33 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
R , 29 bajtów
Wypróbuj online!
źródło
Attache , 18 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
jot , 15 bajtów
Zasadniczo to samo co rozwiązanie Shaggy's Japt.
Wypróbuj online!
Jak to działa?
|@-/~"{
- tworzy tabelę/~
bezwzględnych różnic|@-
między poszczególnymi liczbami"{
1#.
sumuje każdy wiersz[:<./
znajduje najmniejszy przedmiot (zmniejsz o minimum)źródło
Węgiel drzewny ,
1611 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 5 bajtów dzięki @Arnauld. Wyjaśnienie:
źródło
Visual C #, 138 bajtów
bez golfa:
Wypróbuj online!
źródło
C (gcc),
10093 bajtówBrute-force solution, próbuje wyrównać z każdym elementem. Wypróbuj online tutaj .
Dzięki pułapowi do gry w golfa 7 bajtów.
Nie golfowany:
źródło
PHP, 78 bajtów
Sortuje tablicę, a następnie przechodzi przez kopię, usuwając elementy z oryginału i sumując absolutną różnicę, którą należy zmniejszyć o połowę, aby uzyskać zwrot.
Wydajność:
źródło
PHP, 69 bajtów
funkcja anonimowa. Wypróbuj online .
źródło
Input: *) A non-empty array a of integers *) Optionally, the length of a
.JavaScript (Node.js) , 52 bajty
Wypróbuj online!
źródło
Java (JDK), 112 bajtów
Grał w golfa
Nie golfił
źródło
[1,1,4]
(zwraca 4, ale odpowiedź brzmi 3).Kotlin Android, 200 bajtów
Wypróbuj online
źródło