तो स्काला को जावा के समान तेज़ माना जाता है। मैं स्कैला में कुछ प्रोजेक्ट यूलर समस्याओं पर फिर से विचार कर रहा हूं जो मैंने मूल रूप से जावा में निपटाए थे। विशेष रूप से समस्या 5: "सबसे छोटी सकारात्मक संख्या क्या है जो 1 से 20 तक की सभी संख्याओं से समान रूप से विभाज्य है?"
यहां मेरा जावा समाधान है, जिसे मेरी मशीन पर पूरा करने में 0.7 सेकंड लगते हैं:
public class P005_evenly_divisible implements Runnable{
final int t = 20;
public void run() {
int i = 10;
while(!isEvenlyDivisible(i, t)){
i += 2;
}
System.out.println(i);
}
boolean isEvenlyDivisible(int a, int b){
for (int i = 2; i <= b; i++) {
if (a % i != 0)
return false;
}
return true;
}
public static void main(String[] args) {
new P005_evenly_divisible().run();
}
}
यहाँ मेरा "प्रत्यक्ष अनुवाद" स्काला में है, जिसमें 103 सेकंड (147 गुना अधिक समय लगता है!)
object P005_JavaStyle {
val t:Int = 20;
def run {
var i = 10
while(!isEvenlyDivisible(i,t))
i += 2
println(i)
}
def isEvenlyDivisible(a:Int, b:Int):Boolean = {
for (i <- 2 to b)
if (a % i != 0)
return false
return true
}
def main(args : Array[String]) {
run
}
}
अंत में यहां कार्यात्मक प्रोग्रामिंग पर मेरा प्रयास है, जिसमें 39 सेकंड (55 गुना अधिक समय) लगता है
object P005 extends App{
def isDivis(x:Int) = (1 to 20) forall {x % _ == 0}
def find(n:Int):Int = if (isDivis(n)) n else find (n+2)
println (find (2))
}
विंडोज 7 64-बिट पर स्काला 2.9.0.1 का उपयोग करना। मैं प्रदर्शन कैसे सुधारूं? क्या मुझसे कुछ गलत हो रही है? या जावा बहुत तेज है?
run
विधि का समय निकालने की कोशिश की ?