Maison > développement back-end > Tutoriel Python > Étape zéro, étape une

Étape zéro, étape une

Barbara Streisand
Libérer: 2025-01-02 21:54:38
original
798 Les gens l'ont consulté

Step zero, step one

Défi hebdomadaire 302

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 : Des uns et des zéros

Tâche

Vous recevez un tableau de chaînes binaires, @str, et deux entiers, $x et $y.

Écrivez un script pour renvoyer la taille du plus grand sous-ensemble de @str de telle sorte qu'il y ait au plus $x 0 et $y 1 dans le sous-ensemble.

Un ensemble m est un sous-ensemble de n si tous les éléments de m sont également des éléments de n.

Ma solution

Plutôt que d'appeler les variables x et y, je les ai nommées max_zeros et max_ones, car cela est plus significatif. Pour la ligne de commande, je prends les deux dernières valeurs comme max_zeros et max_ones, le reste des valeurs étant intégré dans le tableau s.

Pour cette tâche, j'ai la longueur variable qui commence par le nombre d'éléments dans s jusqu'à un. Pour chaque longueur, j'utilise ensuite la fonction de combinaison d'itertool pour calculer toutes les combinaisons uniques d'éléments de longueur et les stocke dans la variable de sous-ensemble.

Pour chaque sous-ensemble, je joins toutes les chaînes ensemble, je compte le nombre de zéros et de uns et je vois s'ils sont inférieurs ou égaux à max_zeros et max_ones respectivement. Si c’est le cas, je renvoie la variable de longueur. Si aucun n'est trouvé, je renvoie zéro.

def ones_and_zeros(s: list, max_zeros: int, max_ones: int) -> int:
    for length in range(len(s), 0, -1):
        for subset in combinations(s, length):
            bits = ''.join(subset)
            if bits.count('0') <= max_zeros and bits.count('1') <= max_ones:
                return length

    return 0
Copier après la connexion

Exemples

$ ./ch-1.py 10 0001 111001 1 0 5 3
4

$ ./ch-1.py 10 0001 10 1 0 1 1
2
Copier après la connexion

Tâche 2 : étape par étape

Tâche

Vous recevez un tableau d'entiers, @ints.

Écrivez un script pour trouver la valeur de départ positive minimale telle que la somme étape par étape ne soit jamais inférieure à un.

Ma solution

Étant vraiment pédant, la "valeur de départ positive minimale" pour une liste d'entiers positifs est de 0,000...01. Cependant, le deuxième exemple semble impliquer que ce nombre est en réalité un nombre entier.

Pour cette tâche, je commence avec deux variables, min_value qui est définie comme première valeur de la liste ints et value qui est zéro. Je parcoure ensuite la liste des entiers et j'ajoute ce nombre à la variable de valeur. Si la valeur est inférieure à min_value, je mets à jour la variable min_value.

Si min_value est supérieur ou égal à zéro, je renvoie 1. Sinon, je renvoie 1 - min_value.

def step_by_step(ints: list) -> int:
    min_value = ints[0]
    value = 0

    for i in ints:
        value += i
        if min_value > value:
            min_value = value

    if min_value >= 0:
        return 1

    return 1 - min_value
Copier après la connexion

Exemples

$ ./ch-1.py 10 0001 111001 1 0 5 3
4

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

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

$ ./ch-2.py 1 2
1

$ ./ch-2.py 1 -2 -3
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal