最短経路「22年 岩手大 教育・農 3」をWolframAlphaとexcelとsympyでやってみたい。 

「→が7個と↑が7個」の同じものを含む順列

オリジナル

https://kamelink.com/blog/2022/10/14/16-2-22-iwatedai-kyouiku-nou-3/

上と同じです。大学入試数学問題集成＞【3】

https://mathexamtest.web.fc2.com/2022/202210061/2022100610100mj.html#top-0110

# 公式サイト
問題と解答

https://www.iwate-u.ac.jp/upload/images/22-042.nou_sugaku_1.pdf#page=4

https://www.iwate-u.ac.jp/upload/images/22-050.zenki_kaitourei_1.pdf#page=4

https://www.iwate-u.ac.jp/admission/disclosure/past.html

# WolframAlphaのウオーミングアップ
**<方法1>、<方法2>、<方法3>について、(違い？)呼び方がありますか？**
**A地点→B地点（3432通り)**
<方法1>binomial(7+7,7)

https://www.wolframalpha.com/input?i=binomial%287%2B7%2C7%29&lang=ja

<方法2>binomial(7＋7,7)＊binomial(7,7)

https://www.wolframalpha.com/input?i=binomial%287%EF%BC%8B7%2C7%29%EF%BC%8Abinomial%287%2C7%29&lang=ja

<方法3>factorial(7+7)/(factorial(7)*factorial(7))

https://www.wolframalpha.com/input?i=factorial%287%2B7%29%2F%28factorial%287%29*factorial%287%29%29&lang=ja

https://www.wolframalpha.com/input?i=%287%2B7%29%21%2F%287%21*7%21%29&lang=ja

# WolframAlphaで(kamelink様と公式サイトの方法で)

(1) N_APとN_PB
factorial(2+4)/(factorial(2)*factorial(4))　*　factorial(5+3)/(factorial(5)*factorial(3)) 

https://www.wolframalpha.com/input?i=factorial%282%2B4%29%2F%28factorial%282%29*factorial%284%29%29%E3%80%80*%E3%80%80factorial%285%2B3%29%2F%28factorial%285%29*factorial%283%29%29+&lang=ja

(2)入力が最大文字数を超えています．がでますが、計算します。
```
840
+1*factorial(2+7)/(factorial(2)*factorial(7))
+factorial(5+5)/(factorial(5)*factorial(5))*factorial(2+2)/(factorial(2)*factorial(2))
-factorial(2+4)/(factorial(2)*factorial(4))*factorial(3+1)/(factorial(3)*factorial(1))*factorial(2+2)/(factorial(2)*factorial(2))
-1*1*factorial(2+2)/(factorial(2)*factorial(2))
```
840+36+1512-360-6=2022

(2)!を使って

https://www.wolframalpha.com/input?i=840+%2B1*%282%2B7%29%21%2F%282%21*7%21%29+%2B%285%2B5%29%21%2F%285%21*5%21%29*%282%2B2%29%21%2F%282%21*2%21%29+-%282%2B4%29%21%2F%282%21*4%21%29*%283%2B1%29%21%2F%283%21*1%21%29*%282%2B2%29%21%2F%282%21*2%21%29+-1*1*%282%2B2%29%21%2F%282%21*2%21%29&lang=ja


# excelの計算式で(kamelink様の「和の法則」より)
操作の方が早いかもしれません。以下に、vbaのマクロ記録があります。
概略説明。
(0)
①A8に1を入力する。
②8行目は、左参照コピー。(B列目～H列目)
➂1列目は、下参照コピー。(7行目～1行目)
④B7は,計算式=A7+B8
⑤B7計算式をC7～H7へコピー
⑥B7からH7を,6行目から1行目へコピー
⑦H1が3432になります。

(1)
⑧A1:B3範囲をクリア。D5:H8範囲をクリア
⑨H1が840になります。

(2)
⑧C4を0,F8を0,F3を0
⑨H1が1410になります。

# 操作方法を、excelVBAで(kamelink様の「和の法則」より)
```vb
Sub Macro0()
    Range("A8").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("B8").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=RC[-1]"
    Range("B8").Select
    Selection.Copy
    Range("B8:H8").Select
    ActiveSheet.Paste
    Range("A8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A7").Select
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=R[1]C"
    Range("A7").Select
    Selection.Copy
    Range("A1:A7").Select
    Range("A7").Activate
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B7").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=RC[-1]+R[1]C"
    Range("B7").Select
    Selection.Copy
    Range("B7:H7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Range("B1:H7").Select
    Range("B7").Activate
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("H1").Select
End Sub
’H1の値が3432
```
(1)Macro0を実行後、以下のMacro1を実行して下さい。
```vb
Sub Macro1()
    Range("A1:B3").Select
    Selection.ClearContents
    Range("D5:H8").Select
    Selection.ClearContents
    Range("H1").Select
End Sub
’H1の値が840
```
(2)Macro0を実行後、以下のMacro2を実行して下さい。
```vb
Sub Macro2()
    Range("C4").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("F8").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("F3").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("H1").Select
End Sub
’H1の値が1410
```


# sympyで(kamelink様の「和の法則」で)
勉強中。Rのほうがいいですか？

# sympyで(Permutation,Combination関数を使って)
勉強中。

# sympyで(ループが一番?)
xxxx以下うごきません。勉強中。いい方法がないですか？MemoryError?
itertoolsでした。
(1)
```python
import itertools
all = itertools.product('↑↑↑↑↑↑↑→→→→→→→', repeat=14)
print(list(all))
ip=0
n=0
for x in all:
    n=n+1
    if (n % 10000==0): print(n)
    moji_AP=x[0]+x[1]+x[2]+x[3]+x[4]+x[5]
    if(moji_AP.count('→') ==2 and moji_AP.count('↑') ==4 ):
       ip=ip+1
print(iP)
```

(2)勉強中

# 参考


https://cse.google.com/cse?cx=a8908fbc24340ebc5&q=切り口&oq=切り口&gs_l=partner-web.12..0i512l9j0i4i512i37.7329.20255.0.21185.13.13.0.0.0.0.255.2398.0j8j5.13.0.csems%2Cnrl%3D10...0....1j4.34.partner-web..1.12.2157.LSeACBsRfcc


https://linky-juku.com/shortest-route/

https://wearewhatwerepeatedlydo.com/junretsu02/

https://reference.wolfram.com/language/ref/Binomial.html.ja?source=footer

https://docs.sympy.org/latest/modules/combinatorics/permutations.html

＞どうも同じものを含む順列はプログラムは、しにくい…。

https://qiita.com/mrrclb48z/items/3a02393be3395ef2cc02

# 感想
答えの値は、出題者のひと工夫?(2)が解けた受験生は、ホットしたかも。
excelが、最短距離の経路の問題解決には、一番です。excelで、「和の法則」を使えば、簡単でした。
vbaも、あえて作りました。マクロ記録です。n*nに対応したいです。

試験では、「和の法則」で答案用紙に書く強者がいるかもしれません。
8×8は、段数が多すぎてたいへんと思いましたが、excelなら関係ありませんでした。