Funkcja lub sekwencja Fibonacciego


115

Sekwencja Fibonacciego to ciąg liczb, gdzie każda liczba w ciągu jest sumą dwóch liczb poprzednich ją. Dwie pierwsze liczby w sekwencji to 1.

Oto kilka pierwszych warunków

1 1 2 3 5 8 13 21 34 55 89 ...

Napisz najkrótszy kod, który:

  • Generuje sekwencję Fibonacciego bez końca.

  • Biorąc pod uwagę noblicza nth termin sekwencji. (Zindeksowany 1 lub zero)

Możesz użyć standardowych form wejścia i wyjścia.

(Podałem obie opcje na wypadek, gdyby jedna była łatwiejsza do wykonania w wybranym języku niż drugi).


W przypadku funkcji, która przyjmuje n, musi być obsługiwana stosunkowo duża wartość zwracana (największa liczba Fibonacciego, która odpowiada co najmniej normalnemu rozmiarowi słowa w komputerze).


Tabela liderów

Odpowiedzi:


48

Perl 6, 10 znaków:

Anonimowa nieskończona lista sekwencji Fibonacciego:

^2,*+*...*

Taki sam jak:

0, 1, -> $x, $y { $x + $y } ... Inf;

Możesz więc przypisać go do tablicy:

my @short-fibs = ^2, * + * ... *;

lub

my @fibs = 0, 1, -> $x, $y { $x + $y } ... Inf;

I uzyskaj pierwsze jedenaście wartości (od 0 do 10) za pomocą:

say @short-fibs[^11];

lub z:

say @fibs[^11];

Poczekaj, z pierwszych anonimowych list możesz też pobrać pierwsze 50 liczb:

say (^2,*+*...*)[^50]

To zwraca:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
10946 17711 28657 46368 75025 121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169
63245986 102334155 165580141 267914296 433494437 701408733 1134903170 
1836311903 2971215073 4807526976 7778742049

I kilka prostych testów:

real    0m0.966s
user    0m0.842s
sys     0m0.080s

Z:

$ time perl6 -e 'say (^2, *+* ... *)[^50]'

EOF


Nawet nie pomyślałbym o ^2zastępstwie 0,1. +1
Konrad Borowski

2
To już nie jest poprawne, będziesz musiał zapisać jako |^2,*+*...*, co jest taką samą liczbą bajtów jak 0,1,*+*...*.
Brad Gilbert b2gills

5
Perl jest taki dziwny.
Cyoce

W jakiej wersji Perla 6 napisano tę odpowiedź?
CalculatorFeline

3
@CalculatorFeline Nastąpiła duża zmiana znana jako GLR (Great List Refactor), która nastąpiła na krótko przed pierwszym oficjalnym wydaniem, które miało miejsce 25.12.2015. Ten kod działałby do tego czasu.
Brad Gilbert b2gills

73

Brainfuck, 22 uderzeń

+>++[-<<[->+>+<<]>>>+]

Generuje sekwencję Fibonacciego stopniowo przesuwającą się po taśmie pamięci.


5
Piękny! Dosłownie piękna! A może nie ... w każdym razie +1 za to :)
Per Hornshøj-Schierbeck

2
To jest 3,344 lub 4 bajty w skompresowanym pieprzeniu mózgu. (6 ln (22)) / ln (256)
Will Sherwood

24
16 bajtów:+[[<+>->+>+<<]>]
primo

3
14 bajtów:+[.[>+>+<<-]>]
Charlim

2
@Stefnotch, oczywiście krótszy jest destrukcyjny. Powyższe rozwiązanie kończy się sekwencją Fibonacciego na taśmie, co również robi 16-bajtowe rozwiązanie.
primo


37

C # 4, 58 bajtów

Strumień (69; 65, jeśli słabo wpisany IEnumerable)

(Zakładając usingdyrektywę dla System.Collections.Generic.)

IEnumerable<int>F(){int c=0,n=1;for(;;){yield return c;n+=c;c=n-c;}}

Jedna wartość (58)

int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}

6
Biorąc pod uwagę, że njest to uint, n==0można je skrócić n<1. Strumień może zaoszczędzić kilka znaków, porzucając przestrzeń po typie ogólnym i deklarując xw szerszym zakresie niż to konieczne. W rzeczywistości porzuć xcałkowicie:n+=c;c=n-c;
Peter Taylor

1
@Peter: Dzięki, dokonam edycji, kiedy będę miał trochę czasu.
Jon Skeet,

Twoja wersja z jedną wartością jest tak długa, jak odpowiedź na moje rekurencyjne wyrażenie lambda ... fajnie!
Andrew Gray,

1
@ wizzwizz4, jeśli się nie mylę, jeśli !ndziała, to tak też powinno, njeśli zmienisz warunek.
Cyoce

3
@JonSkeet Aw. I tutaj myślałem, że
pokonałem

32

GolfScript, 12

Teraz tylko 12 znaków!

1.{.@.p+.}do

+1 dobra robota. Jeśli zmniejszysz go do 13 znaków, natychmiast zaakceptuję twoją odpowiedź (chyba że ktoś oczywiście udzieli jeszcze krótszej odpowiedzi). :-P
Chris Jester-Young

1
Uwielbiam wyzwanie. Gotowy! ;-)
jtjacques 30.01.11

Fajnie, wygrałeś. Przynajmniej dopóki ktoś nie zrobi czegoś jeszcze krótszego (jeśli to w ogóle możliwe). :-P
Chris Jester-Young

5
ta definicja jest prawie tak krótka jak sama nazwa „Fibonacci”! +1
agent-j

23

> <> - 15 znaków

0:nao1v LF a+@:n:<o

Chociaż możesz to skrócić, 0:nao1v LF a+@:n:<ojeśli chcesz. Daje 15 :) W rzeczywistości powoduje to również, że dane wyjściowe są nieco bardziej czytelne ...
tomsmeding

5
13 znaków:01r:nao$:@+$r
randomra

21

J, 10 znaków

Korzystanie z wbudowanego obliczania współczynników serii Taylora, więc może trochę oszukiwać. Nauczyłem się tutaj .

   (%-.-*:)t.

   (%-.-*:)t. 0 1 2 3 4 5 10 100
0 1 1 2 3 5 55 354224848179261915075

2
@ aditsu (q:^-^:p) 6jest 64 729tam, gdzie p jest parzyste. J jest prawdopodobnie dobry do tego, co robi zagadki. :)
randomra,

2
Jeszcze lepiej: (<:^-^:>) 4jest 81i <:^-^:> 4jest 53.5982.
randomra

2
Pokazane tutaj emoji jest tym, do czego powinien dążyć cały kod J. Na marginesie, inną alternatywą jest +/@:!&i.-użycie 9 bajtów.
mile

1
@miles Very nice! Powinieneś to opublikować, ponieważ jest to zupełnie inne niż moje.
randomra

21

Sześciokąt ,18 14 12

Dzięki Martin za 6 bajtów!

1="/}.!+/M8;

Rozszerzony:

  1 = "
 / } . !
+ / M 8 ;
 . . . .
  . . .

Wypróbuj online


Stary, odpowiedz. Pozostaje, ponieważ obrazy i objaśnienia mogą być pomocne dla nowych użytkowników Hexagony.

!).={!/"*10;$.[+{]

Rozszerzony:

  ! ) .
 = { ! /
" * 1 0 ;
 $ . [ +
  { ] .

Spowoduje to wydrukowanie sekwencji Fibonacciego oddzielonej znakami nowej linii.

Wypróbuj online! Uważaj jednak, tłumacz online tak naprawdę nie lubi nieskończonej wydajności.

Wyjaśnienie

Istnieją dwa „podprogramy” tego programu, z których każdy jest obsługiwany przez jeden z dwóch używanych adresów IP. Pierwsza procedura drukuje znaki nowej linii, a druga wykonuje obliczenia i wyniki Fibonacciego.

Pierwszy podprogram rozpoczyna się w pierwszym wierszu i przez cały czas przesuwa się od lewej do prawej. Najpierw drukuje wartość wskaźnika pamięci (inicjowana na zero), a następnie zwiększa wartość wskaźnika pamięci o 1. Po braku operacji adres IP przeskakuje do trzeciej linii, która najpierw przełącza się na inną komórkę pamięci, a następnie drukuje nową linię. Ponieważ nowa linia ma wartość dodatnią (jej wartość wynosi 10), kod zawsze przeskakuje do piątej linii, następnie. Piąta linia zwraca wskaźnik pamięci do naszego numeru Fibonacciego, a następnie przełącza się na inny podprogram. Kiedy wrócimy z tego podprogramu, adres IP przeskoczy z powrotem do trzeciej linii po wykonaniu braku operacji.

Drugi podprogram rozpoczyna się w prawym górnym rogu i rozpoczyna ruch na południowy wschód. Po przerwie wracamy do drugiej linii na zachód. Ta linia wypisuje aktualny numer Fibonacciego, przed przeniesieniem wskaźnika pamięci do następnej lokalizacji. Następnie IP przeskakuje do czwartej linii, gdzie oblicza następną liczbę Fibonacciego za pomocą poprzednich dwóch. Następnie przekazuje kontrolę z powrotem do pierwszego podprogramu, ale gdy odzyskuje kontrolę nad programem, kontynuuje działanie, aż napotka skok, w którym odbija się od lustra, które pierwotnie służyło do wskazywania go na zachód, gdy wraca do drugiej linii.


Wstępne ładne zdjęcia!

Lewa strona obrazu to program, prawa strona reprezentuje pamięć. Niebieska ramka to pierwszy adres IP, a oba adresy IP wskazują następną instrukcję do wykonania.

enter image description here

Uwaga: Zdjęcia mogą wyglądać ładnie tylko dla osób o podobnie ograniczonych umiejętnościach w programach do edycji obrazów: PI doda co najmniej 2 kolejne iteracje, aby korzystanie z *operatora stało się bardziej przejrzyste.

Uwaga 2: Zobaczyłem odpowiedź alephalpha dopiero po napisaniu większości tego, pomyślałem, że wciąż była cenna z powodu separacji, ale rzeczywiste części Fibonacciego naszych programów są bardzo podobne. Ponadto jest to najmniejszy program Hexagony, który widziałem przy użyciu więcej niż jednego adresu IP, więc pomyślałem, że warto go zachować: P


Powinieneś zamieścić link do tego, co robiłeś, aby zrobić piękne zdjęcia, a następnie umieść link na esolangs.org/wiki/Hexagony .
mbomb007

1
@ mbomb007 Użyłem gimpa, aby ręcznie utworzyć każdą ramkę, a następnie przesłałem zdjęcia na jakąś stronę tworzącą gif. Chociaż kilka razy w trakcie tego procesu zastanawiałem się nad stworzeniem narzędzia do tego, biorąc pod uwagę jego żmudność.
FryAmTheEggman

@FryAmTheEggman Imponujące! Zrób to wyzwanie. Jestem pewien, że ktoś opublikuje odpowiedź. : D Jeszcze lepiej, jeśli możesz stworzyć stronę internetową podobną do internetowego tłumacza ryb.
mbomb007

@ mbomb007 To może być odrobinę ambitne, jeśli chodzi o wyzwanie na tej stronie, nie wspominając o tym, że prawdopodobnie bardzo ucierpiałby z powodu bardzo szerokiego zakresu. Nie sądzę, żebym to opublikował, ale możesz to zrobić samodzielnie, jeśli uważasz, że masz dobry sposób na przedstawienie tego. Ponadto uważam, że Timwi stworzył ideał C # dla heksagonii, chociaż nigdy go nie użyłem, ponieważ nie zawracałem sobie głowy mono.
FryAmTheEggman

1
@ mbomb007 Nawiasem mówiąc, ide mieszka tutaj , zapomniałem połączyć go ostatnim razem.
FryAmTheEggman

18

COW , 108

 MoO moO MoO mOo MOO OOM MMM moO moO
 MMM mOo mOo moO MMM mOo MMM moO moO
 MOO MOo mOo MoO moO moo mOo mOo moo

17

Python 2, 34 bajty

Python, używając rekurencji ... oto nadchodzi StackOverflow!

def f(i,j):print i;f(j,i+j)
f(1,1)

15

Galaretka , 3 bajty

+¡1

Wypróbuj online!

Jak to działa

+¡1    Niladic link. No implicit input.
       Since the link doesn't start with a nilad, the argument 0 is used.

  1    Yield 1.
+      Add the left and right argument.
 ¡     For reasons‡, read a number n from STDIN.
       Repeatedly call the dyadic link +, updating the right argument with
       the value of the left one, and the left one with the return value.

¡ zagląda do dwóch linków po lewej stronie. Ponieważ jest tylko jeden, musi być ciałem pętli. Dlatego liczba jest odczytywana z wejścia. Ponieważ nie ma argumentów wiersza polecenia, liczba ta jest odczytywana ze STDIN.


12

Golfscript - pojedynczy numer - 12/11/10

12 znaków do pobierania danych wejściowych ze standardowego wejścia:

~0 1@{.@+}*;

11 znaków dla danych wejściowych już na stosie:

0 1@{.@+}*;

10 znaków dla dalszego zdefiniowania 1 jako 0. liczby Fibonacciego:

1.@{.@+}*;

1
Opcją jest „Oblicza, biorąc pod uwagę n, ntą liczbę Fibonacciego”. Więc porzuć ~i masz 11 znaków, które biorą nna stos i pozostawiają F_nna stosie.
Peter Taylor

12

Rubin

29 27 25 24 znaków

p a=b=1;loop{b=a+a=p(b)}

Edycja: uczyniła go nieskończoną pętlą. ;)


13
czy ktoś zauważył b=a+a=bpalindrom? :)
st0le

