Rumah >pembangunan bahagian belakang >Tutorial Python >Langkah sifar, langkah satu

Langkah sifar, langkah satu

Barbara Streisand
Barbara Streisandasal
2025-01-02 21:54:38800semak imbas

Step zero, step one

Cabaran Mingguan 302

Setiap minggu Mohammad S. Anwar menghantar Cabaran Mingguan, peluang untuk kita semua mencari penyelesaian kepada dua tugas mingguan. Penyelesaian saya ditulis dalam Python terlebih dahulu, dan kemudian ditukar kepada Perl. Ini cara yang bagus untuk kita semua mempraktikkan beberapa pengekodan.

Cabaran, Penyelesaian saya

Tugasan 1: Satu dan Sifar

Tugasan

Anda diberi tatasusunan rentetan binari, @str, dan dua integer, $x dan $y.

Tulis skrip untuk mengembalikan saiz subset terbesar @str supaya terdapat paling banyak $x 0 dan $y 1 dalam subset.

Himpunan m ialah subset bagi n jika semua unsur m juga merupakan unsur n.

penyelesaian saya

Daripada memanggil pembolehubah x dan y, saya telah menamakannya max_zeros dan max_ones, kerana ini lebih bermakna. Untuk baris arahan saya mengambil dua nilai terakhir sebagai max_zeros dan max_ones dengan nilai selebihnya diserap ke dalam tatasusunan s.

Untuk tugasan ini, saya mempunyai panjang berubah-ubah yang bermula dengan bilangan item dalam s hingga satu. Untuk setiap panjang, saya kemudian menggunakan fungsi gabungan itertool untuk mengira semua gabungan unik item panjang dan menyimpannya dalam pembolehubah subset.

Untuk setiap subset, saya mencantumkan semua rentetan bersama-sama, mengira bilangan sifar dan satu, dan melihat sama ada masing-masing kurang daripada atau sama dengan max_sifar dan max_ones. Jika ya, saya mengembalikan pembolehubah panjang. Jika tiada yang ditemui, saya kembalikan sifar.

def ones_and_zeros(s: list, max_zeros: int, max_ones: int) -> int:
    for length in range(len(s), 0, -1):
        for subset in combinations(s, length):
            bits = ''.join(subset)
            if bits.count('0') <= max_zeros and bits.count('1') <= max_ones:
                return length

    return 0

Contoh

$ ./ch-1.py 10 0001 111001 1 0 5 3
4

$ ./ch-1.py 10 0001 10 1 0 1 1
2

Tugasan 2: Langkah demi Langkah

Tugasan

Anda diberi tatasusunan integer, @ints.

Tulis skrip untuk mencari nilai permulaan positif minimum supaya jumlah langkah demi langkah tidak pernah kurang daripada satu.

penyelesaian saya

Bersifat pedantik, "nilai permulaan positif minimum" untuk senarai integer positif ialah 0.000...01. Walau bagaimanapun, contoh kedua nampaknya membayangkan bahawa nombor ini sebenarnya adalah integer.

Untuk tugasan ini, saya mulakan dengan dua pembolehubah, min_value yang ditetapkan sebagai nilai pertama senarai ints dan nilai yang sifar. Saya kemudian mengulangi senarai ints, dan menambah nombor itu pada pembolehubah nilai. Jika nilai kurang daripada nilai_min, saya mengemas kini pembolehubah nilai_min.

Jika nilai_min lebih besar daripada atau sama dengan sifar, saya kembalikan 1. Jika tidak, saya pulangkan 1 - nilai_min.

def step_by_step(ints: list) -> int:
    min_value = ints[0]
    value = 0

    for i in ints:
        value += i
        if min_value > value:
            min_value = value

    if min_value >= 0:
        return 1

    return 1 - min_value

Contoh

$ ./ch-1.py 10 0001 111001 1 0 5 3
4

$ ./ch-1.py 10 0001 10 1 0 1 1
2

$ ./ch-2.py -3 2 -3 4 2
5

$ ./ch-2.py 1 2
1

$ ./ch-2.py 1 -2 -3
5

Atas ialah kandungan terperinci Langkah sifar, langkah satu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:mul dalam PyTorchArtikel seterusnya:mul dalam PyTorch