Memalu senarai
Cabaran Mingguan 301
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: Nombor Terbesar
Tugasan
Anda diberi senarai integer positif, @ints.
Tulis skrip untuk menyusun semua elemen dalam senarai yang diberikan supaya ia membentuk nombor terbesar dan mengembalikannya.
penyelesaian saya
Mungkin saya terlalu memikirkannya, tetapi ini tidak semudah yang disangkakan.
Satu pilihan ialah mengira semua pilih atur, dan melihat nombor mana yang terbesar. Walau bagaimanapun, ini menjadi intensif sumber apabila kami menambah lebih banyak integer. Jika saya mempunyai tiga belas integer, terdapat lebih 6 bilion pilih atur. Jadi saya menolak ini sebagai penyelesaian yang mungkin.
Jadi perkara yang jelas perlu dilakukan ialah mengisih integer, menggabungkannya dan mengeluarkan hasilnya. Memandangkan Python melayan rentetan dan integer secara berbeza, saya perlu menukar senarai yang diisih kepada rentetan, sertai mereka dan menukarnya kembali kepada integer.
def largest_number(ints: list) -> int: sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True) return int(''.join(map(str, sorted_ints)))
Apabila ia datang untuk menyusun, ini agak rumit. Dalam contoh kedua yang dibekalkan, kita dapat melihat bahawa 3, 30, dan 34 semuanya diberi integer. Untuk ini, saya tahu nombor terbesar diperoleh dengan memesan item (tertinggi hingga terendah) 34, 3 dan 30.
Untuk fungsi nombor_isih saya, saya menukar integer kepada rentetan, s1 dan s2. Saya kemudian mempunyai integer c1 iaitu gabungan s1 dan s2, manakala c2 ialah gabungan s2 dan s1.
Jika c1 kurang daripada c2, saya kembalikan -1. Jika ia lebih besar, saya kembalikan 1. Jika ia sama, saya kembalikan 0. Fungsi yang diisih menggunakan maklumat ini untuk mengisih senarai mengikut keperluan.
def number_sort(i1: int, i2: int) -> int: s1 = str(i1) s2 = str(i2) c1 = int(s1 + s2) c2 = int(s2 + s1) if c1 < c2: return -1 if c1 > c2: return 1 return 0
Kod Perl adalah lebih mudah :)
sub number_sort() { return "$a$b" <=> "$b$a"; }
Contoh
$ ./ch-1.py 20 3 320 $ ./ch-1.py 3 30 34 5 9 9534330
Tugasan 2: Jarak Hamming
Tugasan
Anda diberi tatasusunan integer, @ints.
Tulis skrip untuk mengembalikan jumlah jarak Hamming antara semua pasangan integer dalam tatasusunan integer yang diberikan.
Jarak Hamming antara dua integer ialah bilangan tempat di mana perwakilan binarinya berbeza.
penyelesaian saya
Dalam tugasan sebelumnya, saya telah menyatakan bagaimana Python melayan integer dan rentetan sebagai jenis yang berbeza. Salah satu kelebihan Perl ialah kita diberitahu bahawa untuk semua maksud dan tujuan, kita tidak perlu risau tentang menaip pembolehubah. Walaupun secara dalaman mereka disimpan secara berbeza, Perl tahu apa yang perlu dilakukan.
Dalam Perl 5.10 dan Perl 5.16 (di mana saya melakukan kebanyakan pembangunan Perl saya), terdapat dua pengecualian yang ketara. Satu ialah modul JSON, yang akan mengeluarkan "10" untuk rentetan dan 10 untuk integer.
Yang lain ialah operasi bitwise. Daripada halaman perlop, 105 | 150 (dua integer) ialah 255, manakala "105" | "150" (dua rentetan) ialah 155.
Jadi, saya terkejut apabila saya membaca halaman perlop sekali lagi untuk melihat bahawa perkara ini telah diselesaikan dalam versi Perl yang kemudian. Ia kini mempunyai ciri bitwise yang merupakan percubaan dalam Perl 5.22, dan tersedia dalam Perl 5.28. Ini memastikan bahawa pengendali bitwise sentiasa menganggap nilai sebagai integer dan bitwise berasaskan rentetan mempunyai pengendali baharu.
Apa pun, kembali kepada tugasan di tangan. Untuk ini saya mengira semua gabungan dua integer. Untuk setiap gabungan, saya melakukan XOR (eksklusif atau) daripada dua nilai, menukarkannya kepada perduaan dan mengira nombor 1 dalam perwakilan binari.
def largest_number(ints: list) -> int: sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True) return int(''.join(map(str, sorted_ints)))
Contoh
def number_sort(i1: int, i2: int) -> int: s1 = str(i1) s2 = str(i2) c1 = int(s1 + s2) c2 = int(s2 + s1) if c1 < c2: return -1 if c1 > c2: return 1 return 0
Atas ialah kandungan terperinci Memalu senarai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python sesuai untuk sains data, pembangunan web dan tugas automasi, manakala C sesuai untuk pengaturcaraan sistem, pembangunan permainan dan sistem tertanam. Python terkenal dengan kesederhanaan dan ekosistem yang kuat, manakala C dikenali dengan keupayaan kawalan dan keupayaan kawalan yang mendasari.

Python cemerlang dalam permainan dan pembangunan GUI. 1) Pembangunan permainan menggunakan pygame, menyediakan lukisan, audio dan fungsi lain, yang sesuai untuk membuat permainan 2D. 2) Pembangunan GUI boleh memilih tkinter atau pyqt. TKInter adalah mudah dan mudah digunakan, PYQT mempunyai fungsi yang kaya dan sesuai untuk pembangunan profesional.

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

Anda boleh mempelajari konsep pengaturcaraan asas dan kemahiran Python dalam masa 2 jam. 1. Belajar Pembolehubah dan Jenis Data, 2.

Untuk memaksimumkan kecekapan pembelajaran Python dalam masa yang terhad, anda boleh menggunakan modul, masa, dan modul Python. 1. Modul DateTime digunakan untuk merakam dan merancang masa pembelajaran. 2. Modul Masa membantu menetapkan kajian dan masa rehat. 3. Modul Jadual secara automatik mengatur tugas pembelajaran mingguan.

Python lebih baik daripada C dalam kecekapan pembangunan, tetapi C lebih tinggi dalam prestasi pelaksanaan. 1. Sintaks ringkas Python dan perpustakaan yang kaya meningkatkan kecekapan pembangunan. 2. Ciri-ciri jenis kompilasi dan kawalan perkakasan meningkatkan prestasi pelaksanaan. Apabila membuat pilihan, anda perlu menimbang kelajuan pembangunan dan kecekapan pelaksanaan berdasarkan keperluan projek.

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Adakah cukup untuk belajar Python selama dua jam sehari? Ia bergantung pada matlamat dan kaedah pembelajaran anda. 1) Membangunkan pelan pembelajaran yang jelas, 2) Pilih sumber dan kaedah pembelajaran yang sesuai, 3) mengamalkan dan mengkaji semula dan menyatukan amalan tangan dan mengkaji semula dan menyatukan, dan anda secara beransur-ansur boleh menguasai pengetahuan asas dan fungsi lanjutan Python dalam tempoh ini.
