LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-10-15

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

オリジナル

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

公式サイト

問題と解答

WolframAlphaのウオーミングアップ

<方法1>、<方法2>、<方法3>について、(違い?)呼び方がありますか?
A地点→B地点(3432通り)
<方法1>binomial(7+7,7)

<方法2>binomial(7+7,7)*binomial(7,7)

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

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

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

(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)!を使って

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様の「和の法則」より)

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を実行して下さい。

Sub Macro1()
    Range("A1:B3").Select
    Selection.ClearContents
    Range("D5:H8").Select
    Selection.ClearContents
    Range("H1").Select
End Sub
H1の値が840

(2)Macro0を実行後、以下のMacro2を実行して下さい。

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)

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)勉強中

参考

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

感想

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0