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);}}