Prime words: Difference between revisions

Added Uiua solution
(Added Uiua solution)
 
(9 intermediate revisions by 7 users not shown)
Line 24:
<br><br>
=={{header|11l}}==
<langsyntaxhighlight lang="11l">F is_prime(Int a)
I a == 2
R 1B
Line 47:
L.break
L.was_no_break
print(word)</langsyntaxhighlight>
 
{{out}}
Line 92:
In the following solution the input file is loaded from H6 drive. Altirra emulator automatically converts CR/LF character from ASCII into 155 character in ATASCII charset used by Atari 8-bit computer when one from H6-H10 hard drive under DOS 2.5 is used.
{{libheader|Action! Sieve of Eratosthenes}}
<langsyntaxhighlight Actionlang="action!">INCLUDE "H6:SIEVE.ACT"
 
BYTE FUNC IsPrimeWord(CHAR ARRAY word BYTE ARRAY primes)
Line 136:
Sieve(primes,MAX+1)
FindPrimeWords(fname,primes)
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Prime_words.png Screenshot from Atari 8-bit computer]
Line 146:
Does not distinguish between letters and non-letter ASCII codes (as with the REXX sample).
{{libheader|ALGOL 68-primes}}
<langsyntaxhighlight lang="algol68"># find words whose character codes are primes #
IF FILE input file;
STRING file name = "unixdict.txt";
Line 183:
OD;
close( input file )
FI</langsyntaxhighlight>
{{out}}
<pre>
Line 226:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">words: read.lines relative "unixdict.txt"
 
loop words 'word [
if every? split word 'ch -> prime? to :integer to :char ch ->
print word
]</langsyntaxhighlight>
 
{{out}}
Line 273:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f PRIME_WORDS.AWK unixdict.txt
BEGIN {
Line 302:
return(1)
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 309:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <algorithm>
#include <cstdlib>
#include <fstream>
Line 338:
}
return EXIT_SUCCESS;
}</langsyntaxhighlight>
 
Contents of prime_sieve.hpp:
<langsyntaxhighlight lang="cpp">#ifndef PRIME_SIEVE_HPP
#define PRIME_SIEVE_HPP
 
Line 392:
}
 
#endif</langsyntaxhighlight>
 
{{out}}
Line 406:
33: me 34: meek 35: meg 36: q
</pre>
 
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
 
 
<syntaxhighlight lang="Delphi">
function IsPrime(N: int64): boolean;
{Fast, optimised prime test}
var I,Stop: int64;
begin
if (N = 2) or (N=3) then Result:=true
else if (n <= 1) or ((n mod 2) = 0) or ((n mod 3) = 0) then Result:= false
else
begin
I:=5;
Stop:=Trunc(sqrt(N+0.0));
Result:=False;
while I<=Stop do
begin
if ((N mod I) = 0) or ((N mod (I + 2)) = 0) then exit;
Inc(I,6);
end;
Result:=True;
end;
end;
 
 
 
procedure ShowPrimeWords(Memo: TMemo);
var I,N,Sum,Cnt: integer;
var NS,S: string;
 
function IsPrimeWord(S: string): boolean;
var I: integer;
begin
Result:=False;
for I:=1 to Length(S) do
if not IsPrime(byte(S[I])) then exit;
Result:=True;
end;
 
 
begin
Cnt:=0;
S:='';
{Iterate all entries in dictionary}
for I:=0 to UnixDict.Count-1 do
if IsPrimeWord(UnixDict[I]) then
begin
Inc(Cnt);
Memo.Lines.Add(UnixDict[I]);
end;
Memo.Lines.Add('Count = '+IntToStr(Cnt));
end;
 
</syntaxhighlight>
{{out}}
<pre>
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
Count = 36
Elapsed Time: 72.759 ms.
 
</pre>
 
 
=={{header|Factor}}==
{{works with|Factor|0.99 2020-08-14}}
<langsyntaxhighlight lang="factor">USING: io.encodings.ascii io.files math.primes prettyprint sequences ;
 
