Dieses Tool erkennt anhand von Wahrscheinlichkeiten in Vornamen das Geschlecht
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
4.4 KiB

5 years ago
// 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
}