Prime words: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Raku}}: Add a Raku solution) |
(Added Go) |
||
Line 138: | Line 138: | ||
meg |
meg |
||
q</pre> |
q</pre> |
||
=={{header|Go}}== |
|||
<lang go>package main |
|||
import ( |
|||
"bytes" |
|||
"fmt" |
|||
"io/ioutil" |
|||
"log" |
|||
"strings" |
|||
) |
|||
func isPrime(n int) bool { |
|||
if n < 2 { |
|||
return false |
|||
} |
|||
if n%2 == 0 { |
|||
return n == 2 |
|||
} |
|||
if n%3 == 0 { |
|||
return n == 3 |
|||
} |
|||
d := 5 |
|||
for d*d <= n { |
|||
if n%d == 0 { |
|||
return false |
|||
} |
|||
d += 2 |
|||
if n%d == 0 { |
|||
return false |
|||
} |
|||
d += 4 |
|||
} |
|||
return true |
|||
} |
|||
func main() { |
|||
// cache prime runes with codepoints between 33 and 255 say |
|||
var primeRunes []rune |
|||
for i := 33; i < 256; i += 2 { |
|||
if isPrime(i) { |
|||
primeRunes = append(primeRunes, rune(i)) |
|||
} |
|||
} |
|||
primeString := string(primeRunes) |
|||
wordList := "unixdict.txt" |
|||
b, err := ioutil.ReadFile(wordList) |
|||
if err != nil { |
|||
log.Fatal("Error reading file") |
|||
} |
|||
bwords := bytes.Fields(b) |
|||
fmt.Println("Prime words in", wordList, "are:") |
|||
for _, bword := range bwords { |
|||
word := string(bword) |
|||
ok := true |
|||
for _, c := range word { |
|||
if !strings.ContainsRune(primeString, c) { |
|||
ok = false |
|||
break |
|||
} |
|||
} |
|||
if ok { |
|||
fmt.Println(word) |
|||
} |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Prime words in unixdict.txt are: |
|||
a |
|||
aaa |
|||
age |
|||
agee |
|||
ak |
|||
am |
|||
ama |
|||
e |
|||
egg |
|||
eke |
|||
em |
|||
emma |
|||
g |
|||
ga |
|||
gag |
|||
gage |
|||
gam |
|||
game |
|||
gamma |
|||
ge |
|||
gee |
|||
gem |
|||
gemma |
|||
gm |
|||
k |
|||
keg |
|||
m |
|||
ma |
|||
mae |
|||
magma |
|||
make |
|||
mamma |
|||
me |
|||
meek |
|||
meg |
|||
q |
|||
</pre> |
|||
=={{header|Raku}}== |
=={{header|Raku}}== |