• nickwitha_k (he/him)@lemmy.sdf.org
      link
      fedilink
      arrow-up
      10
      arrow-down
      2
      ·
      edit-2
      1 year ago
      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)
      }