Uzyskaj kroki sekwencji

17

Wyzwanie

Biorąc pod uwagę sekwencję liczb, utwórz funkcję, która zwraca kroki sekwencji.

  • Załóżmy, że sekwencja będzie N >= 3
  • Sekwencja powtórzy kroki co najmniej raz
  • Sekwencja będzie zawierać tylko liczby naturalne
  • Twoja funkcja lub program powinien zwrócić możliwie najkrótszą sekwencję kroków

Przykład:

Wejście: [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17]

Wynik: [1, 1, 2]

Objaśnienie: Początkowa sekwencja pochodzi z 1 => 2 (1 step), 2 => 3 (1 step), 3 => 5 (2 steps). Potem się powtarza. Dane wyjściowe to[1 step, 1 step, 2 steps] => [1, 1, 2]

Inny przykład:

Wejście: [2, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20]

Wynik: [3, 1, 1, 1]

[2, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20]
 \  /\ /\ /\ / 
  3   1  1  1  Then it repeats...

Przypadki testowe

Input: [1, 4, 8, 9, 10, 13, 17, 18, 19, 22, 26, 27, 28] => Output: [3,4,1,1]

Input: [6, 11, 13, 18, 20, 25, 27, 32, 34, 39, 41] => Output: [5,2]

Input: [2, 6, 10, 13, 17, 21, 25, 28, 32, 36, 40, 43, 47] => Output: [4,4,3,4]

Input: [5, 6, 7] => Output: [1]


Wyjaśnienia

  • Długość wejściowa - 1 jest podzielna przez długość wyjściową
  • Załóżmy, że sekwencja zawsze będzie rosła

To jest , więc wygrywa najkrótsza odpowiedź w bajtach.

Luis Felipe De Jesus Munoz
źródło
Powiązane wyzwanie .
AdmBorkBork
6
Widziałem ostatnio kilka opublikowanych przez ciebie wyzwań z wieloma wyjaśniającymi komentarzami, a kilka zamknięto jako „niejasne”, a następnie ponownie otworzyłem po dokonaniu odpowiednich zmian. Czy rozważałeś umieszczenie ich w piaskownicy przez kilka dni / tydzień? Podobały mi się twoje wyzwania, ponieważ są dość przystępne, ale wszystkie wyzwania, bez względu na to, jak proste lub przez kogo są publikowane, mogą używać udoskonalenia.
Giuseppe
2
@Giuseppe Dzięki za sugestie. W piaskownicy opublikowałem kilka innych wyzwań (zazwyczaj, jeśli nie znajdę odpowiedniego sposobu, aby utworzyć wyzwanie, usuwam je). W przypadku tych wyzwań pomyślałem, że były wystarczająco jasne i dlatego opublikowałem je od razu, ale najpierw zacznę je publikować w piaskownicy. Dzięki
Luis Felipe De Jesus Munoz
2
@LuisMendo Heretic! 0 to liczba naturalna! Billy Joel miał nawet cały album poświęcony Peano Manowi!
ngm
1
@AdmBorkBork, jest to bardziej związane ze względu na obsługę list operacji o dowolnej długości.
Peter Taylor,

Odpowiedzi:

10

Galaretka , 9 7 bajtów

IsJEƇḢḢ

Wypróbuj online!

Jak to działa

IsJEƇḢḢ  Main link. Argument: A (array)

I        Increment; compute D, the array of A's forward differences.
  J      Indices; yield [1, ..., len(A)].
 s       Split D into chunks of length k, for each k in [1, ..., len(A)].
   EƇ    Comb equal; keep only partitions of identical chunks.
     Ḣ   Head; extract the first matching parititon.
      Ḣ  Head; extract the first chunk.
Dennis
źródło
9

JavaScript (ES6), 58 bajtów

Zwraca ciąg oddzielony przecinkami (z przecinkiem wiodącym).

a=>(a.map(p=x=>-(p-(p=x)))+'').match(/N((,\d+)*?)\1*$/)[1]

Wypróbuj online!

Lub 56 bajtów, jeśli użyjemy ,-jako separatora i założymy, że sekwencja jest zawsze ściśle rośnie.

W jaki sposób?

Najpierw konwertujemy tablicę wejściową a [] na listę kolejnych różnic za pomocą:

a.map(p = x => -(p - (p = x)))

Ponieważ p jest początkowo ustawione na wartość nienumeryczną (funkcja zwrotna mapy () ), pierwsza iteracja daje NaN .

Przykład:

[6, 11, 13, 18, 20, 25, 27, 32, 34, 39, 41]
[ NaN, 5, 2, 5, 2, 5, 2, 5, 2, 5, 2 ]

Następnie zmuszamy wynik do ciągu:

"NaN,5,2,5,2,5,2,5,2,5,2"

Na koniec szukamy najkrótszego 1 wzoru liczb całkowitych oddzielonych przecinkami ( ,\d+) zaczynających się zaraz po „NaN” i powtarzających się do końca łańcucha:

match(/N((,\d+)*?)\1*$/)

1: używając non-chciwego *?

Arnauld
źródło
Publikuję rozwiązanie oparte na tym samym pomyśle regex, ale bardzo różniące się implementacją. Oczywiście nie szukałem innych rozwiązań przed opracowaniem mojego i wydaje mi się, że jest wystarczająco inny, i może po raz pierwszy udało mi się zdobyć lepsze wyniki niż ty.
edc65,
1
53 bajtów: /(,.+?)\1*$/.
Neil
6

Brachylog , 11 bajtów

s₂ᶠ-ᵐṅᵐ~j₍t

Wypróbuj online!

Byłoby 5 bajtów, gdyby istniała wbudowana funkcja dla kolejnych różnic.

Wyjaśnienie

Example input: [6, 11, 13, 18, 20, 25, 27, 32, 34, 39, 41] 

s₂ᶠ             Find all substrings of length 2: [[6,11],[11,13],…,[34,39],[39,41]]
   -ᵐ           Map subtraction: [-5,-2,-5,-2,-5,-2,-5,-2,-5,-2]
     ṅᵐ         Map negate: [5,2,5,2,5,2,5,2,5,2]
       ~j₍      Anti-juxtapose the list of differences; the shortest repeated list is found
                  first, with the biggest number of repetitions: [5,[5,2]]
            t   Tail: [5,2]
Fatalizować
źródło
Czy potrafisz zanegować po ogonie, aby uratować bajt?
Rod
@Rod Nadal będę musiał go zmapować, aby miał taką samą długość. Negatyw jest predykatem pomiędzy dwoma numerami, to nie vectorize automatycznie do list jak inne języki (w przeciwnym razie nie byłoby dobrze pracują z nieznanych wejść / wyjść, które są powszechne w programach deklaratywnych)
Fatalize
5

Pyth, 11 bajtów

<J.+Qf.<IJT

Wypróbuj tutaj

Wyjaśnienie

<J.+Qf.<IJT
 J.+Q          Call the sequence of differences in the input J.
     f         Find the first positive integer T...
      .<IJT    ... where rotating J by T doesn't change it.
<J             Take that many elements of J.

źródło
5

Japt , 14 12 bajtów

äa
¯@eUéX}aÄ

Spróbuj


Wyjaśnienie

              :Implicit input of array U
äa            :Consecutive absolute differences
\n            :Reassign to U
 @    }aÄ     :Return the first positive integer X that returns true
   UéX        :  Rotate U right X times
  e           :  Check equality with U
¯             :Slice U to that element

Oryginalny

äa
@eUîX}a@¯XÄ

Spróbuj

Kudłaty
źródło
5

R , 49 46 bajtów

Pełny program:

d=diff(scan());while(any((s=d[1:T])-d))T=T+1;s

Wypróbuj online!

R , 72 58 54 bajtów

Oryginalne przesłanie funkcji ze wszystkimi przypadkami testowymi w jednym miejscu:

function(a,d=diff(a)){while(any((s=d[1:T])-d))T=T+1;s}

Wypróbuj online!

Podziękowania dla JayCe za zasugerowanie pełnej trasy programu i -4 bajtów dla funkcji, oraz dla Giuseppe za dalsze -3.

Kirill L.
źródło
@JayCe też a<-tutaj nie potrzebuję
Giuseppe
4

J , 22 19 bajtów

3 bajty zapisane dzięki FrownyFrog!

0{"1[:~./:|."{}.-}:

