Beauté imbriquée

DDD
Libérer: 2024-12-26 22:22:14
original
184 Les gens l'ont consulté

Nested beauty

Défi hebdomadaire 300

Chaque semaine, Mohammad S. Anwar envoie The Weekly Challenge, une chance pour nous tous de trouver des solutions à deux tâches hebdomadaires. Mes solutions sont d'abord écrites en Python, puis converties en Perl. C'est une excellente façon pour nous tous de pratiquer le codage.

Défi, Mes solutions

Il s'agit du trois centième défi, permettez-moi de remercier personnellement Mohammad pour tout le travail qu'il accomplit chaque semaine au nom de tous les membres de l'équipe PWC.

Tâche 1 : Bel arrangement

Tâche

Vous recevez un entier positif, $int.

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

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. perm[i] est divisible par i
  2. je est divisible par perm[i]

Ma solution

Pour cette tâche, j'utilise la fonction de permutations du module itertool pour travailler sur toutes les permutations.

Ensuite, il s'agit simplement de déterminer si cette permutation répond aux critères spécifiés. Si ce n'est pas le cas, je passe à la permutation suivante. Si c'est le cas, j'en ajoute un à la variable count.

def beautiful_arrangement(n: list) -> str:
    count = 0

    for p in permutations(range(1, n+1)):
        for i in range(n):
            if p[i] % (i+1) != 0 and (i+1) % p[i] != 0:
                break
        else:
            count += 1

    return count




</p>
<p>Il existe peut-être un moyen plus efficace de calculer les résultats qui n'implique pas de force brute. Mon code deviendrait très inefficace sur des nombres plus grands. Je n'ai pas passé de temps à enquêter sur cela.</p>

<h3>
  
  
  Exemples
</h3>



<pre class="brush:php;toolbar:false">$ ./ch-1.py 1
1

$ ./ch-1.py 2
2

$ ./ch-1.py 10
700
Copier après la connexion

Tâche 2 : Tableau imbriqué

Tâche

Vous recevez un tableau d'entiers, @ints de longueur n contenant la permutation des nombres dans la plage [0, n - 1].

Écrire un script pour construire un ensemble, set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ..., soumis aux règles suivantes :

  1. Le premier élément de set[i] commence par la sélection des éléments ints[i].
  2. L'élément suivant dans set[i] devrait être ints[ints[i]], puis ints[ints[ints[i]]], et ainsi de suite.
  3. Nous arrêtons d'ajouter juste avant qu'un élément en double ne se produise dans set[i].

Ma solution

C'est relativement simple. Je commence avec une variable appelée longest_set, définie sur 0. Je parcourt ensuite chaque position de départ et je définis la liste this_set comme étant le premier élément de l'ensemble (c'est-à-dire ints[i]). Je continue d'ajouter à cet ensemble alors que ints[this_set[-1]] n'apparaît pas dans la liste this_set. Une fois cela fait, je compare la longueur de la liste this_set à la valeur longest_set. Si elle est supérieure, je mets à jour la valeur longest_set.

def nested_array(ints: list) -> int:
    longest_set = 0

    for start in range(len(ints)):
        this_set = [ints[start]]

        while ints[this_set[-1]] not in this_set:
            this_set.append(ints[this_set[-1]])

        if longest_set < len(this_set):
            longest_set = len(this_set)

    return longest_set
Copier après la connexion

Exemples

$ ./ch-2.py 5 4 0 3 1 6 2
4

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

$ ./ch-2.py 1 2 0 4 5 2
5
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal