スポンサーサイト
0

    一定期間更新がないため広告を表示しています

    カテゴリ:- | | - | - |
    お詫びと訂正
    0
       前回アップした記事は大嘘を書いてしまいました。
      ごめんなさい。
      お詫びして訂正いたします。




      次の日の通勤途中にはっと築きました。
      具体的には内側のループを抜けるためのif文の条件が間違っていますね。

      ちなみに訂正したコードで実行してみたのですが、すこぶる遅かったです。
      残念。

      結城浩さんのHPにそのうち解答が掲載されるのでしょうか。


      その結城浩さんのHPに新しい問題が掲載されていました。
      しばらくはその問題について考えてみることにします。

      当面の課題は、「カレンダーのエッセンス」かしら。
      カテゴリ:- | 17:57 | comments(0) | trackbacks(0) |
      CodeIQ Crossing問題
      0

         久しぶりにCodeIQをのぞいてみると面白そうな問題が乗っていました。

        概要は、任意の置換が与えられ、それをあみだくじとみなした場合の横棒の数を
        (できるだけ)速く求めよ。というものでした。
        ※原文は全然違いますが、まぁこういうことだろうと理解して考えました。

        で、とりあえず書いてみたコードが以下。

        ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
        to=[]
        itr = 0

        #置換をあたえるファイルを読み込み、配列に格納
        open('D:¥Ruby¥ProjectEuler¥ReadFiles¥crossing.txt') do |f|
          f.each do |n|
            to[itr] = n.to_i
            itr = itr + 1
           end
        end

        count = 0

        #ごりごり計算する
        (0..to.size-1).each do |i|
          (i+1..to.size-1).each do |j|
            if to[i] > to[j] then
              count = count +1
            end
          end
        end

        #結果を表示する
        p count
        ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

        これだといつまで経っても終わりませんでした。
        で、改良したものが以下。

        ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
        #f = open('D:¥Ruby¥ProjectEuler¥ReadFiles¥sample.txt')

        to=[]

        itr = 0

        open('D:¥Ruby¥ProjectEuler¥ReadFiles¥crossing.txt') do |f|
          f.each do |n|
            to[itr] = n.to_i
            itr = itr + 1
           end
        end

        count = 0

        (0..to.size-1).each do |i|
        #追加
        count_tmp = 0
          (i+1..to.size-1).each do |j|
            if to[i] > to[j] then
              count = count +1
              count_tmp = count_tmp + 1
              #追加
              if to[i] + count_tmp = to.size+1 then
               break
              end
            end
          end

        end

        p count

        ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
        これだと割と高速に結果が出力されました。
        あっているかはわかりませんが。




        ちなみに、備忘録と思ってこの記事を書いているのに、どういう意図でコードを記述しているかを言葉で上手に書けないのであきらめてコードを載せるだけにとどめます。

        絵で描けば簡単なんだけどなぁ。

        カテゴリ:Ruby | 22:29 | comments(0) | trackbacks(0) |
        教員採用試験
        0
           先日、公立学校の教員採用試験を受験いたしました。

          地元と、今私が住んでいる自治体の2か所を高校数学で受けました。


          受験した印象としては、地元は数学の試験はやや難、教養は簡単。
          今住んでいるところは、数学はやや易、教養は難、という感じでした。

          まぁ全然できなかったということはないので、どちらかは一時は通過しているのでは
          ないかなぁと希望的観測を抱いております。


          今回、受験してみて痛感したのは体系的にきちんと勉強しないと力はつかないということです。

          教養については時間はかなりかけたつもりですが、全然身についておらず、試験直前まで
          大慌てという感じでした。

          最低限の法規、答申を覚えることと、自治体ごとにまとめられている教育についての資料があればそれを熟読することの2点に尽きると思います。

          特に、法規を覚えることについてですがこれが大切だと思います。
          私は門外漢から(今は教育関係ないサラリーマン)の私が教職に就こうとした場合には
          法規を覚えておくことで、初めて教育関係の人と会話、話し合いができるのではないかと思っています。

          その世界に入るのだから、その世界の言葉を、常識を覚えておきましょうということです。
          もちろん、全部が全部良い内容だとは限りませんが、そういうことを議論するにも
          まずは最低限の知識が必要だと思うのです。それが法規であり、答申であると思っています。


          ーーーーーーーーーーーーーー
          かわって、本日は参議院の投票日でした。
          きちんと投票に行きました。

          よく言われていることですが、みなさん投票に行きましょう。
          投票したい人がいないというのであれば、白票を投じに行きましょう。
          まずは若者世代の投票率を上げることが必要なのです。

          わたしは中学校の生徒会長の選挙で白票を投じた記憶があります。
          後日、担任の先生が白票があったといって憤っていましたが。
          (もちろん秘密選挙なのでわたしが白票を投じたことはばれていませんが)

          先生としてはきちんと考えて投票しなさいということだったのだと思うのですが、
          当時、私は卒業前の3年で、候補者は2年生たち。
          つまり、私が卒業した後の学校の生徒会長を選ぶのです。
          私があまり真面目ではないので、卒業したあとだし、だれでもあまり関係ないやという気分でした。
          そして、そんな気持ちでだれかに適当に投票するくらいなら、白票のほうがいいのではと思ったのです。
          この場合は、棄権ができない投票だったので、今回の参院選とは場合が違いますが
          白票も立派な意思表示ということを忘れずにぜひ投票に行きましょう。
          カテゴリ:その他 | 22:44 | comments(0) | trackbacks(0) |
          がんばるということ
          0
             ツイッターをやっておりまして、何人か有名人をフォローしているのですが

            その中に、陰山英男氏と為末大氏がいらっしゃいます。

            お二人の紹介は特にしませんが、まぁググってください。


            また、為末氏に関していえば彼の著書も数点読んでいるのですが、その中で

            彼が良くいうことは、努力は報われないこともある。自分が評価されるフィールドを

            探すことが大切だということを言っておられます。

            日本の陸上界から見れば、大成功を収めたといえる為末大氏の実績ですが

            それでも、彼の中では幼いころから取り組んできていた100mという競技から

            400mHという競技への転向にはそんな思いがあったようです。


            そんなときに、陰山氏がツイッターで報われない努力を子どもにさせるべきではないが

            日本では努力することが良いことで、効率などは軽視される傾向にある。と発言されていた。



            でもこの考え方は、報われない努力は評価しない、と言っているのと近いのでは

            ないかなと思いました。

            もちろん、小さい頃は努力したことを評価することも大切だと思います。

            そうやって、努力することを覚えていくこともあると思います。

            ただ、それをいつまで続けるのかは考えたほうが良いのかなと思いました。


            ※陰山、為末両氏の発言の部分は私なりに解釈したものをつづっていますので、
            ご本人の正式な発言はtwitter、書籍等でご確認ください。
            【送料無料】ホモ・ルーデンス [ ヨ...

            【送料無料】ホモ・ルーデンス [ ヨ...
            価格:920円(税込、送料込)

            カテゴリ:その他 | 22:12 | comments(0) | trackbacks(0) |
            情報セキュリティスペシャリスト合格
            0
              JUGEMテーマ:情報処理試験



              最近は放置気味でしたが、なんとなく気が向いたので更新しよう。

              ここのところ何をしていたかというと、とある試験が近いためその勉強にかまけており
              ProjectEulerには手を出しておりませんでした。
              それは今もかわらずです。

              昨日、平成25年度春季情報処理技術者試験の合格発表がありました。
              私は今回、SC(情報セキュリティスペシャリスト)を受験しました。

              結果はなんとか合格でした。
              応用情報を持っているので、午前気鰐判だったのですが、午前兇蝋膤淵リギリの60点。
              また午後兇68点でした。

              あぶねー。

              応用情報を昨年秋に受かってから、年明け1月から勉強を始めました。
              そもそも基礎知識が足りていないので下記の参考書をざっと通読。
              午後編もあるのですが両方を年末年始の休暇を利用して10日くらいで読みました。

              で、そのあとはひたすら問題演習です。同書の巻末や著者がweb上に過去問と
              その解説を公開していたのでそちらを利用。

              ほかのサイトでこの本は内容が薄い、頼りないと書かれていることもあります。
              たしかに内容は薄いですが、初学者が最初に読むにはそれなりに読みやすく書かれていると思います。
              この本で足りないなぁと思えば、ネットなりなんなりで調べればよいわけですし。
              そういう意味では何を勉強すれば良いか、というところからわからない人にはお勧めできます。


              続きを読む >>
              カテゴリ:情報処理技術者試験 | 17:31 | comments(0) | trackbacks(0) |
              PCが壊れました。
              0
                 しばらく本ブログをほっていました。

                実はPCが壊れました。
                友人の結婚式用の動画を作成していたところ
                急に、焦げ臭い臭いがして画面が真っ暗に。

                臭いの元の電源ユニットを交換するも、復旧せず。
                次はマザーボードを交換しようかどうしようか悩んでいます。

                お金もかかるし、別になくても不便ないしなぁ。
                (この記事はサブ用のノートで書いてます。)

                安いマザーを買ってLinuxでも入れてみようか
                (触ってみたいだけ)

                ディスプレイとか余ってるから物理的な資源がもったいない気がしています。

                もう少し考えよう。
                あ、ProjectEulerは進んでいません。
                なんだか最近忙しくって、というのはいいわけです。

                カテゴリ:その他 | 14:18 | comments(0) | trackbacks(0) |
                Project Euler013, 014
                0
                  JUGEMテーマ:数学

                  ProjectEuler013,014解答。

                  013:50桁の数100個の和の最初の10桁を求めよ。
                  014:100万以下の数から始まるCollatz列(?)の長さで最長のものを与える初項を求めよ。

                  013で学んだこと。
                  Rubyでファイルを読み込むと1行を一つの要素として扱ってくれるようだ。
                  これのおかげで013は大変簡単でした。

                  f=open("aaa.txt")
                  f.each do |n|
                    行(n)に対する処理
                  end

                  ちなみに型変換も
                  int→Stringは
                  xxx.to_s
                  String→intは
                  sss.to_i
                  かんたーん。

                  014で新たに知ったことは特になし。
                  でもCollatz問題のことは知らなかったのでよしとする。
                  コーディングはすぐにできたんだけど、少し時間がかかってるんだよね。
                  いまは単純に計算してるだけ。
                  改善できるとしてはこんな感じか?
                  ・ある数を与えた場合に生成されるCollatz列の長さを配列とかに格納しておく。
                  ・そうすると別の初期値を与えた場合に途中の値で上記の値が出てきた場合は、もう計算せずにそれまでの列の長さとの和を求めればよい。 
                  初期値と列の長さのペアをある程度の数持っていないとあんまり意味がなさそうだし、どの程度持っていればよいかも見当つかないなぁ。

                  うーん。。。
                  カテゴリ:Project Euler | 20:32 | comments(0) | trackbacks(0) |
                  ProjectEuler012
                  0
                    JUGEMテーマ:数学

                    ProjectEuler012の問題がやっと解決。
                    約数を500個以上持つ最小の三角数を求めよ、という問題。

                    頭の中ではちゃんと解けるのに、コードに落として実行すると答えが違うということが
                    ずっと続いていたが、今朝ちょろっとやったらしょうもない間違いを発見した。

                    やっぱ朝が良いということか。

                    ちなみに高校でも習ったと思うが数Nの約数はNの素因数分解を
                    N=(a1^p1)*(a2^p2)*....*(an^pn)
                    とすると
                    (p1+1)*(p2+1)*...*(pn+1)
                    で表すことができる。

                    素因数を適当にいくつかとってきて約数を表す方法のパターンを数え上げています。
                    各項で1足しているのは0乗があるためです。

                    僕も誰かの真似をしてRubyコードを貼ろうかな。

                    そういえば、風のうわさではRubyの1行はCの100行に相当する。
                    というくらいRubyは実行速度が遅いらしい!(Cが速い?)
                    ショック!


                    #500個以上の約数をもつ最初の三角数

                    def count_division(target)
                      total = 1
                      div = 2
                      count = [1]
                      while div <= target
                      #約数をカウント(1があるので初期値を1とする)
                      count_tmp = 1
                        while target%div==0
                          target = target/div
                          count_tmp +=1
                          next
                        end
                        if div%2 != 0
                          div += 2
                        else
                          div += 1
                        end
                        count << count_tmp
                      end
                      count.each do |n|
                        total *= n
                      end
                      return total
                    end

                    triangle = 0
                    i = 1
                    while true
                      triangle += i
                      i += 1
                      count = count_division(triangle)
                      if count >= 500
                       p triangle
                        break
                      end
                    end
                     

                    カテゴリ:Project Euler | 08:25 | comments(0) | trackbacks(0) |
                    素数判定
                    0
                      JUGEMテーマ:数学

                      ProjectEulerのProblem007の改良と、Problem010を解いた。

                      試し割りと呼ばれる、素数かどうかを調べたい数をそれより小さい数でどんどん割っていき、
                      すべての数で割り切れなければ素数と判定する
                      という方法で実装していた。

                      しかし、Problem007でも割と時間がかかるし、Problem010ではなかなか終わらないので、
                      待ってられねー、問感じであった。
                      (ちなみに問題の内容は、問7は10001番目の素数を求めよ、問10は200万以下の素数の和を求めよ、である。)

                      改善しないとなー、と思いながらお風呂で物思いにふけっていたら
                      割ってみる数は素数だけでよいということに気が付いた。

                      具体的には、N(>0)が素数かどうかを調べるためにはN>p*pを満たすような素数pに
                      対してのみNを割り切るかどうか調べればよいということだ。

                      ということで、これを実装してみたところ、問10でも20秒弱で答えが出た。
                      やったぜ。


                      itProのRubyをめぐる冒険というコラムが私のような初学者には大変ためになる。
                      あと、ProjectEulerをもう少し楽しむために
                      「はじめての数論」9784894714922
                      という本を注文しました。
                      もう群とか環とかなんだっけ?正規部分群?シローの定理?
                      等長変換群とかあったなぁ。という感じなので暇つぶしになればいいなぁ。

                       
                      カテゴリ:Project Euler | 22:54 | comments(0) | trackbacks(0) |
                      ProjectEuler_Problem010
                      0
                         なんだかんだでProject Eulerまだやってます。

                        やっとProblem009まで解けました。

                        考え方はいいのにコーディングしてみたら、時間がかかりすぎて詰まってしまうということが多いです。

                        ちゃんとRubyの文法のお勉強をしないと作業がはかどらないなぁ

                        参考書を買おうかしら。


                        Rubyで不便だなぁと感じていること。
                        For文を大きいほうから小さいほうにループを回せないこと。
                        (できるのかな?)

                        for(i=Max;i<Min;i--){
                        処理
                        }
                        みたいな書き方できないのかなぁ。

                        カテゴリ:Project Euler | 00:26 | comments(2) | trackbacks(0) |
                        << | 2/5PAGES | >>