Powinieneś napisać program lub funkcję, która podając listę dodatnich liczb całkowitych zwielokrotnia każdy element przez najmniejszą dodatnią liczbę całkowitą możliwą do utworzenia ściśle rosnącej listy.
Na przykład, jeśli dane wejściowe to
5 4 12 1 3
mnożenia będą
5*1=5 4*2=8 12*1=12 1*13=13 3*5=15
a wynikiem będzie rosnąca lista
5 8 12 13 15
Wkład
- Lista dodatnich liczb całkowitych zawierających co najmniej 1 element
Wydajność
- Lista liczb całkowitych dodatnich
Przykłady
9 => 9
1 2 => 1 2
2 1 => 2 3
7 3 => 7 9
1 1 1 1 => 1 2 3 4
5 4 12 1 3 => 5 8 12 13 15
3 3 3 8 16 => 3 6 9 16 32
6 5 4 3 2 1 => 6 10 12 15 16 17
9 4 6 6 5 78 12 88 => 9 12 18 24 25 78 84 88
8 9 41 5 12 3 5 6 => 8 9 41 45 48 51 55 60
15 8 12 47 22 15 4 66 72 15 3 4 => 15 16 24 47 66 75 76 132 144 150 153 156
To jest kod golfowy, więc wygrywa najkrótszy program lub funkcja.
Ciekawostka: ostatnim elementem danych wejściowych N, N-1, ... ,1
wydaje się być (N+1)th
element sekwencji A007952 . Jeśli znajdziesz dowód, możesz dołączyć go do odpowiedzi na golfa lub opublikować jako komentarz.
code-golf
math
number
arithmetic
randomra
źródło
źródło
Odpowiedzi:
Galaretka ,
65 bajtówPierwsza odpowiedź Jelly,
zanim @Dennis budzi się i bije mnie.Wypróbuj online!Wyjaśnienie
Dzięki @Dennis za -1 bajtów.
źródło
:‘×µ\
zapisuje bajt.JavaScript (ES6), 28
Edytuj Zgodnie z sugestią @Patrick Roberts,
p
może być niezainicjowanym parametrem. Ta sama liczba bajtów, ale unikaj używania zmiennej globalnejTEST
źródło
f=a=>a.map(n=>a+=n-a%n,a=0)
. Ale to nie jest mój algorytm (głupiutki ja), więc zachowam mój tak, jak jest i upvote arossPython 2,
6764 bajtówNajpierw spróbuj golfa, więc wskazówki są mile widziane.
źródło
print l
zamiastreturn l
zapisać kolejny bajt. Dobra robota!PHP,
55464241 bajtówWykorzystuje kodowanie ISO 8859-1.
Działaj w ten sposób (
-d
dodano tylko dla estetyki):~ß
do uzyskania spacji.źródło
$a+0
z+$a
. Możesz również założyć, że dane wejściowe nigdy nie będą miały0
, więc możesz$a+0&&print
po prostu zastąpić je danymi wejściowymi+$a&print
. W rzeczywistości możesz nawet zrobić$a&print
, ponieważ w PHP"0" == 0 == 0.0 == false
. Aleecho
myślę, że może nie być potrzebny, jeśli po prostu użyjesz .and
nie będzie działał (w przeciwieństwie do logicznego), ani nie będzie działał w ten sposób. Ponieważ pobieram dane z interfejsu CLI, pierwszym argumentem jest-
, który chcę złapać zamiast wypisywać zero. Spróbowaćphp -r 'print_r($argv);' foo
. Zapisałem 1 bajt z pierwszą sugestią, dzięki.for(;$a=$argv[++$i];)echo$l+=$a-$l%$a,' ';
? Ma 42 bajty długości i pomija pierwszy element.a^A
, ale spowodowałoby to zbyt wiele ostrzeżeń (ostrzeżenia są ignorowalne). Nie zmieni w żaden sposób bajtu, ale z pewnością wygląda inaczej.Haskell (
302825 bajtów)Wersja rozszerzona
Wyjaśnienie
scanl1
umożliwia złożenie listy i zgromadzenie wszystkich wartości pośrednich na innej liście. Jest to specjalizacjascanl
, która ma następujący typ:Dlatego wszystko, czego potrzebujemy, to odpowiednia funkcja, która bierze dwa ostatni element naszej listy (
acc
w wersji rozszerzonej) i ten, który chcemy przetworzyć (next
w wersji rozszerzonej) i zwrócić odpowiednią liczbę.Możemy łatwo wyliczyć tę liczbę, dzieląc akumulator przez następny i wylewając wynik.
div
dba o to. Następnie musimy po prostu dodać,1
aby upewnić się, że lista faktycznie się powiększa (i że tak się nie stanie0
).źródło
( ... )
się$ ...
i myślę, że liczy się końcowy znak nowej linii, które mogą być pominięte:scanl1$\x y->y*div x y+y
, 24 bajtów.(...)
vs$
, ponieważ$\
zostaje przeanalizowany jako operator i po tym potrzebowałbym pojedynczej spacji$
.scanl1(...)
to funkcja nienazwana. Odnośnie$
do()
: masz rację, mój błąd.C ++,
636057 bajtówDziała w miejscu, biorąc pod uwagę zakres
[first, last)
. Pierwotnie napisany jako wariant szablonu, ale był dłuższy:Rozszerzona wersja
źródło
CJam, 13 bajtów
Wprowadź jako listę w stylu CJam. Wyjście jest oddzielone od linii.
Sprawdź to tutaj.
Wyjaśnienie
Ostateczna wartość pozostawia się na stosie i drukuje automatycznie na końcu.
źródło
Matematyka,
3632 bajtyTest
źródło
Perl, 17 + 3 = 20 bajtów
Wymaga
-p
i oznacza-l
:Wyjaśnienie:
źródło
Python (3.5),
6362 bajtyTest
Poprzednie rozwiązanie
niektóre rozwiązania rekurencyjne, ale większe
źródło
r+=[…]
możesz użyćr+=…,
r=[0]
w parametrze domyślnym,r
stają się one nielokalneBrachylog , 12 bajtów
Na tyle dziwne, że pomnożenie każdej zmiennej przez liczbę zacznie się od pomnożenia przez 2, a nie 0 lub 1. To wydaje się jednak działać i pokonuje obie inne implementacje Brachylog
Wyjaśnienie
Wypróbuj online!
źródło
Brachylog , 54 bajty
Wyjaśnienie
źródło
Pyth, 11
Pakiet testowy
Czy skumulowane zmniejszenie, zmniejszenie, które zwraca wszystkie wartości pośrednie, zaczynając od
0
. Ponieważ wejście na pewno zawiera tylko dodatnie liczby całkowite, jest to w porządku. Na każdym etapie bierzemy starą wartość, dzielimy ją przez nową wartość i dodajemy1
, a następnie mnożymy przez nową wartość.źródło
C, 79 bajtów
Bez golfa
źródło
p=p/x*x+x
działałoby?PowerShell, 26 bajtów
Pobiera dane wejściowe jako jawną tablicę, np .
> .\sort-by-multiplying.ps1 @(6,5,4,3,2,1)
Przez$args[0]
.Następnie omijamy to za pomocą
|%{...}
i każda iteracja wykonuje magię . Nie, żartuję, używamy tej samej sztuczki modulo, co inne odpowiedzi (rekwizyty dla @aross, ponieważ zauważyłem ją tam wcześniej).Hermetyzujące pareny
(...)
zapewniają, że wynik operacji matematycznej jest umieszczany na rurociągu, a tym samym generowany. Gdybyśmy to pominęli, nic nie byłoby wypisywane, ponieważ$l
zmienna jest zbierana w śmieci po zakończeniu wykonywania.Przykład
źródło
Japt, 11 bajtów
Przetestuj online!
Jak to działa
źródło
05AB1E , 11 bajtów
Kod:
Wypróbuj online!
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252.
źródło
Minkolang 0,15 , 17 bajtów
Wypróbuj tutaj!
Wyjaśnienie
Zasadniczo rejestr przechowuje najnowszego członka rosnącej listy, który jest dzielony przez dane wejściowe i zwiększany, aby uzyskać mnożnik dla następnego członka. Toroidalna właściwość pola kodu Minkolanga oznacza, że pętla ta odbywa się poziomo bez potrzeby
()
lub[]
pętli.źródło
Brachylog , 21 bajtów
Wypróbuj online!
Wykorzystuje sumę wartości wejściowych jako górną granicę dla współczynników C. Dość wolno, przekroczenie limitu czasu dla TIO dla list wejściowych dłuższych niż 5 lub 6 (również w zależności od sumy wartości). Ale nie tak wolno, jak moja oryginalna wersja, która wymaga niewielkich list składających się z maksymalnie 3 elementów z małymi wartościami, aby nie przekroczyć limitu czasu:
21 bajtów
Wypróbuj online!
źródło
C (gcc) , 37 bajtów
Wypróbuj online!
źródło
Python 2 , 53 bajty
Wypróbuj online!
k*x>y
implikujek>y/x
; więc najmniejszyk
może byćk=floor(y/x)+1
. Ponieważ w Pythonie 2.7 dzielenie liczb całkowitych jest już przyjmowane jakofloor
, chcemyk=y/x+1
ik*x = (y/x+1)*x = y/x*x+x
.źródło
Oracle SQL 11.2, 210 bajtów
Bez golfa
źródło
Program Cheza (140 bajtów)
Wersja do gry w golfa:
Wersja bez golfa:
Wypróbuj online!
źródło
* m(car l)
może być*(car l)m
.K (oK) , 11 bajtów
Wypróbuj online!
źródło