Comment detail

仲間はずれの判定 (Nested Flatten)
戻り値は、
全部の要素が同じ値である:その値からなる 1 要素の配列
一つだけ仲間はずれがある:順に仲間はずれの値と多数派の値からなる 2 要素の配列
その他:要素なしの配列
 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
32
import std.stdio;

T[] classify(T)(T[] xs){
    if(xs.length < 3){
        return [];
    }

    int[T] h;
    foreach(e; xs){
        if(h.length == 3){
            break;
        }
        h[e]++;
    }

    if(h.length == 1){
        return [xs[0]];
    }
    else if(h.length ==  2 && h.values.sort[0] == 1){
        int minorKeyIndex = h[h.keys[0]] > h[h.keys[1]];
        int majorKeyIndex = !minorKeyIndex;
        return [h.keys[minorKeyIndex], h.keys[majorKeyIndex]];
    }
    return [];
}

void main(){
    writefln(classify([1, 1, 1, 1]));     // [1]
    writefln(classify([1, 2, 1, 1, 1]));  // [2 1]
    writefln(classify([1, 2, 1, 2, 1]));  // []
    writefln(classify([1, 2, -1, 0, 3])); // []
}

Index

Feed

Other

Link

Pathtraq

loading...