Maison >développement back-end >Tutoriel Python >Ma solution en langage Python pour créer un bel arrangement du défi hebdomadaire

Ma solution en langage Python pour créer un bel arrangement du défi hebdomadaire

Barbara Streisand
Barbara Streisandoriginal
2024-12-27 02:40:10172parcourir

My Python Language Solution to Task Beautiful Arrangement from The Weekly Challenge

1. Introduction

Le Weekly Challenge, organisé par Mohammad S. Anwar, est une compétition amicale dans laquelle les développeurs s'affrontent en résolvant une paire de tâches. Il encourage la participation des développeurs de toutes langues et de tous niveaux à travers l'apprentissage, le partage et le plaisir.

Tâche 1 : Bel arrangement du Défi hebdomadaire invite les développeurs à trouver le nombre de permutations magnifiquement arrangées parmi toutes les permutations générées à partir d'un entier positif.

Dans cet article, je discute et présente ma solution à la tâche 1 : Bel arrangement, et je termine par une brève conclusion.

La date limite du Weekly Challenge 300 est le dimanche 23 décembre 2024 à 23h59 (heure du Royaume-Uni). Pour éviter les préjugés, pensez à lire cet article après la compétition.

2. Tâche 1 : Bel arrangement

Vous recevez un entier positif, $int.

Écrivez un script pour renvoyer le nombre de beaux arrangements que vous pouvez construire à partir de $int.

Une permutation de n entiers, indexés 1, est considérée comme un bel arrangement si pour chaque i (1 <= i <= n) l'une des conditions suivantes est vraie :

  1. la permutation[i] est divisible par i
  2. je est divisible par permutation[i]

Le Défi Hebdomadaire 300, Tâche 1 : Bel Arrangement

Les exemples 1 et 2 présentent les résultats attendus à partir d'entrées données.

Exemple 1

Input: $n = 2
Output: 2

Pour n = 2 et avec i entiers tels que (1 <= i <= n) il y a deux permutations (1, 2) et (2, 1). Sortie : 2 car les deux répondent aux exigences du bel arrangement.

La permutation (1, 2) est un bel arrangement car tous ses éléments correspondent à la première condition :

  • À i = 1, permutation[1] = 1 satisfait à la première condition, puisque un est divisible par un.
  • À i = 2, permutation[2] = 2 satisfait aux premières conditions, puisque deux est divisible par deux.

La permutation(2, 1) est également un bel arrangement car tous ses éléments correspondent soit à la première soit à la deuxième condition :

  • À i = 1, permutation[1] = 2 satisfait à la première condition, puisque deux est divisible par un.
  • À i = 2, permutation[2] = 1 satisfait la deuxième condition, puisque deux est divisible par un.

Exemple 2

Input: $n = 1
Output: 1

Exemple 3

Input: $n = 10
Output: 700

3. Ma solution à la tâche 1

from itertools import permutations

def generate_permutations(n)
    iterable = list(range(1, n + 1))
    return permutations(iterable)

def count_beautiful_arrangements(perms):
    num_beautiful_arr = 0
    for perm in perms:
        is_beautiful_arr = True
        for value_index, value in enumerate(perm):
            if value % (value_index + 1) == 0:
                continue
            elif (value_index + 1) % value == 0:
                continue
            else:
                is_beautiful_arr = False
                break
        if is_beautiful_arr == True:
            num_beautiful_arr += 1
    return num_beautiful_arr

Ma solution inélégante et peu sophistiquée utilise deux fonctions generate_permutations et count_beautiful_arrangements.

generate_permutations renvoie, pour le paramètre n, toutes les permutations de l'ensemble où 1 <= i <= n.

  • iterable = list(range(1, n 1)) génère une liste d'entiers où 1 <= i <= n.
  • permutations(iterable), importé du module itertools, génère toutes les permutations d'itérable.

count_beautiful_permutations renvoie, pour le paramètre permutations itérables perms, le nombre total de permutations en perms qui correspondent aux belles conditions d'arrangement.

  • La boucle externe pour perm in... parcourt chaque permutation.
  • Cela commence par l'hypothèse que la permanente est un bel arrangement (is_beautiful_arr = True).
    • La boucle interne pour value_index, value in... vérifie si chaque élément de perm correspond à la condition 1 ou à la condition 2.
      • Si tous les éléments correspondent à l'une ou l'autre des conditions, la permanente est considérée comme un bel arrangement.
      • Sinon, si un élément ne correspond ni à la condition 1 ni à la condition 2, alors is_beautiful_arr est défini sur False, la boucle s'interrompt plus tôt et la permanente n'est pas comptée comme un bel arrangement.

4. Conclusion

Dans cet article, j'ai discuté de la tâche 1 : Bel arrangement et j'ai présenté ma solution. Ma solution « inélégante et peu sophistiquée » fonctionne, mais elle peut être grandement améliorée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn