Loading [MathJax]/extensions/tex2jax.js

2014年8月13日水曜日

文字列の重複順列を出力する

文字列の重複順列を出力する例をerlangとJavaで書いてみました。 erlangのほうがJavaの5倍も短く書けるので5倍の生産性がありまぁす!といえば経営者たちもerlangを使うことに納得してくれることでしょう。

erlang版
-module(perm).
-export([rperm/1]).
rperm(List) -> rperm(List,0).
rperm(List,C) when C =:= length(List) -> [[]];
rperm(List,C) -> [[Head|Tail] || Head <- List, Tail <- rperm(List, C+1)].
view raw perm.erl hosted with ❤ by GitHub

Java版
public class RepeatedPermutation {
static int N;
static char[] c;
static int[] p;
public static void main(String[] args) {
c = args[0].toCharArray();
N = c.length;
p = new int[N];
for (int i = 0; i < N; i++) {
calc(0, i);
}
}
static void calc(int i, int j) {
p[i] = j;
if (i == N - 1) {
for (int n = 0; n < N; n++) {
System.out.print(c[p[n]]);
}
System.out.println();
}
if (i < N - 1) {
i++;
for (int k = 0; k < N; k++) {
calc(i, k);
}
}
}
}

0 件のコメント: