ソースコード量の比較 schemeとPHP
各言語共通ロジック条件
Scala、Java、PHPでソースコードの量を比較してみる | 深追い Fukaoi.org
- 同じ年月は同じグループとしてカウントして数を求める
- 最新の年月を降順でソートする
- 無理やり1行にまとめず、ある程度の可読性は保つようにする
- 宣言部分、実装メソッドの定義部分などはカウントせず除外する
- //---(logic)----で囲んだ箇所を比較対象箇所とする
- 下記「変更前」データーから「変更後」データになるよう標準出力を行う
なんとなく挑戦
PHP版。foreachで回すのでなく関数使うとちょっと短くなる。
<?php $yearMonths = array( '2009-11', '2009-01', '2010-01', '2010-12', '2010-01', '2010-04', '2010-01', '2010-12', '2010-12', '2010-04'); //------(logic)-------------------- $myHash = array_count_values($yearMonths); krsort($myHash); print_r($myHash); //------(logic)-------------------- ?>
実行結果。
Array ( [2010-12] => 3 [2010-04] => 2 [2010-01] => 3 [2009-11] => 1 [2009-01] => 1 )
scheme版。絶対もっとうまく書けそうな気がするけど実力不足。
(define year_month '(2009-11 2009-01 2010-01 2010-12 2010-01 2010-04 2010-01 2010-12 2010-12 2010-04)) ;------(logic)-------------------- (sort (fold (lambda (item hash) (cond ((assoc item hash) => (lambda (x) (begin (set-cdr! x (+ (cdr x) 1)) hash))) (else (cons (cons item 1) hash)))) '() year_month) (lambda (x y) (string>? (x->string (car x)) (x->string (car y)))) ) ;------(logic)--------------------
実行結果
((|2010-12| . 3) (|2010-04| . 2) (|2010-01| . 3) (|2009-11| . 1) (|2009-01| . 1))
ということでちょっと残念な感じ。