Wypróbuj online!

[Wypróbuj online!] [TIO-ji2uiwla]

W jaki sposób?

                 -      find the successive differences by subtracting 
                  }:    the list with last element dropped
               }.       from the list with the first element dropped 
           |."{         rotate the list of differences
         /:             0..length-1 times (the input graded up)
     [:~.               remove duplicating rows
 0{"1                   take the first element of each row
Galen Iwanow
źródło
Jeśli /:zamiast tego #\możesz 0{"1[:~.zapisać 1 bajt.
FrownyFrog,
I "0 1jest"{
FrownyFrog,
@FrownyFrog Dzięki, jeszcze raz!
Galen Iwanow
1
to jest wspaniałe.
Jonah
@Jonah Tak, dzięki FrownyFrog!
Galen Iwanow
4

05AB1E , 8 bajtów

Zaoszczędził 3 bajty dzięki Kevin Cruijssen .

¥.œʒË}нн

Wypróbuj online!


05AB1E , 11 bajtów

āεI¥ô}ʒË}нн

Wypróbuj online!

āεI ¥ ô} ʒË} нн Pełny program.
Zakres długości. Naciśnij [1 ... len (inp)].
 ε} Dla każdego ...
  I ¥ ô ... Pokrój delty na kawałki o odpowiednim rozmiarze
      ʒË} Utrzymuj tylko te, które mają wszystkie swoje elementy równe.
         нн I najpierw pobierz pierwszy element pierwszego.

13 bajtów

Urocza alternatywa IMO:

¥©ηʒDg®ôÙ˜Q}н

Wypróbuj online!

¥©ηʒDg®ôÙ˜Q}н   Full program.
¥               Push the deltas.
 ©              Copy them to the register.
  ηʒ       }    And filter the prefixes by...
    D     Q     ... Is the prefix itself equal to...
     g®ô        ... The deltas, split into chunks of its length...
        Ù˜      ... Deduplicated and flattened?
            н   Head.
Pan Xcoder
źródło
1
8 bajtów przy użyciu.
Kevin Cruijssen
3

JavaScript, 49 56 bajtów

Edytuj 7 bajtów zapisanych dzięki (zgadnij kto?) Arnauld

Taki sam pomysł wyrażenia regularnego jak Arnauld, ale co ciekawe tak różne w realizacji ...

Zwracanie ciągu znaków z oddzielonymi przecinkami kroków (i przecinkiem wiodącym)

p=>/N(.+?)\1+$/.exec(p.map(p=v=>[v-p,p=v][0]))[1]

Test

var F=
p=>/N(.+?)\1+$/.exec(p.map(p=v=>[v-p,p=v][0]))[1]

;[[1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17]
,[1, 4, 8, 9, 10, 13, 17, 18, 19, 22, 26, 27, 28]
,[6, 11, 13, 18, 20, 25, 27, 32, 34, 39, 41] 
,[2, 6, 10, 13, 17, 21, 25, 28, 32, 36, 40, 43, 47]
,[5, 6, 7]]
.forEach(x=>console.log(x + ' -> ' + F(x)))

edc65
źródło
Używanie matchbyło moją kiepską decyzją. Możesz mnie trochę obezwładnić . :-)
Arnauld
3

MATL , 14 13 12 bajtów

dt5YLFTF#Xu)

Wypróbuj online!

Właśnie odkryłem, że MATL ma funkcję krążenia!

Wyjaśnienie

d - Uzyskaj różnice między kolejnymi terminami, jako tablicę

t5YL- powiel to, a następnie wywołaj funkcję YL(„galeria”) za pomocą opcji 5(„krążący”). Tworzy macierz z danym wektorem jako pierwszym rzędem, a następnie kolejne rzędy są tym samym wektorem przesuniętym kołowo, aż się owija.

FTF#Xu- Sprawdź unikalne wiersze i uzyskaj ich numery (nie jestem pewien, czy istnieje krótszy sposób na zrobienie tego). Po powtórzeniu kroków sekwencji rząd przesunięty kołowo będzie taki sam jak pierwszy rząd, a kolejne rzędy będą się powtarzać. W ten sposób uzyskuje się wskaźniki pierwszego przebiegu kroków sekwencji, zanim zaczną się powtarzać.

) - zindeksuj to w oryginalnej tablicy różnic, aby uzyskać odpowiedź.


