D言語でAOJを解く企画
AOJでD言語が実装されたので,2問だけ解いてみました.
暫時更新していく予定です.
D言語初心者のため,あまり参考になりません.
0000
import std.stdio; void main(){ writeln("Hello World"); }
0001
import std.stdio; void main(){ for(int i=0;i<10;i++)for(int j=0;j<10;j++)writef("%dx%d=%d\n", i, j, i*j); }
C言語で書く場合とあまり大差がありませんね.
#include<>, stdio.h, printf => import, std.stdio, writefになっただけです.
そう考えると移行コストが掛からずいいですね.
少しずつ学んでいきたいと思います.
0002(201byte)
readf("%d"ではなく,readf("%d\n")です.
readf, sort, foreachを使ってみました.
import std.stdio; import std.algorithm; void main(){ int[] n; n.length = 10; for(int i;i<10;i++) readf("%d\n", &n[i]); foreach(int i;sort!((int a, int b){return a > b;})(n)[0..3]) writeln(i); }
0003(307byte)
判定が汚いのは,D言語のせいではありません.
書いている私の責任です.
import std.stdio; import std.algorithm; import std.math; void main(){ int n; readf("%d\n", &n); while(n--){ int a, b, c; readf("%d %d %d\n", &a, &b, &c); int max_e = max(a, max(b, c)); if(pow(max_e, 2) == pow(a+b+c - max_e, 2) - 2 * a*b*c / max_e) writeln("YES"); else writeln("NO"); } }
0004 - 略
0005 - 183(byte)
関係ないのですが,型の最大値(最小値)を取得するときはmax(min)を使いましょう.
int.max char.max etc
import std.stdio; int gcd(int a, int b){ return b?gcd(b, a%b):a; } void main(){ int a, b; while(readf("%d %d\n", &a, &b)){ writefln("%d %d", gcd(a, b), a / gcd(a, b) * b); } }
0006 - 0013
劣化しました自分
0014 - 174byte
そこにPowがあったから.
import std.stdio; import std.math; void main(){ int n; while(readf("%d\n", &n)){ int s; for(int i=0;n*i<600;i++){ s += pow(n*i, 2) * n; } writefln("%d", s); } }
0015 - 0017
0018 - 356byte
AOJのStatus画面で初めてD言語を使っている方を見かけた.
import std.stdio; import std.algorithm; void main(){ int[] arr; arr.length = 5; readf("%d %d %d %d %d\n", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]); auto sortedarr = sort!((int a, int b){return a > b;})(arr); while(1){ int i = sortedarr.front; sortedarr.popFront(); if(sortedarr.empty()){ writeln(i); break; } writef("%d ", i); } }
0019 - 147byte
C++: long long int D: long
それだけです.
import std.stdio; long fact(int n){ if(n == 1)return 1; return n * fact(n - 1); } void main(){ int n; readf("%d\n", &n); writeln(fact(n)); }