Défi hebdomadaire

WBOY
WBOYoriginal
2024-08-27 06:05:32865parcourir

Weekly Challenge

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

Tâche 1 : Numéro unique

Tâche

Vous recevez un tableau d'entiers, @ints, où chaque élément apparaît plus d'une fois sauf un.

Écrivez un script pour trouver l'élément qui apparaît exactement une fois.

Ma solution

Les deux défis de cette semaine impliquent la fréquence des nombres entiers. Python a la fonction Counter (du module collections) qui convertit automatiquement une liste d'éléments en dict de fréquences. Pour la solution Perl, je le fais à la main.

Une fois le dict de fréquence renseigné, je trouve ensuite tous les entiers qui n'apparaissent qu'une seule fois en utilisant la compréhension de liste. Ceci est stocké dans la variable once_only. S'il y a une valeur dans la liste, je la renvoie. Sinon, j'afficherai un message d'erreur approprié.

def unique_number(ints: list) -> int:
    freq = Counter(ints)
    only_once = [i for i in freq if freq[i] == 1]

    if len(only_once) == 1:
        return only_once[0]

    if len(only_once) == 0:
        raise ValueError('No values only appear once')

    raise ValueError('More than one value appears once')

Exemples

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

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

$ ./ch-1.py 1
1

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

Tâche 2 : Valeur du nombre de chiffres

Tâche

Vous recevez un tableau d'entiers positifs, @ints.

Écrivez un script pour renvoyer vrai si pour chaque index i dans la plage 0 <= i < taille du tableau, le chiffre i apparaît exactement les fois $ints[$i] dans le tableau donné, sinon renvoie false.

Ma solution

Comme pour la dernière tâche, je crée un dict (hachage en Perl) appelé freq pour stocker la fréquence de chaque entier. Je parcoure ensuite la liste pour vérifier que la condition est remplie avec chaque valeur.

def digit_count_value(ints: list) -> bool:
    freq = Counter(ints)

    for idx, value in enumerate(ints):
        if freq[idx] != value:
            return False

    return True




</p>
<h3>
  
  
  Exemples
</h3>



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

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

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