はてなダイアリーの記事をはてなブログへインポートしてみた。

 昨日、はてなダイアリーの記事をはてなブログへインポートしてみました。(^_^;
 Step2とStep3は、すぐに終わりましたが、Step1は、かなり時間がかかりました。朝に始めて夜頃には終わっていました。
 元の「rscの日記」にアクセスしようとしてもできなくなりました。(^_^;
 それから、数式などがうまく表示できないところがあるようです。(^_^;

※参考URL
はてなダイアリーからのインポート(ブログの移行) - はてなブログ ヘルプ
http://rsc.hatenablog.com/
http://d.hatena.ne.jp/rsc96074/

はてなブログ Perfect GuideBook

はてなブログ Perfect GuideBook

ネットで見つけた小銭の払い方の問題をPythonで解いてみた。

 ネットで見つけた小銭の払い方の問題Pythonで解いてみました。(^_^;
 問題を要約すると次の通りです。

 10円玉、50円玉、100円玉、500円玉の硬貨を使って、1000円を支払う方法は何通りあるか。ただし、使われない硬貨はあってもよいが、支払う硬貨の総数は最大15枚とする。

 元ネタは、『プログラム脳を鍛える数学パズル』のQ05のようです。(^_^;
 拙ブログの記事「知恵袋で見つけた小銭の払い方の問題をPythonで解いてみた。」の再帰プログラムPayment1.pyを雛形にして作ってみました。(^_^;
 プログラムでは、元の関数の引数にリストuを追加して、500円玉、100円玉、50円玉、10円玉の順に硬貨の枚数を得ています。

● Payment2.py

# coding: UTF-8
# Payment2.py

from time import time

def payCoin(n,s,Coin,u):
    if s%Coin[0]!=0: return -1
    if n< 0: return 0
    if n==0:
        u+=[s//Coin[0]]
        if sum(u)> 15: return 0
        print(u)
        return 1

    r,t,m = 0,s,s//Coin[n]
    for i in range(m+1):
##        if n==1: return r+(1+m)
##        if n==2: return r+(1+m)*(1-m+s//Coin[1])   # 省略可
        if i> 15: continue
        r+=payCoin(n-1,t,Coin,u+[i])
        t-=Coin[n]
    return r

def main():
    tm = time()  # Timer Start
    M = 1000
    lCoins = [10,50,100,500] # 昇順ソート && M%lCoins[0]==0
    N = len(lCoins)
    print(payCoin(N-1,M,lCoins,[]))
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

[0, 5, 10, 0]
[0, 6, 8, 0]
[0, 7, 6, 0]
[0, 8, 4, 0]
[0, 9, 1, 5]
[0, 9, 2, 0]
[0, 10, 0, 0]
[1, 0, 9, 5]
[1, 0, 10, 0]
[1, 1, 7, 5]
[1, 1, 8, 0]
[1, 2, 5, 5]
[1, 2, 6, 0]
[1, 3, 3, 5]
[1, 3, 4, 0]
[1, 4, 0, 10]
[1, 4, 1, 5]
[1, 4, 2, 0]
[1, 5, 0, 0]
[2, 0, 0, 0]
20
Runtime : 0.000 [sec]

※参考URL
支払う硬貨の組合せの数の問題をJavaで解いてみた。
支払う硬貨の組合せの数の問題をJavaで解いてみた。(2)
知恵袋で見つけた小銭の払い方の問題をPythonで解いてみた。

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問









PyScripter-v3.4をインストールしてみた。

 PyScripter-v3.4をSourceforgeからインストールしてみました。(^_^;
 ちなみに、日本語化は、「View」→「Language」→「Japanese」をクリックです。
 それから、PyScripterのBlogによると、Anacondaも使えるようなので、Anaconda 5.2 For WindowsPython 3.6 versionも、32-Bit Graphical Installerを使ってインストールしてみました。
 「実行(R)」→「Python Versions」→「Setup Python...」→「+」でAnacondaを登録しました。Python 2.7はPyScripterをインストールしたときに自動で登録されていたので、Anacondaも先にインストールしていたら、自動で登録してくれたのかな。(^_^;
 そうえいば、Anacondaをインストールするとき、まだ使っていませんが、VS Codeもインストールしました。(^_^;

そこはかとなくいい感じの曲

 そこはかとなくいい感じなので、はってみました。(^_^;
小羽 广场舞

齐齐 劲爆DJ時尚舞 夜色 粵語超級好聽

P.S.
 皆さん、回答ありがとうございました。質問してみたら、一曲目は、Elektronomiaの「Fire」だとわかりました。二曲目は、「夜色」かな。

Elektronomia - Fire

【HD】藝濤 梁劍東 - 夜色[經典原曲][歌詞字幕][完整高清音質]Yi Tao & Liang Jiandong - Night

※参考URL
http://q.hatena.ne.jp/1535104742
https://oshiete.goo.ne.jp/qa/9705398.html

知恵袋の油分け算の問題をPythonで解いてみた。(2)

 前回の続きです。Pythonなら楽なので、matplotlibを使って、グラフを描いてみました。前回のプログラムに続けてもいいですが、結果のデータだけ取り出して続けました。(^_^;
 それから、「油分け算」は、英語で「Three Jugs Problem」とも呼ばれているようなので、プログラム名をこれに由来するものに変更してみました。(^_^;

● ThreeJugsProb1.py

# coding: UTF-8
# ThreeJugsProb1.py
# 油分け算

import matplotlib.pyplot as plt

def main():
    ans = [
        [16, 0, 0],[ 7, 9, 0],[ 7, 2, 7],[14, 2, 0],[14, 0, 2],[ 5, 9, 2],
        [ 5, 4, 7],[12, 4, 0],[12, 0, 4],[ 3, 9, 4],[ 3, 6, 7],[10, 6, 0],
        [10, 0, 6],[ 1, 9, 6],[ 1, 8, 7],[ 8, 8, 0],[ 8, 1, 7],[15, 1, 0],
        [15, 0, 1],[ 6, 9, 1],[ 6, 3, 7],[13, 3, 0],[13, 0, 3],[ 4, 9, 3],
        [ 4, 5, 7],[11, 5, 0],[11, 0, 5],[ 2, 9, 5],[ 2, 7, 7],[ 9, 7, 0],
        [ 9, 0, 7],[16, 0, 0]
    ]
    g = ans.index([ 8, 8, 0])
    # グラフの作成
    # 前半2列目と3列目を取り出す
    x = [ans[n][1] for n in range(g+1)]
    y = [ans[n][2] for n in range(g+1)]
    plt.plot(x, y)
    plt.plot(x, y, 'ro')

    plt.title('Three Jugs Problem (1)')
    plt.xlabel('Amount in 9L-Jug B')
    plt.ylabel('Amount in 7L-Jug C')

    plt.vlines(range(10), 0, 7, color='r', linestyles="-")
    plt.hlines(range( 8), 0, 9, color='r', linestyles="-")
    plt.xticks(range(10))
    plt.yticks(range( 8))
    for n in range(len(x)):
        plt.text(x[n],y[n],'(%d)'%n, va='bottom')

    plt.xlim([-1,10])
    plt.ylim([-1, 8])
    plt.show()
    # 後半2列目と3列目を逆順に取り出す
    x = [ans[n][1] for n in reversed(range(g,len(ans)))]
    y = [ans[n][2] for n in reversed(range(g,len(ans)))]
    plt.plot(x, y)
    plt.plot(x, y, 'ro')

    plt.title('Three Jugs Problem (2)')
    plt.xlabel('Amount in 9L-Jug B')
    plt.ylabel('Amount in 7L-Jug C')

    plt.vlines(range(10), 0, 7, color='r', linestyles="-")
    plt.hlines(range( 8), 0, 9, color='r', linestyles="-")
    plt.xticks(range(10))
    plt.yticks(range( 8))
    for n in range(len(x)):
        plt.text(x[n],y[n],'(%d)'%n, va='bottom')

    plt.xlim([-1,10])
    plt.ylim([-1, 8])
    plt.show()

if __name__ == '__main__':
    main()

●実行結果

※参考URL
http://mathworld.wolfram.com/ThreeJugProblem.html
知恵袋の油分け算の問題をPythonで解いてみた。
[Python] matplotlibによるグラフ描画 - TIPS - FC2
Matplotlibでのグラフ描画まとめ | 健忘症の備忘録
matplotlib入門 - りんごがでている
1.4. Matplotlib: 作図 − Scipy lecture notes
matplotlibで、グラフにテキストを入れる。 - ぱたヘネ









知恵袋の油分け算の問題をPythonで解いてみた。

 知恵袋の油分け算の問題Pythonで解いてみました。(^_^;

 7Lと9Lの空の容器と水の入った大きな水槽がある。これらの容器を使って水をくんだり移し替えたリする操作を繰り返し、9Lの容器に8Lの水を入れるためには、最低何回の操作が必要であるか。
 ただし、1回の操作とは、次のア〜ウのうちいずれか一つだけであるものとする。
ア どちらか一方の容器で、大きな水槽から水をくむ。
イ どちらか一方の容器から、他方の容器に水を移し替える。
ウ どちらか一方の容器から、大きな水槽に水を移し替える。

 「8Lずつに分ける」じゃなくて、「9Lの容器に8Lの水を入れる」というのがポイントですね。(^_^;
 プログラムは、以前、Javaで作ったプログラムを参考にしました。
 ちなみに、「do..whileの代替」構文で、条件を前の方に持ってきたのは、
「if t==[]: continue」を使えるようにするためです。(^_^;

● MeasuringWithJugs1.py

# coding: UTF-8
# MeasuringWithJugs1.py
# 油分け算

from time import time

class Point:
    def __init__(self, x, y,dx,dy,mx,my):
        self. x,self. y =  x,  y    # 中小容器中の量
        self.dx,self.dy = dx, dy    # 増分
        self.mx,self.my = mx, my    # 中小容器に入る最大量
        self.z = (mx+my)-(x+y)      # 大容器中の量

    def nextTurn(self):
        t = self.mx+self.my
        u,v = self.x+self.dx,self.y+self.dy
        if   u> self.mx or (v< 0 and u!=0):
            self.dx,self.dy = -1, 1
        elif v> self.my:
            self.dx,self.dy =  0,-1
        elif u< 0:
            self.dx,self.dy =  1, 0
        self.x+=self.dx; self.y+=self.dy
        self.z = t-self.x-self.y
        return self.isInArea()

    def isInArea(self):
        return 0<=self.x<=self.mx and 0<=self.y<=self.my

    def isGoal(self,a,b):
        return self.x==a and self.y==b

    def liState(self):
        if  (self.x==0 and self.y == 0)or\
            (self.x==0 and self.dx==-1)or(self.x==self.mx and self.dx==1)or\
            (self.y==0 and self.dy==-1)or(self.y==self.my and self.dy==1):
            return [self.z,self.x,self.y]
        return []

def toStr(lst):
    return '[%s]'%','.join(['%2s'%x for x in lst])

def main():
    tm = time()  # Timer Start
    M,N = 9,7
    GX,GY = 8,0

    p = Point(0,0,1,0,M,N)
    cnt,ans = 0,[]
    while True:
        if cnt==0: pass                 # 初回スキップ
        elif not p.nextTurn(): break    # do..whileの代替
        t = p.liState()
##        print(t)
        if t==[]: continue
        ans.append(t)
        if p.isGoal(GX,GY): g = cnt
        cnt+=1

    print('[ A, B, C]')     # 表を作成
    print('----------')
    for n in range(g+1):
        print('%s %2d'%(toStr(ans[n]),n))
    print('----------')
    for n in reversed(range(g,len(ans))):
        print('%s %2d'%(toStr(ans[n]),len(ans)-1-n))

    t = [a[1] for a in ans]     # 2列目を取り出す
    r = list(reversed(t))       # 逆順
    print(u'∴ %2d 回'%min(t.index(GX),r.index(GX)))  # 小さい方をとる
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

[ A, B, C]
----------
[16, 0, 0]  0
[ 7, 9, 0]  1
[ 7, 2, 7]  2
[14, 2, 0]  3
[14, 0, 2]  4
[ 5, 9, 2]  5
[ 5, 4, 7]  6
[12, 4, 0]  7
[12, 0, 4]  8
[ 3, 9, 4]  9
[ 3, 6, 7] 10
[10, 6, 0] 11
[10, 0, 6] 12
[ 1, 9, 6] 13
[ 1, 8, 7] 14
[ 8, 8, 0] 15
----------
[16, 0, 0]  0
[ 9, 0, 7]  1
[ 9, 7, 0]  2
[ 2, 7, 7]  3
[ 2, 9, 5]  4
[11, 0, 5]  5
[11, 5, 0]  6
[ 4, 5, 7]  7
[ 4, 9, 3]  8
[13, 0, 3]  9
[13, 3, 0] 10
[ 6, 3, 7] 11
[ 6, 9, 1] 12
[15, 0, 1] 13
[15, 1, 0] 14
[ 8, 1, 7] 15
[ 8, 8, 0] 16
∴ 14 回
Runtime : 0.015 [sec]

●参考図



+-+-②-+-⑥-+-⑩-+-⑭-+
| | |\| |\| |\| |\|
⑫-+-+-+-+-+-+-+-+-⑬
|\| | |\| |\| |\| |
+-+-+-+-+-+-+-+-+-+
| |\| | |\| |\| |\|
⑧-+-+-+-+-+-+-+-+-⑨
|\| |\| | |\| |\| |
+-+-+-+-+-+-+-+-+-+
| |\| |\| | |\| |\|
④-+-+-+-+-+-+-+-+-⑤
|\| |\| |\| | |\| |
+-+-+-+-+-+-+-+-+-+
| |\| |\| |\| | |\|
◎-+-③-+-⑦-+-⑪-+-⑮-①B



①-⑮-+-⑪-+-⑦-+-③-+-+
|\|\| |\| |\| |\| |
+-+-+-+-+-+-+-+-+-+
| |\|\| |\| |\| |\|
⑤-+-+-+-+-+-+-+-+-④
|\| |\|\| |\| |\| |
+-+-+-+-+-+-+-+-+-+
| |\| |\|\| |\| |\|
⑨-+-+-+-+-+-+-+-+-⑧
|\| |\| |\|\| |\| |
+-+-+-+-+-+-+-+-+-+
| |\| |\| |\|\| |\|
⑬-+-+-+-+-+-+-+-+-⑫
|\| |\| |\| |\|\| |
◎-⑭-+-⑩-+-⑥-+-②-⑯-+B

※参考URL
油分け算 - rscの日記
油分け算の問題をJavaで解いてみた。
知恵袋の油分け算の問題をPythonで解いてみた。(2)









Samsara - Tungevaag & Raaban

 何か、かっこいいので、はってみました。(^_^;
Samsara - Tungevaag & Raaban / Tina Boo Choreography

Samsara (Jo-Mo Remix)

Samsara (Jo-Mo Remix)