Starsze:

d`tt@YS-a}@:)

Wypróbuj online!

(-1 bajt dzięki Giuseppe)

Wyjaśnienie:

d   % Get the differences between successive terms, as an array
`   % Start do-while loop
  tt  % duplicate the difference array twice
  @   % push the current loop index value
  YS  % circularly shift the difference array by that amount
  -   % subtract the shifted diffs from the original diffs
  a   % see if the subtraction resulted in any non-zeros
    % if it did, shifted differences were not equal to original differences, so continue loop 
}@ % if it didn't, then get loop index
:) % get the differences upto the loop index, before they started repeating
   % implicit loop end
sundar - Przywróć Monikę
źródło
2

Python 2 , 101 bajtów

def f(l):d=[y-x for x,y in zip(l,l[1:])];g=len(l);print[d[:k]for k in range(1,g+1)if g/k*d[:k]==d][0]

Wypróbuj online!

Po pierwsze tworzy delty dni , po czym wyszukuje pierwszy prefiks p o d że kiedy powtórzono ⌊len (l) / len (P) ⌋ razy wydajność L , gdzie L jest lista wejściowego.

Pan Xcoder
źródło
2

Rubin , 62 bajty

Opiera się na logice Regex zaadaptowanej z odpowiedzi Arnaulda .

->a{i=-2;a.map{|x|(i+=1)>=0?x-a[i]:0}*?,=~/((,\d+)*?)\1*$/;$1}

Wypróbuj online!

Alternatywne określenie różnic kroków, również 62 bajty:

->a{[0,*a.each_cons(2).map{|x,y|y-x}]*?,=~/((,\d+)*?)\1*$/;$1}

Wypróbuj online!

Kirill L.
źródło
2

Java 10, 104 100 bajtów

a->{var t="";for(int i=a.length;i-->1;t+=a[i]-a[i-1]+" ");return t.replaceAll("( ?.+?)\\1*$","$1");}

Regex ( ?.+?)\1*$dla najkrótszego powtarzającego się podciągu z komentarza @Neil @Arnauld ' JavaScript (ES6) Odpowiedź s .

Wypróbuj online.

Wyjaśnienie:

a->{                        // Method with integer-array parameter and String return-type
  var t="";                 //  Temp-String, starting empty
  for(int i=a.length;i-->1; //  Loop backward over the input-array, skipping the first item
    t+=a[i]-a[i-1]          //   Calculate the difference between two adjacent items
       +" ");               //   And append this with a space to the temp-String
  return t.replaceAll("( ?.+?)\\1*$", 
                            //  Find the shortest repeating substring
                     "$1");}//  And only keep one such substring
Kevin Cruijssen
źródło
1

APL + WIN, 39 bajtów

Monituj o dane wejściowe.

(↑((⍴v)=+/¨(⊂v)=(⍳⍴v)⌽¨⊂v)/⍳⍴v)↑v←-2-/⎕

Wypróbuj online! Dzięki uprzejmości Dyalog Classic

Wyjaśnienie:

v←-2-/⎕ Prompt for input and take successive differences

(⍳⍴v)⌽¨⊂v create a nested vector ans sequentially rotate by one to length of v

+/¨(⊂v)= compare to original v and sum positions where there is match

(⍴v)= identify where all elements match

