2014年5月17日土曜日

140517

Excelのシートにおいて、数式を含んでいるか調べる。


セル(1,1)からセル(100,100)までのシートの保護のかかっていない
セルについて、数式を含んでいるかを調べ、
数式を含んでいるセルは数式と表示する。

Sub 数式()
For i = 1 To 100
For j = 1 To 100
  If Cells(i, j).Locked = False Then
    If Cells(i, j).HasFormula Then
      Cells(i, j).Value = "数式"
    End If
  End If
Next
Next
End Sub

2014年5月11日日曜日

140511(2)

複数のファイルの名前を変更する方法


マクロを組む以外に単純な方法に今更ながら気づいたので記しておく。
①複数のファイルを選択。
②名前を変更。
すると、自動的に複数のファイルの名前が〇〇(1)、〇〇(2)、…に変更される。

きっかけ
同じものをダウンロードしたときや、複数のファイルを同じフォルダ内に保存するとき
に自動的に名前が付けられるのはなぜか不思議に思ったことから。

140511

証明もプログラムも簡潔な方がよい。

簡潔
=美しい+短い+わかりやすい
 質    量

わかりやすさを加えたのは、とりわけプログラミングにおいて、
「美しいまたは短い」からといっても「わかりやすい」とも限らないからだ。

2014年5月5日月曜日

140505

Ruby


140306でもArray#permutationを用いたが、また別の問題を解いてみよう。

1〜8を下のa〜hに「右にいくほど大きくなり、下にいくほど大きくなる」ように
書き込む方法は何通りあるか?

a,b,c,d
e,f,g
h

i = 0
(1..8).to_a.permutation do |a, b, c, d, e, f, g, h|
  if a<b and b<c and c<d and e<f and f<g and a<e and e<h and b<f and c<g then
    i += 1
    puts i
    puts "[#{a},#{b},#{c},#{d}],[#{e},#{f},#{g}],[#{h}]"
  end
end

これを実行すると、70通りであることがわかる。

ちなみに、(Frame-Robinson-Thrall による鉤公式を用いれば)
λ=(4,3,1)のとき、
dim Sλ = 8!/(6*4*3*1*4*2*1*1) = 70
となり、
#STab(λ) = dim Sλ = 70

2014年4月5日土曜日

140405

Ruby


0〜9までを数える。

10.times{|i|
  p i
  p ('%08b' % i)
  p ('%8b' % i)
}

出力結果
0
"00000000"
"       0"     ←左に7個のすきま
1
"00000001"
"       1"     ←左に7個のすきま
2
"00000010"
"      10"     ←左に6個のすきま
3
"00000011"
"      11"
4
"00000100"
"     100"
5
"00000101"
"     101"
6
"00000110"
"     110"
7
"00000111"
"     111"
8
"00001000"
"    1000"
9
"00001001"
"    1001"     ←左に4個のすきま

2014年3月21日金曜日

140321(2)

Ruby


Hashのキーや値の設定の練習

h0 = Hash.new
x = 1
while 2**x < 1000 do
  h0[x] = 2**x
  x +=1
end
p h0

出力結果
{1=>2, 2=>4, 3=>8, 4=>16, 5=>32, 6=>64, 7=>128, 8=>256, 9=>512}

for i in (2..10) do
  h1 = Hash.new
  x = 1
  while i**x < 1000 do
    h1[x] = i**x
    x +=1
  end
  p h1
end

出力結果
{1=>2, 2=>4, 3=>8, 4=>16, 5=>32, 6=>64, 7=>128, 8=>256, 9=>512}
{1=>3, 2=>9, 3=>27, 4=>81, 5=>243, 6=>729}
{1=>4, 2=>16, 3=>64, 4=>256}
{1=>5, 2=>25, 3=>125, 4=>625}
{1=>6, 2=>36, 3=>216}
{1=>7, 2=>49, 3=>343}
{1=>8, 2=>64, 3=>512}
{1=>9, 2=>81, 3=>729}
{1=>10, 2=>100}

140321

Ruby


Stringクラスで用意されているincludeメソッドを使用する問題

「3の倍数と3の付く数字の時だけアホになります」という男がいたとして、
1から1000まで数字を数えた場合、アホになった回数を求めよ。

N=1000
s=0
for i in (1..N) do
if i%3 == 0 || i.to_s.include?('3') then
s += 1
end
end
p s

出力結果
513

2014年3月16日日曜日

140316

Ruby


「数の事典」に
548,834
   548,834=5^6+4^6+8^6+8^6+3^6+4^6
と載っていた。

「6桁の数字で各桁の6乗の和が元の数字になるものは、
548,834だけである」
ということを確かめてみる。

for a in 1..9
  for b in 0..9
    for c in 0..9
      for d in 0..9
        for e in 0..9
          for f in 0..9
          x=a**6+b**6+c**6+d**6+e**6+f**6
          y=a*10**5+b*10**4+c*10**3+d*10**2+e*10+f
            if x == y then
            puts "#{x}"
            end
          end
        end
      end
    end
  end
end

出力結果
548834

2014年3月15日土曜日

140315(2)

Ruby


原始ピタゴラス数の思い出

小学生の頃
算数や図工の時間になんとなく使用していたが、証明には至らず。

中学生の頃
ぶっ飛んだ授業(数学)で一般的に
{x,y}={2ab,a^2-b^2},z=a^2+b^2
と表されることを習う。

思い出はこれくらいにして、
1≦x<y<z≦100なる原始ピタゴラス数を求めてみる。

for x in 1..98
  for y in x..99
    z = Math.sqrt(x**2+y**2)
    if z == z.to_i && z < 101 then
      z = z.to_i
      if x.gcd(y) == 1 && y.gcd(z) == 1 && z.gcd(x) == 1 then
        puts "#{x},#{y},#{z}"
      end
    end
  end
end

互いに素の部分がカッコ悪いので、injectメソッドを使うと、

class Array
  def gcd
    self.inject{|a, b| a.gcd(b)}
  end
end

for x in 1..98
  for y in x..99
    z = Math.sqrt(x**2+y**2)
    if z == z.to_i && z < 101 then
      z = z.to_i
      if [x, y, z].gcd == 1 then
        puts "#{x},#{y},#{z}"
      end
    end
  end
end

となりスッキリする。

出力結果
3,4,5
5,12,13
7,24,25
8,15,17
9,40,41
11,60,61
12,35,37
13,84,85
16,63,65
20,21,29
28,45,53
33,56,65
36,77,85
39,80,89
48,55,73
65,72,97

140315

Ruby


他の勉強が全く出来なかったが、「たのしいRuby第4版」を読み終える。
分からないところはネットで調べながらだったが、少なくとも書いてある
内容については、この書籍一冊で理解できた。   

【注意点】

書籍とサポートページのプログラムリストに多少の誤植あり。

【スケジュール】

仕事の日は、
「昼食休みにプログラムリスト以外の部分を読み、
帰って、実際に実行して確認」
というやり方で勉強。

2/23 1〜5章   ←挿絵があったのは、最初のページだけだったな…
2/24 6章
2/25 7章
2/26 8章の途中
2/27
2/28
3/ 1 8章の途中〜9章
3/ 2 10〜12章
3/ 3 13章       ←この章の図がとても親切だと感じた。
3/ 4 14章
3/ 5 15章
3/ 6 
3/ 7
3/ 8
3/ 9 16〜17章   ←16章(正規表現)は大事。
3/10 18章
3/11 19章
3/12 20章
3/13 21章
3/14 
3/15 22〜23章