Cabaran Puisi !?

DDD
Lepaskan: 2024-09-18 17:41:29
asal
758 orang telah melayarinya

6 September 2024: Sebelum beralih kepada sebarang perbincangan tentang masalah itu sendiri, mari lihat latar belakangnya. Cabaran, cabaran matematik terbuka dalam buku.
Sebuah buku lama dari 1984 di Perpustakaan, nama yang saya terlupa tetapi saya mendapat gambaran tentang masalah yang sangat menarik yang ada di bahagian "Lagi untuk Dibaca...".
A, eh, Teka-teki Puisi... Ya, Anda dengar betul, masalah Matematik yang ditulis dalam bentuk Puisi Inggeris Lama.
Sejak, Sekolah Menengah saya langsung tidak menggemari Pantun, tetapi, yang ini menarik perhatian saya. Semasa saya membacanya, saya rasa seperti memahami sesuatu tetapi saya tidak memahaminya sepenuhnya. Menghabiskan lebih daripada enam jam untuk memahami teka-teki daripada dongeng, tentang naga dan sebagainya. Tetapi, satu perkara yang menyekat saya, permata. Untuk anda fahami sepenuhnya di sini adalah puisi:

**Di tanah Zopraria yang menakjubkan dan menakjubkan, di mana bintang-bintang bersenandung dengan tenang,

Dan naga purba menjaga langit, di mana masa dan pasang surut adalah satu,

Seorang bijak tua yang bijak hidup dengan tenang, yang pengetahuannya menjangkau sepanjang masa,

Tangan siapa yang boleh menenun benang sihir sebagai penyair membuat sajak.

Suatu hari, dari ketinggian syurga, di atas sayap api dan emas,

Hadiah diturunkan kepada orang bijak, seperti yang dikatakan mitos dan legenda:

Harta karun yang luas—permata yang bercahaya, seperti serpihan bintang,

Namun terikat dengan ramalan nasib sendiri, dengan peraturan setua Marikh.

Langit berbisik kepadanya, mesej yang lembut, tetapi jelas:

"Bagilah permata bercahaya ini kepada dua, dengan hati dan telinga yang berhati-hati.

Biarkan kedua-dua kapal buatan anda memegang berat yang hampir dikongsi bersama,

Keharmonian di antara mereka teguh, dalam keseimbangan yang terang dan adil.

Tetapi dengarlah kami, bijak, jika perlawanan yang sempurna hilang di luar ken anda,

Jangan putus asa dalam pencarianmu, kerana perjalananmu tetap tidak akan berakhir.

Kerana walaupun tip baki, namun anjakan sedikit mungkin,

Syurga akan tetap tersenyum kepadamu, dan berkat akan mengalir dengan percuma."

Orang bijak, dengan hati yang berani dan bijak, memulakan ujian sucinya,

Untuk fesyen kapal yang hampir sama, dan berikan bintang yang terbaik.

Naga mengelilingi tinggi di atas, sementara malaikat berhenti terbang,

Kerana dalam tugas keseimbangan ini meletakkan kebenaran semurni cahaya.

Permata, seperti rahsia masa lalu, sebelum orang bijak bertukar,

Dengan setiap pilihan, takdir terbentuk, dan hati mula terbakar.

Walaupun pekerjaan yang akan datang menakutkan, bintang-bintang masih mengagumi

Orang bijak yang berusaha, dengan tangan yang mantap, untuk mengimbangi api kosmik.

Dan bagaimana kisah itu sampai ke penghujungnya, di bawah langit yang tidak berkesudahan itu,

Hanya diketahui oleh mereka yang mencari, dan berani mengangkat mata.

Di alam Zopraria yang tidak terbatas, di mana kisah-kisah lama bertahan,

Ada yang mengatakan orang bijak masih berfikir, hati dan fikirannya bersih.

Kerana di syurga yang sunyi terletak keseimbangan yang baik dan jarang berlaku,

Keharmonian yang hanya boleh dikongsi oleh mereka yang mempunyai tangan yang stabil.**

Ini puisinya, nampak pelik kan. Dan apa yang ia lakukan dalam Buku Matematik. Ini bukan Teka-teki baharu, Teka-teki dari 1600-an lama, yang ditulis di suatu tempat di Westminster zaman moden.
Walau bagaimanapun, AI adalah kawan baik kita, betul, saya bertanya kepadanya apa jawapannya yang pelik, dan nampaknya ia tidak faham apa-apa.

A Poetic Challenge !?
Ia menyangka saya menciptanya, tetapi saya tidak melakukannya. Tetapi, bagaimana dengan GPT-4? Mari kita bertanya sama ada ia tahu apa-apa. Ia menjadi guru bahasa Inggeris saya.

A Poetic Challenge !?

A Poetic Challenge !?

Ok, Perlu menyahkodnya sendiri. Jom cuba.

9 September 2024: "Bagilah permata bercahaya ini kepada dua, dengan hati dan telinga yang berhati-hati.

Biarkan kedua-dua kapal buatan anda memegang berat yang hampir dikongsi bersama,

Keharmonian di antara mereka teguh, dalam keseimbangan yang terang dan adil.

Tetapi dengarlah kami, bijak, jika perlawanan yang sempurna hilang di luar ken anda,

Jangan putus asa dalam pencarianmu, kerana perjalananmu tetap tidak akan berakhir.

Kerana walaupun tip baki, namun anjakan sedikit mungkin,

Syurga akan tetap tersenyum kepadamu, dan berkat akan mengalir dengan percuma."

Ini adalah bahagian utama cerita dan mari kita menyahkodnya.
Selepas beberapa sumbang saran, maaf, menyeksa diri saya selama lebih daripada 3 hari berturut-turut, saya mendapat petunjuk.
Permata mungkin nombor, seperti yang dikatakan "dengan hati dan telinga yang berhati-hati."
Kapal mungkin set, tetapi konsep set tidak ditemui sehingga itu, jadi, saya mungkin silap.
Ekstrak di atas mungkin bermaksud dua set bilangan elemen yang sama, atau jumlah nombor dalam set adalah sama. Dan jika jumlahnya tidak sama, yang terdekat mungkin dipaparkan.

15 September 2024: Selepas beberapa pemikiran yang lebih kompleks dan menerbitkan banyak Artikel tambahan. Saya fikir begitu, saya mungkin telah menemui pemikiran terbaik saya pada puisi ini.
Walaupun puisi ini sudah lama, saya tidak dapat mencari penyelesaian lain untuk puisi ini. Tetapi, saya telah merangka soalan supaya Semua orang boleh faham, termasuk saya.

Cabaran

Dari perspektif C.S., ya, saya akan melakukan ini dalam bentuk C.S. dahulu dan kemudian Matematik kemudian.

Kami diberi senarai integer. Tugas kami adalah untuk membahagikan senarai kepada dua sub-senarai supaya perbezaan mutlak jumlah mereka diminimumkan. Jika perpecahan sempurna wujud, kita perlu mengembalikan dua senarai tersebut. Jika tidak, kembalikan dua senarai di mana perbezaan jumlah adalah paling kecil yang mungkin.

Contoh:

Input: [3, 1, 4, 2, 2]
Output: ([2, 4], [3, 1, 2])

Salin selepas log masuk

Dalam contoh ini, membahagikan senarai kepada [3, 4] dan [1, 2, 2] memberikan jumlah 7 dan 5, dan perbezaan mutlak diminimumkan kepada 2.

Pengekodan

Jadi mari kita mulakan pengekodan.
16 September 2024:

from itertools import combinations

def minimize_difference(lst):
    total_sum = sum(lst)
    n = len(lst)

    # Generate all possible subsets
    best_diff = float('inf')
    best_split = ([], [])

    for i in range(1, n//2 + 1):
        for subset in combinations(lst, i):
            subset_sum = sum(subset)
            other_sum = total_sum - subset_sum

            diff = abs(subset_sum - other_sum)

            if diff < best_diff:
                best_diff = diff
                best_split = (list(subset), [x for x in lst if x not in subset])

    return best_split

# Example usage
lst = [3, 1, 4, 2, 2]
result = minimize_difference(lst)
print("Split lists:", result)

Salin selepas log masuk

Hakikat bahawa kod itu berfungsi lebih baik daripada otak saya sungguh menakjubkan.

Penjelasan Kod

Masalah membahagikan senarai kepada dua sub-senarai supaya perbezaan mutlak antara jumlah mereka diminimumkan, berpunca daripada cabaran matematik yang menarik. Mari kita pecahkan cara kod Python yang disediakan menangani masalah ini.

  1. Memahami Masalah:
    Matlamatnya adalah untuk mencari dua sub-senarai daripada senarai yang diberikan supaya jumlah mereka sedekat mungkin. Jika pemisahan sempurna wujud (di mana jumlah kedua-dua sub-senarai adalah sama), kami mengembalikan dua sub-senarai itu. Jika tidak, kami mengembalikan pecahan di mana perbezaan antara dua jumlah adalah yang paling kecil.

  2. Struktur Kod:

Inti kod terletak pada penjanaan semua kemungkinan gabungan elemen daripada senarai untuk membentuk salah satu daripada sub-senarai. Setelah sub-senarai dipilih, sub-senarai yang lain secara automatik dibentuk oleh elemen yang tinggal. Kemudian, kami membandingkan jumlah mereka untuk mencari pembahagian yang terbaik dengan perbezaan yang minimum.

  1. Fungsi dan Konsep Utama:
  • kombinasi(lst, i): Ini menjana semua kemungkinan gabungan panjang i daripada senarai. Untuk setiap subset, ia mensimulasikan salah satu daripada sub-senarai, manakala elemen yang selebihnya membentuk sub-senarai yang lain.

  • total_sum = sum(lst): Ini mengira jumlah keseluruhan senarai. Ia digunakan untuk menentukan jumlah sub-senarai yang lain dengan mudah dengan menolak jumlah subset semasa daripada jumlah keseluruhan.

  • best_diff = float('inf'): Kami memulakan pembolehubah best_diff dengan nombor yang besar (infiniti) untuk menjejaki perbezaan terkecil yang ditemui setakat ini. Semasa kami melalui setiap pemisahan yang mungkin, kami mengemas kini nilai ini jika kami mendapati perbezaan yang lebih kecil.

  • Mencari pembahagian terbaik: Untuk setiap subset yang dijana, kod mengira perbezaan antara jumlah dua sub-senarai. Jika perbezaan semasa adalah lebih kecil daripada best_diff, pembahagian akan dikemas kini.

  1. Pertimbangan Prestasi:
    Kod ini menggunakan fungsi gabungan daripada perpustakaan itertools untuk meneroka subset dengan panjang yang berbeza. Walaupun pendekatan ini berfungsi dengan baik untuk senarai yang agak kecil, pendekatan ini mungkin tidak optimum untuk senarai yang lebih besar disebabkan oleh pertumbuhan eksponen subset yang mungkin. Untuk input yang lebih besar, algoritma yang lebih cekap seperti pengaturcaraan dinamik boleh dipertimbangkan.

  2. Contoh Output:

Dalam contoh yang disediakan:

   lst = [3, 1, 4, 2, 2]
   result = minimize_difference(lst)
   print("Split lists:", result)
Salin selepas log masuk

Fungsi membahagikan senarai kepada [2, 4] dan [3, 1, 2], menghasilkan jumlah masing-masing 6 dan 6, dan perbezaan minimum 0, yang merupakan penyelesaian optimum dalam kes ini.

  1. Mengapa ia berfungsi dengan baik: Dengan meneroka semua subset yang mungkin dan mengira perbezaan masing-masing, algoritma memastikan bahawa kita mencari pembahagian dengan perbezaan jumlah terkecil yang mungkin. Pendekatan brute-force ini intuitif dan berkesan untuk senarai bersaiz sederhana, memberikan penyelesaian yang jelas dan mudah kepada teka-teki purba ini.

Di atas yang anda lihat adalah petikan daripada diari saya, 100% benar. Tetapi versi yang lebih 'storified' tersedia melalui Storified Version yang sama

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

sumber:dev.to
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan