ガチホ〇撲滅教

人の行く裏に道あり花の山

〜続々〜リハビリプログラムAOJ【0502】

またまた、リハビリプログラム

今回は、(サイコロ | Aizu Online Judge)

  

本日(記事をあげた時点では昨日)2つめのコードであるがやはり、リハビリを重ねるごとにコーディングのスピードがあがっているのを感じた。1日に解ける問題数がしっかりと増えてきているのはリハビリの効果が出始めているとみてとらえていいと感じる。

また、今年の夏休みは、5日に1度、直前の5日間を振り返って

今後どのようにしていくかを反省していきたいと考えている(受験生か!!)

 

ちなみに、この問題は 

サイコロの上面をtop

サイコロの前面をfront

サイコロの右面をrs (right-sideとする)

 

この3面さえわかれば

下は7-top

後ろは7-front

左は7-rsとなるため

 

結果、6面が把握できる事になる。

(3面の情報を把握する事によりサイコロ全ての面の情報を把握する事が可能)

このデータ管理によりプログラミングの労力を減らす事ができる。

このとき、注意するのが次の3面の情報が前の情報に依存するため

データの代入中には、データを2つ用意する事が必要である。

 

次の各面の数字と、現在の各面の数字

 

ページを見ると各動作によるサイコロの挙動は明らかである。

以下に擬似コードを記す。

(次の各面の値) = (前の各面の値を用いて処理)

 

操作Northによって

top = front

front = 7-top

rs = rs (変わらない)

 

操作Eastによって

top = 7-rs

front = front(変わらない)

rs = top

 

操作Westによって

top = rs

front = front(変わらない)

rs = 7-top

 

操作Southによって

top = 7 - front

front = top

rs = rs (変わらない)

 

操作Rightによって

top = top

front = rs

rs = 7 - front

 

操作Leftによって

top = top

front = 7 - rs

rs = front

 

となる。が、実行結果はミスっていたため(擬似コードの挙動予測はあってると思う)

デバッグを行った。

 

~修正後のコード~

 

~FileRead_0502.java~

 

package dice_0502;

 

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

 

public class FileRead_0502 {

ArrayList<String> direction = new ArrayList<String>();

 

/**

* @return the direction

*/

public ArrayList<String> getDirection() {

return direction;

}

 

public void fileRead(String filename){

FileReader fr = null;

    BufferedReader br = null;

    try {

        fr = new FileReader(filename);

        br = new BufferedReader(fr);

       

        String line;

        int i;

        while*1 != null){ //1行読む

        i = Integer.parseInt(line);  

        if(i == 0) break; //EoFの0がきたら終了

        for(int k = 0; k < i; k++){

        line = br.readLine();

        direction.add(line);

        if(k == i-1){

        direction.add(null);

        }

        }

        }

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            br.close();

            fr.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

}

 

 

 

~Dice.java~

 

package dice_0502;

 

public class Dice {

private static FileRead_0502 file = new FileRead_0502();

 

private int top = 1, front = 2, rs = 3;

private int p_t = 1, p_f = 2, p_r = 3;

privateintpoint = 1;

 

public void lotation(){

for(int i = 0; i < file.getDirection().size(); i++){

if(file.getDirection().get(i) == null){

System.out.println(point);

point = 1;

top = 1; front = 2; rs = 3;

p_t = 1; p_f = 2; p_r = 3;

continue;

}

if(file.getDirection().get(i).equals("North")){

this.north();

}

if(file.getDirection().get(i).equals("East")){

this.east();

}

if(file.getDirection().get(i).equals("West")){

this.west();

}

if(file.getDirection().get(i).equals("South")){

this.south();

}

if(file.getDirection().get(i).equals("Right")){

this.right();

}

if(file.getDirection().get(i).equals("Left")){

this.left();

}

p_t = top;

p_f = front;

p_r = rs;

point += top;

}

}

 

public void north(){

top = p_f;

front = 7-p_t;

//rsは変更なし

}

public void east(){

top = 7-p_r;

//frontは変更なし

rs = p_t;

}

public void west(){

top = p_r;

//frontは変更なし

rs = 7-p_t;

}

public void south(){

top = 7-p_f;

front = p_t;

//rsは変更なし

}

public void right(){

//topは変更なし

front = p_r;

rs = 7-p_f;

}

public void left(){

//topは変更なし

front = 7-p_r;

rs = p_f;

}

 

public static void main(String args[]){

file.fileRead(args[0]);

Dice dice = new Dice();

dice.lotation();

}

}

 

ミスってたとこ…

・そもそもの一番最初の1が上の時を足し忘れていた。

・2回目のサイコロの回転の開始時に、サイコロの状態を初期化し忘れていた事。修正前は、前回のサイコロの回転の最後の状態から開始していた。

 

この2点を修正することによって、ちゃんとした実行結果を得られる事ができた。

*1:line = br.readLine(

〜続〜リハビリプログラムAOJ【0501】

またまた、AOJでリハビリプログラミング

今日は、前の問題の次の問題を解いている

(データ変換 | Aizu Online Judge)

そのため、前の問題と似ているところがあり

少しだけ、昨日のコードを流用させていただいた。

昨日とコードが少しかぶっているのと2日連続のコーディングにより

すこしずつ、コーディングにかかる時間が短縮されたように感じる。

 

これもまた、昨日のと同様に入力ファイルの指定はコマンドライン引数で指定している。

他の仕様に関しては、上にのせているページと同じ通りである。

入力例と出力例はページに載っている通りなのでここでは割愛。

 

~FileRead.java~

 

package dataConversion_0501;

 

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

 

public class FileRead {

private ArrayList<String> before = new ArrayList<String>();

private ArrayList<String> after = new ArrayList<String>();

private ArrayList<String> input = new ArrayList<String>();

 

/**

* @return the before

*/

public ArrayList<String> getBefore() {

returnbefore;

}

 

/**

* @return the after

*/

public ArrayList<String> getAfter() {

returnafter;

}

 

/**

* @return the input

*/

public ArrayList<String> getInput() {

returninput;

}

 

public void fileRead(String filename){

FileReader fr = null;

    BufferedReader br = null;

    try {

        fr = new FileReader(filename);

        br = new BufferedReader(fr);

       

        String line;

        int i;

        while*1 != null){ //1行読む

        i = Integer.parseInt(line); //数字に変換

        if(i == 0) break; //EoFとしての0がきたらメソッド終了

        for(int k = 0; k < i; k++){

        line = br.readLine();

        String word = line.split(" ", 0);

        before.add(word[0]);

        after.add(word[1]);

        if(k == i-1){

        before.add(null);

        after.add(null);

        }

        }

        line = br.readLine();

        i = Integer.parseInt(line);

        for(int k = 0; k < i; k++){

        line = br.readLine();

        input.add(line);

        //複数入力間において間のデータにnullを代入する。

        if(k == i-1){

        input.add(null);

        }

        }

        }

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            br.close();

            fr.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

}

 

 

~Conversion.java~

 

package dataConversion_0501;

 

public class Conversion {

private static FileRead file = new FileRead();

 

public void conversion(){

System.out.println(file.getBefore());

System.out.println(file.getAfter());

 

for(int i = 0; i < file.getInput().size(); i++){

 

//入力が次の入力に切り替わるとき

if(file.getInput().get(i) == null){

System.out.println(); //改行処理

while(file.getBefore().get(0) != null){

file.getBefore().remove(0);

file.getAfter().remove(0);

}

//nullも除去

file.getBefore().remove(0);

file.getAfter().remove(0);

continue;

}

 

//入力がまだあるとき

for(int k = 0; file.getBefore().get(k) != null; k++){

if(file.getBefore().get(k).equals(file.getInput().get(i))){

file.getInput().remove(i);

file.getInput().add(i, file.getAfter().get(k));

break;

}

}

System.out.print(file.getInput().get(i));

}

}

 

public static void main(String args){

file.fileRead(args[0]);

Conversion con = new Conversion();

con.conversion();

}

}

 

*1:line = br.readLine(

リハビリプログラムAOJ【0500】

50年ぶりぐらいにプログラミングするからまずは、リハビリからしよ!!ってことで

AOJの問題(カードゲーム | Aizu Online Judge)を解いていて

まぁ、解き始めはこんなん2時間あればかけるやろって感じだったが

最近、プログラミングに触れてなさ過ぎてほぼ完全に書き方忘れとったww

結局、間にハリーポッターを鑑賞する事をはさんで8時間ぐらいかかったwwwwwww

まぁ、なにはともあれかけたのでとりあえずのせる

これからは、たいしたコードではなくとものせていこうと思う。

(特に、ブログにのせれるネタがないということも一因であるww)

たいしたコードではないが自分のコードを客観的に見るために

いつものエクリプス上のコードとは違う雰囲気の中見ていこうと考えたからである。

ちなみに言語はjavaで書いた。

 

リハビリとしてはちょうどいい優しさだった

今日、残ってる時間と明日からもいろんなコードを書いていこう

 

プチ解説としては、ファイル名はコマンドライン引数で指定

その他の事に関しては、AOJの問題が要求している仕様である。

実行例は、上の問題のページの通りの挙動をしているが

わざわざのせるのがめんどくさいのでここでは割愛。

 

このコードを書いていて新しく学んだ事はBufferedReaderを用いて

入力ファイルを1行ずつ読み込んで処理できるという事を学んだ(それぐらい…笑)

という実際に得られた知識どうこう以前に自分が夏休み中にプログラミングをしているという事が

もうそれは、大きな成長なのでまぁまぁ、よいスタートだと思う。

この調子でいきたい

 

~FileRead.java~

 

package cardGame_0500;

 

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

 

/**

 * データの読み込みを行うクラス

 * 読み込みファイル名 cardGameInput.docx

 * @author seiya

 */

 

public class FileRead {

//配列要素数の限界は10000である(n≦10000)

private ArrayList<Integer> A = new ArrayList<Integer>();

private ArrayList<Integer> B = new ArrayList<Integer>();

 

/**

* @return the a

*/

public ArrayList<Integer> getA() {

returnA;

}

 

/**

* @return the b

*/

public ArrayList<Integer> getB() {

returnB;

}

 

/**

* 入力ファイルのデータを1行ずつ読み込みデータをセットするメソッド

*/

public void fileReadSet(String filename){

FileReader fr = null;

    BufferedReader br = null;

    try {

        fr = new FileReader(filename);

        br = new BufferedReader(fr);

       

        String line;

        int i;

 

        while*1 != null){ //1行読む

        i = Integer.parseInt(line); //数字に変換

        if(i == 0) break; //EoFとしての0がきたらメソッド終了

        for(int k = 0; k < i; k++){

        line = br.readLine();

        String word = line.split(" ", 0);

        A.add(Integer.parseInt(word[0]));

        B.add(Integer.parseInt(word[1]));

        //複数ゲーム間において間のデータにnullを代入する。

        if(k == i-1){

        A.add(null);

        B.add(null);

        }

        }

        }

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            br.close();

            fr.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

return;

}

}

 

 

~Battle.java~

 

package cardGame_0500;

 

import java.util.ArrayList;

 

/**

 * 実際にカードゲームを行い点数を競うプログラム

 * @author seiya

 *

 */

 

public class Battle {

//カードゲームの勝負の結果を格納する変数

private ArrayList<Integer> Ra = new ArrayList<Integer>();

private ArrayList<Integer> Rb = new ArrayList<Integer>();

private static FileRead file = new FileRead();

 

public void numComp(){

int Ap = 0, Bp = 0;

 

for(int i = 0; i < file.getA().size(); i++){

if(file.getA().get(i) == null){

Ra.add(Ap);

Rb.add(Bp);

Ap = 0;

Bp = 0;

continue;

if(file.getA().get(i) < file.getB().get(i)){

Bp += (file.getA().get(i)+file.getB().get(i));

}

if(file.getA().get(i) > file.getB().get(i)){

Ap += (file.getA().get(i)+file.getB().get(i));

}

if(file.getA().get(i) == file.getB().get(i)){

Ap += file.getA().get(i);

Bp += file.getB().get(i);

}

}

}

 

public void showResult(){

for(int i = 0; i < Ra.size(); i++){

System.out.println(Ra.get(i)+" "+Rb.get(i));

}

}

 

//コマンドライン引数にファイル名を代入

public static void main(String args){

Battle battle = new Battle();

file.fileReadSet(args[0]); //入力データの読み込み

battle.numComp();

battle.showResult();

}

}

*1:line = br.readLine(

なぜか、読者になっていなかったw

わたけんのブログを久々に見たら 思ったより更新されとって 置いていかれた気分になったww そもそも、なんでブログが更新されても 通知が来んねやろって考えたら ブログにいったときに読者になるボタンがあって なぜに、読者のはずやのに 読者になってへんねやって考えたら 読者になってなかった事件 これからは、ブログの動向を把握させていただくww

今年の夏休みの目標==為替レート自動売買システムの開発【もう一人の俺をつくる】

今年も夏休みが始まったが未だに大学院に進学するか就職するか迷っている。

自分の希望としては、大学院に残って研究をするよりもさっさと社会に出て実際に開発をしたい。まぁ、研究室配属されてから研究が楽しいとか言い出す可能性が大アリなんだが…w(99%そうなるww)

まぁ、就職に傾いた場合、理系就職したければ企業に開発物を見せる必要性があるので

最後の夏休みを迎えて、これからは、いろいろ開発を楽しんでいきたいと思う。

 

1.取引シグナル感知システム

最初から完全な自動売買システムを完成できるとは思っていないので

まず、取引のシグナルが感知されたらケータイに通知がいくように設計していきたいと考えている。

 

2.取引アルゴリズムの決定

 基本的には、非常にプログラミングがしやすい5分足チャートのボリバン+MACDを使用してのトレードを行わせようと考えている。

 

必要であると予測される知識

 

・画像解析or数値処理

主に(ほぼ100%??)テクニカル分析を用いるためチャートの情報を解析する必要性が存在する。

 

・Webサイト上の数値や画像をプログラムで使用できるように取り込む

解析元データは、ネット上からとってこようと考えている。そのため、ネット上のデータをプログラムで使用できるように取り込まなければならない。その知識に関しても必要である。

 

・新しい言語の習得

今まで書いた事のあるプログラミング言語は、c言語javaPHP、一瞬prologであったがシステムの都合上別の言語を習得する必要性が出てくる可能性がある。

その場合は、頑張るしかないな笑

 

最近は、テストとかあってプログラミング自体が久々なのでAOJとかで勘を取り戻す事にした。あと、これからは自分が書いたプログラムは、些細なものでも適当にここにのせていこうかなと考えている。

本来なら、もう少し丁寧にこの記事を書いていたのだが書いている途中でページを間違えて閉じてしまい半分ぐらい書いてる内容を忘れてしまったので適当なのは仕方ない。

2016/08/11時点での目標

進捗、変更があれば追記しよ。

テスト前日熱発症。オワタww??

テスト前日にあろうことか熱を出してしまったwww

だが、意外とこうゆう時ほど焦るもので

20時まではスヤスヤしてたがそっからは

丸薬も飲んだのでまぁまぁはかどっておる

 

しゃあなし頑張るでなww

英国国民投票EU離脱FX取引レポート【2016/06/23】投票発表【2016/06/24】

土日も終わりかなりおくれてしまったが、金曜日のトレードのレポートを書いていきたいと思う
経済史の中でも歴史に残りそうなこのビッグイベント取引しない手はなかったので初心者ながら参戦させていただいた。(取引自体は半年間しているが、普段の元手は株で30万FXは1000円であるのに対し、今回は株の資金30万円をFXの口座に移して挑ませていただいた。実際は1万単位での取引がメインであったので30万を使った局面はなかったが。)

まず、総合結果からいわせていただくと、57戦28勝29敗で61,171円の利益となった。
学生という身分ながらかなり稼がせていただいたが
これを特にパーっと使うでもなくこのままこの勢いで年収103万を超えてやるか〜とか考えだしたり
株の軍資金の足しにでもするか〜と考えるあたりが俺。未だにこの利益を株以外に使う予定はありませんww

f:id:seiyafield:20160710170733j:plain
f:id:seiyafield:20160710170749j:plain
f:id:seiyafield:20160710170804j:plain
f:id:seiyafield:20160710170819j:plain
f:id:seiyafield:20160710170853j:plain
f:id:seiyafield:20160710170904j:plain


最終的に6時間トレードを行った訳だが、ここまで長時間トレードをするのは初めてであったので
取引時間が4時間を超えた当たりから集中力が切れたのか、最後の2時間は全敗で6万円の損失を被った。(最後の2時間のトレード9戦9敗ww)
一番重要な敗因としては、そこまでは、1万単位での取引であったが何を考えたか急に2万単位での取引をはじめた。かつ、普段は絶対に行わないナンピン取引を行ったためいつものシステムトレードの形に落とし込むことができず、最終的に売買の大幅スプレッド、急騰、急落のスリッページの嵐の取引の中に巻き込まれ、損失が大きくなってしまったところで損切りをしたのが原因であると考えられる。(間違いなく12万を稼いだ瞬間に調子に乗ってしまったことで、普段のルールを破った事が原因だ。)今度からのトレードは完全にルールを守ってトレードをする事を今まで以上に徹底していきたい。

ここで、今回のトレードの手法であるが投票結果と世論調査により1~5円の急騰、急落が発生しうるため、いつもしているテクニカルトレードに新たなルールを加えたトレード法を用いてトレードする事となった。その手法であるが、6/23日に考案した「地震トレード(自称)」をシステマティックな形式に落とし込めて、トレードを行った。

英EU離脱リスク回避による日経平均反落

f:id:seiyafield:20160622152225j:plain


ローソク足を見ると買いと売りの拮抗であるが
終値よりは低い状態

日本時間、金曜日15時に「離脱」「残留」の最終発表であるがその前から為替相場は動くはずである

投票結果は地域ごとに分割して発表されていくので
GBP/JPYチャートの形を見ればどちらが優勢かわかる

今回のイベントに際しての自分の作戦は


f:id:seiyafield:20160622152720j:plain


1分足はトレード用のチャートで使用
30分足はトレンド読み取り用として使用
今のチャート(水曜日15時ほど)を見ればわかるが
30分足で見た際横ばいである。
これがどのように動いていくかを確認して
トレードのタイミングと売りか買いを判断する。
大まかな流れとしては


為替が下落⇒離脱が優勢
為替が上昇(横ばい)⇒残留が優勢

離脱が優勢⇒
大幅な円高、ポンド安予想としFXで空売り
残留が優勢⇒
株式相場の負の懸念が解消⇒株で買い
という作戦でいこうと考えている。

具体的な作戦としては木曜日の15時までに考えることとする。

英国EU離脱を翌日に控えて…

明日23日、ようやく英国の国民投票の日となる。
これを受けて本日の株価を予測すると相場開始時~数時間は上がると見込まれるが、大引け前にリスク回避の売りが入ると考えられるため後場の相場の動きは減少に入ると思われる。
チャートの形では、75日移動平均線が横ばいの状態で線からの乖離が大きいため、反動で昨日の終値と比較すると少し上昇から始まると考えられる。
f:id:seiyafield:20160622085253j:plain
信用売りの数を見ていなかったため終値よりも低いところからのスタートとなった。ケアレスミスに気をつけたい

イムラ封筒【3955】、プラップJ【2449】続伸予想的中。75日平均線を上抜け

まず、昨日より保有していたイムラ封筒【3955】日経平均の大幅下落の中で株価が上昇していた数少ない銘柄のうちのひとつ、昨日の値上がり率ランキング(全市場)ではギリギリ50位に入る。上昇トレンドにあった、75日移動平均線を上抜け。一目均衡の2点買いによる買いシグナルが出ていたためASK

昨日のチャート
f:id:seiyafield:20160614112140j:plain
f:id:seiyafield:20160614112158j:plain

本日のチャート
f:id:seiyafield:20160614112240j:plain
f:id:seiyafield:20160614112250j:plain

取引残
f:id:seiyafield:20160614112259j:plain

プラップJ【2449】についてもイムラ封筒と同様の買いシグナルであった。この銘柄に関してはかっていない。

f:id:seiyafield:20160614112338j:plain

取引残
f:id:seiyafield:20160614112415j:plain

これらの銘柄はどちらも、7月に控えた参院選に大きく関与する選挙関連銘柄であるため、日経平均が下がっているにも関わらず、上昇を続けていると考えられる。イムラ封筒の取引残に関しては買いが先週比で減少しているため、長期の保有ではなく今週中にBIDする可能性がある。そして、この記事を投稿するタイミングでは、懸念通り下落に転じてしまった。

日経平均は元々、かろうじて持ちこたえるのが望まれていたが英のEU脱退により下落、75日平行線の傾きも下向きに進行し始めた。大幅下落である。一目もこれが銘柄ならうるべきであるとの3点売りになっている。

f:id:seiyafield:20160614112802j:plain
f:id:seiyafield:20160614112755j:plain

この状況を見るからに、今は相場がかなり下落しているため待ちのタイミングではないかと考えた。
どこまで下がるかはよくわからないので、毎日、分析を怠らないようにしたい。
日経平均が下がっているこの状況下では、株を買って利益を出していくのはかなり難しい環境である。懸念材料が多いため、282円で1000株ASK290円でBIDですぐに手放した。この時はかなり不安な気持ちで取引をしていた。

なぜか、幻想的な7 segment LED

情知実験で 7segment LEDを使ったのでネットで内部回路図とかを調べていたら

このような画像がでてきた。

 

f:id:seiyafield:20151123230751g:plain

 

謎に幻想的でなんか悔しくなってしまった。

もし、彼女が工学部で論理回路を扱えるなら

これで、「HAPPY birthday」とサプライズしてくれたら泣いて喜ぶだろう(結構、作るのめんどくさいので)と妄想にふけっていた。

しかし、よくよく考えると7セグで「Y」とか「t」とか出せへんことに気づいてしまって、設計の時点で破綻していてつらい。

B問題【続編】※AC

ようやく通ったB問題、なんか自分の開発能力の低さに涙がでそうになる今日この頃だが、なんとか通った笑

 

この前の記事のプログラムのデバッグ用とコメントアウトしていたものを外して、実行すると、N = 3のときこんな感じ

a[3] = 1

a[4] = 3

a[5] = 6

a[6] = 10

a[7] = 15

a[8] = 21

a[9] = 25

a[10] = 27

a[11] = 27

a[12] = 25

a[13] = 21

a[14] = 15

a[15] = 10

a[16] = 6

a[17] = 3

a[18] = 1

 

これ、よくよく見たら、N~N×6までの数字が出てくるんやけど

ちょうど、その間をとった(int) (N + N × 6) / 2 (※(int)はキャストのつもり)

がでてくる。ので、結局、プログラムをかなり短縮してこう書き換えた。

 

  1. #include <stdio.h>
  2.  
  3. int main(void){
  4. int N = 0;
  5. while(!(1 <= N && N <=256)){
  6. scanf("%d", &N);
  7. }
  8.  
  9. if(N == 1){  //N=1のときのみ処理がかわる。
  10. puts("1");
  11. }
  12. else {
  13. printf("%d\n", (N + N*6)/2);
  14. }
  15.  
  16. return 0;
  17. }

 

結局これで、AC(Accept)されました。

この前、書いたプログラムが間違えてて、今回のプログラムがあっているとゆうのも

悲しくなってしまうがまぁ、なにわともあれあきらめずちゃんと最後までできたので良かったとも感じている。

CODE FESTIVAL 2015 決勝【B問題】※TLE ※再帰関数

一番最近のコードフェスティバルのB問題

問題文

ボードゲームにはダイス(サイコロ)を使うゲームが少なくありません。そこで、ダイスについての問題を出したいと思います。

問題: 6 面ダイスを N 個振るとき、ダイスの目の和として出る確率が最も高い値は何か?そのような値が複数ある場合は、そのうち最も小さい値を答えよ。

 

問題文を読んだ瞬間、再帰関数使って余裕やなと考えて、出力結果があっていたので提出、すると結果は初めて出てきたTLE(Time Limit Exceeded)と返ってきた。どうやら、プログラムの制限時間2秒をオーバーしてしまい、再帰関数では、時間がかかりすぎるようなので非再帰の関数を明日以降考えていきたいと思う。一応以下、ソースコード。コードフェスティバルの提出用のプログラムをそのまま、コピペしたのでインデントは一切行われていない。

 

  1. #include <stdio.h>
  2.  
  3. int a[6*256];
  4.  
  5. void dice_total(int N, int total){
  6. if(N == 0){ //最後
  7. a[total]++;
  8. return ;
  9. }
  10.  
  11. int k;
  12. for(k = 1; k <= 6; k++){
  13. total++;
  14. dice_total(N-1, total);
  15. }
  16. }
  17.  
  18. int main(void){
  19. int k, n, N;
  20. scanf("%d", &N);
  21.  
  22. for(k = 0; k < 6*N; k++){
  23. a[k] = 0;
  24. }
  25.  
  26. dice_total(N, 0);
  27.  
  28. int i = 0;
  29. for(k = 0; k <= 6*N; k++){
  30.  
  31. // printf("a[%d] = %d\n", k, a[k]); //デバッグ
  32.  
  33. if(a[k] > i)
  34. i = a[k];
  35. }
  36.  
  37. for(k = 0; k <= 6*N; k++){
  38. if(a[k] == i){
  39. printf("%d\n", k);
  40. break;
  41. }
  42. }
  43.  
  44. return 0;
  45. }

それはそうと、ネットにソースコードをあげることが増えてきたので

そろそろD-Wコードを読んだ方が良いかもしれない。

ようやく、自前のmacでEclipseが開けるようになった。【統合開発環境Eclipse】

Atcoderの問題を解こうと思い立ち、せっかくだからもうそろそろ、javaでも一人歩きしてプログラミングができる程度には成長しただろう(まだ、java歴1ヶ月だが…w)と楽観的にネットでEclipseを拾いファイルを解凍し(下図のEclipse.app)「よし!ソースコードを書こう!!」と意気ごんだわけで…

f:id:seiyafield:20151117084001p:plain

こいつ↑をクリック、すると、英語だったので何て書いてあるかは忘れてしまったが、日本語訳すると

「あなたの、macではversion1.7.0以降の java が要求されています。」みたいなことが表示されて、こいつを開くことができなかった。

 

正直、プログラミングに関しては1年半勉強しているので人並み?にはできるはずなのであるが、PATHを通すとかそのような知識は授業でc言語を用いてゲームを作った際のSDLライブラリへのPATHを通した経験があるぐらいのなまじ知恵なのでまったくわからない。

結局、ネットでいろいろと調べた結果、ターミナル上で「java -version」とゆうコマンドをうつと、

seiya-no-MacBook-Pro:A seiya$ java -version

java version "1.6.0_65"

Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)

Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

↑のように出力される。

どうやら、この出力から読み取れることはこのPCの javaのデフォルトがversion "1.6.0_65"であるらしいので

このversionを1.7.0以降に変えることができれば、俺の勝ちである。

 

ちなみに、さきほどのEclipse.appはversion"1.8.0_66"が必要であるので、javaの環境もそれ相応のversionにまで、あげる必要がある。

 

ちなみに、このEclipse.appがどのversionが求められているかは、macのシステム環境設定で

f:id:seiyafield:20151117104037p:plain

一番下にjavaとあるのがわかる。

これをクリックすると、一定時間後にjavaコントロールパネルとゆうものが表示される

f:id:seiyafield:20151117104101p:plain

上の5つの項目の中からJavaとゆう項目を選択そして、javaのバージョンを表示と書いてあるので、表示させると

f:id:seiyafield:20151117104204p:plain

このように表示されるので、このPCに必要なjava versionは"1.8.0_66"であることがわかる。

よって、このPCのjavaのバージョンを更新するために必要なのがJava Development KitことJDK(いかにも、俺のjavaを強くさせてくれる感じがするw)をダウンロードすることである。

ここからは、Java SE(Standard Edition)をインストールしていく。下リンクのページは日本語版

http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html

 

これをダウンロードするには英語版のサイトにとばなければダウンロードできないので仕方なく、英語版サイトへ…。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

f:id:seiyafield:20151117104226p:plain

このページのこれ↓をクリックしてダウンロード開始

f:id:seiyafield:20151117104239p:plain

あとは、これを手順に従ってインストールしていく。途中で、なんちゃらのクリーンみたいな言葉がちらっと見えたから今までのPATHを消して、あたらしいPATHを通してるのかな?とも、思った。

なにはともあれ、これでいけたんじゃね!と思い、ターミナル上でもう一度「java -version」を入力。すると、

seiya-no-MacBook-Pro:A seiya$ java -version

java version "1.8.0_66"

Java(TM) SE Runtime Environment (build 1.8.0_66-b17)

Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

と、バリバリいい感じにversionが"1.8.0_66"に変更されていて感動。

この状態で、こいつ↓をクリック

f:id:seiyafield:20151117084001p:plain

開きました!!感動!!これで、ようやく、Eclipseを自宅でも使うことができる!!

授業後に残って課題をせずとも、自宅でできるようになったので、12月からの社畜生活の良いスタートダッシュをきる準備がまたひとつ整った。

正直、俺がここに書いていることがあっているかわからないので、訂正がある場合は指摘を頂戴したい。