天下一プログラマーコンテスト2012予選Bを少しやってみた

2012年8月26日

知っている方のブログを見ると天下一プログラマコンテストなるものが

あるということを知り,アクセス.

もう終了してはいるが,提出することはできるので挑戦.

まだ8/29日8:00~20:00の予選Cが残っているのでまだまだ本選へのアタックは可能です.

今回は,予選Bの内容を少しやってみることに.

予選B1問目の内容はこちら.

問題文

いま、物が有る。
その数は 1 以上 127 以下である。
3 で割ると、 a 余る。 5 で割ると、 b 余る。 7 で割ると、 c 余る。
いくつ物があるとそうなるか小さい順に答えよ。

なんか問題がおかしい気がするが,(いくつものがあるってなんだ?)

とりあえず,入力と出力を見たらなんとなくわかった.

入力

入力は以下の形式で標準入力から与えられる。

a b c

出力

条件を満たす物の数を小さい順に改行区切りで出力せよ。
なお、行の終端には改行が必要である。

 

そして作ったコードはこちら


#include<stdio.h>

int main(void){
int a,b,c;
int test=0;
int count=0;
scanf("%d %d %d\n",&a,&b,&c);
while(7*count+c<=127){
test = 7*count+c;
if(test==0){count++;continue;}
if(test%5==b&&test%3==a){
printf("%d\n",test);
}
count++;
}
}

 

入力の改行を完全に忘れてました.

何回かミスをした後に受理.

ここまでだと,よりスマートにやりそうな人がいそうなので,

プログラミング初心者の人に対しても理解できるように解説してみる.

まず,最初の#includeはおまじない.もう少し説明すると標準入出力を担当するstdio.hを利用する宣言とのことになる.大概のプログラミングでは使うからそこは置いておく.

 

次に3つの入力を得るための変数が必要になる.今回は範囲が決まっていて整数であるのでint型を3つ用意.testはあとで判定とかに使うための値を代入する変数.

さて,次はwhile文.繰り返し文であるが,7*count+c<=127をクリアしたら中に入っている処理を行うというものである.

今回は処理の回数を減らすために,7で割った時の条件に合致する整数が他の条件に合うかどうかを確認する.

問題としては,count=0かつa=b=c=0のとき,出力する数字は1以上であることが条件であるが,何の対策もしなければ0であってもこのままでは条件を満たしてしまう.次の倍数への対応をするためにcount++をしてcontinue文を入れる.continue文はその時点でその回の繰り返し処理をやめることを意味する.(continue文丘の処理は実行されず,再度繰り返しの条件文を判定し,処理を行う.)

あとは5で割った余りと3で割った余りを考えて,出力させれば終わり.

それではこれをjavaで書いてみる.


import java.util.Scanner;
public class ProblemB1 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] a = new int[3];
a[0]=sc.nextInt();
a[1]=sc.nextInt();
a[2]=sc.nextInt();
for(int count=0;7*count+a[2]<=127;count++)
if(tester(a,7*count+a[2])){
System.out.println(7*count+a[2]);
}
}
public static boolean tester(int[] a,int test){
if(test==0)return false;
else if(test%5==a[1]&&test%3==a[0]){return true;}
else {return false;}
}

}

判定の部分をtesterという関数を作ったところ以外はあまり変わりはない.

違いとしては入力を受け付けるところ.

Cでは入力形式の形でscanfをする必要があるが,JavaのほうではnextIntというメソッドで取れる.

なぜコミュニティを作ったか?

2012年8月23日

1日前に書いた記事だがAndroidコンペを行った.

私自身,大人気のアプリを作り上げたという訳でもないし,他の人たちが素晴らしいと思えるような技術に対しての経験や知識を得ているわけでもない.

しかし,私は今回,IT勉強会スタンプラリーにコミュニティ「Programming∀」を作り,参戦した.

私は,元々最後の学生の年なのだからいろんな勉強会に参加してみようということから多くの勉強に参加させていただいた.時にはしゃべったり,レポを書いたりもしていた.

色んな勉強会を見ているうちにふと思ったことがある.

それは,初心者が参加に大きな壁を感じているということ.

周りの学生を誘ってみても「難しいことを話すんだからどうせ自分なんて……」という人ばかり.(こういうことをいう人たちに限って実際はそのレベルに達しようという努力は私から見て皆無だったりする.あるいは単に私が嫌われているだけか.)

ある人が別の理由を言ってくれた.それはコミュニティが上級者の集まりとなっており,そこに自分が入っていくことが非常に難しく感じるためとのことだ.

なるほど,確かにコミュニティは作られてから時期がたてばたつほど閉塞感が増すものだろう.ある程度のメンバーが固まり,ある程度共通の話題が出来上がり,コミュニケーションが楽になっている一方で新参者には居づらい空気となってしまうことだろう.

現在の多く存在している盛り上がっているコミュニティほどどんなに初心者歓迎と言っていてもやはり初心者が入りづらい何かしらの壁があるのではないかと感じた.

ある日,私はゲームをしていると雑魚キャラが現れ,倒した時にふとひらめいた.

最初っから初心者向けだけで構成するコミュニティで特定の技術とかを極めるのではなく,無節操に手を出すコミュニティがあってもいいのではないか?

勇者は最初はLv1から始まる.そこからどんどんと強くなるために雑魚キャラを倒し,自らの糧としていく.コミュニティに置き換えると今は強い敵キャラ(対抗するべきというものではない.あくまで例え)が氾濫している状態と考えられる.そこで雑魚キャラの立ち位置はあまりなく,実は潜在的に求められているのではないか.

そこから,gimpでお粗末なロゴを作り,参加用のシールを自作して開催予定日を1か月半後として会場をぎりぎりでアポイントメントをとって実行に移した.

ここまで行動を起こして,私はこう考える.

1つぐらい「このコミュニティ,チャレンジしすぎだろ……」というものがあってもいいのではないかと思う.

芸人の世界でも同じだ.全員が全員同じ芸風だったら誰もテレビなんて見ないだろう.

周りから「こんなものがチャレンジかよ.ただの無謀じゃないか.」と笑われてもいい.その人が「こっちの方がもっとチャレンジングで楽しいだろ.」と行動してほしい.

ということで,今後も頑張って活動をしてドラク○でいうようなスライ○のような立ち位置を狙っていきたいと思います.

初心者向けAndroidコンペ

2012年8月22日

先日,8/18に新大阪コワーキング様で初心者向けAndroidコンペを行いました.

私が主催するProgramming∀の初イベントということで非常に不安でした……というどうでもいい主催者の情報は置いといて.

10:00~19:00という長丁場になんと6人も参加していただきました!!

午前中にjavaの講義(?)を行って,午後から各自で作っていくという流れに(元の計画ではペアプロの方向性を持たせようと思ったが,各自作りたいものがばらけたという点から個人戦に)

そして発表.次の6アプリの発表がありました.

そして,それぞれの発表を聞いてから投票.発表者以外の5名と私の計6名が各人10点満点で点数をつけました.

点数としては60点満点中50点台が連発するという素晴らしいコンペとなりました.

反省及び感想.

  1. 予定時間よりオーバー.こういう時間管理のミスが多いのは困りもの.
  2. 講義の内容が非常にお粗末.しかもテストプログラムがその時になって動かなくなった.原因はlayoutのxmlのversionを各部分がなくなっていたため.(でもエラーが出てこなかった.)
  3. 各人の作りたいものをそれぞれが発表してチームを組むというフェーズがだいぶいい加減になってしまった.
  4. 今回はDBにアクセスするアプリをもとに講義を進めたが,GPSを使いたいというニーズもあり,どのような機能に対してどのようなプログラミングが必要であるかということを中心に取り上げる必要がある.
  5. 各メンバーの評価コメントを当の本人に渡すという試みはかなり好評.わんくまさんの方式を勝手に真似ました.わんくまさん勝手にぱくってすみませんでした.

また,Androidやプログラミングのコンペを行いたいなと思います.

時期としては次のイベントは10月頃を予定しております.

最後に,今回会場を貸していただいた新大阪コワーキング様,そして今回参加していただいた参加者の皆様.

本当にありがとうございました.またイベントでお会いできることを楽しみにしております.

YAPC::Asiaにいけないので1人YAPC::Asiaしてみる

2012年8月21日

YAPC::Asiaとは9\27-29にかけて東京で行われるPerlのカンファレンスです.

なんと遠距離からの学生,未就労の方は交通費をただにしてくれるという素晴らしい制度があります.(宿泊費は流石に自腹)

http://yapcasia.org/2012/news/yapcasia-region.html

 

8/24締切ではあるけど,24日以内にもしこれを見ていきたいと思ったら是非参加してみてください.

内容としては初心者から上級者までPerlをばりばりやれる人から実はビギナーな人までいろいろな人が話をしています.

初心者だから……ということで尻込みする必要は全くないと思います.

やったことないよという人でも最初の一歩としてPerlの生みの親の人まで来ている

このイベントで一歩を踏み出すということも実に贅沢で素晴らしいことじゃないですか.

え?私?

授業があるので無理です.え?さっきそんな偉そうなこと書いたんだからそんなもん休め?

じゃああんた修士論文代わりに書いてくれるのか?私の代わりに単位とってくれるんか?あぁ?

失礼しました.ついつい怒りが出てきてしまいました.

実際に参加はできませんが,私もこのブログを通じてYAPCへの参加をしていきたいと思います!

なんじゃそら?と思うかもしれませんが,簡単に言うと,自分もYAPCの開催期間中にプレゼンを出してブログ上で発表してやる!ということです.

テーマとしては「三大欲から始まるPerl」でやろうかなと思います.

Android開発環境構築

2012年8月11日

Androidアプリの環境導入について投稿.

導入環境としてはWindows7.

Mac?(´・ω・`)知らんがな

必要なのはざっくりと3つ

とりあえずさっくりとやってみる.

Android開発のためにはJDKは5.0以上が必要.

Sun Developer Network のサイト(http://www.oracle.com/technetwork/java/javase/downloads/index.html)にアクセスし、
「Download JDK」をクリック.バージョンに関しては5以上だったら問題なし.

DLしたexeを開いて,あとは次でをクリック.

そうするとJDKのインストールは完了.

次はEclipseですがこれは日本語化したものを入れてある

Pleiades込のものを導入すればよい.

http://mergedoc.sourceforge.jp/#pleiades.htmlにアクセスするといろいろとバージョンがあることがわかる.

 

こういうものは最新版とっておきたがりの私なので,一番新しい「4.2Juno」をクリック

すると,次の画面が出てきてその中でも様々な用途で入っているものが異なっていることがわかる.

今回は,JavaのSDKが入っていて,Javaを開発できる形であればいいので,左から3番目の[Java]を選ぶ.(私は[Ultimate]選んだけど.Java開発できれば問題なし.)

そして,自分のOSがどちらかで32か64を選ぶ.JREはなしのものを選んでしまいましょう(Java Runtime Environmentの略.javaで開発されたものを実行するために必要なもののセットと思えばよし.JDKは開発するために必要なセット.)

既に,JREがある人はJREなしで問題なし.(JDK入れた時点でJREも入るので気にしなくてもいいとは思うが)

確認方法としては

コマンドプロンプトでjava -versionを打って,数字出てきたら入ってます.

eclipseがダウンロードできたらそのzipファイルをCドライブの直下に持っていきます.これは,別の場所だとパスが長くなってしまい,解凍ができないときがよくあるためです.

そして解凍(そこそこ時間かかる).完了したらeclipseフォルダから

eclipse.exeを起動させるとワークスペース(作ったプロジェクトとかの保存場所)をどこにするかを聞かれますが,この選択をデフォルトとし……の部分にチェックを入れてそのまま次へをクリックすると画面が出てきます.よかったよかった.

さて,次はAndroidの開発準備に移るわけですが,

http://developer.android.com/sdk/index.htmlで,Download the…と書かれているボタンの

下にあるother platformsをクリックし.Windowsでファイル名の最後に.zipと書かれたフォルダをダウンロード.

 

ダウンロードしたファイルをCの直下において解凍する.

そのあとにEclipseから[ヘルプ]→[新規ソフトウェアのインストール]を選択

そして作業対象に[https://dl-ssl.google.com/android/eclipse/]を入力すると次の画面となる.

もしならなかった場合は,作業対象の中身を[http://dl-ssl.google.com/android/eclipse/]とする.

そして全てを選択し次へ,

ライセンスの同意が求められるので同意して完了.

そのあとはEclipseを再起動しろと言われるのでEclipseを再起動する.

Eclipseが再び開くのでウィンドウ→設定からAndroidの項目を選択.

そしてSDKロケーションの部分に,先ほどC直下に置いたAndroidSDKのフォルダを指定.(解凍してそのままであればC:\\Android-sdk\android-sdkといった形になるかと思います.そこはご自身でご確認を.)

そして適用を押すと次のウィンドウが出てくる.

ここで,SDKマネージャを開く.

ここで,ToolsのチェックボックスとExtra,そして自分が開発したいAndroidのバージョンのフォルダのチェックボックスをクリックして右下のInstallのボタンを押す.(あとからでも追加できる)

これで完了.

基本的にMacも同じ要領でできるとは思うが知らない.

あとは左側のプロジェクトエキスプローラで左クリック→新規→プロジェクトで

Enterを押し,androidとでも打ったらandroidプロジェクトというのが出てくるはず.

次以降の更新でHello Worldとかを取り上げる.といっても非常に詳しいサイトが多くあるので自ら調べながらやってもらった方が身につくとは思う.

 

  プロフィール  PR:無料HP  原町中央自動車教習所  売掛金買取 金利  料理 専門学校  エスペリア  中古ホイール 岡山  タイヤ 15インチ  東京 美容専門学校  14インチ ホイール  民泊 代行  物流 業務改善  株エヴァンジェリスト 退会  タイヤ 履き替え 豊橋市  バイアグラ 効果