BuluScroll(試作品)アップロードしました!

f:id:kamui108:20140418231939j:plain

↑プレイ画面

ダウンロード
※上記のリンク先ではすぐにダウンロードが始まります。

動作環境:
Windows7,8


操作説明:

十字キー(左,右) : 左右へのキャラクターの移動
十字キー(上,下) : メニューの選択,プレイ中の視点操作
Space : ジャンプ
C : ズームアウト
X : ズームイン
Enter : メニューの決定


※試作品というより作りかけのような感じでBGMもSEもなく背景すら真っ白です。
基本的な移動,当たり判定程度しか実装しておりません。
ステージもまだ2面しか作っていません。


ほとんど自己満足で作っているので面白いかどうかはわかりませんが
誰か一人でも2面ともクリアした方がおられたら面増やして,もう少しまともに作ります

クリアされた方はよければ@Ryogo1008までご一報ください。

絵を描いてくれる人も募集してます

Python始めました ! | その1

今までc++しか使わずはや何年というわけで新しい言語やりたいなと思って色々調べてpython始めました。

開発環境 :

OS : ubuntu 13.10
editor : gedit

OS : Windows7
PyScripter(参考 : http://blogs.itmedia.co.jp/murayama/2013/11/pythonpyscripte-c462.html )


基本はubuntuの方でやっていきます。

とりあえず初めといえばコレ "HelloWorld!"

# HelloWorld.py

print"HelloWorld!"

実行はターミナルに下記のように入力すれば完了

$ python HelloWorld.py


実行結果...

HelloWorld!


python使ってみた感想 :

条件分岐やループ,クラスなど基本的な所をざっくりやってみて思ったのはコードが綺麗(というかそういう言語仕様)。そもそもc言語などのように括弧を使うことなく字下げ(インデント)を用いるためコードが読みやすい。
おそらくpythonに慣れてくると色んな言語で自然と綺麗なコードが書けるようになるとと思う。と同時に自分がどれだけインデントを気にせず汚いコードを書いていたかを思い知らされた。

WindowsにもPyScriperなどフリーの開発環境も整っているし初めてプログラミングする人にとっても始めやすい言語だと思うのでおすすめです。


※自分はドットインストールで基本は勉強しました
URL : http://dotinstall.com/lessons/basic_python_v2

SRM 612 Div2 Medium || Topcoder || C++ ||日本語訳

問題文 :

You are very happy because you advanced to the next round of a very important programming contest. You want your best friend to know how happy you are. Therefore, you are going to send him a lot of smile emoticons. You are given an int smiles: the exact number of emoticons you want to send.

You have already typed one emoticon into the chat. Then, you realized that typing is slow. Instead, you will produce the remaining emoticons using copy and paste.

You can only do two different operations:

1.Copy all the emoticons you currently have into the clipboard.
2.Paste all emoticons from the clipboard.

Each operation takes precisely one second. Copying replaces the old content of the clipboard. Pasting does not empty the clipboard. Note that you are not allowed to copy just a part of the emoticons you already have.

Return the smallest number of seconds in which you can turn the one initial emoticon into smiles emoticons.

日本語訳 :

あなたはとても重要なプログラミングコンテストのnext round に進めてとても嬉しいです。あなたは一番の友達にあなたがどれだけ嬉しいか知ってほしいです。それゆえに、あなたは彼にたくさんの笑っている顔文字を贈ろうとしている。あなたにはint型整数smile(顔文字の数)が与えられる。

あなたはすでにチャットにひとつ顔文字を打っている。そして、あなたは自分がタイピングが遅いことに気がついた。顔文字を打つ代わりに、あなたはチャットにある顔文字をコピー&ペーストして目的の数の顔文字をつくろうとする。

あなたは二つの操作のみできる :

1.クリップボードにチャットにある顔文字を全てコピーする
2.クリップボードにある顔文字を貼り付ける。

それぞれの操作は正確に一秒かかる。コピーするとクリップボード内のものは更新される。貼り付けることでクリップボードが空になることはない。※注意 コピーする際今ある顔文字の中の幾つかの文字だけをコピーしてはいけない(10個の顔文字がある時コピーするなら10個全てコピーしなければいけない)

最初の顔文字(一文字)からsmile個の顔文字にするのに掛かる最小の時間を返し(求め)なさい。

2≦smile≦1000


解法 :

再帰関数で全探索。

#include<algorithm>

using namespace std;

class EmoticonsDiv2{

	int searchE(int base, int now, int clip , int count){  

	if (now > base)return 1100;
	if (now == base)return count;

	return min(searchE(base, now + clip, clip, count + 1), //クリップボードの中身を貼り付ける
                   searchE(base, now + now, now, count + 2));  //nowをコピーし貼り付ける
	}

public :
	int printSmiles(int smiles){
	
	return searchE(smiles,1,1,1); //顔文字を一つコピーした状態から始める
	}	
};


反省 :

日本語訳初めて書いてみました!

数式の綺麗な書き方(TeX?)が分からなかった...


おまけ

実際にやると...

smile=100
日本 :
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)
(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)(≧▽≦)

