commit 6b60f0896566cfcfffee9295d3fcd42a220fdd9b
parent df58f86dfabd11c9e84157c313b5f5f2ac7470eb
Author: Dominik Schmidt <das1993@hotmail.com>
Date: Sat, 13 Feb 2016 21:22:31 +0100
Anagramm.d hinzugefügt.
Diffstat:
1 file changed, 59 insertions(+), 0 deletions(-)
diff --git a/Objects/Program/D/Anagramm.d b/Objects/Program/D/Anagramm.d
@@ -0,0 +1,59 @@
+import std.stdio;
+import std.algorithm;
+import std.uni;
+import std.range;
+import std.getopt;
+
+
+
+void writeAnagrams(Range)(in string[][string]words, Range r) if(is(ElementType!Range : const(char)[])){
+
+}
+
+struct Anagram{
+ private string[][string] index;
+
+ private static string toKey(in char[] str){
+ return cast(string)str.map!(a=>a.toLower).array.sort;
+ }
+
+ void add(in char[] str){
+ index[toKey(str)]~=str.idup;
+ }
+ string[] get(in char[] str){
+ string[]* p=toKey(str) in index;
+ if(p==null)
+ return null;
+ return *p;
+ }
+}
+
+void main(string[] args){
+ Anagram ana;
+ string filename="-";
+ bool anagrams_on_stdin=true;
+ getopt(args,
+ "word-file|f", &filename,
+ "anagrams-stdin|s", &anagrams_on_stdin,
+ );
+ File f;
+ if(filename=="-"){
+ if(anagrams_on_stdin){
+ throw new Exception("Can't read anagrams _and_ words from stdin");
+ }
+ f=stdin;
+ }
+ else{
+ f.open(filename);
+ }
+ scope(exit){f.close();}
+
+ f.byLine().each!(a=>ana.add(a));
+
+ if(anagrams_on_stdin){
+ stdin.byLine.each!(a=>writeln(ana.get(a)));
+ }
+ else{
+ args.each!(a=>writeln(ana.get(a)));
+ }
+}