challenge データの整列

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

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

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

Posted feedbacks - Perl

どないだ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#! /bin/perl
use warnings;
use strict;
use Data::Dumper;
my @data = ( [1,2],[5,8],[-2,5] ,[1,6],[4,7]);

print "辞書順\n";
print Dumper [ sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @data ];
print "距離順\n";
print Dumper [sort { $a->[0] ** 2 + $a->[1] ** 2 <=> $b->[0] ** 2 + $b->[1] ** 2} @data];

Data::Dumperを使わないversionです。 サンプルデータはhttp://ja.doukaku.org/comment/5863/から拝借致しました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/env perl

use strict;
use warnings;
use Carp;

my @aoDatas = ([1,2],[5,8],[-2,5] ,[1,6],[4,7]);
&out('DICTIONARY:',sort{$a->[0] <=> $b->[0] || $a->[1] <=> $b->[1]}@aoDatas);
&out('DISTANCE:',sort{$a->[0]**2+$a->[1]**2 <=> $b->[0]**2+$b->[1]**2}@aoDatas);
exit;

sub out{
  print shift;
  print "\n".join(',',map{'('.$_->[0].','.$_->[1].')'}@_)."\n";
}

Index

Feed

Other

Link

Pathtraq

loading...