欧米 :
XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD
XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD
XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD
XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD
XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD XD

(欧米の顔文字は基本90°反時計回りに傾いているようです)

こんな感じ

AOJ 0033 - Ball

問題文 : Ball



例 : smapleInputの一つ目のデータセットの図

問題概要 :

開口部Aから落とす玉の並びが与えられる。
すべてのボールは自由に筒Bか筒Cに落とすか選ぶことが出来る。
筒B,筒Cは玉が10個入るだけの十分な大きさを持っている。
筒B,筒Cの両方ともで番号の小さいの上に大きい玉を並べられる場合は YESを,並べられない場合は NOを出力する。
(玉の数は10個 それぞれに1~10までの番号がついている)

解法 :

とりあえず全探索してみる。全通りやっても2^10程度。
それぞれのボールはBに入るかCに入るかの二通りの選択肢がある。
その中でBに入るものを考える。
10ビットの2進数を考え各ビットが各ボールに対応するものとする。
そうすると筒Bについての全探索ができる。
CについてはBで考えたのと同様にする。
Bの時に考えた10ビットの2進数を反転した(補数をとった)のがCの各ボールに対応する2進数となる。
よって全てのケースについて判定できる。

#include<iostream>
#include<vector> 

using namespace std;
 
 
int data[10];
 
bool searchB (int a){
    vector<int >sea;
 
    for(int i=0;i<10;i++){
        if(a>>i & 1)sea.push_back(data[i]);
    }
    if(sea.size()>1){
    for(int i=0;i<sea.size()-1;i++){
        if(sea[i]>sea[i+1])return false;
    }
    }
    return true;
}
 
int main(){
 
    int n=0;
    cin>>n;
 
    for(int i=0;i<n;i++){
         
 
    for(int j=0;j<10;j++){
        cin>>data[j];
    }
    bool suc=false;
    for(int i=0;i<1024;i++){
        if(searchB(i) && searchB(~i)){
            cout<<"YES"<<endl;
            suc=true;
            break;
        }
    }
    if(!suc)cout<<"NO"<<endl;
    }
    return 0;
}

反省 :

解法を初めて書いたのでとても分かりにくいものになってしまいました。
最初は再帰関数を使おうとしたもののまともな知識もないままやったのでグダグダでした。

他の解法(再帰とか)がわかる方はぜひぜひコメントして頂ければ嬉しいです。

AOJ 0239 - Calorie Counting

初投稿

問題文 : Calorie Counting


反省 :

基本やるだけだけだった。
入力の時に与えられる番号は順番に並んでないみたいなのでご注意を。
自分は出力の時 for文のiをそのまま出力してWA出してしまったので。

#include<iostream>

using namespace std;

struct okashi{
	int i;
	int p;
	int q;
	int r;
	int c;
};
int main(){
	okashi data[1001];
	int n;
	while(cin>>n && n){
	for(int i=0;i<n;i++){
		cin>>data[i].i>>data[i].p>>data[i].q>>data[i].r;
		data[i].c=4*data[i].p+9*data[i].q+4*data[i].r;
	}

	int P,Q,R,C;
	cin>>P>>Q>>R>>C;
	bool na=false;
	for(int i=0;i<n;i++){
		if(data[i].p<=P && data[i].q<=Q && data[i].r<=R && data[i].c<=C){
			cout<<data[i].i<<endl;
			na=true;
		}
		
	}
	if(!na)cout<<"NA"<<endl;
	}
	return 0;
}