プログラミングしたい日記

いつもプログラミングとか音楽聞いてたりする人の日記です

これから毎週日曜日AOJ2題づつやっていこうと思います

どうも。大学入学したwintermaplesです。大学エンジョイしてます。

最近数学的なプログラミングあんまやってない気がするのでAOJやるの習慣づけようかなーって思ってます。
ちなみに、既に少しだけやっちゃってます。
ルールは以下の通り

  • 毎週日曜日にAOJの問題を2題解く
  • 解説とソースコードを書く
  • やらなかったら来週に持ち越し。最大6題
  • Volume0から順番に解いていく
  • 使える言語の中からできるだけランダムに使う
  • 自前のライブラリみたいなのは使用OK。それ以外はデフォルトで入っているもののみ
  • ただし初回は土曜日(この記事を書いた日)

こんな感じでやっていきます。

じゃあ早速

AOJ Volume 0 Q4

Simultaneous Equation | Aizu Online Judge

問題の概要

2元1次連立方程式を解く。ただし、小数点第4位で四捨五入。解なしは考慮しない。

つまづいた所
double x = (double) (c * e - b * f) / (a * e - b * d);

ここint/intになってて、結果もintにするように最初してたからWrong Answer勃発してた。
それ以外は特になし。ちなみに、最初まともに計算して解の公式作ってた。調べたら一般性のある解の公式あるじゃんっていう。

ソース
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Scanner;

/**
 * Created by wintermaples on 2017/04/29.
 */
public class Main {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String read;
    while (scanner.hasNext()) {
      read = scanner.nextLine();
      //1行を読み込んでint配列に
      int[] variables = Arrays.stream(read.split(" "))
          .mapToInt(s -> Integer.parseInt(s))
          .toArray();

      //わかりやすいようにそれぞれ変数に格納
      int a = variables[0];
      int b = variables[1];
      int c = variables[2];
      int d = variables[3];
      int e = variables[4];
      int f = variables[5];

      //解はクラメルの公式で一発
      double x = (double) (c * e - b * f) / (a * e - b * d);
      double y = (double) (a * f - c * d) / (a * e - b * d);
      BigDecimal xBD = new BigDecimal(x);
      BigDecimal yBD = new BigDecimal(y);
      xBD = xBD.setScale(3, BigDecimal.ROUND_HALF_UP);
      yBD = yBD.setScale(3, BigDecimal.ROUND_HALF_UP);

      //3桁にまとめて出力
      System.out.println(
          String.format("%.3f", xBD) + " " + String.format("%.3f", yBD)
      );

    }
  }

}

AOJ Volume 0 Q10

Circumscribed Circle of a Triangle | Aizu Online Judge

問題の概要

3点の座標が与えられ、それらが作る三角形の外接円の座標と半径を求める。

つまづいた所

そもそもpythonに慣れてない。標準入力から調べんとよーわからんかった。
あと、中心の座標の一般解求めるのめんどくさかった。
python3だと四捨五入がおかしいとか出てきたけど提出したら通ったから問題ない(多分)

解説

中心の座標は2元1次連立方程式に帰着したので、さっきの解の公式にぶちこんで、フォーマット&出力して終わり。
ちなみに、中心の座標の解px, pyは次で表される。

{ \displaystyle
a_1 := 2(x_2 - x_1)\\
b_1 := 2(y_2 - y_1)\\
c_1 := x_2^2 + y_2^2 - x_1^2 - y_1^2\\
a_2 := 2(x_3 - x_1)\\
b_2 := 2(y_3 - y_1)\\
c_2 := x_3^2 + y_3^2 - x_1^2 - y_1^2\\
a_1px + b_1py = c_1\\
a_2px + b_2py = c_2\\
Solution:\\
px=\frac{(y_3-y_1)(x_2^2 + y_2^2 - x_1^2 - y_1^2)-(y_2-y_1)(x_3^2 + y_3^2 - x_1^2 - y_1^2)}{2(x_2-x_1)(y_3-y_1)-2(x_3-x_1)(y_3-y_1)}\\
py=\frac{(x_2-x_1)(x_3^2 + y_3^2 - x_1^2 - y_1^2)-(x_3-y_1)(x_2^2 + y_2^2 - x_1^2 - y_1^2)}{2(x_2-x_1)(y_3-y_1)-2(x_3-x_1)(y_3-y_1)}\\
}

カオスだなこりゃ

ソース
import math

n = int(input())

for i in range(n):
	x1, y1, x2, y2, x3, y3 = map(float, input().split()) # Get variables
	a = 2 * (x2 - x1)
	b = 2 * (y2 - y1)
	c = math.pow(x2, 2) + math.pow(y2, 2) - math.pow(x1, 2) - math.pow(y1, 2)
	d = 2 * (x3 - x1)
	e = 2 * (y3 - y1)
	f = math.pow(x3, 2) + math.pow(y3, 2) - math.pow(x1, 2) - math.pow(y1, 2)
	px = (c * e - b * f) / (a * e - b * d)
	py = (a * f - c * d) / (a * e - b * d)
	r = math.sqrt(math.pow(x1 - px, 2) + math.pow(y1 - py, 2))
	print('{:.3f}'.format(px) + ' ' + '{:.3f}'.format(py) + ' ' + '{:.3f}'.format(r))

ItaEditor 1.1.2をリリースしました[ItaEditor][NetBeans][java][プログラミング]

修正遅れて申し訳ありません。m_m

バグ修正

背景画像タブがなくなることがあるのを修正

まだ完全にバグが解消されたかどうかを確認したわけではないのでまだバグが残ってる可能性があります。
何かあればコメントお願い致します。

ダウンロード先:
https://onedrive.live.com/redir?resid=600857656291DE8D!1010&authkey=!AH0SiLo5lIRlMaM&ithint=file%2cnbm

ItaEditor 1.1.1をリリースしました

変更点

  • バグ修正
    • java.lang.ClassCastExceptionが起きるバグを修正

1.1.0については省略します。そもそも1.0.0があんまり使い勝手よくなかったからうん

ダウンロードリンクは次のリンクです。
http://wintermaples.jpn.ph/wintermaples-itaeditor-1.1.1.nbm

NetBeansを痛エディタ化

注意

二番煎じだったらごめんなさい!
まだバグがある可能性があります!

動作バージョン

NetBeans IDE 8.0.2で開発・動作確認しています。

現在の最新バージョン

1.1.2


みなさんはNetBeansで痛エディタを使いたいと思ったことはありますか?
また、NetBeansのエディタに背景画像をつけたいと思ったことはありますか?
きっとこの記事を見てる人はあるでしょう。あるよね? ね?

でも探しても見つからない... 他のエディタに乗り換えようかな...
でもNetBeansに慣れてるし...

そんなあなたに朗報です!

NetBeansを痛エディタ化できるプラグインを開発いたしました!

というわけで導入方法・使い方を解説していきます。

導入方法

以下のリンクからnbmをダウンロードします。
https://onedrive.live.com/redir?resid=600857656291DE8D!1010&authkey=!AH0SiLo5lIRlMaM&ithint=file%2cnbm




上のツールバーから [ツール]→[プラグイン]→[ダウンロード済] を選択します。
そうしたら、プラグインの追加をクリックして先ほどダウンロードしたnbmファイルを選択してインストールします。

これで導入は完了しました。

使い方

上のツールバーから [ツール]→[オプション]→[外観]→[背景画像] を選択します。
すると次のような画面が出るはずです。
f:id:wintermaples:20151118204930p:plain:w300:h200

設定項目
  • 背景画像URI
    • 背景画像のURIを入力します。URIですよ!
  • 透明度
    • 画像の透明度を指定します。
    • 透明度が高いほど透明になります。
  • 倍率
    • 画像の拡大倍率を指定します。
  • 空白
    • 右下からの空白を指定します。
    • 値が大きいほど左上に移動していきます。


設定ができたらOKを押します...
すると...?
f:id:wintermaples:20151118205456p:plain
できました!


現在確認されているバグ or バグ兼仕様

  • NetBeansが起動した後、[ツール]→[オプション]→[外観]→[背景画像] をいちいち選択しないと画像が表示されない(一度やれば閉じないかぎり大丈夫)
  • ファイルを開いた後、反映されるまでに少し遅延がある (反映を早くした)
  • 解像度が大きい画像だと結構重い
  • 透明度を下げ過ぎたり、保護色だったりするとかなり見づらい(これはどうしようもないかもしれない)

バグなどがあったら...

コメントで報告をお願いします。
バグ報告をするときは最低限

  • NetBeansのバージョン
  • 再現方法
  • URI以外の設定項目

は書いてください。

平成27年度春期 基本情報技術者試験 得点表・偏差値表

基本情報技術者試験を受けたついでに得点表(グラフ付き)と偏差値表を作りました。

得点表+グラフ

午前 午後
0~9点 6 549
10~19点 44 1237
20~29点 829 2823
30~39点 3713 6289
40~49点 7044 9688
50~59点 9095 11045
60~69点 9366 8549
70~79点 6835 4265
80~89点 2539 1406
90~100点 245 293
合計 39716 46144
平均点 58.65 51.54
通過率 48% 31%

※平均点・通過率は表のデータから算出された値です。実際には誤差があります。

f:id:wintermaples:20150518184837p:plain
f:id:wintermaples:20150518184836p:plain

引用元: IPA

https://www.jitec.ipa.go.jp/1_07toukei/seiseki_bunpu/fe27h_bunpu.pdf

偏差値表

午前 午後
0~9点 14.1 24.6
10~19点 20.8 30.0
20~29点 27.5 35.5
30~39点 34.2 41.0
40~49点 40.9 46.4
50~59点 47.6 51.9
60~69点 54.3 57.4
70~79点 61.0 62.8
80~89点 67.7 68.3
90~100点 74.7 74.0

※偏差値は表のデータから算出された値です。実際には誤差があります。

ちなみに自分の得点は・・・

f:id:wintermaples:20150518185510p:plain
午前 82.5点
午後 65.5点
で午後は少し危なかったけど合格しました!
午前は自己採点通り、午後は2点ほど低めにでました。
正直アルゴリズムで爆死したので得点の高いソフトウェア開発にかけましたorz

CSS Design created by satotaka99. Thankyou.