commit
cd0be45565
3 changed files with 92 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||
|
|||
Copyright (c) 2018, Stephen McQuay (smcquay) |
|||
|
|||
All rights reserved. |
|||
|
|||
Redistribution and use in source and binary forms, with or without modification, |
|||
are permitted provided that the following conditions are met: |
|||
|
|||
* Redistributions of source code must retain the above copyright notice, |
|||
this list of conditions and the following disclaimer. |
|||
* Redistributions in binary form must reproduce the above copyright notice, |
|||
this list of conditions and the following disclaimer in the documentation |
|||
and/or other materials provided with the distribution. |
|||
* Neither the name of jmbl nor the names of its contributors |
|||
may be used to endorse or promote products derived from this software |
|||
without specific prior written permission. |
|||
|
|||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
|||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
|||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
|||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
|||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
|||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
|||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|||
|
@ -0,0 +1,6 @@ |
|||
# jmbl mixes up words |
|||
|
|||
```bash |
|||
$ echo Hello how are you? today is süppęr great. | jmbl |
|||
hlleo how are you tdoay is süppęr geart |
|||
``` |
@ -0,0 +1,57 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"bufio" |
|||
"fmt" |
|||
"math/rand" |
|||
"os" |
|||
"strings" |
|||
"time" |
|||
"unicode" |
|||
) |
|||
|
|||
func main() { |
|||
rand.Seed(time.Now().UnixNano()) |
|||
s := bufio.NewScanner(os.Stdin) |
|||
for s.Scan() { |
|||
l := s.Text() |
|||
for _, word := range strings.Fields(l) { |
|||
fmt.Printf("%s ", jumble(word)) |
|||
} |
|||
fmt.Println() |
|||
} |
|||
if err := s.Err(); err != nil { |
|||
} |
|||
} |
|||
|
|||
func jumble(word string) string { |
|||
switch len(word) { |
|||
case 1, 2, 3: |
|||
return word |
|||
} |
|||
|
|||
w := []rune(strings.ToLower(word)) |
|||
start, end := 0, len(w) |
|||
|
|||
for i := 0; i < len(w); i++ { |
|||
if unicode.IsLetter(w[i]) { |
|||
start = i |
|||
break |
|||
} |
|||
} |
|||
for i := len(w) - 1; i > 0; i-- { |
|||
if unicode.IsLetter(w[i]) { |
|||
end = i |
|||
break |
|||
} |
|||
} |
|||
|
|||
var r string |
|||
r += string(w[start]) |
|||
ps := rand.Perm(end - start - 1) |
|||
for _, p := range ps { |
|||
r += string(w[p+1]) |
|||
} |
|||
r += string(w[end]) |
|||
return r |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue