Skip to content

Commit

Permalink
Add Crystal port
Browse files Browse the repository at this point in the history
...which is actually just a straight clone of the Ruby
version thanks to Crystal being heavily influenced by Ruby.

Signed-off-by: Eddie Ringle <eddie@ringle.io>
  • Loading branch information
EddieRingle committed May 4, 2015
1 parent 38aa89b commit 4698a89
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -5,3 +5,4 @@
genprime-*
genprime.*.py
*.rbc
.crystal
11 changes: 10 additions & 1 deletion Makefile
@@ -1,6 +1,6 @@
ARGS=25000 100000

all: genprime-java genprime-c genprime-f90 genprime-pyx genprime-py27 genprime-py30 genprime-objc genprime-cpp genprime-cs genprime-c-llvm genprime-c-icc genprime-c-clang genprime-swift
all: genprime-java genprime-c genprime-f90 genprime-pyx genprime-py27 genprime-py30 genprime-objc genprime-cpp genprime-cs genprime-c-llvm genprime-c-icc genprime-c-clang genprime-swift genprime-crystal

clean:
rm -f genprime.*.py *.pyc *.class genprime-* *.s *.bc *.ll *.rbc
Expand Down Expand Up @@ -47,6 +47,8 @@ version:
@echo
-swift -v
@echo
-crystal --version
@echo

run: all
@echo "genprime (C GCC)"
Expand Down Expand Up @@ -114,6 +116,9 @@ run: all
@echo
@echo "genprime (Swift)"
@-./genprime-swift $(ARGS)
@echo
@echo "genprime (Crystal)"
@-./genprime-crystal $(ARGS)

genprime-java: genprime.class

Expand Down Expand Up @@ -184,3 +189,7 @@ genprime.30.pyc: genprime.py
genprime-swift: genprime.swift
-swift -O3 -sdk $(shell xcrun --show-sdk-path --sdk macosx) -o genprime-swift genprime.swift
@echo

genprime-crystal: genprime.cr
-crystal build --release -o genprime-crystal genprime.cr
@echo
55 changes: 55 additions & 0 deletions genprime.cr
@@ -0,0 +1,55 @@
def isprime(x)
if x < 2
return 0
end
if x == 2
return 1
end
if x % 2 == 0
return 0
end
if x < 9
return 1
end
if (x + 1) % 6 != 0
if (x - 1) % 6 != 0
return 0
end
end
lim = Math.sqrt(x).to_i + 1
y = 3
while y <= lim
if x % y == 0
return 0
end
y += 2
end
return 1
end

def genprime(max)
count = 0
current = 1
while count < max
if isprime(current) != 0
count += 1
end
current += 1
end
return current - 1
end

start = ARGV[0].to_i
stop = ARGV[1].to_i + 1
i = start
if start == 0
Process.exit
end
until i >= stop
starttime = Time.now
last = genprime(i)
endtime = Time.now
duration = endtime - starttime
printf "Found %8d primes in %10.5f seconds (last was %10d)\n", i, duration, last
i += start
end

0 comments on commit 4698a89

Please sign in to comment.