(↑(....) identify number of rotations giving a first complete match

(↑(...)↑v take first number of elements from above from v as repeated sequence
Graham
źródło
1

Python 2 , 86 85 bajtów

def f(a,n=1):d=[y-x for x,y in zip(a,a[1:])];return d[:-n]==d[n:]and d[:n]or f(a,n+1)

Wypróbuj online!

Skonstruuj różnice jako d; jeśli dpowtarza się z rozmiarem jednostki, nto d[n:]==d[:-n]; w przeciwnym razie powrócą.

Chas Brown
źródło
1

Retina 0.8.2 , 42 bajty

\d+
$*
(?<=(1+),)\1

1+(.+?)\1*$
$1
1+
$.&

Wypróbuj online! Link zawiera przypadki testowe. Dane wyjściowe obejmują przecinek wiodący. Wyjaśnienie:

\d+
$*

Konwertuj na unary.

(?<=(1+),)\1

Oblicz różnice w przód, z wyjątkiem pierwszej liczby, która pozostanie w tyle.

1+(.+?)\1*$
$1

Dopasuj powtarzające się różnice.

1+
$.&

Konwertuj na dziesiętny.

Neil
źródło
1

05AB1E , 14 13 bajtów

¥DηvÐNƒÁ}QD—#

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wiem, że są już dwie krótsze odpowiedzi 05AB1E opublikowane przez @ Mr.Xcodera , ale chciałem wypróbować to alternatywne podejście przy użyciu kontroli rotacji i równości.
Może być w stanie zagrać w golfa o kilka bajtów bez upuszczaniaÁ .

-1 bajt po końcówce @Emigna, aby usunąć rejestry global_variable ( ©i 2x ®) i zamiast tego użyć Duplicate ( D) i Triplicate ( Ð).

Wyjaśnienie:

¥             # Calculate the deltas of the input-array
              #  i.e. [1,2,3,5,6,7,9] → [1,1,2,1,1,2]
 D            # Duplicate it
  η           # Push all its prefixes
              #  [1,1,2,1,1,2] → [[1],[1,1],[1,1,2],[1,1,2,1],[1,1,2,1,1],[1,1,2,1,1,2]]
v             # For-each over these prefixes
 Ð            #  Triplicate the (duplicated) deltas-list
  NƒÁ}        #  Rotate the deltas-list N+1 amount of times,
              #  where N is the prefix index (== prefix_length-1)
              #   i.e. [1,1,2] and [1,1,2,1,1,2] (rotate 3 times) → [1,1,2,1,1,2]
      Q       #  If the rotated deltas and initial deltas are equal
              #   [1,1,2,1,1,2] and [1,1,2,1,1,2] → 1
       D—#    #  Print the current prefix-list, and stop the for-each loop
Kevin Cruijssen
źródło
1
Oto 9 (osobna odpowiedź, ponieważ jest to zupełnie inny algo, chociaż dzieli ¥ η).
Grimmy,
@Grimy Czy przeglądasz wszystkie moje odpowiedzi 05AB1E i grasz w golfa, haha? ; p Ładna odpowiedź (jeszcze raz), +1 ode mnie.
Kevin Cruijssen
1
Nie wszystkie, po prostu przeglądam linki w tym poście .
Grimmy,
@Grimy Ah ok, to ma sens. :)
Kevin Cruijssen
1

Haskell, 107 bajtów

let i=map(uncurry(-))$zip(tail x)(init x)in head$filter(\s->take(length i)(concat$repeat s)==i)(tail$inits i)

x jest tablicą wejściową.

misja111
źródło
Witamy w szczególności w PPCG i Haskell! Nie można zakładać, że dane wejściowe są obecne w pewnej zmiennej, choć można to łatwo naprawić przez dodanie f x=. Również użycie initswymaga import Data.List, ponieważ nie jest to częścią Preludium: Wypróbuj online!
Laikoni
Możesz jednak zaoszczędzić sporo bajtów: (init x)może to być xspowodowane tym, że zipobcina się automatycznie, jeśli jedna z list jest dłuższa od drugiej. I dla map(uncurry(-))$zipistnieje wbudowany: zipWith(-). Zamiast f x=let i=...inmożna użyć osłony wzoru: f x|i<-...=.
Laikoni
Ponadto można użyć wyrażeń listowych zamiast filter, !!0zamiast headi cyclezamiast concat$repeat: Spróbuj online!
Laikoni,
@Laikoni Bardzo dziękuję za ulepszenia! Masz rację, mój kod potrzebuje deklaracji funkcji i importu danych Data.List.inits. Zastanawiałem się jednak, czy należy to dodać do długości kodu? Pytam, ponieważ niektóre inne przykłady kodu również polegają na dodatkowym kodzie.
misja111,
Tak, istnieje ogólna zgoda co do tego, że bajty te są uwzględnione w partyturze. Mamy przewodnik po zasadach gry w golfa w Haskell, który obejmuje większość tych przypadków.
Laikoni
1

Stax , 8 6 bajtów

░»F\☺»

Uruchom i debuguj

