「牛の舌って薄いんですね」

蒼樹うめ『ひだまりスケッチ』第 6 巻「一頭から一枚」より

ふみをチャレンジ[7]

1週間やってこれた(∩´∀`)∩ワーイ
明日はセンター試験。受験生のみなさん、諦めずに最後まで頑張ってください!

答案

#include <stdio.h>

int main() {
  char str[21], *p;
  
  p = str;
  
  scanf("%s", str);
  while(*p) {
    p++;
  }
  while(p > str) {
    p--;
    putchar(*p);
  }
  putchar('\n');
  
  return 0;
}

反省

これはポインタを勉強したときに作ったことがあったので、簡単に作ることができた。手元の環境ではchar str[20]でも大丈夫だったけど、AOJではRuntime Errorと言われた。\0のスペースの問題なんだろうけど。

Twitterのプロフィールの下に「リストへの追加/削除」ボタンを追加するユーザースクリプト書いた

先日、Twitterでリストの整理をしていたら、間違ってブロックの項目を選んでしまい、フォロワーの方に迷惑をかけてしまった。2つのメニュー項目が隣接しているのが問題で、ブロック時の確認メッセージなど一切ない。また、マイリスト画面を開くためには、メニューを開き、項目をクリックするという二段階の動作が必要で、前々から面倒くさいと感じていた。以上の理由で、別の場所に「リストへの追加/削除」ボタンを追加するユーザースクリプトを書くことにした。
面倒くさかったのが、スクリプトの実行タイミング。onloadの時点では上のメニューバーしか読み込まれていない。DOMNodeInsertedをaddEventListenerして、必要な要素以外を弾けばいいようだ。他に方法があれば試してみたい。
なお、自分自身をリストに追加できなくなったため、自分のユーザータイムラインではボタンは表示されない。

インストール

Twitter List Button - userscripts.org
上記リンクよりインストールしてください。

ふみをチャレンジ[6]

時間がない…とりあえず記事の作成だけ。

すっかり忘れてた。早く寝たいのに…

問題

0005: GCD and LCM - AIZU ONLINE JUDGE
結果から先に言うと、正解できてない。したがって以下は不正解の答案を載せてある。

答案

C
#include <stdio.h>

long gcd(long, long);
long lcm(long, long);

int main() {
  long a, b;
  
  while(~scanf("%ld %ld", &a, &b)) {
    printf("%ld %ld\n", gcd(a, b), lcm(a, b));
  }
  
  return 0;
}

long gcd(long m, long n) {
  long r;
  
  while(n) {
    r = m % n; m = n; n = r;
  }
  
  return m;
}

long lcm(long m, long n) {
  return m * n / gcd(m, n);
}

反省

ユークリッドの互除法を用いてコードを書いてみたが、結果はWrong Answer。intをlongに換えてみたりしたけど、何が問題なのかよく分からない…今日は早く寝たいので明日また考えることにする。


[追記] (2012-01-13)
もう一度、挑戦した。

#include <stdio.h>

int main() {
  long long unsigned int a, b, m, n, r, gcd, lcm;
  
  while(~scanf("%llu %llu", &a, &b)) {
    m = a;
    n = b;
    
    while(n) {
      r = m % n; m = n; n = r;
    }
    gcd = m;
    
    lcm = a * b / gcd;
    
    printf("%llu %llu\n", gcd, lcm);
  }
  
  return 0;
}

long型にしてたのをlong long unsigned int型に換えたらうまくいった。あと、LCM求めるときにGCDを再度求めてるのが気に食わなかったので、全部をmain関数の中に放り込んである。

ふみをチャレンジ[5]

夜型の生活を1日で改められるわけもなく、お昼で断念して帰ってきた。無駄に体がだるい。

問題

0004: Simultaneous Equation - AIZU ONLINE JUDGE
これだけ妙に正答率が低いという、解く前から不安になるね。

答案

C
#include <stdio.h>

int main() {
  double a, b, c, d, e, f, x, y;
  
  while(scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &e, &f) != EOF) {
    x = (c*e - b*f) / (a*e - b*d) + 0.0;
    y = (a*f - d*c) / (a*e - b*d) + 0.0;
    
    printf("%.3lf %.3lf\n", x, y);
  }
  
  return 0;
}

反省

ガウスジョルダン法とか、連立方程式の解き方はいくつかあるみたいだけど、難しいそうだったので、普通に方程式解いてみた。最初、Wrong Answerを食らったが、以下の記事のように、0.0を付加すると通った。なんでーーー

AOJ 0004 Simultaneous Equation - Code Court

ふみをチャレンジ[4]

三日坊主打破。ロックマンエグゼ2もついに最終話に突入して…ちょっとゲームしすぎかな。明日から大学だというのに。朝起きられるかなあ…

答案

C
#include <stdio.h>

int main() {
  int n, a, b, c;
  
  scanf("%d", &n);
  
  while(n > 0) {
    scanf("%d %d %d", &a, &b, &c);
    
    a *= a;
    b *= b;
    c *= c;
    
    if(a == b + c || b == c + a || c == a + b) {
      printf("YES\n");
    } else {
      printf("NO\n");
    }
    
    n--;
  }
  
  return 0;
}

反省

a2 + b2 = c2を利用すればいいとはすぐ分かったけど、斜辺をどうやって判定しようか…と考えてたら、なるほど、全部ORで繋いじゃったらいいんだ。ソートしたり最大の値を探すことも考えたけど、この方法が一番スマートだね。