[PYTHON] Reproduzieren wir das arithmetische Lehrmittel "Jamaica" ❗️ vol.03 "Mit dem Ziel, eine Lösung für Jamaika zu finden ~ Runde 1 ~"

Einführung

In dieser Serie geht es um ein bestimmtes ** Rechenwerkzeug "Jamaica" </ font> ** Es ist eine Aufzeichnung des Kampfes um die Erreichung der folgenden Ziele.

** ✔︎ </ font> 1. ** *** Sie können das Spiel "Jamaica" mit einem Programm ausführen, das die Bildanzeige verwendet. *** *** ** ▶ ︎ </ font> 2. ** *** Erstellen Sie ein Programm, das die Existenz von Lösungen und deren Inhalten für eine beliebige Kombination von Würfeln in "Jamaika" sucht und darstellt. *** ***

Rückblick bis zum letzten Mal

Bis zum letzten Mal haben wir uns mit folgenden Inhalten befasst.

*** §1. "Jamaica" </ font> reproduzieren *** *** Task.001 "Würfelwurf" als Bild anzeigen *** *** Task.002 "Zeigen Sie das Würfelwurfbild nach einer Zufallszahl an" *** *** Task.003 "Erstellen Sie eine Funktion zum Anzeigen von Würfelwurfbildern" ***

Dieser Wille

  • Würfeln Sie nach dem Zufallsprinzip
  • Zeigen Sie nebeneinander die Würfelwurfbilder an, die dem Ergebnis des Schüttelns entsprechen

Sie können jetzt die grundlegende Operation von Jamaika mit nur wenigen Codezeilen ausführen.

** _____ [Referenzartikel] _____ ** [^ ref001] Erinnerung | Lassen Sie uns den vorherigen Artikel des arithmetischen Lehrwerkzeugs "Jamaica" (Band 01) reproduzieren [^ ref002] Erinnerung | Reproduzieren wir den vorherigen Artikel des arithmetischen Lehrwerkzeugs "Jamaica" (Band 02)

task003_jmcdisplay


### function trial START ###
libimports()
figPlace = figplace()
jmcDice = jmc_diceroll(printOption=True)
jmc_display(figPlace, jmcDice, sizeRatio=1.4)
### function trial END ###
> Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
>Jamaican Die Roll Ergebnisse:[ 1  5  6  5  5 30  2]

qiita005_jamaica_task003_jmcdisplay.png

§2. Suche nach einer Lösung für "Jamaica" </ font>

■ In Jamaika besteht der Zweck darin, die Summe der schwarzen Würfel zu erstellen, indem vier Regeln (Addition, Subtraktion, Multiplikation und Division) mit jeder Anzahl weißer Würfel einmal ausgeführt werden.

■ Die Zahlen auf den weißen Würfeln können in beliebiger Reihenfolge berechnet werden.

Beispiel)Weiße Würfel: 2, 2, 3, 3,4 schwarze Würfel: 40,Im Fall von 5

  [1]Einmal weiße Würfel → 2*2*3*4 - 3 = 48 - 3 = 45
  [2]Summe der schwarzen Würfel → 40+ 5 = 45

Da es als berechnet werden kann, ist dieser Satz von vier Regeln eine Lösung.

Task.004 "Vorbereiten von vier Regeln arithmetische Funktionen basierend auf Jamaika-Regeln"

■ Berechnungsergebnisse, die nicht subtrahiert oder geteilt werden können, dürfen danach nicht fortgesetzt werden. Beispiel) Weiße Würfel: 2, 2, 4, 5, 6 Schwarze Würfel: 40, 5 Subtraktion: 2-6 = -4 Division: 6/4 = 3/2 Kann nicht in Zwischenberechnungen verwendet werden. ** * Es gibt eine Regel, die vertraglich vereinbarte Protokolle zulässt. ** ** **

■ Erstellen Sie aus den oben genannten Funktionen die folgende Operation mit vier Regeln.

Eine Funktion, die die Summe zweier Zahlen berechnet: add()
Eine Funktion, die die Differenz zwischen zwei Zahlen berechnet: substract()* Das Ergebnis des Subtrahierens des größeren vom kleineren ist nan.
Eine Funktion, die das Produkt zweier Zahlen berechnet: multiply()
Eine Funktion, die den Quotienten aus zwei Zahlen berechnet: divide()* Wenn das Ergebnis keine Ganzzahl ist, benötigen Sie eine Option, um zu entscheiden, ob Sie es akzeptieren möchten oder nicht.

** _____ [Referenzartikel] _____ ** [^ ref003] Task004 | [Was ist NAN? ] Bedeutung und Verwendung ➡︎ Ich erkannte, dass es gut wäre, np.nan zu verwenden, um die Unfähigkeit zur Ausgabe anzuzeigen. (Ich hoffe, dass es bei der späteren Ermittlung der Ergebnisse keine unbeabsichtigten Ausreißer gibt.)

task004_calcfunctions


def add(var1, var2):
  return var1 + var2

def substract(var1, var2):
  if var1 >= var2: #Wenn das erste Argument größer oder gleich dem zweiten Argument ist, führen Sie eine Subtraktion durch
    return var1 - var2
  else: #Wenn das erste Argument kleiner als das zweite Argument ist, geben Sie nan aus, damit die Berechnung nicht weiter fortgesetzt wird.
    return np.nan

def multiply(var1, var2):
  return var1 * var2

def divide(var1, var2, fracOption): #Das dritte Argument, fracOption, ist eine Option, die irreduzible Brüche nur dann zulässt, wenn True.
  if var2 == 0: #Wenn Sie durch 0 teilen, geben Sie nan aus, damit die Berechnung nicht weiter fortgesetzt wird.
    return np.nan
  elif isinstance(var1, int) and isinstance(var1, int): #Wenn beide Zahlen ganze Zahlen sind
    if not fracOption == True: #Wenn Sie keine Brüche zulassen
      if var1 >= var2 and var1 % var2 ==0: #Wenn die erste Zahl die zweite oder mehr ist und teilbar ist, wird der Quotient ausgegeben.
        return var1 // var2
      else: #Wenn die erste Zahl kleiner als die zweite ist oder nicht teilbar ist, wird nan gedruckt, damit die Berechnung nicht weiter fortgesetzt wird.
        return np.nan
    else: #Wenn Sie Brüche zulassen möchten, führen Sie einfach die Division durch
      return var1 / var2
  else: #2 Wenn eine der Zahlen keine Ganzzahl ist
    if not fracOption ==True: #Wenn Sie keine Brüche zulassen, geben Sie nan aus, damit die Berechnung nicht weiter fortgesetzt wird
      return np.nan
    else: #Wenn Sie Brüche zulassen möchten, führen Sie einfach die Division durch
      return var1 / var2

