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
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.
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
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2
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.
É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
$ ./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
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!