Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bumerang yang serupa

Bumerang yang serupa

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 05:03:02642semak imbas

Similar boomerang

Cabaran Mingguan 293

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: Domino yang serupa

Tugasan

Anda diberi senarai domino, @domino.

Tulis skrip untuk mengembalikan bilangan domino yang serupa dengan mana-mana domino lain.

$dominos[i] = [a, b] dan $dominos[j] = [c, d] adalah sama jika sama ada (a = c dan b = d) atau (a = d dan b = c).

penyelesaian saya

Saya tidak pasti sama ada ia bahasa Inggeris/AS atau sesuatu yang lain, tetapi saya menggunakan Domino sebagai jamak Domino. Domino apa yang anda dapat apabila anda lapar.

Untuk tugasan ini, saya mengambil integer daripada baris arahan dan menukarnya kepada senarai senarai (tatasusunan tatasusunan dalam Perl). Jika ini projek dunia sebenar, saya mungkin akan menggunakan Kelas Data dan mempunyai pengendali kesamarataan.

Saya mempunyai gelung berganda. Gelung luar - dipanggil i - adalah dari 0 hingga satu kurang daripada bilangan domino. Gelung dalam - dipanggil j - juga sama. Saya melangkau kes apabila i dan j adalah sama. Jika domino pada kedudukan i dan j adalah sama (sama ada nombor yang sama atau nombor bertentangan), saya menambah satu untuk mengira dan keluar dari gelung dalam.

def similar_dominoes(dominoes: list) -> int:
    count = 0

    for i in range(len(dominoes)):
        for j in range(len(dominoes)):
            if i == j:
                continue
            if (dominoes[i][0] == dominoes[j][0] and dominoes[i][1] == dominoes[j][1]) \
                    or (dominoes[i][0] == dominoes[j][1] and dominoes[i][1] == dominoes[j][0]):
                count += 1
                break

    return count

Contoh

$ ./ch-1.py 1 3 3 1 2 4 6 8
2

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

Tugasan 2: Boomerang

Tugasan

Anda diberi tatasusunan mata, (x, y).

Tulis skrip untuk mengetahui sama ada mata yang diberikan adalah bumerang.

Bumerang ialah satu set tiga titik yang semuanya berbeza dan bukan dalam garis lurus.

penyelesaian saya

Seperti tugasan terakhir, saya mengambil integer daripada baris arahan dan menukarnya kepada senarai senarai (tatasusunan tatasusunan dalam Perl).

Saya cukup ingat dari matematik sekolah menengah untuk mengetahui bahawa kita boleh mendapatkan cerun (kecerunan) dua mata dengan formula (x2 - x1) ÷ (y2 - y1). Namun jika y1 dan y2 adalah sama, kita mendapat pembahagian dengan ralat sifar.

Oleh itu saya menggunakan semakan berikut:

  1. Jika semua nilai y (item kedua dalam setiap senarai) adalah sama, kembalikan Salah apabila titik membuat garis rata.
  2. Jika mana-mana nilai y adalah sama dengan nilai y pertama, kembalikan Benar (seperti yang kita tahu sekurang-kurangnya satu nilai y adalah berbeza).
  3. Kira slop mutlak antara titik pertama dan titik lain menggunakan formula di atas. Simpan ini sebagai satu set. Set tidak menyimpan nilai pendua.
  4. Jika set hanya mempunyai satu nilai, ia adalah garis lurus dan kembalikan Salah. Jika terdapat lebih daripada satu nilai, maka ia adalah bumerang. Saya tidak di sini untuk menentukan sama ada ia adalah bumerang yang bagus :)
def is_boomerang(points: list) -> bool:
    if all(points[0][1] == points[i][1] for i in range(1, len(points))):
           return False

    if any(points[0][1] == points[i][1] for i in range(1, len(points))):
           return True

    degrees = set(abs((points[0][0] - points[i][0]) / (points[0][1] - points[i][1])) for i in range(1, len(points)))
    return False if len(degrees) == 1 else True

Contoh

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

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

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

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

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

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

Atas ialah kandungan terperinci Bumerang yang serupa. 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