ENIXERの日記

2014-12-10

競技プログラミングでEclipseを使う

16:29

この記事は Competitive Programming Advent Calendar 2014 の十日目の記事です。


Eclipse+Javaで素早くコードを書く

自分はJavaで競技プログラミングをしています。

競技プログラミング界ではC++でコードを書く人がかなり多く、Javaは入力する文字数が多いからという理由で敬遠されがちですが、JavaにはEclipseという有名な無料のIDEがあり、

  • コード補完が強力
  • デバッグもできる
  • ICPCでも使える

など、使い方にさえ慣れれば便利になります。

これを利用しない手はないと思うんですよねー。

ということで、便利なEclipseの機能(のうち、自分がよく使っているもの)をTips的に紹介したいと思います。

競技プログラミング界にJavaerが少しでも増えることを願って。


ショートカットキー

コード補完(Win/Mac: Ctrl+Space)

これが一番便利。とりあえず使っておけばコーディングスピードが劇的に上昇します。

よく使うものだと、

// main
public static void main(String[] args) {

}

// syso(sysout)
System.out.println();

// for
for (int i = 0; i < args.length; i++) {

}

// foreach
for (String str: args) {

}

// new
type name = new type(arguments);

他にも、

  1. インポートしていないクラス → 勝手にimport文を追加
  2. クラス名、メソッド名、フィールド名の最初の何文字か → 対応する名前を推測して補完

などがあります。


コードフォーマット(Win: Ctrl+Shift+F / Mac: command+Shift+F)

見やすさ is very important.


上下移動(Win/Mac: Alt+上下キー)

コードを上下に移動させることができます。

for (int i = 0; i < n; i++) {
}
System.out.println(i);

が、一発で

for (int i = 0; i < n; i++) {
    System.out.println(i);
}

になります。


一行削除(Win: Ctrl+D / Mac: command+D)

提出前にデバッグ用のコードを削除するときとかに役に立ちます。


変数名や関数名の一括変更(Win: Alt+Shift+R / Mac: command+Alt+R)

競技プログラミングだとちょっと使う機会が少ないかも?

参照している部分まで全部変えてくれるので、Androidアプリを作ったりするときには便利です。


コメントアウト(Win: Ctrl+/ / Mac: command+/)

その行をコメントアウトできます。

コメントアウトされている行に対してコマンドを打つとコメントが解除されます。

複数行を選択してからコマンドを打つと選択範囲を全部コメントアウトしてくれます。

バグの原因の切り分けに、デバッグ用のコードのコメントアウトに、単なるコメントにも。


デバッグ

Eclipseにも他のIDEと同じようにデバッガが標準でついています。

ブレークポイントを決めてからデバッガをぽちっとしてやれば、そのポイントまでプログラムが動いたあとに一時停止します。

その後は、F6で1行実行したり、F8で次のブレークポイントまで実行したりすることができます。

なんかプログラムがバグったときに、やっぱりあると便利です。


プラグイン

「Help」の「Install New Software」から、プラグインをインストールすることができます。

競技プログラミングで使えると思うプラグインは

の2つです。

特にEclipseCoderはTopCoderをやる上でかなり便利なプラグインで、Eclipse上からArenaを起動したり、テストを自動生成したり、Eclipse上で書いたコードをそのままSubmitできたりします。

2014-07-13

SRM 627

| 21:46

もうすぐCf始まるけど、その前に書いておく。

Div2Easy HowManySquares

  • 問題概要

長さが様々ないくつかの棒が与えられる。

同じ長さの棒を4つ使って正方形を作るとき、正方形はいくつ作ることができるか。

  • 解法

特に考えることはない。

入力の配列の各値が4ごとに結果をインクリメントしていく。

  • 結果

Passed System Test

Div2Medium HappyLetterDiv2

  • 問題概要

小文字のアルファベットからなる文字列が与えられる。

異なる文字を対にして文字列から取り除くことができる。

このとき、どのような取り方をしても必ず残る文字があるか。あればそれを求めよ。

  • 解法

考え方としては、

どのような取り方をしても残る文字がある

ある文字の数がその他の文字の数の合計を上回っている

ある文字がその文字列の文字数の半分より多い

という感じ。

したがって、各文字の出現回数をカウントし、文字列の長さの半分より多い出現回数の文字があればそれを返す。

  • 結果

Passed System Test

Div2Hard BubbleSortWithReversals

  • 問題概要

ある数列をバブルソートを使って昇順にソートする。

この数列から部分数列を規定の回数選んでその配置を逆にすることができるとき、バブルソートで行われる数値の交換は最小で何回になるか。

ただし、選ぶ部分数列は互いに独立(同じ要素を含まない)でなければならない。

  • 結果

Opened

  • 考えたこと

たぶん、与えられた配列の中で降順になっている部分数列を要素数が大きい方から順に逆にすればいいと思う。

最終結果

  • レート

1032→1124

  • 感想

部屋トップはとれたけど、今回もHardが解けなかった。

ぶっちゃけHardも解けないのにDiv1に行ってもしょうがないので、練習あるのみ。

2014-07-09

Eclipse Luna 導入まとめ

| 14:26

Eclipse 4.4 Lunaを導入したので、初期設定を備忘録的にまとめ。

OSMac OS X 10.9.3。

(1) ダウンロード

https://www.eclipse.org/downloads/

Eclipse IDE for Java Developers」をダウンロード。

プラグイン入れればいいからどれを落としてもいいと思うけど、Standardは全部入りで超重いからやめたほうがいいって誰かが言ってた気がする。

ダウンロードできたら適当な場所に展開して、ディレクトリごとアプリケーションディレクトリに入れる。

(2) プラグインのインストール

研究用

Maven

http://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-buildhelper/0.15.0/N/0.15.0.201207090124/

Android Development Tools(ADT)

https://dl-ssl.google.com/android/eclipse/

・Xtext、Xtend

marketplaceで「Xtext」と入れて検索、インストール

個人用

・AojCoder

http://nise-nabe.github.com/AojCoder/site.xml

・EclipseCoder

http://fornwall.net/eclipsecoder/