task004_calcdisplay


### function trial START ###

#Ob das Berechnungsergebnis von subtrahieren mit nan ausgegeben werden soll?
print('___Auf Subtraktion prüfen___')
for num in range(8):
  print('6-',num,' = ',substract(6,num))

#Das Berechnungsergebnis der Division ist fracOption=Überprüfen Sie mit True
print('___Teil 1 prüfen: fracOption=True & varA is int___')
for num in range(8):
  print('6/',num,' = ',divide(6,num,fracOption=True))
#Das Berechnungsergebnis der Division ist fracOption=Überprüfen Sie mit False
print('___Teil 2 prüfen: fracOption=False & varA is int___')
for num in range(8):
  print('6/',num,' = ',divide(6,num,fracOption=False))
#Das Berechnungsergebnis der Division ist fracOption=True &Überprüfen Sie die zu teilende Zahl mit float
print('___Teil 3 prüfen: fracOption=True & varA is float___')
for num in range(8):
  print('6.5/',num,' = ',divide(6.5,num,fracOption=True))
#Das Berechnungsergebnis der Division ist fracOption=False &Überprüfen Sie die zu teilende Zahl mit float
print('___Teil 4 prüfen: fracOption=False & varA is float___')
for num in range(8):
  print('6.5/',num,' = ',divide(6.5,num,fracOption=False))

### function trial END ###
___Auf Subtraktion prüfen___
6- 0  =  6
6- 1  =  5
6- 2  =  4
6- 3  =  3
6- 4  =  2
6- 5  =  1
6- 6  =  0
6- 7  =  nan
___Teil 1 prüfen: fracOption=True___
6/ 0  =  nan
6/ 1  =  6.0
6/ 2  =  3.0
6/ 3  =  2.0
6/ 4  =  1.5
6/ 5  =  1.2
6/ 6  =  1.0
6/ 7  =  0.8571428571428571
___Teil 2 prüfen: fracOption=False___
6/ 0  =  nan
6/ 1  =  6
6/ 2  =  3
6/ 3  =  2
6/ 4  =  nan
6/ 5  =  nan
6/ 6  =  1
6/ 7  =  nan
___Teil 3 prüfen: fracOption=True & varA is float___
6.5/ 0  =  nan
6.5/ 1  =  6.5
6.5/ 2  =  3.25
6.5/ 3  =  2.1666666666666665
6.5/ 4  =  1.625
6.5/ 5  =  1.3
6.5/ 6  =  1.0833333333333333
6.5/ 7  =  0.9285714285714286
___Teil 4 prüfen: fracOption=False & varA is float___
6.5/ 0  =  nan
6.5/ 1  =  nan
6.5/ 2  =  nan
6.5/ 3  =  nan
6.5/ 4  =  nan
6.5/ 5  =  nan
6.5/ 6  =  nan
6.5/ 7  =  nan

Task.005 "Betrachten Sie eine Funktion zur Suche nach einer Lösung in Jamaika"

■ Die folgenden Ideen können als eine Funktion betrachtet werden, die weiße Würfel verwendet, um Berechnungen voranzutreiben, die Kandidaten für Lösungen in Jamaika sind.

[Schritt 1]5 weiße Würfelwürfe, dh 5 ganzzahlige Werte(1 oder mehr und 6 oder weniger)Wählen Sie zwei davon aus und ordnen Sie sie an (5P2)=Es werden 20 Kombinationen) und 4 Regeln (4 Arten der Addition, Subtraktion, Multiplikation und Division) durchgeführt.
[Schritt 2]obenstehendes[1]1 Zahl generiert in und die restlichen 3 ganzzahligen Werte(1 oder mehr und 6 oder weniger)Wählen Sie zwei davon aus und ordnen Sie sie an(4P2=12 Kombinationen)Führt vier Regeln aus (4 Arten der Addition, Subtraktion, Multiplikation und Division).
[Schritt 3]obenstehendes[1][2]Fahren Sie fort, bis eine Zahl im selben Ablauf wie ausgegeben wird.

■ Die obige Funktion muss die Ausgabe gemäß den folgenden Eingabebedingungen ändern.

(1)Satz von Eingaberollen und Berechnungsergebnissen (np.Array-Format)
(2) (1)Anzahl der Einschlusswerte von(=Array-Länge)Wenn es 1 ist, stoppen Sie die Berechnung und treffen Sie ein Übereinstimmungsurteil.
(3)Gibt an, ob Brüche zugelassen werden sollen(fracOption == True or False)

■ Da es notwendig ist, einen Datensatz auszugeben, auf welche Anzahl und Reihenfolge die vier Regeloperationen angewendet wurden, muss auch die folgende Ausgabe übrig bleiben.

(4)Über die vier Berechnungsregeln, die zwei Zahlen berechnet haben(_varA_ _Betriebssymbol_ _varB_)Aufnehmen
Beispiel) 2 *Im Fall von 5 "(2 * 5)Aufnehmen

■ Definieren Sie zunächst die folgende Funktion.

■ Gibt calcDice aus, in dem berechnete Elemente als berechenbare Zahlen gespeichert werden, und calcDNames, eine Zeichenfolge davon.

[Funktion 1]  transForClac()
___Eingabe: Ein Array mit den Ergebnissen von 7 Würfeln jmcDice
_____ Ausgabe: Ein Array calcDice, das die Summe von 5 weißen und 2 schwarzen Würfeln speichert.

[Funktion 2] makeCalcName()
___Eingabe: Ein Array calcDice, das die Summe von 5 weißen und 2 schwarzen Würfeln speichert
_____ Ausgabe: In Zeichenfolgen konvertierte Zahlen(Ein Typ, der auf eine Zeichenfolge beliebiger Länge aktualisiert werden kann)Array calcDNames

task005_calcfunctions_1&2


# [Funktion 1]  transForClac()
#___Eingabe: Ein Array mit den Ergebnissen von 7 Würfeln jmcDice
#_____ Ausgabe: Ein Array calcDice, das die Summe von 5 weißen und 2 schwarzen Würfeln speichert.
###################################################

def transForCalc(jmcDice, printOption):
  calcDice = jmcDice.astype(np.float64) #Wenn Sie das Berechnungselement später aktualisieren, wird np.nan(float64-Format)Erstellen Sie von Anfang an ein neu definiertes calcDice mit einem float64-Array, damit es überschrieben werden kann.
  calcDice[5] = calcDice[5] + calcDice[6] #Berechnen Sie die Summe der Werte der schwarzen Würfel und des Index=5(Das ist der sechste)Aktualisiere auf den Wert der Würfel
  calcDice = np.delete(calcDice, 6) #Nicht mehr benötigt, Index=Löschen Sie den Wert des 6. (dh 7.) Würfels
  if printOption == True:
    print('Liste der berechneten Elemente: ', calcDice)
  return calcDice

# [Funktion 2] makeCalcName()
#___Eingabe: Ein Array calcDice, das die Summe von 5 weißen und 2 schwarzen Würfeln speichert
#_____ Ausgabe: In Zeichenfolgen konvertierte Zahlen(Ein Typ, der auf eine Zeichenfolge beliebiger Länge aktualisiert werden kann)Array calcDNames
###################################################

def makeCalcName(calcDice, printOption):
  calcDNames = np.empty(calcDice.shape[0],dtype=object) #Objektformat np, damit Zeichenfolgen unterschiedlicher Länge gespeichert werden können.Definieren Sie ein Array (die Länge entspricht der Länge des calcDice-Arrays)
  for i in range(calcDNames.shape[0]):
    calcDNames[i] = str(int(calcDice[i])) #Speichern Sie jedes Element von calcDice nacheinander
  if printOption == True:
    print('Liste der charakterisierten Arrays: ', calcDNames)
  return calcDNames

### fanction trial START ###
jmcDice = jmc_diceroll(printOption=True)
calcDice = transForCalc(jmcDice, printOption=True)
calcDNames = makeCalcName(calcDice, printOption=True)
### fanction trial END ###
>Jamaican Die Roll Ergebnisse:[ 2  3  1  4  4 50  5]
>Liste der berechneten Elemente:  [ 2.  3.  1.  4.  4. 55.]
>Liste der charakterisierten Arrays:  ['2' '3' '1' '4' '4' '55']

_________________________________________

■ Ich konnte ein Array nur aus berechneten Elementen, calcDice und calcDNames, erstellen, bei denen es sich um eine Zeichenfolge handelt.

■ Dieses Mal müssen Sie Ihre beiden Lieblingszahlen auswählen und eine der vier Regeln üben.

■ Daher definieren wir die folgende Funktion, die die vier Regeln der ausgewählten zwei Zahlen durch Eingabe von arithOpeNo ausführt, das angibt, welche vier Regeln ausgeführt werden sollen.

[Funktion 3] arithOperator()
_____ Eingabe 1: Die erste der beiden Zahlen, die Sie mit var1 berechnen möchten
_____ Eingabe 2: Die zweite der beiden Zahlen, die Sie für var2 berechnen möchten
___Eingabe 3: Die Zahl, mit der angegeben wird, welche der vier Regeloperationen arithOpeNo verwenden soll
___Eingabe 4: Auswahloption, ob Brüche fracOption zugelassen werden sollen
_____ Ausgabe: Ergebnis einer Vier-Regeln-Operation mit zwei Zahlen
 
[Funktion 4] arithMarker()
___Eingabe: Nummer, um anzugeben, welche der vier Regeln arithOpeNo verwenden soll
_____ Ausgabe: Markierung für den Berechnungsdatensatz zur Berechnung von 2 Zahlen

task005_calcfunctions_3&4


# [Funktion 3] arithOperator()
#_____ Eingabe 1: Die erste der beiden Zahlen, die Sie mit var1 berechnen möchten
#_____ Eingabe 2: Die zweite der beiden Zahlen, die Sie für var2 berechnen möchten
#___Eingabe 3: Die Zahl, mit der angegeben wird, welche der vier Regeloperationen arithOpeNo verwenden soll
#___Eingabe 4: Auswahloption, ob Brüche fracOption zugelassen werden sollen
#_____ Ausgabe: Ergebnis einer Vier-Regeln-Operation mit zwei Zahlen
###################################################

def arithOperator(var1, var2, arithOpeNo, fracOption):
  if arithOpeNo == 0: #Hinzufügen, wenn in arithOpeNo 0 angegeben ist
    return add(var1, var2)
  elif arithOpeNo == 1: #Subtrahieren, wenn 1 für arithOpeNo angegeben ist
    return substract(var1, var2)
  elif arithOpeNo == 2: #Multiplizieren Sie mit 2 in arithOpeNo
    return multiply(var1, var2)
  elif arithOpeNo == 3: #Teilen Sie durch Angabe von 3 für arithOpeNo
    return divide(var1, var2, fracOption)
  else: #arithOpeNo ist 0,1,2,Wenn es nicht 3 ist, np, damit das Berechnungsergebnis danach nicht ausgegeben wird..Ausgabe nan
    return np.nan

# [Funktion 4] arithMarker()
#___Eingabe: Nummer, um anzugeben, welche der vier Regeln arithOpeNo verwenden soll
#_____ Ausgabe: Markierung für den Berechnungsdatensatz zur Berechnung von 2 Zahlen
###################################################

def arithMarker(arithOpeNo):
  if arithOpeNo == 0: #Hinzufügen, wenn in arithOpeNo 0 angegeben ist
    return ' + '
  elif arithOpeNo == 1: #Subtrahieren, wenn 1 für arithOpeNo angegeben ist
    return ' - '
  elif arithOpeNo == 2: #Multiplizieren Sie mit 2 in arithOpeNo
    return ' * '
  elif arithOpeNo == 3: #Teilen Sie durch Angabe von 3 für arithOpeNo
    return ' / '
  else: #arithOpeNo ist 0,1,2,Wenn es nicht 3 ist, kann es nicht berechnet werden|???|Anzeigen
    return ' |???| '

### fanction trial START ###
var1 = 19
var2 = 4
print('___Ergebnis von vier Regeln___ for ', var1, ' & ', var2)
for i in range(6):
  print(arithOperator(var1, var2, arithOpeNo=i, fracOption=True))

print('___Zeichen von vier Regeln___')
for i in range(6):
  print(arithMarker(arithOpeNo=i))
### fanction trial END ###
___Ergebnis von vier Regeln___ for  19  &  4
23
15
76
4.75
nan
nan
___Zeichen von vier Regeln___
 + 
 - 
 * 
 / 
 |???| 
 |???| 

_________________________________________

■ Es ist jetzt möglich, Ihre bevorzugten 2 Zahlen zu berechnen, indem Sie die angegebene 4-Regeln-Operationstaste als Eingabe und Ausgabe verwenden, welche Art von 4-Regeln-Operationen ausgeführt wurden.

■ Geben Sie als Nächstes die gewünschten 2 Zahlen des calcDice-Arrays mit index an und definieren Sie die Funktion erneuernDice (), die das Array ausgibt, in dem das Ergebnis der Berechnung der 2 Zahlen gemäß dem Schlüssel arithOpeNo der bevorzugten Operation mit vier Regeln gespeichert wird. Ich werde.

■ Gleichzeitig mit der obigen Funktion eine Funktion, die eine Favoriten-2-Zahl im calcDNames-Array mit Index angibt und ein Array ausgibt, in dem aufgezeichnet wird, wie die 2 Zahlen gemäß dem Schlüssel arithOpeNo der bevorzugten Vier-Regeln-Operation berechnet wurden. Wir werden erneuernde Namen () definieren.

** _____ [Referenzartikel] _____ ** [^ ref004] Task005 | Schreiben einer bedingten Verzweigung mit der if-Anweisung in Python ➡︎ Beim Schreiben von if-Anweisungen habe ich insbesondere auf die Zeilenumbrüche in bedingten Ausdrücken hingewiesen.

task005_calcfunctions_5&6


# [Funktion 5] renewDice()
#___Eingabe 1: Ein Array, das das Würfelwurfergebnis als Berechnungselement calcDices speichert
#_____ Eingabe 2: Der erste der beiden Indizes, die Sie ind1 berechnen möchten
#_____ Eingabe 3: Der zweite der beiden Indizes, die Sie ind2 berechnen möchten
#___Eingabe 4: Die Nummer, mit der angegeben wird, welche der vier Regeloperationen arithOpeNo verwenden soll
#_____ Eingabe 5: Option zur Auswahl, ob Brüche fracOption zugelassen werden sollen
#_____ Ausgabe: Ein Array, das das Ergebnis der Berechnung von zwei Zahlen neu speichert
###################################################

def renewDice(calcDice, ind1, ind2, arithOpeNo, fracOption):
  newDice = np.copy(calcDice) #Holen Sie sich eine Kopie von calcDice, ohne das Array zu überschreiben
  if newDice.shape[0] -1 > ind1 \
    and newDice.shape[0] -1 > ind2 \
    and ind1 != ind2:
    #ind1,Bereich, in dem ind2 weiße Würfel anzeigt(0 oder mehr neue Würfellänge-2 oder weniger)Wenn ind1 und ind2 unterschiedlich sind
      newDice[ind1] = arithOperator(newDice[ind1], newDice[ind2], arithOpeNo, fracOption)
      #Führt die vier von arithOpeNo angegebenen Regeln für den Wert des angegebenen Index aus
  else:
    for i in range(newDice.shape[0] - 1):
      newDice[i] = np.nan #Np alle Rechenelemente.Durch nan ersetzen
  newDice = np.delete(newDice, ind2)
  #Löschen Sie normalerweise den Wert von ind2 und ändern Sie die Länge des Würfelberechnungselement-Arrays.-1
  return newDice

# [Funktion 6] renewDNames()
#___Eingabe 1: Ein Zeichenarray mit Würfelwurf-Ergebnissen calcDNames
#_____ Eingabe 2: Der erste der beiden Indizes, die Sie für ind1 berechnen möchten
#_____ Eingabe 3: Der zweite der beiden Indizes, die Sie ind2 berechnen möchten
#___Eingabe 4: Die Nummer, mit der angegeben wird, welche der vier Regeloperationen arithOpeNo verwenden soll
#_____ Eingabe 5: Option zur Auswahl, ob Brüche fracOption zugelassen werden sollen
#_____ Ausgabe: Ein Array, das die Berechnung von zwei Zahlen aufzeichnet
###################################################

def renewDNames(calcDNames, ind1, ind2, arithOpeNo, fracOption):
  newDNames = np.copy(calcDNames) #Holen Sie sich eine Kopie von calcDNames, ohne das Array zu überschreiben
  if newDNames.shape[0] - 1 > ind1 \
    and newDNames.shape[0] -1 > ind2 \
    and ind1 != ind2:
    #ind1,Bereich, in dem ind2 weiße Würfel anzeigt(0 oder mehr neue Würfellänge-2 oder weniger)Wenn ind1 und ind2 unterschiedlich sind
      newDNames[ind1] = '(' + newDNames[ind1] + arithMarker(arithOpeNo) + newDNames[ind2] + ')'
      #Notieren Sie sich die vier von arithOpeNo angegebenen Regeln
  else:
    for i in range(newDNames.shape[0] - 1):
      newDNames[i] = '|???|' #Eine Aufzeichnung aller Rechenelemente|???|Ersetzen mit
  newDNames = np.delete(newDNames, ind2)
  #Löschen Sie normalerweise den Wert von ind2 und ändern Sie die Länge des Würfelberechnungselement-Arrays.-1
  return newDNames

### fanction trial START ###
calcDice = transForCalc(jmcDice, printOption=True)
calcDNames = makeCalcName(calcDice, printOption=True)
print('\n___index=1,Liste der berechneten Elemente, die durch Multiplikation des 4. aktualisiert wurden___\n', renewDice(calcDice, 1, 4, arithOpeNo=2, fracOption=False))
print('___index=1,Liste der charakterisierten Arrays, die durch Multiplikation des 4. Arrays aktualisiert wurden___\n', renewDNames(calcDNames, ind1=1, ind2=4, arithOpeNo=2, fracOption=False))
### fanction trial END ###
>Liste der berechneten Elemente:  [ 2.  3.  1.  4.  4. 55.]
>Liste der charakterisierten Arrays:  ['2' '3' '1' '4' '4' '55']
>
> ___index=1,Liste der berechneten Elemente, die durch Multiplikation des 4. aktualisiert wurden___
>  [ 2. 12.  1.  4. 55.]
> ___index=1,Liste der charakterisierten Arrays, die durch Multiplikation des 4. Arrays aktualisiert wurden___
>  ['2' '(3 * 4)' '1' '4' '55']

_________________________________________

■ Sie können jetzt zwei Indizes des Arrays angeben, das Sie berechnen möchten, Ihre bevorzugte Operation mit vier Regeln ausführen und das Array der Berechnungselemente und das charakterisierte Array der Berechnungsdatensätze aktualisieren.

■ Daher werden wir endlich eine Funktion definieren, die alle Lösungen in Jamaika durchsucht.

■ Die folgenden Konzepte werden bei der Lösungssuche verwendet.

