Biorąc pod uwagę niepustą tablicę dodatnich liczb całkowitych, „zwiększ” ją raz, jak następuje:
Jeśli wszystkie elementy tablicy są równe, dodaj a
1
na końcu tablicy. Na przykład:[1] -> [1, 1] [2] -> [2, 1] [1, 1] -> [1, 1, 1] [3, 3, 3, 3, 3] -> [3, 3, 3, 3, 3, 1]
W przeciwnym razie zwiększ pierwszy element w tablicy, który jest minimalną wartością tablicy. Na przykład:
[1, 2] -> [2, 2] [2, 1] -> [2, 2] [3, 1, 1] -> [3, 2, 1] -> [3, 2, 2] -> [3, 3, 2] -> [3, 3, 3] [3, 4, 9, 3] -> [4, 4, 9, 3] -> [4, 4, 9, 4] -> [5, 4, 9, 4] -> [5, 5, 9, 4] -> ...
(Każda ->
reprezentuje jeden przyrost, czyli tyle, ile powinien zrobić Twój program).
Wyprowadza wynikową tablicę przyrostową.
Najkrótszy kod w bajtach wygrywa.
code-golf
number
arithmetic
array-manipulation
integer
Hobby Calvina
źródło
źródło
Odpowiedzi:
Galaretka ,
87 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Python 3,
62535150 bajtówFunkcja modyfikująca przekazywaną do niej listę ( dozwolona przez meta ).
Spróbuj na repl.it!
-9 bajtów dzięki Lynnowi za wykrycie tego, ponieważ ponieważ tablica będzie miała dodatnie liczby całkowite, mogę dodać „0” na końcu tablicy i zwiększyć ją.
Specjalne podziękowania dla mbomb007 na golfa
len(set(a))
dolen({*a})
i Dennis za trick floordiv!źródło
len({*L})<2
sprawdzić, czy wszystkie elementy listy są równe.a+=1//len({*a})*[0]
powinien zapisać bajt.JavaScript (ES6), 61 bajtów
Wyjście poprzez modyfikację argumentu . Nie mogę znaleźć sposobu, aby ustalić, czy tablica ma tylko jeden unikalny element w mniej niż 17 bajtach, ale sugestie są mile widziane.
Testowy fragment kodu
Pokaż fragment kodu
Inne próby
Oto kilka alternatywnych sposobów decydowania, czy tablica ma więcej niż jedno unikalne wejście:
Oba te
some
można również zastąpićfind
..sort
byłoby krótsze do znalezienia minimum, gdyby domyślny sort nie był leksykograficzny (dlaczego, JS, dlaczego?):Próbowałem rekurencji, aby znaleźć minimum, ale okazało się, że jest on dłuższy:
A oto rozwiązanie oparte na łańcuchach, które na początku wydawało się dobrym pomysłem: (dane wejściowe są podawane w postaci tablic w łańcuchach, np.
"[1,2,3]"
)źródło
Mathematica,
705755 bajtówPraktycznie cała poprawa wynika z Martina Endera, który kopie mnie w dupę przy podejściu do dopasowywania wzorów! Również JHM wymyślił zasadniczo to samo rozwiązanie w zasadzie w tym samym czasie. (liczba bajtów używa kodowania ASCII)
Definiuje funkcję
±
przyjmującą jeden argument listy. Jeśli ten argument listy zawiera pewną liczbę kopii tego samego elementu (wykrytychx_..
i nazwanychp
), wyślij listę z1
dołączonym załącznikiem. W przeciwnym razie, jeśli ten argument listy ma specjalny elementy
(x
będący wcześniej zerowym lub większą liczbą elementówy
iz
będący zerowym lub większym elementemy
późniejszym), co najwyżej minimum z pozostałych elementów, następnie wypisz listę z tymy
przyrostem. Każde wystąpienie minimalnego elementu listy zostanie dopasowaney
, ale na szczęście Mathematica wybiera pierwszy, który będzie działał.źródło
±
jest to 2-bajtowy znak, twój kod ma 59 bajtów. Ponadto musi być spacja międzyx_
i..
ponieważ Mathematica interpretujex_..
jakox_. .
(co powoduje błędy). Dodatkowo, forma infiksuMin
(x~Min~z
) powoduje, że te 2 bajty są krótsze (co czyni to rozwiązanie identycznym z jednym z moich: p ...) Welp, możesz wziąć kredyt, ponieważ moja edycja była późniejsza niż twoja ...±
w UTF-8 ( Mathematica domyślnie używa UTF-8; try$CharacterEncoding
) jest dwubajtowym znakiem (U + 00B1).±
.$CharacterEncoding
ustawionoWindowsANSI
CP1252 (która jest wystarczająco kompatybilna z ISO 8859-1 dla±
i·
może być użyta dla jednego bajtu).C ++ 14,
178 176 174 155 142135 bajtówzgłoszenie
wezwanie
bez golfa
Doceniam pomoc po raz pierwszy w golfa.
EDYCJA: zapomniałem wspomnieć, że musisz to przynajmniej skompilować
-std=c++11
-std=c++14
EDYCJA 2: Zdałem sobie sprawę, że mogę pominąć miejsce w dołączeniach
#include <list>
EDYCJA 3: zapisano dwa kolejne bajty, zastępując
l.begin()
przezbegin(l)
EDIT4: zapisał kolejne 19 (!) Bajtów dzięki @Quentin (patrz jego komentarz)
EDYCJA 5: Quentin zgolił jeszcze 13 bajtów, dzięki!
EDYCJA 6: jak wskazał TuukkaX, wystarczy nienazwane lambdas / funkcje, więc usunąłem
auto i=
bajtecountźródło
#include
liniach.auto i=[](auto&l){...};
) pozwala zaoszczędzić jeden bajt (więcej, jeśli policzymy zwracany typ, o którym zapomniałeś;)), użycie^
zamiast==
i zamiana operandów powoduje zapisanie innego.std::list
Iteratory są z pewnościąstd::
klasami, więc możeszstd::
z nich zrezygnowaćstd::count
istd::min_element
dzięki ADL (-10).l.front()
jest również*b
(-7).auto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?void(++*find(b,e,*min_element(b,e))):l.push_back(1);};
std::min_element
stwierdza, że zwraca pierwszy najmniejszy element, więcfind()
jest zbyteczny, czyli 11 bajtów. W warunkowym użyciu pary nawiasów i operatora przecinku do wymuszenia odpowiedniego wyrażeniaint
jest krótsze niż rzutowanie lewegovoid
o 2 bajty. Prowadzi to doauto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};
142 bajtów :)05AB1E ,
212016 bajtówZaoszczędzono 4 bajty dzięki Adnan .
Wypróbuj online!
Wyjaśnienie
źródło
DÙgi0¸«}ÐWksgÝQ+
też działa.ÝQ
zk
. Dzięki!Scratch,
2534 bloków +76 bajtówPobiera dane wejściowe jako predefiniowaną tablicę liczb całkowitych. Zauważ, że tablice są indeksowane 1 w Scratch.
W Pythonie wyglądałoby to tak: (Zauważ, że w przeciwieństwie do Scratch, Python ma 0 indeksów)
źródło
J,
2522 bajtówOcenia anonimowy czasownik. Wypróbuj online!
Wyjaśnienie
źródło
MATL , 16 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe
Jak to działa
źródło
Mathematica, 56 bajtów
Używa nazwanej funkcji
±
. Wykorzystuje kodowanie ISO8859-1Alternatywne rozwiązania (58 bajtów)
Stosowanie
źródło
Haskell,
71 7062 bajtów@Zgarb zapisał 8 bajtów, dzięki!
Kiedy zaczynałem, liczyłem na eleganckie sztuczki wiązania węzłów, ale sposób @ Zgarba jest równie niesamowity.
źródło
f(a:b)|(x,y:z)<-span=<<(<).minimum$a:b++[0|all(a==)b]=x++y+1:z
(->)r
, która została zastosowana do typu(->)r a = r->a
. Zatem z rodzajówreturn:: a->r->a
i(>>=)::(r->a)->(a->r->b)->(r->b)
ich realizacji jest (śmiem to powiedzieć?) Oczywiste:return=const
im>>=f = \r->f(m r)r
. To drugie jest dokładnie tym, czego potrzeba, aby wyrazić coś takiegospan(predicate_depending_on l)l
, wspominającl
tylko raz. Teraz muszę o tym pamiętać tylko wtedy, gdy tego potrzebuję.C #,
1231211207977 bajtówZmienia argument przekazany do funkcji.
Dzięki Cyoce za uratowanie 3 bajtów! ->
!Any
doAll
,+=1
do++
.Dzięki TheLethalCoder za oszczędność aż 43 bajtów! -> Usunięto kod podpisu metody. Usunięto nawias wokół listy parametrów.
źródło
!l.Any(o=>o!=l[0]))
zl.All(o=>o==l[0])
?Any
zamiastAll
i pomyślałem, że to nie działa: D Dzięki!++
?Action<List<int>>
aby usunąć cały kod sygnatury metodyusing
pliki z C #, więc nie ufam, że legalne jest porzucenieusing System.Linq
. O ile nie zobaczę wyraźnego stwierdzenia, że to nie jest konieczne, pozostanę przy tym. Dziękuję za sugestię! :)Perl 6 , 46 bajtów
(modyfikuje tablicę wejściową i zwraca ją)
Rozszerzony:
źródło
Galaretka, 9 bajtów
Dzięki Dennis za -2 bajty.
Treść musi mieć co najmniej 30 znaków; wszedłeś ... .
źródło
Mathematica,
53 bajty57 bajtów59 bajtówźródło
〚
i〛
są 3-bajtowymi znakami. Ponadto twój kod nie działa, ponieważ{##,1}
część sugeruje, że dane wejściowe są oddzielnymi liczbami całkowitymi (tj.f[1, 2, 3]
), Alex=#
część oznacza, że dane wejściowe toList
(tjf[{1, 2, 3}]
.). Quick Fix byłoby zmienićx=#
sięx={#}
i przyjmuję surowych liczb całkowitych jak wejścia, dzięki czemu kod 59 bajtów.Equal@#
, chociaż#==##
jest krótszy.R ,
72 6665 bajtówWypróbuj online!
Przyrost jest wykonywany za pomocą,
which.min
która zwraca pierwsze dopasowanie."[<-"
pozwala zamienić wartość i zwraca zmodyfikowany wektor w jednym wywołaniu funkcji.-7 bajtów dzięki Giuseppe!
źródło
!=
się-
!Rubinowy, 46 bajtów
Wydaje mi się, że jest lepszy sposób, aby sprawdzić, czy wszystkie elementy są takie same
a.uniq.size<2
, ale jestem zbyt leniwy, aby je znaleźć.źródło
a.uniq[1]
będzie prawdą, jeśli istnieją odrębne wartości.a[a.index(a.min)]
wa[a.index a.min]
Oktawa,
696764 bajtówW rzeczywistości było to krótsze, aby uczynić z tej funkcji pełną nazwę niż używanie obu
input
idisp
.Zaoszczędź 3 bajty dzięki Luisowi.
Stara odpowiedź, nieużywanie funkcji:
źródło
R, 97 bajtów
Szkoda, że synthax
x=+1
nie istnieje w R!Nie golfowany:
źródło
TI-Basic, 53 bajty
źródło
Matlab,
83,77, 71 bajtówJestem stosunkowo nowy w kodowaniu golfa, więc proszę bądź miły! Próbowałem użyć anonimowych funkcji, ale Google mówi, że nie możesz użyć instrukcji if / else, a Matlab nie ma operatorów trójskładnikowych, więc to najlepsze, co mogłem zrobić.
Edycja: Poprawione i skrócone (dwukrotnie!) Dzięki stewie-gryfowi.
źródło
sum(a)/length(a)==a(1)
nie gwarantuje, że wszystkie elementy są równe, pokazuje tylko, że średnia jest równaa(1)
. Byłoby to prostszemean(a)==a(1)
.numel
jest o jeden bajt krótszy niżlength
, ale ponieważ wiesz, że wszystkie wartości są dodatnie, możesz użyć tego,nnz
co jest jeszcze krótsze (nadal nie dałoby to poprawnego wyniku w tym wyzwaniu, ale jest co najmniej krótszy: P). Jeśli odbierzeszmin(a)
połączenie przed pętlą, możesz użyć z niego obu wyjść i sprawdzić, czyall
elementya
są równemin(a)
.~nnz(a(a~=a(1)))
jest po prostu~nnz(a-a(1))
. Ponadto nie potrzebujesz nawiasów.if ~nnz(a-a(1));a=[a,1];else[~,I]=min(a);a(I)=a(I)+1;end
. Powinno to być o 5 bajtów krótsze (uwaga: nie testowałem tego).range(a)
zamiastnnz(a-a(1))
a
jest równa najniższej wartości w tym wektorze. Wa = [3 4 6]
rezultacie powstanie wektortrue
, a wa = [4 4 6]
rezultacie wektorfalse
. Nie sądzę, żeby się tu przydało ...?Clojure,
112100 bajtówNiestety
min-key
zwraca ostatni indeks najmniejszego indeksu, a nie pierwszy. Działa to dla liczb całkowitych i krótszych tablic niż 10 ^ 9 elementów;)Edycja: Definiowanie anonimowej funkcji za pomocą
(apply = a)
zamiast(= 1(count(set a)))
.Oryginał:
Mniej zhakowane rozwiązanie 134-bajtowe odwraca wektor przed aktualizacją, a następnie odwraca go z powrotem:
źródło
Java 8, 85 + 38 = 123 bajty
Void lambda przyjmuje
List<Integer>
(wyjście jest zmutowanym wejściem). Liczba bajtów obejmuje lambda i wymagany import.Wypróbuj online
To prawie wygląda jak Python z tymi metodami importu ...
źródło
MATLAB,
6653 bajtówWynik:
Zainicjuj:
Kolejne przebiegi:
źródło
@(x) …
.SmileBASIC 3, 101 bajtów
Definiuje funkcję instrukcji, w
I A
którejA
znajduje się nasza tablica liczb całkowitych. Dane wyjściowe są osiągane przez modyfikację danych wejściowych (ponieważ tablice są referencjami).źródło
BREAK
jeM=0
, ponieważA
nie można ich zawierać,0
więcM==A[C]
nigdy nie będzie to prawdą.SmileBASIC, 77 bajtów
źródło
Pyth, 16 bajtów
Program, który pobiera dane z listy i drukuje wynik.
Zestaw testowy
Jak to działa
źródło
Haskell, 93 bajty
f z|and$(==)<$>z<*>z=z++[1]|1>0=z#minimum z where(x:z)#m|x==m=x+1:z;(x:z)#m|1>0=x:z#m;[]#_=[]
Nie golfowany:
Pierwsza próba spróbuje później wymyślić coś bardziej wyrafinowanego.
źródło
where
?Cud , 44 bajty
Nie to miałem na myśli, kiedy tworzyłem ten język ... Jest dosłownie gorszy niż Perl pod względem czytelności!
Stosowanie:
Wyjaśnienie
Bardziej czytelny:
Zasadniczo sprawdza, czy usunięcie 1 elementu z unikalnego podzbioru argumentu powoduje, że lista jest pusta. Jeśli nie, zwiększamy minimum tablicy. W przeciwnym razie po prostu łączymy 1 z argumentem.
źródło
Kotlin, 75 bajtów
Zmienia argument funkcji.
Cholera, mocne pisanie!
:MutableList<Int>
odpowiada tylko 17 bajtów. Nie sądzę, że istnieje rozwiązanie, w którym można wywnioskować ten typ, niestety.źródło