notpron

Deutsche Lösungen zu Notpron
git clone git://xatko.vsos.ethz.ch/notpron.git
Log | Files | Refs

commit 6b60f0896566cfcfffee9295d3fcd42a220fdd9b
parent df58f86dfabd11c9e84157c313b5f5f2ac7470eb
Author: Dominik Schmidt <das1993@hotmail.com>
Date:   Sat, 13 Feb 2016 21:22:31 +0100

Anagramm.d hinzugefügt.

Diffstat:
Objects/Program/D/Anagramm.d | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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))); + } +}