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