commit ee57c3fe6818c6f4c9fe9611bcdf806ececa198c Author: Barpfotenbaer Date: Wed Oct 4 22:10:50 2017 +0200 first commit diff --git a/Hormonspiegel b/Hormonspiegel new file mode 100755 index 0000000..55ffed5 Binary files /dev/null and b/Hormonspiegel differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/doc.go b/doc.go new file mode 100644 index 0000000..cc6b05c --- /dev/null +++ b/doc.go @@ -0,0 +1,22 @@ +// Hormonspiegel project doc.go + +/* +Hormonspiegel document + + +Überprüft anhand von Übereinstimmungskriterien, ob ein Vorname eher +männlich oder eher weiblich ist um z.B. eine nicht näher definierte +Anrede so verläßlich wie möglich als Herr oder Frau bestimmen zu +können. + +Sehr gute Vorarbeit bei der Sammlung markanter Wortendungen wurde +hierzu geleistet von: + +http://www.herber.de/forum/archiv/1148to1152/1150639_Vorname_maennlich_oder_weiblich.html + +Bei der Bewertung der Endungen erhalten hier jedoch längere +Übereinstimmungen entsprechend ihrer Wortlänge einen höheren Wert, +schließlich sind längere Zeichenketten aussagekräftiger als kürzere. + +*/ +package main diff --git a/main.go b/main.go new file mode 100644 index 0000000..55d8923 --- /dev/null +++ b/main.go @@ -0,0 +1,116 @@ +// Hormonspiegel project Hormonspiegel.go +package main + +import ( + "fmt" + "os" + "strings" +) + +var signals [][][]string = [][][]string{ + { + // Female + {"a", "e", "i", "y"}, + {"ah", "al", "bs", "dl", "el", "et", "id", "il", "in", "it", "ll", "th", "ud", "uk"}, + {"ary", "aut", "bel", "des", "dis", "een", "efa", "eig", "ett", "fer", "got", "ies", "ild", "ina", "ind", "ion", "itt", "jam", "joy", "Joy", "kim", "lar", "len", "lis", "lyn", "men", "mor", "oan", "ren", "rin", "res", "rix", "run", "san", "tas", "udy", "urg", "vig"}, + {"ardi", "atie", "borg", "cole", "endy", "gard", "gart", "gnes", "gund", "iede", "indy", "ines", "iris", "iris", "ison", "istl", "ldie", "lilo", "lind", "loni", "lott", "lynn", "mber", "moni", "nken", "oldy", "quel", "riam", "rien", "sann", "smin", "ster", "uste", "vian", "vien"}, + {"achel", "agmar", "almut", "becca", "candy", "doris", "echen", "edwig", "irene", "mandy", "rauke", "sandy", "sther", "uriel", "velin", "ybill"}, + {"irsten", "lilian", "lorene", "almuth"}, + }, + { + // Male + {"f", "g", "o", "r", "s", "t", "z"}, + {"ai", "an", "ax", "ay", "dy", "en", "ey", "fa", "gi", "hn", "im", "iy", "ki", "ld", "lm", "nn", "oy", "pe", "rc", "rd", "ri", "rk", "ry", "ua", "us", "uy", "ve", "we", "zy"}, + {"ael", "ali", "aid", "ain", "are", "arl", "aul", "bal", "bby", "bin", "cal", "cca", "cel", "cil", "cin", "dal", "die", "don", "dre", "ede", "eil", "eit", "emy", "eon", "ffer", "gon", "gun", "hal", "hel", "hil", "hka", "ich", "iel", "ill", "ini", "kie", "lev", "lge", "lip", "lix", "lon", "lob", "lte", "lja", "mal", "met", "mil", "min", "mon", "mre", "mud", "muk", "nid", "nik", "nsi", "oah", "obi", "oel", "örn", "ole", "oni", "oly", "phe", "pit", "rcy", "ram", "rdi", "rad", "red", "rel", "ric", "rge", "rka", "ron", "rnd", "rne", "rre", "rti", "sil", "son", "sse", "ste", "tie", "tof", "ton", "uce", "udi", "uel", "uli", "uke", "uwe", "vel", "vid", "vin", "wel", "win", "xei", "xel"}, + {"abel", "akim", "asan", "atti", "dres", "eith", "elin", "ence", "ffer", "frid", "gary", "gene", "hane", "hard", "hein", "idel", "iete", "irin", "jona", "kita", "kola", "land", "lion", "levi", "luka", "mike", "mund", "muth", "nand", "naud", "neth", "niel", "nnie", "ntin", "nuth", "ommy", "önke", "ören", "pete", "rank", "rene", "rick", "ried", "ries", "rlin", "rome", "rtin", "stas", "tell", "tila", "toph", "tony", "tore", "uele"}, + {"astel", "benny", "billy", "billi", "elice", "ianni", "laude", "danny", "dolin", "ormen", "ronny", "seyin", "ustel", "ustin", "vanni", "willi", "willy"}, + {"iedrun", "hilipp"}, + }, +} + +const usageString string = "usage: name2gender -n name [-g m,w,n] \n\n" + + "arguments:\n" + + " -n name\n" + + " -g (optional) gender list e.g. \"male,female,device\"; (default: \"m,w,n\")\n\n" + + "http://www.archium.org" + +var gender = [3]string{"m", "w", "n"} +var name string +var testosteron, oestrogen, hormonspiegel uint8 + +func main() { + switch len(*(MapCLIArguments())) { + case 2: + copy(gender[:], strings.Split((*(MapCLIArguments()))["-g"], ",")[:]) + fallthrough + case 1: + name = (*(MapCLIArguments()))["-n"] + if name != "" { + break + } + fallthrough + default: + fmt.Println(usageString) + return + } + + for i := (uint8)(0); i <= 1; i++ { + for j := 0; j < len(signals[i]); j++ { + for _, kv := range signals[i][j] { + if value := j + 1; endOfString(name, value) == kv { + hormonspiegel += uint8(value) + } + } + } + if i == 0 { + oestrogen = hormonspiegel + } else { + testosteron = hormonspiegel + } + hormonspiegel = 0 + } + if testosteron > oestrogen { + fmt.Println(gender[0]) + } else if testosteron < oestrogen { + fmt.Println(gender[1]) + } else { + fmt.Println(gender[2]) + } + + // Aber notwendig ist selbst das nicht. Anonymen Funktionen können die Parameter direkt übergeben werden: + fmt.Println(func(a, b int) int { + if a > b { + return a + } else { + return b + } + }(3, 4)) // 4 + +} + +func endOfString(chars string, digits int) string { + length := len(chars) + min := func(a, b int) int { + if a < b { + return a + } else { + return b + } + } + return chars[length-min(digits, length) : length] +} + +func MapCLIArguments() *map[string]string { + cliAguments := os.Args[1:] + var cliAgumentsMapped map[string]string = make(map[string]string) + for key, value := range cliAguments { + if value[0:1] == "-" { + if len(cliAguments) > key+1 && cliAguments[key+1][0:1] != "-" { + cliAgumentsMapped[cliAguments[key]] = cliAguments[key+1] + } else { + cliAgumentsMapped[cliAguments[key]] = "" + } + } + } + return &cliAgumentsMapped +}