ページ

2011-10-31

帰り道

私の住んでいる地域はとても田舎です。

せっかくiPhone4Sを持っているのに、写真を撮らないのは宝の持ち腐れです。

なので、風景を撮ったのですが、うまくきれいに撮る事ができませんでしたw

これがその写真です。帰り道の空を撮ってみました。





太陽がまぶしすぎて、道が黒ずんでいます。本当に難しいです。

ネットでiPhone4Sで撮った写真を見るんですが、撮り手によってやはり写真は出来が違いますね。

来週は京都へ日帰り旅行するので、沢山写真を撮りたいと思います。

2011-10-19

自分が行動した範囲。

epoch@まつやまに出場となると、愛媛県に行かなくてはなりません。

私は大阪、淡路島辺りまでしか西に行ったことがないので、さらに西に行く事になります。

今思うと、自分の行動範囲が狭すぎるように感じます。

それは、学生だからだという理由をつければ、しようがないと思いますが、友達と旅行に行ったことは、東京へ旅行へ行った一回しかありません。

東京へ行ったときは2泊3日で、お台場や、東京ビッグサイト、秋葉原・・・いろいろな所へ行って、家へ帰ったときは一瞬、自分の家ではない、ここはとても田舎なんだなあと、まるで世界観が変わったような感じがしました。今ではこちらの生活に慣れてしまって、帰ってきたときの世界観が薄れてきてますがw しかし、何か得たものがあったかもしれません。

今度は、愛媛県に行きます。前と違うのは、同年代のプログラマーと出会う事が出来ることです。 地元では、プログラミングをやっている人が少ないので、なかなか合える事ができません。(とてもすごいスキルを持った人もいますけどね。)

なので、この大会によって、何かを得る事が出来れば、自分の大会の一つの目標は達成できたと言えます。(目標はこれだけではなく、最終ステージに出場することもです。)

2011-10-17

epoch@まつやま プログラミングコンテスト予選突破!

epoch@まつやま プログラミングコンテストの予選を突破しました。

プログラミングコンテストに出場をした事がないので、本当にうれしいです。愛媛県といえば、みかん。早く本場のみかんを食べたいですね。予選を突破できたのは一緒に参加したT君のおかげです。

ここで、自分が一番解くための考えを詰め込んだ問題2のソースコードをのせる事にします。

まずは問題の説明からですね。問題が長いので、簡単に説明しますと、

長さLの文字列Sがあり、次の三種類の変換を定義します。
・追加 : Sの先頭、末尾または途中に一文字だけ追加する
・削除 : Sから一文字だけ削除する。
・変更 : Sの中の一文字だけを別の文字に変更する。

N個の文字列が順番に与えられるとして、連続した文字列の間で上述のいずれかの変換が行われているかを見ます。始めの得点は0点で、追加されると1点、削除は−1点、変更は2点で得点が加算されます。同じ文字列が連続してあれば得点が2倍、変換や、同じ文字列ではなかった場合は得点が0点になります。N個の文字列を最後まで操作したら、得点を表示するプログラムを作成せよという問題です。



プログラムを作成するにいたってのポイントは、

・変換や、同じ文字列がある場合は得点が加算されたら、得点は増加していくが、全く関係のない文字列であった場合、得点が0点になるので、0点に成るまでの計算は無駄になってしまいます。なので、文字列を全て読み込んで、最後から得点が0に成るまでの文字列を確認していく事になります。変更なら2、追加なら1と、文字列ごとの関係を他の配列に格納し、最後に計算します。

・次に追加などの文字列の関係を調べるのは、始めに文字列の長さを調べます。こうするのは、追加、削除、変更、同等のどの場合でも、文字列の長さは1しか変わらないからです。あとは、文字列が1つ減っていたら、削除の可能性が。1つ増えていたら、追加の可能性が。文字列長が同じならば、同等の可能性があるので、文字を一個ずつ確かめ合わせてみていきます。

文字列の関係を調べるのは、一個ずつ見ていくだけなので、他に良いアルゴリズムがあるのかなあと思いましたが、結局見つからず。そのままにしておきました。次に、ソースコードをのせておきます。*デバッグ用の余分なのが入っています。ブログの背景のせいで見難いですが、ご了承ください。 また、コメントが長く突き出ているところがあります。
*********************************************************************************
 // 問題2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define N 255

int main(void)
{
  int i, j, k;     //ループカウンタ
  int a = 0;       //文字列カウンタ 文字が異なった際に+1される
  int n;           //文字列の数
  char **str;      //文字列
  int *stlen;      //文字列長
  int *counter = (int*)calloc(100000, sizeof(int));    //判定カウンタ 追加:1  削除:-1  変更:2  同等:3  それ以外:-2
  long long point = 0;   //ポイント
  clock_t start, end;
  start = clock();

  //文字列の数をnに格納
  scanf("%d", &n);

  //文字列長を動的確保
  stlen = (int*)calloc(n, sizeof(int));

  //文字列を動的確保
  str = (char**)malloc(sizeof(char*) * n);
  for (i = 0; i < n; i++) {
    str[i] = (char*)malloc(sizeof(char) * (N+1));
  }

  //文字列と文字列長を配列に格納
  for (i = 0; i < n; i++) {
    scanf("%s", str[i]);
    stlen[i] = strlen(str[i]);
  }

  //読み込んだ文字列群の後ろから見ていく(例外だった場合、0になるため、後ろから見る方が効率が良いため)
  for (i = n - 1; i > 0; i--) {
    //追加
    if (stlen[i] > stlen[i-1] && (stlen[i] - stlen[i-1]) == 1) {
      for (j = 0, k = 0; j < stlen[i]; j++, k++) {
    if (str[i][j] != str[i-1][k]){
      k--;
      if (a == 1) {
        counter[i] = -2;
      }
      a++;
    }
      }
      if (a == 1 || a == 0) {
    counter[i] = 1;
      }
      a = 0;
    }

    //削除
    else if (stlen[i] < stlen[i-1] && (stlen[i-1] - stlen[i]) == 1) {
      for (j = 0, k = 0; j < stlen[i]; j++, k++) {
    if (str[i][k] != str[i-1][j]){
      k--;
      if (a == 1) {
        counter[i] = -2;
      }
      a++;
    }
      }
      if (a == 1 || a == 0) {
          counter[i] = -1;
      }
      a = 0;
    }

    //変更 同等 
    else if (stlen[i] == stlen[i-1]) {
      if (strcmp(str[i], str[i-1]) == 0)
          counter[i] = 3;
      else {
        for (j = 0; j < stlen[i]; j++) {
          if (str[i][j] != str[i-1][j]) {
            if (a >= 1) {
              counter[i] = -2;
              a++;
              break;
            }
            a++;
          }
        }
        if (a == 1)
          counter[i] = 2;
        a = 0;
      }
    } else {     //なにも当てはまらなかった場合
      counter[i] = -2;
    }
   
    //例外が出たらbreak
    if (counter[i] == -2)
      break;
  }

  //counter変数からポイントを計算
  for (j = i; j < n; j++) {
    if (counter[j] == 1)
      point++;
    else if (counter[j] == -1)
      point--;
    else if (counter[j] == 2)
      point = point + 2;
    else if (counter[j] == 3)
      if (point != 0)
          point = point * 2;
  }
 
  end = clock();
  //解答
  printf("%lld\n", point);
  printf("%f秒\n", (double)(end - start)/CLOCKS_PER_SEC);

  //後処理
  free(stlen);
  free(counter);
  for(i = 0; i < n; i++) {
    free(str[i]);
  }
  free(str);

  return 0;

}
**********************************************************************************

 本戦は時間との勝負になるので、自分の考えた事をすばやく作れるようにしないといけないですね。C++より、Cの方が実行速度は速いらしいですが、コードの作成は、豊富なアルゴリズムのライブラリがあるC++の方が早く作成できるような気がしますね。しかし、C++はあまり触った事がないので、悩みどころです。

本戦はプログラミングをしている人に会える機会なので、楽しみですし、少し今想像して緊張してしまいますw

基本情報技術者試験

昨日、基本情報技術者試験を受けてきました。

今日模範解答と自分の解答を比べました。
午前は配点が全て一緒ですが、午後は、始めの5問は1つ12点、後の2問は20点となり、1問ずつに設問があり、問題によって設問の数が違います。また、配点もまばらなので、答えを見て、正解率を出せるのですが、配点が分からないので、合格ラインの60点を超えたのかは分かりませんでした。結果は1ヶ月後なので、受かったと思って待ちたいと思います。

2011-10-16

iPhone4Sがもらってからずっと圏外になる現象の解決

システムの故障で、iPhone4S本体だけ貰い、店側でSIMカードの変更をしてくれるということだったので、SIMの変更を自宅で待っていたら、前の携帯電話は圏外になったんですが、iPhoneの方は未だに圏外でした。家にいるのは電波が悪いと思い、外に持ち運んでも圏外……。どうすれば良いか、ネットで検索したら一回電源を消すと良いというので、再起動させたらやっと画面左上の圏外の文字が、Softbankになりました!今では電波はビンビンです!

2011-10-09

冬場近くの観葉植物の水やりタイミング

最近は日中は暖かく、夜は寒くなりますね。冬になると観葉植物の水やり頻度を変えていかなくてはなりません。夏には、土が乾く寸前に水をやっていたのが、今では乾いてから水をやるようになりました。さらに寒い時期になると、観葉植物の根の水を吸い上げるのが鈍くなるらしいので、乾いてから2・3日おいてから水をやるのが良いですね。

また、私の多くの観葉植物は、成長期なので、今の時期にちゃんと日光にあてて、根をはらさなければなりません。観葉植物を育て始めてからの初の冬を越すことはできるのでしょうか、どの植物も枯らさないように気をつけて育てていきたいです。

2011-10-08

アセンブリ言語をちょっとさわってみた

やはり始めは「Hello, world!」を出力するプログラムをつくるのがいいですよね。


hello.asm


$ nasm -f elf hello.asm
$ ld hello.o
$ ./a.out
Hello, world!

と、うまくコンパイル・リンクして出来るはずだったんですが・・・LinuxとMac OS XのBSDのシステムコールは違うみたいでできませんでした。Linuxではうまくいくと思います。

Macの方は、スタックを使ってやるみたいなので、調べて作りたいと思います。

アセンブリ言語を触ったきっかけは、書籍で書かれていたからですが、Macでやっていると、多くのプログラムを変更して試さなければならないので、Linux環境を作った方が、うまく読み進めることが出来るような気がしてきました・・・・・

アセンブリ言語のソースコードをみると、C言語に比べて、多く設定がいることが分かります。しかし、C言語のプログラムはどのように動いているのかが少しだけわかったような気がしました(笑)。

2011-10-07

iPhone 4S 予約完了!

近所のソフトバンクショップでiPhone4S 32GB White を予約しました。

予約システムのサーバーが混雑していてつながりにくい状態だそうです。発売日14日に購入できればいいですね。気長に待つとします。

ところで店員さんの電卓の手さばきには驚きました。片手でタタタッと即座に計算してました。接客業をならわいにしている人には必須のテクニックですよね。私もプログラミングのテクニックを多く身に付けたいと思います。

2011-10-04

今は何をスべきか

今は何をスべきか、
資格の勉強をする、ちょっとしたプログラムを作る、プログラミングの本を読む、観葉植物を眺める(笑)。
何をスべきか悩んで、結局は寝てしまうときがあります。ただ、やりたくなくて逃げているだけですね。
さて、今日はけじめをつけて、資格の勉強を取り組み始めているところです。しかし、一日に資格の勉強のみを選んでするのではなく、プログラミングの本を読んだり他の事も可能なので、時間を有効につかって、いろいろな物に取り組んでいきたいですね。

私は一日何をスべきか、計画を立ててする方ではなく、あれをやろうと、突然物事に取り組む方です。結局は、寝ようと考えてしまい寝てしまいます。なので、今日は、資格の勉強をする、本を10ページ進めると決めました。これは今日の計画です。

2011-10-01

ガジュマル (観葉植物)

この前のポトスとハイビスカスはダイソーで購入しましたが、
このカジュマルはホームセンターで購入しました。値段はダイソーの6倍の600円ほどでした。