package psyfer import "math/rand" //TransposeRandom randomly transposes string func TransposeRandom(input string) string { shuffle := "" list := rand.Perm(len(input)) for _, i := range list { shuffle += string(input[i]) } return shuffle } //TransposeRailFence performs railfence transpose func TransposeRailFence(input string) string { rf := "" for i := 0; i < len(input); i += 2 { rf += string(input[i]) } for i := 1; i < len(input); i += 2 { rf += string(input[i]) } return rf } //TransposeSplit performs split transpose func TransposeSplit(input string) string { split := "" length := len(input) first := input[:length/2] second := input[length/2:] if length%2 == 0 { for i := range first { split += string(first[i]) + string(second[i]) } } else { for i := range first { split += string(first[i]) + string(second[i]) } split += string(second[len(second)-1]) } return split } //DeTransposeRailFence performs inverse railfence func DeTransposeRailFence(input string) string { derf := "" length := len(input) first := input[:length/2] second := input[length/2:] if length%2 == 0 { for i := range first { derf += string(first[i]) + string(second[i]) } } else { for i := range first { derf += string(first[i]) + string(second[i+1]) } derf += string(second[0]) } return derf } //DeTransposeSplit performs inverse split func DeTransposeSplit(input string) string { desplit := "" if len(input)%2 == 0 { for i := 0; i < len(input); i += 2 { desplit += string(input[i]) } for i := 1; i < len(input); i += 2 { desplit += string(input[i]) } } else { for i := 0; i < len(input)-2; i += 2 { desplit += string(input[i]) } for i := 1; i < len(input)-2; i += 2 { desplit += string(input[i]) } desplit += string(input[len(input)-2]) + string(input[len(input)-1]) } return desplit }