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.
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 :
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
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 :
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
$ ./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
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!