Poziom rozszerzony Formuła 2023

Czerwiec 2025

Materiały do pobrania

1_1.py
def skroc(x):
    if x < 10:
        return 0
    return x // 10

def dopisz(x):
    return x * 10

def ostatnia(x):
    return x % 10

def f(a, b):
    if b == 0:
        return 0
    k = ostatnia(b)
    w = f(a, skroc(b))
    w = dopisz(w)

    while k > 0:
        w = w + a
        k = k - 1

    return w

print(f(42, 2)) # Wynik: 84
print(f(4, 125)) # Wynik: 500
print(f(103, 104)) # Wynik: 10712
1_2.py
def skroc(x):
    if x < 10:
        return 0
    return x // 10

def dopisz(x):
    return x * 10

def ostatnia(x):
    return x % 10

licznik = 0
def f(a, b):
    global licznik
    licznik += 1

    if b == 0:
        return 0
    k = ostatnia(b)
    w = f(a, skroc(b))
    w = dopisz(w)

    while k > 0:
        w = w + a
        k = k - 1

    return w

print(f(987654321, 123456789))
print(licznik) # Wynik: 10
1_3.py
def skroc(x):
    if x < 10:
        return 0
    return x // 10

def dopisz(x):
    return x * 10

def ostatnia(x):
    return x % 10

licznik = 0
def f(a, b):
    if b == 0:
        return 0
    k = ostatnia(b)
    w = f(a, skroc(b))
    w = dopisz(w)

    while k > 0:
        w = w + a
        global licznik
        licznik += 1
        k = k - 1

    return w

# print(f(2024, 1000)) # a) 1
print(f(2024, 1234)) # b) 10
print(licznik)
2_1.py
def liczba_cyfr(n):
    cyfry = 0
    while n > 0:
        cyfry += 1
        n //= 10
    return cyfry

def przeciecie(k):
    cyfry = liczba_cyfr(k)
    p = 1
    i = 0
    while i < cyfry // 2:
        p *= 10
        i += 1

    a = k // p
    b = k % p

    return a, b

print(przeciecie(123456))
2_2.py
import math

def liczba_cyfr(n):
    cyfry = 0
    while n > 0:
        cyfry += 1
        n //= 10
    return cyfry

def dwie_liczby(k):
    cyfry = liczba_cyfr(k)
    p = 1
    i = 0
    while i < cyfry // 2:
        p *= 10
        i += 1

    a = k // p
    b = k % p

    return a, b

licznik = 0
with open("liczby1.txt") as f:
    for line in f:
        liczba = int(line.strip())

        a, b = dwie_liczby(liczba)

        if math.gcd(a, b) == 1:
            licznik += 1

print(licznik)
2_3.py
def stopien_kaprekara(n):
    kwadrat = str(n * n)
    licznik = 0

    for i in range(1, len(kwadrat)):
        a = int(kwadrat[:i])
        b = int(kwadrat[i:])

        if a + b <= n:
            licznik += 1

    return licznik

with open("liczby2.txt") as f:
    stopnie_kaprekara = []
    liczby = []

    for line in f:
        liczba = int(line.strip())

        stopnie_kaprekara.append(stopien_kaprekara(liczba))
        liczby.append(liczba)

najwiekszy_stopien = max(stopnie_kaprekara)
indeks = stopnie_kaprekara.index(najwiekszy_stopien)

print(najwiekszy_stopien)
print(liczby[indeks])
3_1.py
with open("dane.txt") as f:
    napis = f.read()

    licznik = 0
    liczby = []

    i = 0
    while i < len(napis):
        if napis[i].isdigit():
            liczba = ""

            while i < len(napis) and napis[i].isdigit():
                liczba += napis[i]
                i += 1
            liczby.append(liczba)

        else:
            i += 1

for liczba in liczby:
    if liczba.startswith("50"):
        licznik += 1

print(licznik)
3_2.py
with open("dane.txt") as f:
    napis = f.read()
    cyfry = [0] * 10

    for znak in napis:
        if znak.isdigit():
            cyfry[int(znak)] += 1

indeks_najczestszej_cyfry = cyfry.index(max(cyfry))
print(indeks_najczestszej_cyfry) # Cyfra występująca najczęsciej
print(max(cyfry)) # Liczba wystąpień najczęściej występującej cyfry
3_3.py
numery_telefonow = []
with open("dane.txt") as f:
    napis = f.read()

    for i in range(len(napis) - 8):
        if napis[i] == "5":
            numer = napis[i:i+9]

            if numer.isdigit():
                przed = i == 0 or not napis[i-1].isdigit()
                po = i + 9 == len(napis) or not napis[i+9].isdigit()

                if przed and po:
                    numery_telefonow.append(numer)

for numer_telefonu in numery_telefonow:
    print(numer_telefonu)
3_4.py
numery_telefonow = []
with open("dane.txt") as f:
    napis = f.read()

    for i in range(len(napis) - 8):
        numer = napis[i:i+9]

        if numer.isdigit():
            przed = i == 0 or not napis[i-1].isdigit()
            po = i + 9 == len(napis) or not napis[i+9].isdigit()

            if przed and po:
                numery_telefonow.append(numer)

najmniej = 10
wynik = []

for numer in numery_telefonow:
    rozne_cyfry = []

    for cyfra in numer:
        if cyfra not in rozne_cyfry:
            rozne_cyfry.append(cyfra)

    if len(rozne_cyfry) < najmniej:
        najmniej = len(rozne_cyfry)
        wynik = [numer]

    elif len(rozne_cyfry) == najmniej:
        wynik.append(numer)


for wynik in wynik:
    print(wynik)
7_5.sql
SELECT DISTINCT Wizyty.id_klienta FROM Wizyty
INNER JOIN Fryzjerzy ON
Wizyty.id_fryzjera = Fryzjerzy.id_fryzjera
INNER JOIN Salony ON
Fryzjerzy.id_salonu = Salony.id_salonu
WHERE Salony.nazwa_salonu LIKE "Magnolia";
4.txt
F
P
F
wyniki2.txt
2_2:
296

2_3:
4
7746
wyniki3.txt
3_1:
4

3_2:
Cyfra: 1
Wystąpiła: 342  razy

3_3:
588095244
593151643
583327270
565269349
583672019
506585224
574489008
587103844
510672749
529135372
515437684
589477488

3_4:
033035335
050525250
wyniki6.txt
6_1:
2715.32 kWh

6_2:
Najdłuższy ciąg liczb:	6
Rozpoczyna się:	26/05/2022

6_3:
liczba godzin nasłonecznienia	Średnia z produkcja	Średnia z oddanie	Średnia z pobranie
7	                            2.88516129	        1.086774194	        4.924516129
8	                            3.848085106	        1.653191489	        3.385319149
9	                            5.400606061	        2.559090909	        3.103333333
10	                            6.936666667	        3.020333333	        2.818
11	                            7.154	            3.481666667	        2.626333333
12	                            11.32266667	        5.400666667	        2.658333333
13	                            12.23225806	        6.347419355	        2.497419355
14	                            10.97548387	        5.513548387	        2.507741935
15	                            13.20810811	        6.69972973	        2.444594595
16	                            12.59261538	        6.740615385	        2.792461538

Wykres liniowy: 6_3.png

6_4:
a)	71
b)	67
wyniki7.txt
7_1:
Marta	Jasczyk	4846

7_2:
imie	    nazwisko	id_klienta
Anna	    Dymek	    K358
Anna	    Mason	    K151
Anna	    Wiatr	    K052
Barbara	    Wroblewska	K275
Grzegorz	Sikora	    K045
Hanna	    Mazur	    K227
Krzysztof	Orlik	    K224
Krzysztof	Szostak	    K164
Marcin	    Ozga	    K221
Marek	    Sitko	    K374
Mateusz	    Szymczyk	K277
Natalia	    Chwiszczuk	K137
Natalia	    Kejza	    K282

7_3:
1848.6

7_4:
F02	Natalia
F03	Krzysztof
F04	Grzegorz
F07	Kamila
F08	Aneta
F10	Bartosz
F18	Kalina