Zaznacz papier UKMT IMC

22

Zrobiłem IMC w tym roku. Czy ktoś to tutaj zrobił?

W artykule UKMT Intermediate Maths Challenge znajduje się dwadzieścia pięć pytań. Pierwsze piętnaście pytań da ci pięć ocen, jeśli dobrze je zrozumiesz. W przypadku pozostałych dziesięciu pytań otrzymujesz sześć punktów za ich prawidłowe wykonanie. W ostatnich dziesięciu pytaniach tracisz oceny, jeśli pomylisz się! W przypadku pytań od szesnastego do dwudziestego tracisz jedną ocenę, a w przypadku ostatnich pięciu pytań tracisz dwie oceny. Jeśli pozostawisz pytanie puste, żadne oceny nie zostaną przyznane ani odjęte. Za pomyłkę w pierwszym piętnastu pytaniach nie są odejmowane oceny. Papier jest wielokrotnego wyboru; możesz wybrać dowolną odpowiedź spośród A, B, C, D i E dla każdego pytania. Zawsze jest tylko jedna właściwa odpowiedź na każde pytanie.

Utwórz program / funkcję, która pobiera dwa ciągi i generuje wynik. Pierwszy ciąg będzie twoją odpowiedzią na artykuł. Jeśli pominiesz pytanie, użyj spacji, bajtu zerowego lub podkreślenia. W przeciwnym razie użyj litery A, B, C, D lub E. Wejścia mogą mieć wielkie lub małe litery. Drugi ciąg będzie poprawnymi odpowiedziami na każde pytanie w pracy. Twój program / funkcja wyświetli wynik. Skróć swój kod.

Przypadki testowe:

DDDDDDDDDDDDDDDDDDDDDDDDD
ABCDEABCDEABCDEABCDEABCDE
15

BDBEACCECEDDBDABBCBDAEBCD
BDBEACCECEDDBDABBCBDAEBCD
135

DBACBDCDBAEDABCDBEECACDC_
DBADBDCDBAEDABCDBEEDACDCA
117

_________________________
DABDABDABDABDABDABDABDABD
0

DBADBDCDBAEDABCD_E__A__C_
DBADBDCDBAEDABCDBEEDACDCA
99

_______________BBBBBBBBBB
AAAAAAAAAAAAAAAAAAAAAAAAA
-15
0WJYxW9FMN
źródło
Czy „Pytania od piętnastu do dwudziestu” powinny brzmieć „Pytania od szesnastu do dwudziestu”?
Greg Martin
1
Czy możemy użyć bajtu zerowego do przedstawienia pominiętych pytań?
betseg
2
I czy pierwszy wynik nie powinien wynosić 27-12 = 15?
Greg Martin
1
Czy ktoś widział / zrobił papiery UKMT? Oni są naprawdę zabawni. Sprawdź zagadki na ukmt.org.uk. Większość pomysłów na wyzwania czerpię z pytań matematycznych.
0WJYxW9FMN
1
Twoje przypadki testowe powinny prawdopodobnie zawierać wyniki z wynikiem negatywnym.
Dennis

Odpowiedzi:

7

C, 88 87 86 81 bajtów

c,d;i(char*a,char*b){for(c=d=0;*b;c++,a++)d+=*a^*b++?*a?-c/15-c/20:0:5+c/15;d=d;}

Wypróbuj online!

Ahemone
źródło
1
Ponieważ ABCDEwszystkie są poniżej punktu 95, myślę, że możesz użyć *a<95.
Yytsi
2
Ponieważ pytanie pozwala na zabranie pustego bajtu zamiast podkreślenia, -(c/15+c/20)*(*a<95)może się stać *a?-c/15-c/20:0.
Dennis
80 bajtów
ceilingcat
6

Galaretka , 26 23 22 bajtów

=s5ị"“HHHQP‘D¤_2Fæ.n⁶¥

Wypróbuj online!

Jak to działa

=s5ị"“HHHQP‘D¤_2Fæ.n⁶¥  Main link. Argument: t (answer to test), s (answer sheet)

=                       Test the characters of t and s for equality.
 s5                     Split into chunks of length 5.
             ¤          Combine the two preceding links into a niladic chain.
     “HHHQP‘              Yield the code points, i.e., [72, 72, 72, 81, 80].
            D             Decimal; yield [[7, 2], [7, 2], [7, 2], [8, 1], [8, 0]].
   ị"                   Index zipwith; use the Booleans in each chunk to index into
                        the corresponding pair. Indexing is 1-based and modular, so
                        1 gives the first element and 0 the last.
              _2        Subtract 2 from each result.
                F       Flatten the resulting 5x5 matrix.
                     ¥  Combine the two preceding links into a dyadic chain.
                   n⁶     Test the characters of t for inequality with space.
                 æ.     Take the dot product of the integers to the left and the
                        Booleans to the right.
Dennis
źródło
5

JavaScript (ES6), 70 68 66 bajtów

Zaoszczędzono 2 bajty dzięki Neilowi
Zaoszczędzono 2 bajty dzięki produktom ETH

Przyjmuje odpowiedzi kandydatów ai poprawne odpowiedzi cw składni curry (a)(c). Oczekuje, że pominięte pytania zostaną oznaczone spacją.

a=>c=>a.replace(/\S/g,(a,i)=>s+=a==c[j=i>14,i]?5+j:-j^i>19,s=0)&&s

Przypadki testowe

Arnauld
źródło
Jeśli zmienisz pominięte pytanie na znak inny niż słowo (np. Spacja), możesz użyć, /\w/gaby zaoszczędzić dwa bajty.
Neil
Myślę, że -j-(i>19) jest tak samo jak -j^i>19, choć nie jestem pewien.
ETHprodukcje
@ETHproductions Rzeczywiście. To jest analizowane, (-j)^(i>19)więc tak, to działa.
Arnauld
4

Python 2 , 86 85 83 77 bajtów

f=lambda t,s,i=24:~i and(i/10*-(14<i<t[i]<'_'),5+i/15)[t[i]==s[i]]+f(t,s,i-1)

Wypróbuj online!

Jak to działa

Definiuje to funkcję rekurencyjną f, która przyjmuje dwa nieoptymalne argumenty: t (odpowiedzi na test) i s (arkusz odpowiedzi). Gdy f jest wywoływany tylko z tymi dwoma argumentami, f inicjuje i do 24 , ostatniego indeksu zarówno t, jak i s .

Za każdym razem , gdy wywoływane jest f , najpierw sprawdza, czy ~ i (bitowe NIE z i ) jest prawdziwe / niezerowe. Ponieważ ~ (-1) = 0 , dzieje się tak, gdy i osiągnie wartość -1 . Jeśli zwracane jest i = -1 , ~ i = 0 , ale ponieważ i przyjmuje wartości od 24 do 0 (wszystkie indeksy t i s ), następuje andwykonanie następującego kodu, a f zwraca wynik.

Chociaż i jest nieujemne, dzieje się tak. Pierwszy,

(i/10*-(14<i<t[i]<'_'),5+i/15)

tworzy krotkę o długości 2 :

  • Iloraz i/10wynosi 0, jeśli 0 ≤ i <10 , 1, jeśli 10 ≤ i <20 , i 2, jeśli 20 ≤ i <25 . Łańcuchowe porównanie 14<i<t[i]<'_'zwraca wartość Prawda wtedy i tylko wtedy, gdy wszystkie poszczególne porównania zwracają wartość Prawda , tj. Wtedy i tylko wtedy, gdy i ≥ 15 (zakres pytań z karą), i jest mniejsze niż t [i] (zawsze prawda, ponieważ wszystkie liczby są mniejsze niż wszystkie iterowalne w Pythonie 2), a t [i] nie jest znakiem podkreślenia.

    Jeśli porównanie zwróci False , jednoargumentowy -zwraca 0, a całe wyrażenie przyjmuje wartość 0 . Jeśli jednak porównanie zwraca True , jednoargumentowe -zwraca -1 , więc całe wyrażenie jest oceniane na 0, jeśli 0 ≤ i <10 , -1, jeśli 10 ≤ i <20 , i -2, jeśli 20 ≤ i <25 ; są to wyniki netto błędnych lub brakujących odpowiedzi dla wszystkich wskaźników i .

  • 5+i/15zwraca 5 + 0 = 5, jeśli 0 ≤ i <15 i 5 + 1 = 6, jeśli 15 ≤ i <25 . Są to wyniki netto dla poprawnych odpowiedzi dla wszystkich wskaźników i .

Ostatecznie, [t[i]==s[i]]wybiera pierwszy element skonstruowanej krotki jeśli T [I] i y [i] różne (nieprawidłowy albo brak odpowiedzi), a drugi, gdy są one równe (prawidłowa odpowiedź), a następnie dodaje wartość powrotu f wywołana zmniejszany I do tego wyniku. Gdy i osiągnie -1 , końcowy wynik został obliczony i zwrócony przez f .

Dennis
źródło
3

Mathematica, 114 bajtów

Tr@(m=MapThread)[#/.True->#2/.False->-#3&,{Tr/@Partition[m[Equal,#/."_"->u]/.u==_->0,5],{5,5,5,6,6},{0,0,0,1,2}}]&

Czysta funkcja pobierająca uporządkowaną parę list znaków i zwracająca liczbę całkowitą. m[Equal,#/."_"->u]zwraca listę wartości logicznych, z wyjątkiem nieocenionych wpisów formularza u=="B"w miejscach, w których odpowiedź była równa "_"; od razu u==_->0zamienia te nieocenione wpisy w 0s. Tr/@Partition[...,5]dodaje te wpisy w górę o 5 jednocześnie, co daje listę jak {4False+True, 4False+True, 4False+True, 4False+True, 4False+True}dla pierwszego przypadku testowego lub {5True, 5True, 5True, 2True, 2True}ostatniego przypadku testowego. Następnie w każdej współrzędnej, Truei Falsesą przypisane do odpowiednich punktów, a wyniki są sumowane.

Greg Martin
źródło
3

Galaretka , 22 21 bajtów

Zm0ṁ135µ;t€⁶E€’;E€ṫ⁹S

Wypróbuj online!

Myślałem, że odpowiedź @ Dennisa była prawdopodobnie możliwa do pobicia. I po wypróbowaniu ogromnej liczby różnych możliwości i czerpaniu korzyści z niesamowitego przypadku, w końcu udało mi się!

Ten program pobiera parę [odpowiedzi ucznia, poprawne odpowiedzi] i wykorzystuje spacje do wskazania brakującej odpowiedzi.

Wyjaśnienie

Ten program używa dziwnych wewnętrznych formatów wejściowych, aby śledzić, co się dzieje, więc zrobimy to krok po kroku.

  1. Z

    To transponuje dane wejściowe, więc otrzymamy listę 25 elementów, po jednym dla każdego pytania; każdy element ma formę [odpowiedź ucznia, poprawna odpowiedź]. Element tego formularza wskażemy wielką literą; Aw przypadku pytania 1, Bpytania 2 itd. Więc odpowiedzi są obecnie przechowywane jako

    ABCDEFGHIJKLMNOPQRSTUVWXY
    
  2. m0

    Jest to operacja „większego palindromu”; dołączamy odwrotność bieżącej wartości do samej wartości, uzyskując to:

    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    
  3. ṁ135

    Operator (formy) robi wiele rzeczy, ale w tym kontekście skutecznie bierze pierwsze 135 elementów nieskończonej listy utworzonej przez wielokrotne dołączanie do siebie bieżącej wartości. To daje nam następujące informacje (które dla wygody podzieliłem na grupy 50 elementów; jest to tylko wewnętrzna lista 135 par):

    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    
  4. µ;

    µustawia bieżącą wartość jako nową wartość domyślną dla brakujących argumentów. Natychmiast widzimy wbudowane narzędzie, w którym brakuje operandu; ;dołącza, ale nie określiliśmy, z czym się połączyć. W rezultacie bieżąca wartość jest dołączana do wartości z ostatniej µ(która jest również wartością bieżącą), co daje nam następującą 270-elementową bieżącą wartość:

    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
    PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
    PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
    PQRSTUVWXYYXWVUTSRQP
    
  5. t€⁶

    Pamiętaj, że wszystkie powyższe duże litery reprezentują pary [odpowiedź ucznia, poprawna odpowiedź]. t€⁶Działanie działa na każdym ( ) parę i usuwa ( t) przestrzenie ( ) z każdej strony pary (to znaczy jakiejkolwiek przestrzeni, które pojawiają się w para). Wciąż mamy tę samą złożoną listę 270 pytań z wieloma powtórzeniami, ale mają one postać [poprawna odpowiedź] (uczeń nie odpowiedział) lub [odpowiedź ucznia, prawidłowa odpowiedź] (uczeń odpowiedział).

  6. E€’

    E€’Operacja działa również na każdym ( ) elementu, a dzięki zastosowaniu Ezastępuje element z 1, jeżeli wszystkie elementy są równe (czyli uczeń nie odpowie albo dostaje prawo pytanie) lub 0 jeśli nie wszystkie elementy są równe (tzn. uczeń odpowiedział, ale źle zrozumiał pytanie). Użycie tutaj zmienia numerację, co oznacza, że ​​teraz używamy odpowiednio -1 lub 0. Użyję małych liter dla tego nowego elementu, który używa -1 dla odpowiedzi, która byłaby ukarana, gdyby była na pytanie kwalifikujące się do kary, lub 0 dla brakującej lub poprawnej odpowiedzi:

    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqp
    
  7. ;E€

    Widzieliśmy jedno E€i drugie ;; dodajemy coś do bieżącej wartości i używamy formatu 1, jeśli wszystkie elementy są równe, lub 0, jeśli niektóre są różne (nie tym razem!). Brakuje tutaj argumentu, więc używamy wartości z ostatniego µ(tj. Wyniku z kroku 3). W kroku 3 nie usunęliśmy spacji z elementów, więc będziemy mieć 1 za poprawną odpowiedź lub 0 za niepoprawną lub brakującą odpowiedź (ponieważ spacja nie pasuje do poprawnej odpowiedzi). Od tej pory będę używać wielkich liter 1 = poprawny, 0 = niepoprawny / brakujący format i nadal będę używać małych liter dla 0 = poprawny / brakujący, -1 = niepoprawny. Wynikowa wartość ma 405 elementów i wygląda następująco:

    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
    TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
    TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
    TSRQP
    
  8. ṫ⁹

    Nadchodzi niesamowity zbieg okoliczności, o którym wspomniałem wcześniej. Zanim zacznę mówić o tym fragmencie kodu, chcę podsumować, gdzie musimy.

    Każda wielka litera oznacza +1 dla poprawnej odpowiedzi; pierwsze 15 pytań ( Ado O) pojawia się 5 razy w ciągu, a ostatnie 10 pytań ( Pdo Y) pojawia się 6 razy. Ten kawałek nie jest tak naprawdę magiczny; Zaprojektowałem to w ten sposób, gdy wcześniej wybrałem w programie liczbę 135 (czyli 5 × 15 + 6 × 10), a jedynym szczęściem jest to, że 5 jest liczbą nieparzystą (więc jest to ostatnia 10 pytania, które kończą się dodatkowymi czasami, zamiast pierwszych 10). W 15 litery tuż przed tym zawierać pprzez t(-1 pytania kar) jednorazowo, i uprzez y(kwestionuje -2 penalty) dwa razy. To też nie jest duży zbieg okoliczności; ponieważ użyliśmym0wcześniej dodatkowe kopie pytań są w kolejności PQRSTUVWXYYXWVUTSRQP, a późniejsze pytania naturalnie pojawią się w pobliżu środka tego ciągu (więc pobranie ostatnich 15 „dodatkowych” pytań da mniej powtórzeń tym w pobliżu krawędzi; i oczywiście nie jest zaskoczeniem, że „dodatkowe” pytania są ostatnie).

    Ponieważ każda mała litera odejmuje 1 od wyniku dla niepoprawnej, brakującej odpowiedzi, a każda wielka litera dodaje 1 do wyniku dla poprawnej odpowiedzi, dlatego po prostu musimy wziąć ostatnie 135 + 15 = 150 elementów, aby uzyskać każdy rodzaj elementu poprawną liczbę razy. Poleceniem Jelly do uzyskania podłańcucha na końcu listy jest ; nie określa jednak liczby pożądanych elementów, a raczej indeks pierwszego żądanego elementu. W tym momencie mamy 405 elementów i chcemy 150, więc musimy zacząć od indeksu (405 - 150 + 1) lub 256. W zadziwiający zbieg okoliczności 256 to liczba różnych oktetów, które istnieją, a zatem ma krótka reprezentacja w Galaretce (). Niewiele mogłem zrobić, aby tak się stało; krok 4 dodał kolejne 135 elementów na początku listy, aby trafić w okrągły numer, ale fakt, że było to 135 elementów, które musiałem dodać (wartość, która była łatwo dostępna w tym momencie programu) był bardzo wygodny, w zasadzie każda inna liczba jest całkowicie nieprzydatna w tej sytuacji.

    Oto jak teraz wygląda wartość wewnętrzna:

    uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    
  9. S

    Wreszcie, teraz mamy listę modyfikacji wyniku z pytań, wszystko, co musimy zrobić, to zsumować je za pomocą Si gotowe.


źródło
2

Python 2 , 93 91 bajtów

f=lambda a,b,n=0:a>""and((a[0]==b[0])*(5+n/15)or-(n/15*n/10)*(a[0]<"^"))+f(a[1:],b[1:],n+1)

Wypróbuj online!

-2 bajty dzięki @KritixiLithos


Wkład:

  • a: Odpowiedzi ucznia jako ciąg, _za pominięte pytanie
  • b : poprawne odpowiedzi
  • n: liczba bieżących pytań 0, domyślnie0
ovs
źródło
Możesz zrobić a[0]<'^'zamiast a[0]!="_"oszczędzać bajty
Kritixi Lithos
Myślę, że a>""może działać zamiasta!=""
Kritixi Lithos
Jeśli początkowa kontrola kończy właśnie rekursję, gdy ajest pusta, nie możesz tego zrobić a and? Pusty ciąg jest fałszywy, w przeciwnym razie jest prawdziwy.
FlipTack
@FlipTack spowoduje to wyrzucenie TypeErrorjako, że ostatnie wywołanie rekurencyjne zwróci ciąg
ovs
1

k, 52 bajty

Funkcja przyjmuje 2 ciągi znaków, format na przypadki testowe

{+/(~x="_")*(+,/'(15 5 5#'0 -1 -2;15 10#'5 6))@'x=y}

Przykład:

k){+/(~x="_")*(+,/'(15 5 5#'0 -1 -2;15 10#'5 6))@'x=y}["DBADBDCDBAEDABCD_E__A__C_";"DBADBDCDBAEDABCDBEEDACDCA"]
99
skeevey
źródło
1

Haskell, 84 bajty

i x a b|a>'Z'=0|a==b=6-0^x|1<2= -x
w x=x<$[1..5*3^0^x]
(sum.).zipWith3 i(w=<<[0..2])

Przykład użycia: ((sum.).zipWith3 i(w=<<[0..2])) "DBADBDCDBAEDABCD_E__A__C_" "DBADBDCDBAEDABCDBEEDACDCA"-> 99. Wypróbuj online! .

Jak to działa: i x a boblicza wynik dla pojedynczej odpowiedzi az poprawnym wynikiem bi karę xza złą odpowiedź (wartość nieujemna). Jeśli pominiesz ( a>'Z'), wynik jest 0, jeśli odpowiedź jest prawidłowa ( a==b), wynik jest 6-0^x, w przeciwnym razie wynik jest -x.

w=<<[0..2]tworzy listę kar za wszystkie 25 pytań, stosując wsię do 0, 1i 2, czyli tworzenia 5*3^0^xkopii każdego numeru (-> 15 razy 0, 5 razy 1i 5 razy 2).

zipWith3dotyczy ilisty kar, listy odpowiedzi i listy poprawnych wyników. Wreszcie wszystkie wyniki są dodawane ( sum).

nimi
źródło
1

Oktawa, 61 54 bajtów

@(a,b)[a==b,-(a<95&a~=b)]*[(x=1:25>15)+5,(1:25>20)+x]'

Wypróbuj online!

Poprzednia odpowiedź:

@(a,b)(m=a==b)*(((f=kron(z=[0 0 0:2],z|1)')&1)+5)-(a<95&~m)*f
rahnema1
źródło
1

JavaScript (ES6), 105 103 101 94 89 88 85 84 78 77 bajtów

Moje pierwsze rozwiązanie w ES6, może nawet pierwsze w Javascript Oo

f=(s,a,i=24)=>i+1&&(s[i]>'Z'?0:s[i]==a[i]?5+(i>14):~(i>19)*(i>14))+f(s,a,i-1)

s jest przesłanym rozwiązaniem, a a jest poprawnym rozwiązaniem. Oba będą traktowane jako ciągi znaków.

Oto nierekurencyjne rozwiązanie o 78 bajtach:

s=>a=>eval([...s].map((c,i)=>c>'Z'?0:c==a[i]?5+(i>14):~(i>19)*(i>14)).join`+`)

Pobiera dane wejściowe poprzez składnię curry.

Dzięki @ETHproductions za oszczędność 9 bajtów! s[i]do ci (-1-(i>19|0))do ~(i>19).

Dzięki @Kritixi Lithos za uratowanie bajtu! c=='_'do c>'Z'.

Wypróbuj online!

Yytsi
źródło
Mówiąc o tym, że jest to twoje pierwsze rozwiązanie w JS, jaki jest twój główny język dla golfa kodowego? Używałem tylko Pythona i pieprzenia mózgu w golfa kodu.
0WJYxW9FMN
@ J843136028 Moim głównym językiem jest Python, ale trochę grałem też w C #. Haxe zwleka od dłuższego czasu, ale mogę do tego wrócić.
Yytsi
Fajne! Używałem tylko pieprzenia mózgu tylko raz, więc moim głównym językiem jest również Python.
0WJYxW9FMN
@ J843136028 Tak, faktycznie widziałem twoje odpowiedzi tu i tam. Ponieważ moje biografie przynoszą rezultaty, nie spędzam tyle czasu na szukaniu rozwiązań, więc nie są one w większości zainteresowane. Z BrainF * ck niewiele zrobiłem, ponieważ znalezienie krótkich rozwiązań zajmuje dużo czasu, nawet w przypadku problemów pośrednich.
Yytsi
Wiem, co masz na myśli o BF. Dziwi mnie, że ludzie patrzą na moje odpowiedzi.
0WJYxW9FMN