challenge 擬似lsの実装

スラッシュで区切られた文字列の配列(以下パスリスト)がある。
このパスリストにたいして擬似的なlsを行いたい。
lsはパスリストと表示対象ディレクトリのパスを入力する。

例としては以下のようになる。
pathList = ["aaa/bbb","aaa/ccc","aaa/ddd/eee","bbb/ddd/eee"]

ls(pathList,"aaa/")
>["bbb","ccc","ddd/"]

ls(pathList,"aaa/ddd/")
>["eee"]

なおパスリストが大きくなったとき、速度がなるべく低下しないように実装するのが望ましい。
文字列は任意の文字コードであると仮定してかまわない。

Posted feedbacks - Erlang

ふつうに。

erl -noshell -s pls -s init stop
["bbb","ccc","ddd/"]
["eee"]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
-module(pls).
-export([start/0]).

start()->
    PathList=["aaa/bbb","aaa/ccc","aaa/ddd/eee","bbb/ddd/eee"],
    ls(PathList,"aaa/"),
    ls(PathList,"aaa/ddd/").

ls(PathList,Target)->
    erlang:display([addslash(string:tokens(string:substr(X,string:len(Target)+1),"/"))||X<-PathList,string:str(X,Target)=:=1]).

addslash([T,_N|_R])->
    T++"/";
addslash([T]) ->
    T.

ぜんぜんふつうにできてなかったー

PathList=["aaa/bbb/ccc","aaa/bbb/ddd"]
ls(PathList,"aaa/")
>["bbb/","bbb/"] ...orz

以下、重複削除したもの。
1
2
[put(addslash(string:tokens(string:substr(X,string:len(Target)+1),"/")),1)||X<-PathList,string:str(X,Target)=:=1],
erlang:display(get_keys(1)).

Index

Feed

Other

Link

Pathtraq

loading...