2
tak st0le zrobił :)
gnibbler

Wiem, że jestem spóźniony na przyjęcie, ale czy ktoś może wyjaśnić, jak b=a+a=bdziała ta część? Nie mogę się wokół tego owinąć.
Pan Llama,

3
@GigaWatt, Pomyśl o tym w ten sposób, instrukcje są wykonywane od lewej do prawej ... więcnewb=olda+(a=oldb)
st0le

możesz zapisać 2 znaki, używając loop:p 1,a=b=1;loop{p b=a+a=b}
Patrick Oscity

11

Mathematica, 9 znaków

Fibonacci

Jeśli wbudowane funkcje nie są dozwolone, oto wyraźne rozwiązanie:

Mathematica, 33 32 31 znaków

#&@@Nest[{+##,#}&@@#&,{0,1},#]&

#&@@Nest[{#+#2,#}&@@#&,{0,1},#]&32 znaki.
chyanog,

1
@chyanog 31:#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Mr.Wizard

1
@ Mr.Wizard 24 znaki (26 bajtów):Round[GoldenRatio^#/√5]&
JungHwan Min

1
lub 23 znaki (27 bajtów):Round[((1+√5)/2)^#/√5]&
JungHwan Min

10

DC (20 bajtów)

Jako bonus jest nawet zaciemniony;)

zzr[dsb+lbrplax]dsax

EDYCJA: Mogę zaznaczyć, że wypisuje wszystkie liczby w sekwencji Fibonacciego, jeśli zaczekasz wystarczająco długo.


13
Nie nazwałbym tego zaciemnionym - zaciemniony kod powinien być trudny do zrozumienia, a jeśli chodzi o dc, kod tutaj jest całkowicie prosty.
Nabb

10

Preludium , 12 bajtów

Jedno z niewielu wyzwań, w których Preludium jest dość konkurencyjne:

1(v!v)
  ^+^

Wymaga to interpretera Pythona, który drukuje wartości jako liczby dziesiętne zamiast znaków.

Wyjaśnienie

W Preludium wszystkie wiersze są wykonywane równolegle, a kolumny instrukcji przechodzą przez program. Każda linia ma własny stos, który jest inicjowany na zero.

1(v!v)
  ^+^
| Push a 1 onto the first stack.
 | Start a loop from here to the closing ).
  | Copy the top value from the first stack to the second and vice-versa.
   | Print the value on the first stack, add the top two numbers on the second stack.
    | Copy the top value from the first stack to the second and vice-versa.

Pętla powtarza się na zawsze, ponieważ pierwszy stos nigdy nie będzie miał 0na wierzchu.

Zauważ, że zaczyna się sekwencja Fibonacciego od 0.


10

Sześciokąt , 6 bajtów

Nie konkuruje, ponieważ język jest nowszy niż pytanie.

1.}=+!

Nie golfowany:

  1 .
 } = +
  ! .

