Rumah >pembangunan bahagian belakang >Tutorial Python >Langkah sifar, langkah satu
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
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.
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
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2
Anda diberi tatasusunan integer, @ints.
Tulis skrip untuk mencari nilai permulaan positif minimum supaya jumlah langkah demi langkah tidak pernah kurang daripada satu.
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
$ ./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!