challenge データの整列

(x, y) の座標情報を以下の2種類の方法で整列する機能を実現してください。

  • (x, y) の辞書順(まず x で昇順に整列して、x が同じデータに対して y で昇順に整列する)
  • (0, 0) からの距離の昇順

データの表現方法はタプルなり構造体/オブジェクトなり各自で適当に選んで下さい。

Posted feedbacks - Other

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
#元データ
$list = array(
    array( "x"=>3,"y"=>3)
    ,array( "x"=>2,"y"=>10)
    ,array( "x"=>2,"y"=>1)
    ,array( "x"=>1,"y"=>2)
    ,array( "x"=>1,"y"=>1)
    ,array( "x"=>3,"y"=>1)
    ,array( "x"=>1,"y"=>10)
);

#辞書順
usort(
    $list,
    create_function(
        '$a,$b',
        'return ($a["x"] == $b["x"]) ? ($a["y"] > $b["y"]) : ($a["x"] > $b["x"] );'
    )
);
var_dump($list);
#距離順
usort(
    $list,
    create_function(
        '$a,$b',
        'return pow($a["x"],2)+pow($a["y"],2) > pow($b["x"],2)+pow($b["y"],2);'
    )
);
var_dump($list);
?>

2値の配列で座標を表現して、その配列をソートします。

1
2
3
4
5
6
coordinates = Array.new(10) { [rand(10), rand(10)]}

# by dictionary
p coordinates.sort
# by distance
p coordinates.sort {|(x1, y1), (x2, y2)| (x1**2 + y1**2) <=> (x2**2 + y2**2) }

Index

Feed

Other

Link

Pathtraq

loading...