Drukuje sekwencję Fibonacciego bez żadnego separatora.


2
Ma to niewielki problem, ponieważ nie drukuje żadnego separatora między liczbami. Nie jest to jednak dokładnie określone w wyzwaniu. (I naprawdę się cieszę, że ktoś używa Sześciokąta. :))
Martin Ender

9

TI-BASIC, 11

Legendarny golfista TI-BASIC Kenneth Hammond („Weregoose”) z tej strony . Działa w czasie O (1) i uważa, że ​​0 jest 0 terminem sekwencji Fibonacciego.

int(round(√(.8)cosh(Anssinh‾¹(.5

Używać:

2:int(round(√(.8)cosh(Anssinh‾¹(.5
                                     1

12:int(round(√(.8)cosh(Anssinh‾¹(.5
                                     144

Jak to działa? Jeśli wykonasz matematykę, okaże się, że sinh‾¹(.5)jest ona równa ln φ, więc jest to zmodyfikowana wersja formuły Bineta, która zaokrągla w dół zamiast używać (1/φ)^nterminu korygującego. round(Konieczna jest (okrągły do 9 miejsc po przecinku), aby uniknąć błędów zaokrągleń.


8

K - 12

Oblicza ni n-1liczby Fibonacciego.

{x(|+\)/0 1}

Tylko nthliczba Fibonacciego.

{*x(|+\)/0 1}

+1 Nieźle! Jeśli możesz ją zmniejszyć tylko o jedną postać (i zapewnisz mi sposób jej przetestowania), zaakceptuję twoją odpowiedź. :-)
Chris Jester-Young

Jedynym sposobem jej zmniejszenia byłoby zastąpienie funkcji wywołaniem znanego numeru: n (| + \) / 0 1 Przetestuj ją za pomocą tego interpretera .
isawdrones


7

Java, 55

Nie mogę tutaj konkurować ze zwięzłością większości języków, ale mogę zaoferować znacznie inny i być może znacznie szybszy (stały czas) sposób obliczenia n-tej liczby:

Math.floor(Math.pow((Math.sqrt(5)+1)/2,n)/Math.sqrt(5))

nto wejście (int lub long), zaczynające się od n = 1. Używa formuły Bineta i zaokrągla zamiast odejmowania.


Uwielbiam to rozwiązanie
Andreas

Wydaje mi się, że to nie działa, ale jest wcześnie i być może czegoś mi brakuje! Zakładając, 0że jest to pierwsza liczba w sekwencji, daje 0, 0, 1, 1, 3, 4, 8, 12, 21, 33to pierwsze 10 liczb
Shaggy

@Shaggy Oops! Przepraszam, wprowadziłem błąd - naprawiony teraz.
Hans-Peter Störr

6

Ruby, 25 znaków

Odpowiedź st0le skrócona.

p 1,a=b=1;loop{p b=a+a=b}

6
W rzeczywistości możesz go jeszcze bardziej skrócić, używająca=b=1;loop{p a;b=a+a=b}
Ventero

6
Więc st0le jego odpowiedź? : P
mbomb007,

6

FAC: funkcjonalne APL, 4 znaki (!!)

Nie moja, dlatego opublikowana jako wiki społeczności. FAC jest dialektem APL, który Hai-Chen Tu najwyraźniej zasugerował jako swoją pracę doktorską w 1985 roku. Później wraz z Alanem J. Perlisem napisał artykuł zatytułowany „ FAC: A Functional APL Language ”. Ten dialekt APL używa „leniwych tablic” i pozwala na tablice o nieskończonej długości. Definiuje operator „iter” ( ), aby umożliwić kompaktową definicję niektórych sekwencji rekurencyjnych.

Przypadek monadyczny („unarny”) jest w zasadzie przypadkiem Haskella iteratei jest zdefiniowany jako (F⌼) A ≡ A, (F A), (F (F A)), …. Dwójkowym ( „binarny”) sprawa jest nieco zdefiniowane analogicznie do dwóch zmiennych A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Dlaczego to jest przydatne? Jak się okazuje, jest to dokładnie taki rodzaj nawrotu, jaki ma sekwencja Fibonacciego. W rzeczywistości jednym z podanych przykładów jest

1+⌼1

tworząc znaną sekwencję 1 1 2 3 5 8 ….

A więc proszę bardzo krótka możliwa implementacja Fibonacciego w nieinnowacyjnym języku programowania. :RE


Och, przypadkowo nie opublikowałem w społeczności Twojego postu w ramach mojego (ręcznego) masowego odpakowywania. No cóż. ;-)
Chris Jester-Young



6

Dodos , 26 bajtów

	dot F
F
	F dip
	F dip dip

Wypróbuj online!

Jak to działa

Funkcja F wykonuje wszystkie ciężkie podnoszenie; zdefiniowano go rekurencyjnie w następujący sposób.

F(n) = ( F(|n - 1|), F(||n - 1| - 1|) )

Ilekroć n> 1 , mamy | n - 1 | = n - 1 <n oraz || n - 1 | - 1 | = | n - 1 - 1 | = n - 2 <n , więc funkcja zwraca (F (n - 1), F (n - 2)) .

Jeśli n = 0 , to | n - 1 | = 1> 0 ; jeśli n = 1 , to || n - 1 | - 1 | = | 0 - 1 | = 1 = 1 . W obu przypadkach, próba połączenia rekurencyjne F (1) podnieść Surrender wyjątek, więc F (0) zwraca 0 i F (1) zwraca 1 .

Na przykład F (3) = (F (1), F (2)) = (1, F (0), F (1)) = (1, 0, 1) .

Wreszcie, główna funkcja jest zdefiniowana jako

main(n) = sum(F(n))

więc sumuje wszystkie współrzędne wektora zwrócone przez F. .

Na przykład main (3) = suma (F (3)) = suma (1, 0, 1) = 2 .



5

Desmos , 61 bajtów

Grał w golfa

Kliknij add sliderprzycisk dla n.

p=.5+.5\sqrt{5}
n=0
f=5^{-.5}\left(p^n-\left(-p\right)^{-n}\right)

Ostatni wiersz to wynik.

Nie golfił

Jest funkcją.

\phi =\frac{1+\sqrt{5}}{2}
f_{ibonacci}\left(n\right)=\frac{\phi ^n-\left(-\phi \right)^{-n}}{\sqrt{5}}

5

Cubix , 10 bajtów

Odpowiedź niekonkurencyjna, ponieważ język jest nowszy niż pytanie.

Cubix to nowy, dwuwymiarowy język autorstwa @ETHproductions, w którym kod jest zawijany na kostkę o odpowiednim rozmiarze.

;.o.ON/+!)

Wypróbuj online

Zawija się to na kostkę 2 x 2 w następujący sposób

    ; .
    o .
O N / + ! ) . .
. . . . . . . .
    . .
    . .
  • O wyprowadza wartość TOS
  • N pchnij nową linię na stos
  • / odzwierciedlają północ
  • o wypisuje znak TOS
  • ; pop TOS
  • / odbij się na wschód po obejściu sześcianu
  • + dodaj 2 górne wartości stosu
  • ! pomiń następne polecenie, jeśli TOS wynosi 0
  • ) zwiększ TOS o 1. To zasadniczo rozpoczyna sekwencję.

Jest to nieskończona pętla, która drukuje sekwencję z separatorem nowej linii. Wykorzystuje to, że większość poleceń nie wyrzuca wartości ze stosu.
Jeśli separator zostanie zignorowany, można to zrobić za pomocą 5 bajtów.O+!)


5

Brainfuck, 16,15, 14/13 znaków

+[[->+>+<<]>]  

Generuje sekwencję Fibonacciego i niczego nie drukuje. Jest także krótszy niż powyższy.

+[.[->+>+<<]>]   

Ten ma 14 znaków, ale drukuje znaki ASCII z wartościami sekwencji Fibonacciego.


1
To dobrze, ale czy nie miałbym racji twierdząc, że wersja 14-bajtowa wyprowadza dane tylko z drugiej 1? Jak w „1 2 3 5 8” zamiast „1 1 2 3 5 8”?
Charlim

1
@Charlim Och, masz rację. Nie mam pojęcia, co pomyślałem o mnie w 2014 roku. W każdym razie właśnie to naprawiłem, przenosząc instrukcję drukowania na przód pętli.
Stefnotch
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.