[PYTHON] Mathe-Puzzle, um das Gehirn des Programmierers zu trainieren Q05 Zahlen Sie immer noch bar?

Problemzusammenfassung

Tauschen Sie 1000 Yen gegen eine Kombination aus 500 Yen Bällen, 100 Yen Bällen, 50 Yen Bällen und 10 Yen Bällen. Die Gesamtzahl der Münzen beträgt jedoch 15 oder weniger.

Code Löse ohne nachzudenken

#Q05 Zahlen Sie immer noch in bar?

combinations = [] #Liste der Kombinationen
for c500 in range(3):
    for c100 in range(11):
        for c50 in range(16):
            for c10 in range(16):
                if c500 + c100 + c50 + c10 <= 15:
                    if c500 * 500 + c100 * 100 + c50 * 50 + c10 *10 == 1000:
                        combinations.append((c500, c100, c50, c10))
                
print(combinations)
print(len(combinations))

Code 2

Schreiben Sie mit möglichst wenigen Wiederholungen von for-Anweisungen

import itertools
import numpy as np

combinations = []
for c in list(itertools.product(list(range(16)), repeat=4)):
    m = np.array(list(c)) * np.array([500, 100, 50, 10])
    if np.sum(c) <= 15 and np.sum(m) == 1000:
        combinations.append(c)
        
print(combinations)
print(len(combinations))

Der Code ist kürzer geworden, aber ich denke nicht, dass er viel schneller und weniger lesbar ist, daher dient er nur als Referenz. .. ..

Was ich sagen möchte, ist das bei der Verarbeitung um das Array

Wenn Sie herumjagen, finden Sie Tools, die einfacher zu implementieren sind.

Das Folgende ist eine Ergänzung zu den diesmal verwendeten Werkzeugen.

itertools.product Finden Sie das direkte Produkt der Sequenz. Sie können die Wiederholungsoption verwenden, um das direkte Produkt mit sich selbst zu finden. Gibt ein itertools-Objekt zurück, kann aber in eine Liste umgewandelt werden. Das folgende Verwendungsbeispiel.

import itertools

x = ['a', 'b']
y = ['c', 'd']
z = list(range(3)) #[0, 1, 2]

print(list(itertools.product(x, y))) 
#[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]

print(list(itertools.product(x, repeat=2)))
#[('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]

print(list(itertools.product(z, repeat=2)))
#[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

Vier Listenregeln in Numpy

In einer normalen Liste steht das Pluszeichen für eine Verkettung der Liste. Andere arithmetische Symbole sind Fehler. Wenn Sie in numpy die Liste mit einem Operationssymbol verbinden, wird die Liste der Ergebnisse der Berechnung der Elemente an derselben Position zurückgegeben.

import numpy as np

x = [1, 3, 5]
y = [2, 4, 6]

print(x + y) #[1, 3, 5, 2, 4, 6]
print(x - y) #error
print(x * y) #error
print(x / y) #error

print(np.array(x) + np.array(y)) # [ 3  7 11]
print(np.array(x) - np.array(y)) # [-1 -1 -1]
print(np.array(x) * np.array(y)) # [ 2 12 30]
print(np.array(x) / np.array(y)) # [0.5 0.75 0.83333333]

Recommended Posts

Mathe-Puzzle, um das Gehirn des Programmierers zu trainieren Q05 Zahlen Sie immer noch bar?
Mathematik-Puzzle zum Trainieren des Gehirns des Programmierers Q08 Ausgezeichneter Reinigungsroboter
Mathe-Puzzle zum Trainieren des Gehirns des Programmierers Q04 Schnitzen eines Stocks
Mathe-Puzzle zum Trainieren des Gehirns des Programmierers Q01 "Wiederholung in Dezimalzahl"
Mathe-Puzzle zum Trainieren des Gehirns des Programmierers Q03 Drehen Sie die Karte um
Mathematik-Puzzle zum Trainieren des Gehirns des Programmierers Q06 (modifizierte Version) Koratz 'Vorhersage