[Schritt 1]5 weiße Würfelwürfe, dh 5 ganzzahlige Werte(1 oder mehr und 6 oder weniger)Wählen Sie zwei davon aus und ordnen Sie sie an (5P2)=Es werden 20 Kombinationen) und 4 Regeln (4 Arten der Addition, Subtraktion, Multiplikation und Division) durchgeführt.
[Schritt 2]obenstehendes[1]1 Zahl generiert in und die restlichen 3 ganzzahligen Werte(1 oder mehr und 6 oder weniger)Wählen Sie zwei davon aus und ordnen Sie sie an(4P2=12 Kombinationen)Führt vier Regeln aus (4 Arten der Addition, Subtraktion, Multiplikation und Division).
[Schritt 3]obenstehendes[1][2]Fahren Sie fort, bis eine Zahl im selben Ablauf wie ausgegeben wird.

■ Definieren Sie daher die folgende Funktion, die das Array "rekursiv" aktualisiert, um eine Lösungssuche durchzuführen.

[Funktion zur Suche nach einer Lösung] jmcReduce()
___Eingabe 1: Ein Array, das das Würfelwurfergebnis als Berechnungselement calcDice speichert
___Eingabe 2: Ein Zeichenarray mit Würfelwurf-Ergebnissen calcDNames
_____ Eingabe 3: Option zur Auswahl, ob Brüche fracOption zugelassen werden sollen
___Ausgabe: jmcReduce mit calcDice und calcDNames, die durch das Ergebnis einer Operation mit zwei Zahlen und vier Regeln des angegebenen Index als Argumente aktualisiert wurden()
___Wiederholung: Durchsuchen Sie alle Indizes, die weißen Würfeln entsprechen(Zwei Indizes i, j (i ≠ j)Scannen mit)
___Wiederholung: Der Schlüssel der Operation mit vier Regeln unter Verwendung von zwei Zahlen steht für Addition, Subtraktion, Multiplikation und Division 0, 1, 2,Suche alle mit 3(Scannen mit k)

** _____ [Referenzartikel] _____ ** [^ ref005] Task005 | Einfachstes Beispiel zum Verständnis rekursiver Funktionen ➡︎ Bei der rekursiven Definition der Suchfunktion habe ich darauf verwiesen, um die grundlegenden Eigenschaften der rekursiven Funktion neu zu verstehen.

task005_jmcReduce


# [Funktion zur Suche nach einer Lösung] jmcReduce()
#___Eingabe 1: Ein Array, das das Würfelwurfergebnis als Berechnungselement calcDice speichert
#___Eingabe 2: Ein Zeichenarray mit Würfelwurf-Ergebnissen calcDNames
#_____ Eingabe 3: Option zur Auswahl, ob Brüche fracOption zugelassen werden sollen
#___Ausgabe: jmcReduce mit calcDice und calcDNames, die durch das Ergebnis einer Operation mit zwei Zahlen und vier Regeln des angegebenen Index als Argumente aktualisiert wurden()
#___Wiederholung: Durchsuchen Sie alle Indizes, die weißen Würfeln entsprechen(Zwei Indizes i, j (i ≠ j)Scannen mit)
#___Wiederholung: Der Schlüssel der Operation mit vier Regeln unter Verwendung von zwei Zahlen steht für Addition, Subtraktion, Multiplikation und Division 0, 1, 2,Suche alle mit 3(Scannen mit k)
###################################################

def jmcReduce(calcDice, calcDNames, fracOption):
  newDice = np.copy(calcDice) #Duplizieren, um Eingabe 1 nicht zu ändern
  newDNames = np.copy(calcDNames) #Duplizieren, um Eingabe 2 nicht zu ändern
  for i in range(newDice.shape[0] - 1): #Der erste Index ist der Bereich der weißen Würfel(0 oder mehr NewDice-Array-Länge-2 oder weniger)Schleifenverarbeitung mit
    for j in range(newDice.shape[0] - 1): #Der zweite Index ist der Bereich der weißen Würfel(0 oder mehr NewDice-Array-Länge-2 oder weniger)Schleifenverarbeitung mit
      if i != j: #Wenn ind1=i, ind2=Wenn j nicht gleich ist
        for k in range(4): #Schlüsselnummer von vier Regeln arithOpeNo= 0,1,2,Iterative Variable k, die 3 durchläuft
          if arithOperator(newDice[i],newDice[j],k, fracOption) != np.nan: #Das Berechnungsergebnis ist np.Ich möchte das Array nur aktualisieren, wenn es nicht nan wird
            if newDice.shape[0] == 3 \
              and renewDice(newDice,i,j,k,fracOption)[0] == renewDice(newDice,i,j,k,fracOption)[1]:
              #Wenn die Länge des Arrays 3 ist, besteht es aus den verbleibenden zwei Berechnungselementen der weißen Würfel und einer Summe der schwarzen Würfel.
              #Wenn das Ergebnis der vier Berechnungsregeln mit der Summe der schwarzen Würfel übereinstimmt
                print(renewDNames(newDNames,i,j,k,fracOption)[0], ' = ', renewDNames(newDNames,i,j,k,fracOption)[1],' ______!!!!! This pattern is OK !!!!!______')
                #Berechnungsprotokoll der Berechnungselemente(Zeichenarray-Wert)Wird ausgegeben, um zu zeigen, dass es dem Wert der schwarzen Würfel entspricht!(Dies ist die Liste der Lösungen)
                break
            elif newDice.shape[0] == 3 \
              and renewDice(newDice,i,j,k,fracOption)[0] != renewDice(newDice,i,j,k,fracOption)[1]:
              #Wenn die Länge des Arrays 3 ist, besteht es aus den verbleibenden zwei Berechnungselementen der weißen Würfel und einer Summe der schwarzen Würfel.
              #Wenn das Ergebnis der vier Berechnungsregeln nicht mit der Summe der schwarzen Würfel übereinstimmt
                #print(renewDNames(calcDNames,i,j,k,fracOption),' ___This pattern is NG xxx___')
                #Berechnungsprotokoll der Berechnungselemente(Zeichenarray-Wert)Gibt aus und zeigt an, dass es nicht mit dem Wert der schwarzen Würfel übereinstimmt!(Es ist schwer zu sehen, deshalb kommentiere ich normalerweise aus)
                break
            else: #Wenn die Länge des Arrays immer noch größer als 3 ist
              jmcReduce(renewDice(newDice,i,j,k,fracOption),renewDNames(newDNames,i,j,k,fracOption),fracOption)
              #Aktualisieren Sie erneut rekursiv auf ein kürzeres Array und beginnen Sie von vorne
          else: #Das Berechnungsergebnis ist np.Wenn es nan wird, nichts tun und k aktualisieren
            continue
      else: #Wenn ind1=i, ind2=Aktualisieren Sie j, ohne etwas zu tun, wenn j gleich ist
        continue

