Skip to content

Instantly share code, notes, and snippets.

@undeadops
Created May 13, 2018 00:55
Show Gist options
  • Save undeadops/7a4e5a3ca361a146f6e68cafb36b8051 to your computer and use it in GitHub Desktop.
Save undeadops/7a4e5a3ca361a146f6e68cafb36b8051 to your computer and use it in GitHub Desktop.
FlippingFlipper
package main
import (
"fmt"
"strings"
)
func contains(slice []string, item string) bool {
set := make(map[string]struct{}, len(slice))
for _, s := range slice {
set[s] = struct{}{}
}
_, ok := set[item]
return ok
}
func flipStack(mixStack []string) []string {
var newStack []string
//fmt.Println("FlipGot: ", mixStack)
for i := len(mixStack) - 1; i >= 0; i-- {
if mixStack[i] == "-" {
newStack = append(newStack, "+")
} else if mixStack[i] == "+" {
newStack = append(newStack, "-")
}
}
//fmt.Println("FlipReturn: ", newStack)
return newStack
}
// Merge Flipped stack back on main stack
func merge(pancakeStack []string, flipped []string) []string {
for i := range flipped {
pancakeStack[i] = flipped[i]
}
return pancakeStack
}
// Main Loop
func findSadFaces(pancakeStack []string) int {
var count int
for contains(pancakeStack, "-") {
for i := len(pancakeStack) - 1; i >= 0; i-- {
if pancakeStack[0] == "+" {
_ = merge(pancakeStack, flipStack(pancakeStack[0:1]))
count = count + 1
//fmt.Printf("Flip Num: %d: %s\n", count, r)
break
} else if pancakeStack[i] == "-" {
_ = merge(pancakeStack, flipStack(pancakeStack[0:i+1]))
count = count + 1
//fmt.Printf("Flip Num: %d: %s\n", count, r)
break
}
}
}
return count
}
func main() {
var input1 = "-"
var input2 = "-+"
var input3 = "+-"
var input4 = "+++"
var input5 = "--+-"
var input6 = "-+--++"
fmt.Printf("Input %s, Flip Count: %d\n", input1, findSadFaces(strings.Split(input1, "")))
fmt.Printf("Input %s, Flip Count: %d\n", input2, findSadFaces(strings.Split(input2, "")))
fmt.Printf("Input %s, Flip Count: %d\n", input3, findSadFaces(strings.Split(input3, "")))
fmt.Printf("Input %s, Flip Count: %d\n", input4, findSadFaces(strings.Split(input4, "")))
fmt.Printf("Input %s, Flip Count: %d\n", input5, findSadFaces(strings.Split(input5, "")))
fmt.Printf("Input %s, Flip Count: %d\n", input6, findSadFaces(strings.Split(input6, "")))
}
@undeadops
Copy link
Author

Output looks like:

Input -, Flip Count: 1
Input -+, Flip Count: 1
Input +-, Flip Count: 2
Input +++, Flip Count: 0
Input --+-, Flip Count: 3
Input -+--++, Flip Count: 5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment