Memalu senarai

Dec 30, 2024 pm 04:34 PM

Hammering lists

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)))
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

Kod Perl adalah lebih mudah :)

sub number_sort() {
    return "$a$b" <=> "$b$a";
}
Salin selepas log masuk

Contoh

$ ./ch-1.py 20 3
320

$ ./ch-1.py 3 30 34 5 9
9534330
Salin selepas log masuk

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)))
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

Atas ialah kandungan terperinci Memalu senarai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1664
14
Tutorial PHP
1268
29
Tutorial C#
1248
24
Python vs C: Aplikasi dan kes penggunaan dibandingkan Python vs C: Aplikasi dan kes penggunaan dibandingkan Apr 12, 2025 am 12:01 AM

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: Permainan, GUI, dan banyak lagi Python: Permainan, GUI, dan banyak lagi Apr 13, 2025 am 12:14 AM

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 vs C: Lengkung pembelajaran dan kemudahan penggunaan Python vs C: Lengkung pembelajaran dan kemudahan penggunaan Apr 19, 2025 am 12:20 AM

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.

Rancangan Python 2 jam: Pendekatan yang realistik Rancangan Python 2 jam: Pendekatan yang realistik Apr 11, 2025 am 12:04 AM

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

Python dan Masa: Memanfaatkan masa belajar anda Python dan Masa: Memanfaatkan masa belajar anda Apr 14, 2025 am 12:02 AM

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 vs C: Meneroka Prestasi dan Kecekapan Python vs C: Meneroka Prestasi dan Kecekapan Apr 18, 2025 am 12:20 AM

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: Automasi, skrip, dan pengurusan tugas Python: Automasi, skrip, dan pengurusan tugas Apr 16, 2025 am 12:14 AM

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.

Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Apr 18, 2025 am 12:22 AM

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.

See all articles