this post was submitted on 01 Sep 2023
1991 points (98.1% liked)

Programmer Humor

32588 readers
1396 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 8 points 1 year ago* (last edited 1 year ago) (4 children)
var LogicGate = map[string]string{
    "OR": "OR",
    "AND":  "AND",
    "NOT": "NOT",
    "NOR": "NOR",
    "NAND": "NOR",
    "XOR": "XOR",
}

func isLogicGate(inString string) (bool) {
    _, ok := LogicGate[strings.ToUpper(inString)]
    if ok {
        return true
    } else {
        return false
    }
}

func stringAsGateLogic(inString string) (bool, error) {
    inSplit := strings.Split(inString, " ")
    var phrase1 strings.Builder
    var phrase2 stringa.Builder
    var gateString string
    for word := range inSplit {
        if isLogicGate(word) {
            if len(gateString) < 1{
                gateString = word
            } else {
                phrase2.WriteString(word)
            }
        } else {
            if len(gateString) < 1{
                phrase1.WriteString(word)
            } else {
                phrase2.WriteString(word)
            }
        }
    }
    boolPhrase1 := bool(phrase1.String())
    boolPhrase2 := bool(phrase2.String())
    switch strings.ToUpper(gateString) {
        case "OR":
            return (boolPhrase1 || boolPhrase2), nil
        case "AND":
            return (boolPhrase1 && boolPhrase2), nil
        case "NOT":
            return (!boolPhrase2), nil
        case "NOR":
            return (!(boolPhrase1 || boolPhrase2)), nil
        case "NAND":
            return (!(boolPhrase1 && boolPhrase2)
        case "XOR":
            orRes := (boolPhrase1 || boolPhrase2)
            nandRes := (!(boolPhrase1 && boolPhrase2))
            return (orRes && nandRes), nil
        default:
            return false, fmt.Errorf("Why you do dis?: %v", inString)
    }
}

func main(){
    answer, err := stringAsGateLogic ("This person misunderstands a beautiful function code can be very sexy or maybe I'm a odd girl.")
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(answer)
}
[–] [email protected] 13 points 1 year ago (1 children)

Sorry, Hungarian notation is not beautiful.

[–] [email protected] 6 points 1 year ago (1 children)
if ok {
    return true
} else {
    return false
}

Why?

[–] [email protected] 4 points 1 year ago

Idiomatic Go way of checking for the presence of a key in a map.

[–] [email protected] 3 points 1 year ago (1 children)

isLogicGate is not used. Maybe you mean to place it in "isGate" in the stringAsGateLogic for loop's if statement?

[–] [email protected] 5 points 1 year ago (1 children)

Thank you. That's what I get for writing a drawn-out shitpost program on my phone over several hours while away from home, instead of in a few minutes in vim.

[–] [email protected] 3 points 1 year ago

Speaking of, Vim is actually quite easy to set up on Android. Simply download Termux from F-Droid (the version of Termux on Google Play is severely out of date) and pkg install vim (or nvim if you prefer). (Also, full aarch64 linux terminal on non-rooted Android, woo!) Using Vim with an onscreen keyboard is agonizing, of course, but it does work (Termux provides the Ctrl and Esc keys). The F-Droid app Unexpected Keyboard is a recommended addition -- it's an alternative on-screen keyboard with no predictive text and swiping to the corners of each key for alternate symbols. It makes using Vim on a touchscreen at least moderately less painful.

[–] [email protected] 3 points 1 year ago (1 children)

You make want to cry, when are we marrying?

I want a divorce

[–] [email protected] 2 points 1 year ago

Sorry, merge conflict :(