### fanction trial START ###
print('\n______START______')
jmcReduce(calcDice, calcDNames, fracOption=False)
### fanction trial END ###
______START______
(((2 + (4 * 4)) * 3) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + ((2 + (4 * 4)) * 3))  =  55  ______!!!!! This pattern is OK !!!!!______
((3 * (2 + (4 * 4))) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + (3 * (2 + (4 * 4))))  =  55  ______!!!!! This pattern is OK !!!!!______
((3 * ((4 * 4) + 2)) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + (3 * ((4 * 4) + 2)))  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + (((4 * 4) + 2) * 3))  =  55  ______!!!!! This pattern is OK !!!!!______
((((4 * 4) + 2) * 3) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
(((2 + (4 * 4)) * 3) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + ((2 + (4 * 4)) * 3))  =  55  ______!!!!! This pattern is OK !!!!!______
((3 * (2 + (4 * 4))) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + (3 * (2 + (4 * 4))))  =  55  ______!!!!! This pattern is OK !!!!!______
((3 * ((4 * 4) + 2)) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + (3 * ((4 * 4) + 2)))  =  55  ______!!!!! This pattern is OK !!!!!______
(1 + (((4 * 4) + 2) * 3))  =  55  ______!!!!! This pattern is OK !!!!!______
((((4 * 4) + 2) * 3) + 1)  =  55  ______!!!!! This pattern is OK !!!!!______
_______END_______

Berücksichtigung in der ersten Runde

Ergebnis

■ Dieses Mal suchte ich nach einer Lösung, während ich das Array mit der rekursiv definierten Funktion jmcReduce () ** schrittweise auf eine kürzere Zeit aktualisierte.

■ Infolgedessen ** sind alle Ausgabelösungen korrekt **, und ich denke, dass zumindest einige der jamaikanischen Lösungen, die festgelegt werden sollten, vorgestellt werden können.

Problem

_______ [1] Mehrere Lösungen werden als Bedeutung der Formel _______ dupliziert.

■ Insbesondere bei Lösungen mit Addition und Multiplikation wurden mehrere Lösungsgruppen mit unterschiedlicher Reihenfolge der vier Regeln angezeigt, obwohl sie dieselbe mathematische Bedeutung haben. Beispiel) (((2 + (4 * 4)) * 3) + 1) = 55 Die Lösung ((((4 * 4) + 2) * 3) + 1) = 55 hat dieselbe mathematische Bedeutung.

■ Um dies zu verbessern, muss die Behandlung von Addition (Summe, Funktion add ()) und Multiplikation (Produkt, Multiplikation ()) geändert werden.

_______ [2] Ich habe mehrere identische Lösungen vorgestellt _______

■ In diesem Berechnungsbeispiel sehen Sie, dass die beiden Gruppen genau dieselbe Lösung präsentiert haben. Beispiel) ((((4 * 4) + 2) * 3) + 1) = 55 Die Lösung ((((4 * 4) + 2) * 3) + 1) = 55 hat genau das gleiche Aussehen und die gleiche mathematische Bedeutung.

■ Wenn die gleiche Zahl in den ** weißen Würfeln vorhanden ist, wird das Berechnungsergebnis wahrscheinlich bei wiederholten ** </ strong> mehrmals dupliziert Ich denke Schriftart>.

_______ [3] Konnten Sie alle Lösungen finden? _______

■ Im Allgemeinen gibt es einige Arten von jamaikanischen Lösungen in einem Würfelsatz.

■ Einige Lösungen, die Subtraktion und Division verwenden, können darin enthalten sein.

■ Als ich dieses jmcReduce mit verschiedenen Arten von Würfelergebnissen ausprobierte, fragte ich mich: "Ist es nicht möglich, eine Lösung durch Subtraktion oder Division zu finden?" (Besonders Teilung)

■ Daher habe ich jmcReduce am Beispiel des Würfelwurf-Ergebnisses und der Lösung von Jamaika im folgenden Referenzartikel ausprobiert. Beispiel) Weiße Würfel 2 4 2 4 5 Schwarze Würfel 20 3 Andererseits können beispielsweise die folgenden vier Lösungen in Betracht gezogen werden. (Es ist ein Muster, das Addition, Subtraktion, Multiplikation und Division gleichmäßig verwendet.)     (2 × 6) + 2 + 4 + 5 = 23     ((6 + 4) × 2) + 5 - 2 = 23     4 × (6 + (2 ÷ 2)) - 5 = 23     5 × (6 ÷ 2) + (4 × 2) = 23

** _____ [Referenzartikel] _____ ** [^ ref006] Überprüfen Sie | Erweiterte Implementierungsseite für Lösungssuche in Jamaika ➡︎ Eine Site, die nur eine Lösungssuche nach Jamaika durchführt. (Mit Option zur Verwendung von Brüchen)

Liste der berechneten Elemente:  [ 2.  6.  2.  4.  5. 23.]
Liste der charakterisierten Arrays:  ['2' '6' '2' '4' '5' '23']

______START______
((((2 * 6) + 2) + 4) + 5)  =  23  ______!!!!! This pattern is OK !!!!!______
(5 + (((2 * 6) + 2) + 4))  =  23  ______!!!!! This pattern is OK !!!!!______
((((2 * 6) + 2) + 5) + 4)  =  23  ______!!!!! This pattern is OK !!!!!______
(4 + (((2 * 6) + 2) + 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((4 + ((2 * 6) + 2)) + 5)  =  23  ______!!!!! This pattern is OK !!!!!______

===== Ausgelassen Ausgelassen Ausgelassen =====

(5 + (2 + ((2 * 6) + 4)))  =  23  ______!!!!! This pattern is OK !!!!!______
(((2 * 6) + 4) + (2 + 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + 5) + ((2 * 6) + 4))  =  23  ______!!!!! This pattern is OK !!!!!______
(2 + (5 + ((2 * 6) + 4)))  =  23  ______!!!!! This pattern is OK !!!!!______
((5 + ((2 * 6) + 4)) + 2)  =  23  ______!!!!! This pattern is OK !!!!!______
(((2 * 6) + 4) + (5 + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((5 + 2) + ((2 * 6) + 4))  =  23  ______!!!!! This pattern is OK !!!!!______
((((2 * 6) + 5) + 2) + 4)  =  23  ______!!!!! This pattern is OK !!!!!______
(4 + (((2 * 6) + 5) + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((((2 * 6) + 5) + 4) + 2)  =  23  ______!!!!! This pattern is OK !!!!!______
(2 + (((2 * 6) + 5) + 4))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + ((2 * 6) + 5)) + 4)  =  23  ______!!!!! This pattern is OK !!!!!______
(4 + (2 + ((2 * 6) + 5)))  =  23  ______!!!!! This pattern is OK !!!!!______

===== Ausgelassen Ausgelassen Ausgelassen =====

(((5 + 4) + (2 * 6)) + 2)  =  23  ______!!!!! This pattern is OK !!!!!______
((2 * 6) + ((5 + 4) + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
(((5 + 4) + 2) + (2 * 6))  =  23  ______!!!!! This pattern is OK !!!!!______
((((2 + 2) * 6) - 5) + 4)  =  23  ______!!!!! This pattern is OK !!!!!______
(4 + (((2 + 2) * 6) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
(((6 * (2 + 2)) - 5) + 4)  =  23  ______!!!!! This pattern is OK !!!!!______
(4 + ((6 * (2 + 2)) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + 2) + ((6 * 4) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
(((6 * 4) - 5) + (2 + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + 2) + ((4 * 6) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
(((4 * 6) - 5) + (2 + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((((2 * 2) * 6) - 5) + 4)  =  23  ______!!!!! This pattern is OK !!!!!______
(4 + (((2 * 2) * 6) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
(((6 * (2 * 2)) - 5) + 4)  =  23  ______!!!!! This pattern is OK !!!!!______
(4 + ((6 * (2 * 2)) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 * 2) + ((6 * 4) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
(((6 * 4) - 5) + (2 * 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 * 2) + ((4 * 6) - 5))  =  23  ______!!!!! This pattern is OK !!!!!______
(((4 * 6) - 5) + (2 * 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((((2 + 4) * 2) + 6) + 5)  =  23  ______!!!!! This pattern is OK !!!!!______

===== Ausgelassen Ausgelassen Ausgelassen =====

((6 * 2) + (4 + (2 + 5)))  =  23  ______!!!!! This pattern is OK !!!!!______
((4 + (2 + 5)) + (6 * 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 * 6) + (4 + (2 + 5)))  =  23  ______!!!!! This pattern is OK !!!!!______
((4 + (2 + 5)) + (2 * 6))  =  23  ______!!!!! This pattern is OK !!!!!______
((((6 - 2) * 4) + 2) + 5)  =  23  ______!!!!! This pattern is OK !!!!!______
(5 + (((6 - 2) * 4) + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((((6 - 2) * 4) + 5) + 2)  =  23  ______!!!!! This pattern is OK !!!!!______
(2 + (((6 - 2) * 4) + 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + ((6 - 2) * 4)) + 5)  =  23  ______!!!!! This pattern is OK !!!!!______
(5 + (2 + ((6 - 2) * 4)))  =  23  ______!!!!! This pattern is OK !!!!!______
(((6 - 2) * 4) + (2 + 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + 5) + ((6 - 2) * 4))  =  23  ______!!!!! This pattern is OK !!!!!______
(2 + (5 + ((6 - 2) * 4)))  =  23  ______!!!!! This pattern is OK !!!!!______
((5 + ((6 - 2) * 4)) + 2)  =  23  ______!!!!! This pattern is OK !!!!!______
(((6 - 2) * 4) + (5 + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
((5 + 2) + ((6 - 2) * 4))  =  23  ______!!!!! This pattern is OK !!!!!______
(((6 - 2) * 4) + (2 + 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + 5) + ((6 - 2) * 4))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + 5) + (4 * (6 - 2)))  =  23  ______!!!!! This pattern is OK !!!!!______
((4 * (6 - 2)) + (2 + 5))  =  23  ______!!!!! This pattern is OK !!!!!______
((2 + (4 * (6 - 2))) + 5)  =  23  ______!!!!! This pattern is OK !!!!!______

===== Ausgelassen Ausgelassen Ausgelassen =====

(((5 + 4) + 2) + (2 * 6))  =  23  ______!!!!! This pattern is OK !!!!!______
((6 * 2) + ((5 + 4) + 2))  =  23  ______!!!!! This pattern is OK !!!!!______
(((5 + 4) + 2) + (6 * 2))  =  23  ______!!!!! This pattern is OK !!!!!______

_______END_______

Prüfergebnis

■ Aufgrund der Probleme [1] und [2] ist das Ausgabeergebnis sehr lang, daher habe ich den Mittelteil weggelassen.

■ Als Ergebnis wurde die Lösung mit der Subtraktion ** ausgegeben, die Lösung jedoch mit der Division ** </ font> ** Es gab keine Ausgabe. ** </ font>

■ Mögliche Ursachen sind eine Fehlfunktion von fracOption oder ein Fehler in der Definition von arisOperator. Als das Ergebnis der Operation mit vier Regeln in Task 004 ausgegeben wurde, wurde 6/6 auch als 1 ausgegeben Die genaue Ursache wurde nicht untersucht.

Herausforderung bis zum nächsten Mal

_______ [1] Bei Addition / Multiplikation führen Sie diejenigen mit dem gleichen Ergebnis vor. _______

■ Insbesondere bei Lösungen mit Addition und Multiplikation wurden mehrere Lösungsgruppen mit unterschiedlicher Reihenfolge der vier Regeln angezeigt, obwohl sie dieselbe mathematische Bedeutung haben.

■ Können wir beim Definieren der Funktion add (), der Funktion multiplly (), der Funktion arisoprerator () oder beim Schleifen der Funktion jmcReduce () eine Möglichkeit finden, die Menge von i und j mit denselben Additions- und Multiplikationsergebnissen im Voraus zu eliminieren? ??

■ Es kann schwierig sein, dies durch eine rekursive Funktionsdefinition zu lösen.

*** Nach der Ausgabe der Anzahl möglicher Kombinationen von 2 Zahlen und 4 Regeloperationen im Voraus und des Ergebnisses ist die Menge der zu durchsuchenden Arrays statisch (statisch). Ich dachte, dass es effektiv wäre, ein gespeichertes Array vorzubereiten und es zu lösen *** </ font>.

_______ [2] Teilungsfehler verbessern ________

■ Ich kenne die genaue Ursache nicht, konnte die Lösung jedoch nicht mit der Division ** ausgeben. ** </ font>.

■ Ich möchte zunächst die genaue Ursache untersuchen und gleichzeitig die Definitionen in Bezug auf die vier Regeln und den Algorithmus für die Lösung überprüfen.

Vorschau beim nächsten Mal

Dieses Mal forderte ich die Lösung von Jamaika heraus, indem ich die Funktionsdefinition der Vier-Regeln-Operation und die rekursive Scan-Funktion in das Berechnungselement-Array implementierte.

Das nächste Mal, nachdem das diesmal aufgetretene Problem behoben wurde, *** Definieren Sie eine Funktion zum statischen Ergänzen, Generieren und Verarbeiten von Lösungskandidaten, ohne eine rekursive Suche durchzuführen. </ font> *** Ich möchte es auch versuchen. ..

Der Titel lautet ** vol.04 "Eine Lösung in Jamaika-Runde 2 finden" **.

REF. Grundlegende Informationen zu Jamaika

Frage 1: Was ist das arithmetische Lehrmittel "Jamaica" </ font>?

A1. "Jamaica" wird als arithmetisches Lehrmittel mit dem Thema "Zahlenspiel" unter Verwendung von Würfeln </ font> verkauft.

■ *** Dies ist ein allgemeines Produkt, das auch auf Online-Shopping-Websites wie Amazon und Yahoo! Shopping verkauft wird. *** *** ➡︎ Klicken Sie hier, um zur Amazon-Verkaufsseite zu gelangen (https://www.amazon.co.jp/dp/4902756161/ref=cm_sw_r_tw_dp_U_x_XrEPEbCJ5VRST). ➡︎ Das Bild finden Sie in der folgenden Abbildung (zitiert von der obigen Seite). qiita1_jamaica_red.jpg

■ *** Es gibt zwei Arten von Würfeln, Weiß und Schwarz, und 5 und 2 sind enthalten. *** *** ➡︎ Ein weißer Würfel x 5 und ein schwarzer Würfel x 1 sind am Ringteil angebracht, und ein schwarzer Würfel x 1 ist am Mittelteil angebracht.

Farbe/ Color Menge/ amount Nummern aufgelistet/ Numbers
Weiß/ white 5 Stücke/ 5 dice 1, 2, 3, 4, 5, 6
schwarz/ black 1 Stück/ 1 dice 1, 2, 3, 4, 5, 6
schwarz/ black 1 Stück/ 1 dice 10, 20, 30, 40, 50, 60

Frage 2: Wie spielt Jamaika </ font>?

A2. Führen Sie vier Regeln </ font> aus, indem Sie jeden der weißen Würfel x 5 Zahlen einmal verwenden, um die Summe der schwarzen Würfel x 2 Zahlen zu erhalten.

Wenn zum Beispiel der weiße Würfelwurf (1,2,3,5,5) und der schwarze Würfelwurf (10,6) ist, Sie können alle Würfel der weißen Würfel addieren, um die Gleichung 1 + 2 + 3 + 5 + 5 = 10 + 6 zu erstellen.

qiita002_jamaica_sample_sizedown.png

■ *** Weiße Würfel x 5 Zahlen können jeweils nur einmal verwendet werden. *** *** ➡︎ Wenn der weiße Würfelwurf beispielsweise (2,4,5,3,3) ist, kann er zur Berechnung verwendet werden. 2 ist 1 Mal, 3 ist 2 Mal, 4 ist 1 Mal, 5 ist 1 Mal. Nicht mehr verwenden. (Sie können 2 nicht zweimal oder 3 dreimal verwenden.) ➡︎ Natürlich ist ** "Nicht die angegebene Anzahl von Malen verwenden" auch ein Gesetz **. (Im obigen Beispiel können Sie 3 nicht nur einmal verwenden.)

■ *** Vier Regeln sind Addition, Subtraktion, Multiplikation und Division </ font>. *** *** ➡︎ ** "Addition" ** </ font> ist "Addition", dh ** "Addition" **. Berechnen Sie beispielsweise die Summe (Ergebnis der Addition) wie 2 + 3 = 5. </ font> ➡︎ ** "Reduzieren" ** </ font> ist "Reduzieren", dh ** "subtrahieren" **. Berechnen Sie beispielsweise die Differenz (Ergebnis der Subtraktion) wie 5-2 = 3. </ font> ➡︎ ** "Multiplizieren" ** </ font> ist "Multiplikator", dh ** "Multiplizieren" **. Berechnen Sie beispielsweise das Produkt (Ergebnis der Multiplikation) wie 3 × 4 = 12. </ font> ➡︎ ** "Ausschluss" ** </ font> ist "Ausschluss", dh ** "Teilung" **. Berechnen Sie beispielsweise den Quotienten (Teilungsergebnis *) wie 4/2 = 2. </ font>

  • Es gibt Regeln, die nur teilbare Operationen zulassen, dh Regeln, die keine irreduziblen Brüche zulassen, und Regeln, die irreduzible Brüche zulassen. [1] ** Im Fall einer Regel, die keine irreduziblen Brüche zulässt ** Wenn die weißen Würfel würfeln (2,4,6,3,5), können Sie 6/3 = 2 berechnen, aber Das Ergebnis 6/4 = 3/2 ist nicht verfügbar. [2] ** Im Fall einer Regel, die Dinge erlaubt, bei denen es sich um kontrahierte Brüche handelt ** Wenn die weißen Würfel würfeln (2,4,6,3,5), kann nicht nur die Berechnung 6/3 = 2 durchgeführt werden, sondern auch Das Ergebnis 6/4 = 3/2 ist ebenfalls verfügbar.
  • ** Einige Würfelwürfe können ohne Verwendung der kontrahierten Fraktionen nicht gelöst werden. ** </ font> Beispiel) Wenn die weißen Würfel (2,2,4,4,6) und die schwarzen Würfel (30,3) würfeln Die Gleichung {(2- 2/4) + 4} x 6 = 30 + 3 gilt. </ font>

■ *** Die vier Betriebsregeln können in beliebiger Reihenfolge ausgeführt werden. *** *** ➡︎ Sie können die beiden Zahlen zuerst addieren und dann mit einer anderen Zahl multiplizieren. Mit anderen Worten, Sie können überall beliebig oft Klammern verwenden. Beispiel) Wenn die weißen Würfel (3,6,4,4,1) und die schwarzen Würfel (20,6) würfeln Die Gleichung {(3 + 6) + (4 × 4)} + 1 = 20 + 6 gilt. </ font>

Zusammenfassung des Referenzartikels

[^ ref001]: Erinnerung | Reproduzieren wir den vorherigen Artikel des arithmetischen Lehrmittels "Jamaica" (Band 01) [^ ref002]: Erinnerung | Reproduzieren wir den vorherigen Artikel des arithmetischen Lehrwerkzeugs "Jamaica" (Band 02) [^ ref003]: Task004 | [Was ist NAN? ] Bedeutung und Verwendung [^ ref004]: Task005 | Wie man eine bedingte Verzweigung mit einer if-Anweisung in Python schreibt [^ ref005]: Task005 | Einfachstes Beispiel zum Verständnis rekursiver Funktionen [^ ref006]: Überprüfen Sie | Erweiterte Implementierungsseite für Lösungssuche in Jamaika