Wygeneruj parę liczb całkowitych z nieujemnej


25

Powinieneś napisać program lub funkcję, która przyjmuje nieujemną liczbę całkowitą Njako dane wejściowe i wyjściowe lub zwraca dwie liczby całkowite (ujemną, zerową lub dodatnią) Xi Y.

Liczby całkowite są rozumiane w sensie matematycznym, ponieważ jest ich nieskończenie wiele.

Zaimplementowana funkcja musi być bijectywna . Oznacza to, że dla każdego Nmusi wyprowadzać inną X Yparę i każda X Ypara powinna być wyprowadzana dla niektórych danych wejściowych, Ntzn. Dla niektórych z nich powinny być wyprowadzane wszystkie następujące pary N:

                 ...
    ┌─────┬─────┬────┬────┬────┐
    │-2 -2│-2 -1│-2 0│-2 1│-2 2│
    ├─────┼─────┼────┼────┼────┤
    │-1 -2│-1 -1│-1 0│-1 1│-1 2│
    ├─────┼─────┼────┼────┼────┤
... │0 -2 │0 -1 │0 0 │0 1 │0 2 │ ...
    ├─────┼─────┼────┼────┼────┤
    │1 -2 │1 -1 │1 0 │1 1 │1 2 │
    ├─────┼─────┼────┼────┼────┤
    │2 -2 │2 -1 │2 0 │2 1 │2 2 │
    └─────┴─────┴────┴────┴────┘
                 ...

Zauważ, że U Vi V Usą różnymi parami jeśli U!=V.

Detale

  • Jeśli twój język nie obsługuje dowolnie dużych liczb całkowitych, to dobrze, ale twój algorytm powinien działać z dowolnie dużym typem danych. Twój kod powinien nadal obsługiwać wartości wejściowe przynajmniej 2^31-1.
  • Jeśli zdecydujesz się wydrukować lub zwrócić wynik jako ciąg znaków, nie będą dozwolone żadne znaki wiodące 0ani +znaki. W przeciwnym razie standardowa reprezentacja liczb całkowitych w twoim języku jest w porządku.

Przykład

Jeśli zadaniem byłoby utworzenie funkcji bijectywnej przyjmującej nieujemną liczbę całkowitą Ni wyprowadzenie jednej liczby całkowitej, Xrozwiązaniem może być funkcja

if (input mod 2 == 0) return N/2 else return -(N+1)/2,

zaimplementowane w jakimś języku. Ta funkcja zwraca wartość X = 0 -1 1 -2 2...dla N = 0 1 2 3 4....


Czy dowolną liczbę całkowitą na wyjściu można powtórzyć dla różnych danych wejściowych? np. czy 10=>11 12, 9=>10 11jest to nieprawidłowe, ponieważ 11 jest powtarzane?
BrainSteel,

1
O ile „bijective” jest zdefiniowane, „11 12” to nie to samo co „10 11” i dlatego jest ważne. Wynika to z faktu, że funkcja bijective jest zdefiniowana jako funkcja „, w której każdy element jednego zestawu jest sparowany z dokładnie jednym elementem drugiego zestawu, a każdy element drugiego zestawu jest sparowany z dokładnie jednym elementem pierwszego zestawu. niesparowane elementy. ”( en.wikipedia.org/wiki/Bijection ). Jeśli miałbyś
odwrócić,

@BrainSteel Twój przykład jest prawidłowy. Tylko (zamówione) pary nie mogą się powtarzać. GiantTree jest poprawny. Dodano więcej wyjaśnień do pytania.
randomra

Czy musi to być bijectcja w zakresie liczb całkowitych danego języka, czy też powinna działać dla wszystkich liczb całkowitych?
flawr

1
@ LegionMammal miał dobry matematyczny opis zadania: „Musisz zdefiniować funkcję bijective $ f: N + → Z ^ 2 $. - LegionMammal978.” myślę, że byłoby to korzystne gdzieś w oświadczeniu
Brian J

Odpowiedzi:


15

Pyth, 15 lat

u,-HyeGhGjQ2,ZZ

Wypróbuj online.

u             reduce
                lambda G,H:    [implicit]
  ,-HyeGhG         (H-2*G[-1],G[0])
  jQ2           base(input(),2)
  ,ZZ           (0,0)
              print result     [implicit]