Oto rozpakowana wersja z adnotacjami, która pokazuje, jak to działa.

:-  pairwise differences
:(  all leftward rotations of array
u   keep only unique rotations
mh  output the first element from each unique rotation

Uruchom ten

rekurencyjny
źródło
1

Perl 6 , 57 bajtów

{~(.rotor(2=>-1).map:{.[1]-.[0]})~~/^(.+?){}" $0"+$/;~$0}

Sprawdź to

Dane wyjściowe są oddzielone spacjami ( "1 1 2")

Rozszerzony:

{      # bare block lambda with implicit parameter $_

  ~(   # stringify (space separated)

    .rotor( 2 => -1 )     # from the input take 2 backup 1, repeat
    .map: { .[1] - .[0] } # subtract each pair to find the differences
  )

  ~~   # smartmatch

  /    # regex

    ^  # beginning of string

    ( .+? ) # match at least one character, but as few as possible
    {}      # make sure $0 is set (probably a compiler bug)
    " $0"+  # match $0 one or more times (with a leading space)

    $  # end of string
  /;

  ~$0  # return the stringified $0
}
Brad Gilbert b2gills
źródło
Cała pierwsza część może być~(.skip Z-$_)
Jo King
1

05AB1E , 9 bajtów

¥©η.ΔÞ®Å?

Wyjaśnienie:

          # take input implicitly
¥         # deltas, eg [4, 5, 7, 8, 10] -> [1, 2, 1, 2]
 ©        # save this to the global register
  η       # prefixes, eg [1, 2, 1, 2] -> [[1], [1, 2], ...]
   .Δ     # find the first one such that
     Þ    # cycled infinitely, eg [1, 2] -> [1, 2, 1, 2, ...]
       Å? # starts with
      ®   # the global register
          # and implicitly print the found element

Alternatywny 9-bajtowy:

¥η.ΔÞ.¥-Ë

To samo algo, ale zamiast porównywać z listą delt (które należy zapisać / przywrócić), to używa (undelta) następnie porównuje z (niejawnym) wejściem.

Wypróbuj online!

Ponury
źródło
0

K4 , 30 bajtów

Rozwiązanie:

(*&d~/:c#'(!c:#d)#\:d)#d:1_-':

Przykłady:

q)k)(*&d~/:c#'(!c:#d)#\:d)#d:1_-':2, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20
3 1 1 1
q)k)(*&d~/:c#'(!c:#d)#\:d)#d:1_-':1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17
1 1 2
q)k)(*&d~/:c#'(!c:#d)#\:d)#d:1_-':1, 4, 8, 9, 10, 13, 17, 18, 19, 22, 26, 27, 28
3 4 1 1
q)k)(*&d~/:c#'(!c:#d)#\:d)#d:1_-':6, 11, 13, 18, 20, 25, 27, 32, 34, 39, 41
5 2
q)k)(*&d~/:c#'(!c:#d)#\:d)#d:1_-':2, 6, 10, 13, 17, 21, 25, 28, 32, 36, 40, 43, 47
4 4 3 4
q)k)(*&d~/:c#'(!c:#d)#\:d)#d:1_-':5 6 7
,1

Wyjaśnienie:

Wydaje się, że to, co próbujemy rozwiązać, jest ogromne. Uzyskaj delty wejścia, a następnie buduj sekwencje i określ najkrótszą, która do niej pasuje.

(*&d~/:c#'(!c:#d)#\:d)#d:1_-': / the solution
                           -': / deltas 
                         1_    / drop first
                       d:      / save as d
                      #        / take (#) from
(                    )         / do this together
                 #\:d          / take (#) each-left (\:) from d
          (     )              / do this together
              #d               / count length of d
            c:                 / save as c
           !                   / range 0..c-1
       c#'                     / take c copies of each
   d~/:                        / d equal (~) to each right (/:)
  &                            / where true
 *                             / first one
streetster
źródło
0

Perl 5 -p , 55 bajtów

s/\d+ (?=(\d+))/($1-$&).$"/ge;s/\d+$//;s/^(.+?)\1*$/$1/

Wypróbuj online!

Liczby są wprowadzane jako lista oddzielona spacjami. Dane wyjściowe mają ten sam format.

Xcali
źródło