型付き配列

文化祭も近いので、展示用にするかはわからないけどFlashブラックジャックを作り始めました。
ちなみに自分はまだAS3はちょっと触れたことがあるくらいなので、AS2で。
ちなみに自分で考えたプログラムをAS2で書くのは今回が初めてです汗
クラスの概念とかは結構勉強してきたんですけどね。本のサンプルファイルを真似もしてたからそれなりに雰囲気は分かっているつもりです。
まぁあれですよ、去年の文化祭で展示した作品はAS1でフレームにゴリゴリ書いてたから、それに比べたら進歩したのでは??


そんなこんなでやっていたんですが、どうもtraceした値がNaNになっちゃう事件が発生。
おかしいなーと思ったら、Number型の値とそうでない値を加算してた。
ASはJAVAと違って配列に型がつけられないから、parseIntしてやらないと整数値として扱ってくれないんですね。
しばらくJAVAをやっていたのでどうもASの文法を忘れていていけません笑


技術面以外にも、文化祭に来てくれる人(おもに受験生の小学生)がブラックジャックを楽しめるかという問題があったりします。
作ろうとしているものにはスプリットとか複雑なルールは実装しない(てかできない?w)予定なので理解できないこともないと思いますが、やっぱり子供には直観的なゲームがウケそうですよねぇ。
その辺も考慮してまたアイデアを出していかないとなぁ。
いい案が出たらそっちを優先して、ブラックジャックは余裕があれば作ろうと思います。

数学選手権

この間の土曜日に部活の仲間で第1回数学選手権に出場してきました。


先輩後輩と組んで5人のチームを作り出たのですが、一次選抜は通過したものの二次選抜で落ちてしまいました。
一次選抜は一人ずつまったく同じ問題を解いて、チームの皆が基準点に達すれば通過というルールだったので、他のメンバーに迷惑をかけずに済んでよかったですね笑
その次の二次は30問をチームで分担して解き、何問解けたかを競うもの。
自分は基本情報の知識を生かして稼働率に似た計算の問題を解いたり、真理値のような問題をやってました。


結果は残念ですが受験校に交じって頑張ったと思います。
それよりも、途中の桜井氏のプレゼンで数学を改めて好きになれたのでそれが大きな収穫ですね。
数学は今後プログラミングをやっていう上でも必要だと思うし、
そうでなくても論理的思考力を養う上で大切な学問だと思うので、これからも勉強を続けたいです。

パソコン甲子園当日

問1・3〜6を提出しました。
が、問5・6が中途半端な状態(シンタックスエラーとかが出る)なので、どうなるかなぁってとこですね。
ちなみに自分は問1・4・5を解きました(残りは先輩)。
まだまだですけど、去年よりは確実に実力は上がっていると確信しました。
プログラミングにも慣れましたし、アルゴリズムを考える力も付いてきたように思います。

ちなみに提出しなかった問2を帰宅してから考えてみたら、意外とすぐ解けてしまい、
解けたことを喜ぶべきなのか本番でやらなかったことを悔やむべきなのか複雑な心境です。
問題分は分からないのですが、以下が自分の書いたソース。


import java.util.Scanner;

class A02{
public static void main(String args[]){
Scanner scan = new Scanner(System.in);

String list;
while(!(list = scan.next()).equals("0")){
int length = list.length();
int pa = 0;
int pb = 0;
for(int i=1; i pb){
pa++;
}else{
pb++;
}
System.out.print(pa);
System.out.print(" ");
System.out.print(pb);
}
}
}

あ、もし本選へ行けることになったらほかの参加者の方々、是非お話しましょうw

コレクション

組み合わせを考えなくてはならない、自分にとっては難題のアルゴリズムを考えているのですが・・。

今までは、要素の数が決まっていたので普通に配列を使えばよかったんです。
だけど今回はそうはいかず、配列の要素を後から追加したりする必要があります。
そこで困って調べていたところ、コレクションというものを発見。
正直言ってまだよく分かりませんが、どうもArrayListというのを使えばadd()で好きな箇所に要素を追加できるとのこと。
しかも配列と違ってデータ型は決められていないと。これを使えばいけそうですね。
コレクションをうまく使えると有利であることは間違いなさそうなので、パソコン甲子園当日の明後日までに勉強しておこうと思います。

参考URL:http://www.stackasterisk.jp/tech/java/collection01_03.jsp

CSSの最近

CSSって結局は組み合わせの問題で、何をやろうにも結構簡単なんじゃないかなーと思っていた時代もありました。

だけど、ちょっと経ってから考えてみるとそんなことはない。
ブラウザごとに理解が違ったりするし、いろいろと発想が必要なんですね。
ネガティヴマージンやらclear fixやら、ある問題を解決するために編み出された手法は多く存在するけど、
そういうのを自分で考えようとしたら実は大変なことなんだろうな。

パソコン甲子園

9月6日に行われるパソコン甲子園プログラミング部門にエントリーするため過去問を解いています。
今回解いた問題は以下の通り。

体育祭

秋の体育祭が行われます。種目は徒競走、ボール運び、障害物競走、リレーの4種目です。参加チームはnチームで、この4種目の合計タイムが最も小さいチームが「優勝」、次に小さいチームが「準優勝」、そして、最下位より2番目のチームを「ブービー賞」として表彰したいと思います。
各チームの成績を入力として、「優勝」、「準優勝」、「ブービー賞」のチームを出力するプログラムを作成してください。
ただし、各チームには1以上1000000以下のチーム番号が与えられており、チーム数は4以上1000000以下、タイムを表す分と秒はともに0以上59以下の整数とします。また、合計タイムが複数のチームで同じになるような入力はないものとします。

プログラムは以下に定義する入力が続く限り処理を繰り返し、入力が終わったら終了するように作成してください。


入力

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下のとおりです。
1行目 対象となるチームの数n(整数)
2行目 第1のチームの情報 c1 m1 s1 m2 s2 m3 s3 m4 s4(整数 整数 …;半角空白区切り)
         各記号の意味は以下の通りです。
          c1  :チーム番号
          m1, s1:それぞれ徒競走のタイムの分と秒
          m2, s2:それぞれボール運びのタイムの分と秒
          m3, s3:それぞれ障害物競走のタイムの分と秒
          m4, s4:それぞれリレーのタイムの分と秒
3行目 第2のチームの情報
       :
       :
n+1行目 第nのチームの情報


出力

入力データセットごとに以下の形式で出力します。

1行目 優勝のチーム番号(整数)
2行目 準優勝のチーム番号(整数)
3行目 ブービー賞のチーム番号(整数)


以下、書いたプログラム。


import java.util.Scanner;

class T10{
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
int n;
while( (n = scan.nextInt()) != 0){
Team[] teams = new Team[n];

for(int i=0; i teams[j+1].total){
Team temp = teams[j];
teams[j] = teams[j+1];
teams[j+1] = temp;
}else{
break;
}
}
}
System.out.println(teams[0].num);
System.out.println(teams[1].num);
System.out.println(teams[n-2].num);
}
}
class Team{
int num;
int total = 0;

public Team(int c){
num = c;
}
public static int sum(int t1, int t2, int t3, int t4){
int total = 0;
return total = t1+t2+t3+t4;
}
}

今まではTeamクラスのインスタンスにチーム番号を示す変数numを設定する際、teams[i].num = scan.nextInt()と書いていたのですが、今回はインスタンス生成時にコンストラクタを用いてチーム番号を設定してみました。
プログラムとしてどっちが美しいのかはよく分からないのですが・・・。

あと、いちばん最初の for(int i=0; i と表示されるのはなぜでしょうか。
はてなの性質みたいなもの?