Skip to content

Commit 6b81e7f

Browse files
committed
Add excercise 21.
1 parent 61051f0 commit 6b81e7f

File tree

4 files changed

+70
-1
lines changed

4 files changed

+70
-1
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ src/redBlack.cmi:
1919
ocamlc -c src/redBlack.mli
2020

2121
a.out: ${SRC} src/redBlack.cmi
22-
ocamlc -o a.out -I ./src ${SRC}
22+
ocamlc -o $@ -I src ${SRC}
2323

2424
.PHONY: clean
2525
clean:

src/ex2101.ml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
open Ex1201
2+
3+
(* 目的: eki_t 型の値を受け取り, きれいに表示する *)
4+
(* print_eki : eki_t -> unit *)
5+
let print_eki eki =
6+
(print_string eki.namae;
7+
print_string "駅の最短距離は";
8+
print_float eki.saitan_kyori;
9+
print_string "km です。";
10+
print_string "手前の駅は";
11+
print_string (List.fold_left (fun acc s -> acc ^ ", " ^ s) "" eki.temae_list);
12+
print_string "です。";
13+
print_newline ())
14+
15+
(* テスト *)
16+
let () =
17+
let syuten_eki = (Ex2005.dijkstra "ikebukuro" "iidabashi") in
18+
print_eki syuten_eki;
19+
()

src/ex2102.ml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
(* 目的: 2以上 n 以下の自然数のリスト l を受け取り, そのうちの素数のリストを返す *)
2+
(* sieve : int -> int list -> int list *)
3+
let rec sieve l =
4+
print_int (List.length l); print_newline ();
5+
match l with
6+
| [] -> []
7+
| hd :: tl ->
8+
hd :: (sieve (List.filter (fun x -> x mod hd <> 0) tl))
9+
10+
(* 目的: 自然数 n を受け取り, n 以下の素数のリストを返す *)
11+
(* prime : int -> int list *)
12+
let prime n =
13+
let rec enumurate i =
14+
if i > n then []
15+
else i :: enumurate (i + 1)
16+
in
17+
sieve (enumurate 2)
18+
19+
(* テスト *)
20+
let () =
21+
print_endline "[debug] prime 2";
22+
assert (prime 2 = [2]);
23+
print_endline "[debug] prime 10";
24+
assert (prime 10 = [2; 3; 5; 7]);
25+
()

src/ex2103.ml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
open Ex1201 (* eki_t *)
2+
open Ex2101 (* print_eki *)
3+
4+
(* List dijkstra *)
5+
(* open Ex1605 *)
6+
7+
(* Binary Tree dijkstra *)
8+
(* open Ex1715 *)
9+
10+
(* RedBlack dijkstra *)
11+
open Ex2005
12+
13+
let main shiten_romaji syuten_romaji =
14+
let syuten_eki = dijkstra shiten_romaji syuten_romaji in
15+
print_eki syuten_eki;
16+
()
17+
18+
let () =
19+
if Array.length Sys.argv < 3 then (
20+
print_endline (Sys.argv.(0) ^ " <shiten_romaji> <syuten_romaji>");
21+
exit 1
22+
) else (
23+
main Sys.argv.(1) Sys.argv.(2);
24+
exit 0
25+
)

0 commit comments

Comments
 (0)