memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

コードゴルフ

Javaの演習授業でコードゴルフを出題してみました。とりあえず普通に作ると以下のようなクラスです。

Link: コードゴルフ

import java.io.*;

public class Triangle {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("三角形の2辺の長さを入力してください。");
		System.out.print("a=");
		double a = Double.parseDouble(br.readLine());
		System.out.print("b=");
		double b = Double.parseDouble(br.readLine());
		System.out.println("2辺の間の角度を入力してください。");
		System.out.print("θ(単位:°)=");
		double t = Double.parseDouble(br.readLine());
		double S = a * b * Math.sin(t * Math.PI / 180) / 2;
		double c = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(t * Math.PI / 180));
		System.out.println("a="+a+" b="+b+" θ="+t+"°のとき、c="+c+" s="+S);
	}
}

これで768バイト。頑張って630バイトまでしました。

本日、授業があり、何と学生さんが556バイトに!いやー大したものです。短くできた理由を聞くと、昨日の別の授業でScannerクラスを学習したらしく、Scannerクラスを使うとparse処理も例外処理も要らなくなるため短くできます。彼と同じくScannerクラスを使うと522バイトになりました。

それにしてもScannerクラス便利ですね。。。なんで教科書「やさしいJava」ではこれ使わないんだろう?あとで追加されたクラスではあると思うけど、どちらにせよおまじないにするなら短い方がいいな。。。と。

ちなみに522バイトのコードは以下の通りです。邪悪なテク!?を使えばまだまだ短くなると思いますが、とりあえずこの辺で。

import java.util.*;import static java.lang.System.*;class TriangleCodeGolf{public static void main(String[] g){Scanner r=new Scanner(in);double a,b,c,t,S;out.print("三角形の2辺の長さを入力してください。\na=");a=r.nextDouble();out.print("b=");b=r.nextDouble();out.print("2辺の間の角度を入力してください。\nθ(単位:°)=");t=r.nextDouble();S=a*b*Math.sin(t*Math.PI/180)/2;c=Math.sqrt(a*a+b*b-2*a*b*Math.cos(t*Math.PI/180));out.print("a="+a+" b="+b+" θ="+t+"°のとき、c="+c+" s="+S);}}