"unixdict.txt" ascii file-lines [ [ prime? ] all? ] filter .</langsyntaxhighlight>
{{out}}
<pre style="height: 45ex">
Line 455 ⟶ 555:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">
dim shared as boolean prime(0 to 29) =_
{false, true, false, true, true, false, false, true, false, true, false, false, true, false,_
Line 483 ⟶ 583:
close #1
end
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 522 ⟶ 622:
meg
q</pre>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
#plist NSAppTransportSecurity @{NSAllowsArbitraryLoads:YES}
 
mda(0) = {NO, YES, NO, YES, YES, NO, NO, YES, NO, YES, NO, NO, YES,¬
NO, NO, NO, YES, NO, YES, YES, NO, YES, YES, NO, YES, NO, NO, NO, NO}
 
local fn WordList as CFArrayRef
CFURLRef url = fn URLWithString( @"http://wiki.puzzlers.org/pub/wordlists/unixdict.txt" )
CFStringRef string = lcase(fn StringWithContentsOfURL( url, NSUTF8StringEncoding, NULL ))
CFArrayRef wordArr = fn StringComponentsSeparatedByString( string, @"\n" )
CFMutableArrayRef mutArr = fn MutableArrayNew
CFStringRef tempStr
for tempStr in wordArr
CFRange range = fn StringRangeOfStringWithOptions( tempStr, @"^[a-z]+$", NSRegularExpressionSearch )
if range.location != NSNotFound then MutableArrayAddObject( mutArr, tempStr )
next
end fn = mutArr
 
local fn IsPrimeLetter( s as CFStringRef ) as BOOL
NSUInteger index = 0
BOOL result = NO
unichar n = fn StringCharacterAtIndex( s, index )
if n mod 2 == 0 then exit fn = NO
result = mda_integer( (n-65)/2 )
end fn = result
 
local fn IsPrimeWord( s as CFStringRef ) as BOOL
NSUInteger i, count = len(s)
for i = 0 to count -1
if fn IsPrimeLetter( mid( s, i, 1 ) ) = NO then exit fn = NO
next
end fn = YES
 
local fn FindPrimeWords
CFArrayRef wordArr = fn WordList
CFStringRef wordStr
for wordStr in wordArr
if wordStr = @"" then break
if fn IsPrimeWord( wordStr ) = YES then printf @"%@", wordStr
next
end fn
 
fn FindPrimeWords
 
HandleEvents
</syntaxhighlight>
{{output}}
<pre>
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|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 587 ⟶ 780:
}
}
}</langsyntaxhighlight>
 
{{out}}
Line 629 ⟶ 822:
q
</pre>
 
=={{header|J}}==
<syntaxhighlight lang="j"> ($~ _2 */\ q:@#)(#~ (1 */@p: 3 u: ])@>) cutLF fread'unixdict.txt'
┌─────┬───┬─────┬────┬─────┬───┬────┬───┬────┐
│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 │
└─────┴───┴─────┴────┴─────┴───┴────┴───┴────┘</syntaxhighlight>
 
=={{header|jq}}==
Line 640 ⟶ 845:
definition of `is_prime_word` should focus on the alphabetic characters,
perhaps along the lines of:
<langsyntaxhighlight lang="jq">def is_prime_word: all(gsub("[^A-Za-z]";"") | explode[]; is_prime);
</syntaxhighlight>
</lang>
All such variations are as easy to accommodate as to envision, but for unixdict.txt the following suffices:
<langsyntaxhighlight lang="jq">def is_prime_word: all(explode[]; is_prime);</langsyntaxhighlight>
<syntaxhighlight lang="jq">
<lang jq>
inputs | select(is_prime_word)</langsyntaxhighlight>
{{out}}
Invocation (example): jq -Rrn -f prime-words.jq unixdict.txt
Line 689 ⟶ 894:
=={{header|Julia}}==
See [[Alternade_words#Julia]] for the foreachword function.
<langsyntaxhighlight lang="julia">const primelettervalues = [67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113]
isprimeword(w, _) = all(c -> Int(c) in primelettervalues, collect(w)) ? w : ""
foreachword("unixdict.txt", isprimeword, colwidth=10, numcols=9)
</langsyntaxhighlight>{{out}}
<pre>
Word source: unixdict.txt
Line 703 ⟶ 908:
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">dict=Import["https://web.archive.org/web/20180611003215/http://www.puzzlers.org/pub/wordlists/unixdict.txt","String"];
dict//=StringSplit[#,"\n"]&;
chars=CharacterRange["A","Z"]~Join~CharacterRange["a","z"];
chars//=Select[ToCharacterCode/*First/*PrimeQ];
Select[dict,StringMatchQ[Repeated[Alternatives@@chars]]]//Column</langsyntaxhighlight>
{{out}}
<pre>a
Line 745 ⟶ 950:
meg
q</pre>
 
=={{header|MiniScript}}==
This implementation is for use with the [http://miniscript.org/MiniMicro Mini Micro] version of MiniScript. The command-line version does not include a HTTP library. Modify the declaration of wordList object to use the file class to read a local copy of the word list file.
<syntaxhighlight lang="miniscript">
isPrimeWord = function(word)
if word.len == 0 then return false
for ch in word.split("")
if "aegkmq".indexOf(ch) == null then return false
end for
return true
end function
 
wordList = http.get("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt").split(char(10))
primes = []
for word in wordList
if isPrimeWord(word) then primes.push(word)
end for
 
print primes.join(", ")
</syntaxhighlight>
{{out}}
<pre>
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|Nim}}==
<langsyntaxhighlight Nimlang="nim">import strformat, strutils
 
func isPrime(n: Natural): bool =
Line 772 ⟶ 1,001:
if word.allCharsInSet(PrimeChars):
inc count
echo &"{count:2}: {word}"</langsyntaxhighlight>
 
{{out}}
Line 813 ⟶ 1,042:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">#!/usr/bin/perl
 
use strict;
Line 820 ⟶ 1,049:
my $pat = join '', grep +(1 x ord) !~ /^(11+)\1+$/, 'a'..'z', 'A'..'Z';
@ARGV = 'unixdict.txt';
print join('', grep /^[$pat]+$/, <>) =~ tr/\n/ /r =~ s/.{1,71}\K /\n/gr;</langsyntaxhighlight>
{{out}}
<pre>
Line 828 ⟶ 1,057:
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">sap</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">word</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">return</span> <span style="color: #7060A8;">sum</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">apply</span><span style="color: #0000FF;">(</span><span style="color: #000000;">word</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">is_prime</span><span style="color: #0000FF;">))==</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">word</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">words</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">filter</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">unix_dict</span><span style="color: #0000FF;">(),</span><span style="color: #000000;">sap</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%d prime words found: %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">shorten</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">,</span><span style="color: #008000;">""</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span><span style="color: #008000;">", "</span><span style="color: #0000FF;">)})</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 840 ⟶ 1,069:
 
=={{header|Plain English}}==
<langsyntaxhighlight lang="plainenglish">To run:
Start up.
Put "c:\unixdict.txt" into a path.
Line 865 ⟶ 1,094:
If the substring's first's target is not prime, say no.
Add 1 to the substring's first.
Repeat.</langsyntaxhighlight>
{{out}}
<pre style="height:18em">
Line 910 ⟶ 1,139:
 
Here is the brute force pre-processor, again this can be done easily manually, but if you are feeling lazy, like me :)
<syntaxhighlight lang="python">
<lang Python>
for i in range(65,123):
check = 1
Line 918 ⟶ 1,147:
if check==1:
print(chr(i),end='')
</syntaxhighlight>
</lang>
 
This produces the following string :
Line 932 ⟶ 1,161:
Tested on Python 3+, the file download will work only if the link is still active. It is possible that you may be able to fetch the file in your browser but download via code may still fail. Check whether you are connected to a VPN, it works on open networks.
 
<syntaxhighlight lang="python">
<lang Python>
#Aamrun, 6th November 2021
 
Line 949 ⟶ 1,178:
 
[print(word) for word in wordList if len(set(word).difference(primeSet))==0]
</syntaxhighlight>
</lang>
 
And here's the final output :
Line 991 ⟶ 1,220:
q
 
</pre>
 
=={{header|Quackery}}==
 
<code>eratosthenes</code> and <code>isprime</code> are defined at [[Sieve of Eratosthenes#Quackery]].
 
<syntaxhighlight lang="Quackery"> 128 eratosthenes
 
[]
$ "rosetta/unixdict.txt" sharefile drop nest$
witheach
[ true over
witheach
[ isprime not if
[ not conclude ] ]
iff [ nested join ]
else drop ]
46 wrap$</syntaxhighlight>
 
{{out}}
 
<pre>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>
 
Line 999 ⟶ 1,252:
In an effort to anticipate / head-off a rash of tiny variant tasks, a series of one-liners:
 
<syntaxhighlight lang="raku" perl6line>my @words = 'unixdict.txt'.IO.words».fc;
 
sub display ($n, @n, $s = "First 20: ") {"$n;\n{$s}{@n.join: ', '}"}
Line 1,049 ⟶ 1,302:
 
say "\nNumber of words that are prime in custom base 26, whose digits are all prime, and whose digital sum is prime: ",
@words.hyper.grep({ !.contains(/<-alpha>/) && all(.comb».&from-base(26)).is-prime && .&from-base(26).is-prime && .comb».&from-base(26).sum.is-prime }).&{display +$_, $_, ''};</langsyntaxhighlight>
{{out}}
<pre>Number of words whose ords are all prime: 36;
Line 1,098 ⟶ 1,351:
=={{header|REXX}}==
No attempt was made to exclude any "word" if it contained any non-letter (Latin alphabet) characters.
<langsyntaxhighlight lang="rexx">/*REXX program finds words whose ASCII code for its letters are prime (in a dictionary).*/
parse arg iFID . /*obtain optional arguments from the CL*/
if iFID=='' | iFID=="," then iFID='unixdict.txt' /*Not specified? Then use the default.*/
Line 1,124 ⟶ 1,377:
67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 ,
157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251
@.= 0; do j=1 for words(p); _= word(p, j); @._= 1; end /*j*/; return</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default input:}}
<pre>
Line 1,172 ⟶ 1,425:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
load "stdlib.ring"
 
Line 1,197 ⟶ 1,450:
see "Prime words are:" + nl
see Words
</syntaxhighlight>
</lang>
Output:
<pre>
Line 1,240 ⟶ 1,493:
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">require 'prime'
 
puts File.open("unixdict.txt").select{|line| line.chomp.chars.all?{|c| c.ord.prime?} }
</syntaxhighlight>
</lang>
{{out}}
<pre>a
Line 1,284 ⟶ 1,537:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">// [dependencies]
// primal = "0.3"
 
Line 1,312 ⟶ 1,565:
Err(error) => eprintln!("{}", error),
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,328 ⟶ 1,581:
 
=={{header|Swift}}==
<langsyntaxhighlight lang="swift">import Foundation
 
class BitArray {
Line 1,397 ⟶ 1,650:
} catch {
print(error.localizedDescription)
}</langsyntaxhighlight>
 
{{out}}
Line 1,437 ⟶ 1,690:
meg
q
</pre>
 
=={{header|Uiua}}==
{{works with|Uiua|0.11.0-dev.1}}
<syntaxhighlight lang="Uiua">
⊜□ ≠@\n. &fras "unixdict.txt"
Ps ← ⇌◌⍢(▽≠0◿⊢..⟜(⊂⊢)|>0⧻.):[]+2⇡256 # Build primes
Pc ← ▽:⟜(∊-@\0)⊂¯.+@a⇡26Ps # Test A-Za-z for primal ASCII codes
▽:⟜(≡(/×◇∊)⊙¤):Pc
</syntaxhighlight>
{{out}}
<pre>
{"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|Wren}}==
{{libheader|Wren-math}}
{{libheader|Wren-traititerate}}
<langsyntaxhighlight ecmascriptlang="wren">import "io" for File
import "./math" for Int
import "./traititerate" for Stepped
 
// cache prime characters with codepoints between 33 and 255 say
Line 1,456 ⟶ 1,722:
for (word in words) {
if (word.all { |c| primeChars.contains(c) }) System.print(word)
}</langsyntaxhighlight>
 
{{out}}
Line 1,500 ⟶ 1,766:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">func IsPrime(N); \Return 'true' if N is prime
int N, I;
[if N <= 2 then return N = 2;
Line 1,532 ⟶ 1,798:
];
until Ch = EOF;
]</langsyntaxhighlight>
 
{{out}}
67

edits