Tłumaczenie Python:

g=lambda Z,n:(n-2*Z[1],Z[0])
print reduce(g,binlist(input()),(0,0))

lub iteracyjnie:

(x,y)=(0,0)
for b in binlist(input()):
    (x,y)=(b-2*y,x)
print (x,y)

gdzie binlistkonwertuje liczbę na listę cyfr takich jak binlist(4) = [1,0,0].

Jak to działa? Interpretuje binarne cyfry liczby jako dwie przeplecione liczby w podstawowych ujemnych dwóch, jak w moim rozwiązaniu Python .n

Liczba binarna

n=b5b4b3b2b1b0
odpowiada parze
(x,y)=(b02b2+4b48b6+,b12b3+4b58b7+).

Jeśli nie został jeszcze przetworzony ostatnią cyfrę o N , to mamy wszystkie współczynniki wyższa o 1 $ $, n " = ... b 5 b 4 b 3 b 2 b 1 odpowiadającej pary ( x ' , y ' ) = ( b 1 - 2 b 3 + 4 b 5 - 8 b 7 + , b 2 - 2 b 4b0n

n=b5b4b3b2b1
(x,y)=(b12b3+4b58b7+,b22b4+4b68b8+).

Następnie możemy wyrazić nowe wartości po odczytaniu w odniesieniu do starych wartościb0

(x,y)=(b02y,x).

(x,y)(b2y,x)bn(x,y)


Pamiętaj, że obsługa MathJax została wyłączona. Możesz rozważyć edycję wyjaśnienia dotyczącego czytelności.
Alex A.,

32

CJam, 24 22 21 bajtów

Mój mózg ma problem ze zrozumieniem matematyki używanej przez inne rozwiązania. Ale mój mózg zdecydowanie rozumie binarny, więc oto dusza oparta na manipulacji bitami!

li4b2fmd2/z{)(\2b^}%p

Wypróbuj online.

Wyjaśnienie

Takie podejście traktuje dane wejściowe jako dwie przeplecione wartości binarne, po jednej dla każdej liczby wyjściowej. Wszystkie z wyjątkiem najmniej znaczącego bitu każdego z nich kodują wielkość, a najmniej znaczący bit sygnalizuje, czy przyjąć bitowe uzupełnienie tej wielkości. W tej implementacji bity o nieparzystej pozycji odpowiadają pierwszej liczbie wyjściowej (a bity o parzystej pozycji odpowiadają drugiej) i LSB 0sygnałów w celu uzupełnienia.

Na przykład, biorąc pod uwagę wejście 73, przeplatanie jego binarnej reprezentacji 1001001bprodukcji 0 1|0(bity o nieparzystej pozycji) i 1 0 0|1(bity o parzystej pozycji). Pierwsza wartość ma wielkość 01b = 1i powinna być uzupełniona do wartości końcowej ~1 = -2, a druga wartość ma wielkość 100b = 4i nie powinna być uzupełniana.

Nieformalne wykazanie poprawności

Zrobiłem program testowy, który umieszcza każde wejście od zera do określonej przez użytkownika liczby minus jeden w swoim miejscu wyjściowym na siatce 2D. Możesz spróbować również online . Oto wynik tego programu pokazujący, w jaki sposób algorytm mapuje 0-99:

      -8 -7 -6 -5 -4 -3 -2 -1  0  1  2  3  4  5  6  7  8

-8                      92 84 86 94                     
-7                      88 80 82 90                     
-6                      76 68 70 78                     
-5                   96 72 64 66 74 98                  
-4                60 52 28 20 22 30 54 62               
-3                56 48 24 16 18 26 50 58               
-2                44 36 12  4  6 14 38 46               
-1                40 32  8  0  2 10 34 42               
 0                41 33  9  1  3 11 35 43               
 1                45 37 13  5  7 15 39 47               
 2                57 49 25 17 19 27 51 59               
 3                61 53 29 21 23 31 55 63               
 4                   97 73 65 67 75 99                  
 5                      77 69 71 79                     
 6                      89 81 83 91                     
 7                      93 85 87 95                     
 8                                                      

Wzór wypełnienia wygląda trochę dziwnie, ale w rzeczywistości jest bolesny! Z każdą kolejną siłą 4, wypełnia kwadrat podwójną poprzednią długością boku. Na przykład oto sposób mapowania algorytmu 0-15:

      -2 -1  0  1  2

-2    12  4  6 14   
-1     8  0  2 10   
 0     9  1  3 11   
 1    13  5  7 15   
 2                  

To tworzy kwadrat 4x4 pośrodku kwadratu 8x8 0-63:

      -4 -3 -2 -1  0  1  2  3  4

-4    60 52 28 20 22 30 54 62   
-3    56 48 24 16 18 26 50 58   
-2    44 36 12  4  6 14 38 46   
-1    40 32  8  0  2 10 34 42   
 0    41 33  9  1  3 11 35 43   
 1    45 37 13  5  7 15 39 47   
 2    57 49 25 17 19 27 51 59   
 3    61 53 29 21 23 31 55 63   
 4                              

Co stanowi kwadrat 8x8 w środku kwadratu 16x16 0-255:

         -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7   8

 -8     252 244 220 212 124 116  92  84  86  94 118 126 214 222 246 254    
 -7     248 240 216 208 120 112  88  80  82  90 114 122 210 218 242 250    
 -6     236 228 204 196 108 100  76  68  70  78 102 110 198 206 230 238    
 -5     232 224 200 192 104  96  72  64  66  74  98 106 194 202 226 234    
 -4     188 180 156 148  60  52  28  20  22  30  54  62 150 158 182 190    
 -3     184 176 152 144  56  48  24  16  18  26  50  58 146 154 178 186    
 -2     172 164 140 132  44  36  12   4   6  14  38  46 134 142 166 174    
 -1     168 160 136 128  40  32   8   0   2  10  34  42 130 138 162 170    
  0     169 161 137 129  41  33   9   1   3  11  35  43 131 139 163 171    
  1     173 165 141 133  45  37  13   5   7  15  39  47 135 143 167 175    
  2     185 177 153 145  57  49  25  17  19  27  51  59 147 155 179 187    
  3     189 181 157 149  61  53  29  21  23  31  55  63 151 159 183 191    
  4     233 225 201 193 105  97  73  65  67  75  99 107 195 203 227 235    
  5     237 229 205 197 109 101  77  69  71  79 103 111 199 207 231 239    
  6     249 241 217 209 121 113  89  81  83  91 115 123 211 219 243 251    
  7     253 245 221 213 125 117  93  85  87  95 119 127 215 223 247 255    
  8                                                                        

3
Bardzo mądry! Możesz zapisać dwa bajty, używając li4b2fmd2/zamiast 0li2b+W%2/W%. Daje to te same liczby całkowite, ale w odwrotnej kolejności.
Dennis,

@Dennis To także bardzo sprytne. Zaktualizowałem odpowiedź, aby użyć tej sztuczki. Dzięki!
Runer112

12

Python 2, 49

Edycja: poprawiono do 49, stosując lepszą jednokrokową rekurencję dla bazy -2

def f(n):x,y=n and f(n/2)or(0,0);return n%2-2*y,x

Oto wersja Pyth używająca reduce.

Edycja: Poprawiono do 52 poprzez przejście do bazy -2 ze zbalansowanego trójskładnika .

Python 2, 52

h=lambda n:n and n%2-2*h(n/4)
lambda n:(h(n),h(n/2))

Python 2, 54

h=lambda n:n and-~n%3-1+3*h(n/9)
lambda n:(h(n),h(n/3))

Wykorzystuje to przeplatanie cyfr jak rozwiązanie Runer112 , ale ze zrównoważonym trójskładnikiem zamiast ze znakiem binarnym. Python nie ma wbudowanej konwersji podstawowej, więc kod implementuje go rekurencyjnie.

Funkcja pomocnika h(z 3zamiast 9) przyjmuje liczbę naturalną i konwertuje ją z trójskładnikowej na zrównoważoną trójskładnikową z podstawieniem cyfr

0 -> 0 
1 -> +1
2 -> -1

Na przykład 19, który ma 201 w podstawie, staje się (-1) (0) (+ 1) w zrównoważonej trójce, czyli (-1) * 3 ^ 2 + (0) * 3 ^ 1 + (+ 1) * 3 ^ 0 = -8.

Zrównoważone trójskładnikowe wystarcza do zakodowania każdej liczby całkowitej, a zatem daje odwzorowanie liczb naturalnych na liczby całkowite.

Aby odwzorować na pary liczb całkowitych, przeplatamy cyfry n. Aby to zrobić, hpatrzymy na każdą inną cyfrę, wykonując n/9raczej krok rekurencyjny niż n/3. Następnie, dla jednej współrzędnej, przesuwamy nprzez podział podłogi przez 3.

Oto pierwsze 81 wyników, które obejmują region [-4,4] ^ 2.

0 (0, 0)
1 (1, 0)
2 (-1, 0)
3 (0, 1)
4 (1, 1)
5 (-1, 1)
6 (0, -1)
7 (1, -1)
8 (-1, -1)
9 (3, 0)
10 (4, 0)
11 (2, 0)
12 (3, 1)
13 (4, 1)
14 (2, 1)
15 (3, -1)
16 (4, -1)
17 (2, -1)
18 (-3, 0)
19 (-2, 0)
20 (-4, 0)
21 (-3, 1)
22 (-2, 1)
23 (-4, 1)
24 (-3, -1)
25 (-2, -1)
26 (-4, -1)
27 (0, 3)
28 (1, 3)
29 (-1, 3)
30 (0, 4)
31 (1, 4)
32 (-1, 4)
33 (0, 2)
34 (1, 2)
35 (-1, 2)
36 (3, 3)
37 (4, 3)
38 (2, 3)
39 (3, 4)
40 (4, 4)
41 (2, 4)
42 (3, 2)
43 (4, 2)
44 (2, 2)
45 (-3, 3)
46 (-2, 3)
47 (-4, 3)
48 (-3, 4)
49 (-2, 4)
50 (-4, 4)
51 (-3, 2)
52 (-2, 2)
53 (-4, 2)
54 (0, -3)
55 (1, -3)
56 (-1, -3)
57 (0, -2)
58 (1, -2)
59 (-1, -2)
60 (0, -4)
61 (1, -4)
62 (-1, -4)
63 (3, -3)
64 (4, -3)
65 (2, -3)
66 (3, -2)
67 (4, -2)
68 (2, -2)
69 (3, -4)
70 (4, -4)
71 (2, -4)
72 (-3, -3)
73 (-2, -3)
74 (-4, -3)
75 (-3, -2)
76 (-2, -2)
77 (-4, -2)
78 (-3, -4)
79 (-2, -4)
80 (-4, -4)

Alternatywne kodowanie z ćwiartką urojoną okazało się dłuższe, choć jest bardzo ładne.

Python 2, 63

h=lambda n:n and n%4+2j*h(n/4)
lambda n:(h(n).real,h(n).imag/2)

W języku z mniej niezręczną obsługą skomplikowanych konwersji byłoby to prawdopodobnie lepsze podejście. Gdybyśmy mogli wyprowadzić liczby zespolone, moglibyśmy:

Python 2, 38

f=lambda n:n and n%2+n/2%2*1j-2*f(n/4)

1
Oryginalna funkcja podstawowa -2 byłaby wredną odpowiedzią na Pythona. L&b-%b2*2y/b4,yQy/Q2ma tylko 20 bajtów.
Dennis

4
@Dennis Właśnie napisałem 15-znakowe rozwiązanie Pyth.
xnor

Zrównoważony trójskładnikowy i ćwiartkowy-wyobrażony. Dwie z moich ulubionych baz. Następuje tylko Base-e.
Brian Minton

11

Python 2, 98 bajtów

Zacznijmy od prostego podejścia:

def f(N):
 x=a=0;b=2
 while N:x+=1j**b;b+=a<1;a=a or b/2;N-=1;a-=1
 return int(x.real),int(x.imag)

Po prostu tworzy prostokątne Njednostki spiralne długie na siatce 2d, zaczynając od początku i zwraca współrzędne ostatniego punktu.

Ta funkcja jest dwuskładnikowa, ponieważ:

  • Każdy punkt można pokryć, biorąc pod uwagę wystarczająco długą spiralę
  • Każdy punkt zostanie przecięty tylko raz przez spiralę

Spirala wygląda mniej więcej tak (z wyjątkiem tego, że zaczyna się od 0 zamiast 1):

Spirala Ulama


@AlexA. 0**0 == 1w pythonie, więc jest to tak samo jakif a == 0: a = b/2
grc

Fajnie, dziękuję za wyjaśnienie.
Alex A.,

@AlexA. okazuje się, że a=a or b/2jest krótszy
grc

@grc 0^0=1we wszystkich aspektach matematycznych, nie tylko python.
Daenyth,

1
@Denenyth 0**0jest w rzeczywistości nieokreśloną formą matematyki
Sp3000,

8

dc, 49

[1+2~2*1-*n]sm?dsa8*1+v1-2/dd1+*2/lar-dlmx32P-lmx

Zaczyna się to od ustawienia liczb całkowitych nieujemnych na siatce w następujący sposób:

..| 
4 | 14
3 |  9 13
2 |  5  8 12
1 |  2  4  7 11
0 |  0  1  3  6 10
Y +-----------------
  X  0  1  2  3  4 ...

Zauważ, że sposób wypełnienia pozycji siatki po przekątnej rosnącym N. Zauważ, że linia Y = 0 zawiera trójkątną sekwencję liczb, podaną przez N = X(X+1)/2. Jest to równanie kwadratowe, które rozwiązuje się za pomocą normalnego wzoru, używając tylko + ve pierwiastka, abyśmy mogli określić X z N, gdy Y = 0. Następnie jest kilka prostych tasowań arytmetycznych, które dają unikalne {X, Y} dla każdego N.

Zapewnia to wymaganą jakość podwójną, ale X i Y są tylko nieujemne, ale pytanie wymaga wszystkich możliwych liczb całkowitych. Więc X i Y są mapowane za pomocą, ((t+1)/2)*((t+1)~2*2-1)aby dać wszystkie możliwe liczby całkowite.

dcma dowolne liczby precyzji, więc zakres wejściowy do 2^31-1nie stanowi problemu. Zauważ też, że domyślna precyzja to 0 cyfr dziesiętnych sqrt()oraz /zaokrąglenie w dół, co jest wymaganym zachowaniem.

Wydajność:

$ for i in {0..10}; do dc biject.dc <<< $i; echo; done
0 0
0 -1
-1 0
0 1
-1 -1
1 0
0 -2
-1 1
1 -1
-2 0
0 2
$

5

Matlab, 54 bajty

n=input('')+1;[i,j]=find(spiral(2*n)==n);disp([i,j]-n)

Kluczem jest to spiral, że tworzy to macierz spiralną o dowolnym rozmiarze.

spiral(3)

zwraca

ans =

 7     8     9
 6     1     2
 5     4     3

spiral4n2n104n1052.91011n=232


2

Haskell, 78 74 bajtów

(concat[[(x,i-x),(x,x-1-i),(-1-x,x-1-i),(-1-x,i-x)]|i<-[0..],x<-[0..i]]!!)

Testowe uruchomienie:

*Main> mapM_ (print . (concat[[(x,i-x),(x,x-1-i),(-1-x,x-1-i),(-1-x,i-x)]|i<-[0..],x<-[0..i]]!!) ) [0..20]
(0,0)
(0,-1)
(-1,-1)
(-1,0)
(0,1)
(0,-2)
(-1,-2)
(-1,1)
(1,0)
(1,-1)
(-2,-1)
(-2,0)
(0,2)
(0,-3)
(-1,-3)
(-1,2)
(1,1)
(1,-2)
(-2,-2)
(-2,1)
(2,0)

Jak to działa: wypisz wszystkie pary w pierwszej ćwiartce w następującej kolejności

  |
 2| #4
  |
 1| #2  #5
  | 
 0| #1  #3  #6
  +---------------
     0   1   2   3 

odbij każdy punkt w pozostałych ćwiartkach, aby utworzyć listę 4 elementów. Połącz wszystkie w jedną listę i weź nelement th.

Edycja: funkcja nie potrzebuje nazwy, zmieniona matematyka. wyrażenia.


Możesz zapisać 4 bajty za pomocą do-notacji: Wypróbuj online!
ბიმო

1

Haskell , 50 bajtów

(0!).succ
l!n=(last$(!).succ:[(,)|odd n])l$div n 2

Wypróbuj online lub wypróbuj odwrotnie!

Nie golfił

ntoN2 n = 0 ! (n + 1)

xCounter ! remainingNum
  | odd remainingNum = (xCounter, div remainingNum 2)
  | otherwise        = (xCounter + 1) ! div remainingNum 2

Wyjaśnienie

Wykorzystuje to fakt, że każdy (x,y)N22x(2y+1)1N(!)xlxCountery

Zauważ, że faktyczna funkcja f( ntoN2) zwiększa dane wejściowe przed rozpoczęciem procedury.


1

05AB1E , 35 bajtów

>©DÝʒo®sÖ}àsÅÉʒ®sÖ}à<2÷‚εDÈi2÷ë>2÷(

Wypróbuj online! lub jako pakiet testowy

Wyjaśnienie

Rozważać

f:NN×Nn(x,y),
gdziexjest największą liczbą, więc2xdzielin+1, a gdzie2y+1jest największą liczbą nieparzystą, która dzielin+1. Odwrotnościąfjest dobrze znany bijectionf1(x,y)=2x(2y+1)1

g:N×NZ×Z(m,n)(h(m),h(n)),
h:NZn{n2,n evenn+12,n odd.
Ponieważ wszystkief,gihsą bijectjami, składgf:NZ×Z

gf

>©DÝʒo®sÖ}àsÅÉʒ®sÖ}à<2÷‚εDÈi2÷ë>2÷( # Full program

                                    # Implicit input: Integer n
>©                                  # Compute n+1 and save it to the register
  DÝ                                # Duplicate n+1 and push the list [0,...,n+1]
    ʒo®sÖ}                          # Only keep those numbers x so that 2^x divides n+1
          à                         # Get maximum element in the list.
           sÅÉ                      # Swap so that n+1 is on top and push [1,3,5,...,n+1]
              ʒ®sÖ}                 # Only keep those numbers z which divides n+1
                   à<2÷             # Compute y = (z-1)/2
                       ‚            # Push the pair [x,y]
                        ε           # Apply the function h to x (and y):
                           i        # if...
                         DÈ         # x is even
                            2÷      # then compute x/2
                              ë>2÷( # else compute -(x+1)/2
                                    # Implicit output: [h(x),h(y)]

wow, głosowałem za miłym wyjaśnieniem. ale na pewno 05AB1E powinno być w stanie pokonać Pytha?
Tylko ASCII,

gf

0

Mathematica, 46

SortBy[Tuples[Range[2#]-#,2],Norm][[#]]&[#+1]&

Posortuj wektory według ich normy, a następnie weź tę n.


0

JavaScript, 166 168 bajtów / znaków

Nowe podejście z wykorzystaniem prostokątnej spirali, podobnie jak inni.

function f(n){return b=Math,k=b.ceil((b.sqrt(n)-1)/2),t=2*k+1,m=b.pow(t,2),t+=4,m-t>n?(m-=t,m-t>n?(m-=t,m-t>n?[k,k-(m-n-t)]:[-k+(m-n),k]):[-k,-k+(m-n)]):[k-(m-n),-k]}

Użyłem tego odpowiedzi na Math.SE, przetłumaczyłem ją na JS i skompresowałem za pomocą UglifyJS .

To podejście nie wykorzystuje żadnych pętli ani nie tworzy spirali w żaden sposób.

f:N0Z2

Aktualizacja: Saved 2 znaków, przechowując Mathw b.

t-=1t+=4f(0)=f(8)N00


1) Przekazanie dokładnie tego samego pytania naprawdę nie pomoże. 2) Skopiowanie kolejnej odpowiedzi, a następnie użycie minizatora do gry w golfa też nie będzie :)
Optymalizator

Przynajmniej przestrzega wszystkich zasad określonych w pytaniu i jest to inne podejście. Nie kradnę też cudzej pracy, ale odnoszę się do tego, jak udzieliłem tej odpowiedzi.
GiantTree

@Optimizer: 1) Zasugerowałem, że GiantTree powinien opublikować ponownie, ponieważ otrzymał 3 (zasłużone) opinie za swoje oryginalne, nieprawidłowe podejście. 2) Kod, który wziął z Math.SE, nie jest nawet JavaScriptem, więc zrobił więcej niż tylko skopiowanie go do minizatora.
Dennis,

@Dennis ludzie mogą wycofać swoje zdanie, wiesz. Również imo nie zachęca do używania minifikatora w celu zminimalizowania kodu.
Optymalizator

@Optimizer Próbowałem golfa kod, ale użycie kompresora doprowadziło do lepszego wyniku (mniej znaków), więc zamiast tego użyłem tego.
GiantTree,
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.