Skip to content

Instantly share code, notes, and snippets.

@faermanj
Created March 15, 2012 12:16
Show Gist options
  • Save faermanj/2043922 to your computer and use it in GitHub Desktop.
Save faermanj/2043922 to your computer and use it in GitHub Desktop.
Avaliando Scala
case object Calcule
case object Pare
class Calculador extends Actor {
val rand = new Random
var pi, in, cnt = 1.0
def act() {
while (true) {
receive { //aguarda uma mensagem
case Calcule =>
//envia uma estimativa para o coordenador
sender ! estimativaDePi
case Pare => exit
}
}
}
def estimativaDePi: Double = {
val x = rand.nextDouble - 0.5
val y = rand.nextDouble - 0.5
cnt += 1.0;
if (sqrt(x * x + y * y) < 0.5) in += 1
return in / cnt * 4
}
}
class Coordenador(qtdCalculadores: Int) extends Actor {
def act() {
val inicio = currentTimeMillis
var calculadores = List.fill(qtdCalculadores)(new Calculador)
calculadores.foreach(c => {
c.start
c ! Calcule
})
while (true) {
receive {
case estimativa: Double =>
val erro = abs(Pi - estimativa)
if (erro > 0.0000001)
sender ! Calcule
else {
val tempo = currentTimeMillis - inicio
calculadores.foreach(_ ! Pare)
println("Pi encontrado por " + sender + " = " + estimativa)
println("Tempo de Execução: " + tempo)
exit
}
}
}
}
}
def ++ [B >: A, That] (that: TraversableOnce[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That
object FiboFunc {
val fibs: Stream[BigInt] =
0 #:: 1 #:: (fibs zip fibs.tail).map { case (a, b) => a + b }
def main(args: Array[String]) = println(fibs(1000));
}
public class FiboJava {
private static BigInteger fibo(int x){
BigInteger a= BigInteger.ZERO;
BigInteger b= BigInteger.ONE;
BigInteger c= BigInteger.ZERO;
for(int i=0; i<x; i++){
c = a.add(b);
a = b;
b = c;
}
return a;
}
public static void main(String args[]){
System.out.println(fibo(1000));
}
}
object FiboScala {
def fibo(x:Int):BigInt = {
var a:BigInt = 0;
var b:BigInt = 1;
var c:BigInt = 0;
for(_ <- 1 to x){
c = a+b;
a = b;
b = c;
}
return a;
}
def main(args: Array[String]) = println(fibo(1000))
}
abstract class FilaInt {
def get(): Int
def put(x: Int)
def size(): Int
}
class FilaIntSimples extends FilaInt {
private val buf = new ArrayBuffer[Int];
def get = buf.remove(0)
def put(x: Int) { buf += x }
def size = buf.length
}
trait Dobra extends FilaInt {
abstract override def put(x: Int) { super.put(2 * x) }
}
trait Incrementa extends FilaInt {
abstract override def put(x: Int) { super.put(x + 1) }
}
trait Filtra extends FilaInt {
abstract override def put(x: Int) { if (x > 0) super.put(x) }
}
//Combinando traits na definicao de tipos
class FilaDobroMaisUm extends FilaIntSimples with Incrementa with Dobra
object FilaComTrait {
def main(args: Array[String]) {
val fila1 = new FilaDobroMaisUm;
fila1.put(1);
fila1.put(2);
println(fila1.get());
println(fila1.get());
//Combinando traits na instanciaçao
val fila2 = new FilaIntSimples with Filtra
fila2.put(-1);
fila2.put(1);
println(fila2.size());
}
}
public class ListMACsJava {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> nics =
NetworkInterface.getNetworkInterfaces();
for (NetworkInterface nic : Collections.list(nics)) {
byte[] mac = nic.getHardwareAddress();
for (int i = 0; mac != null && i < mac.length; i++) {
System.out.format("%2x", mac[i]);
System.out.print(i == mac.length - 1 ? '\n' : ':');
}
}
}
}
object ListMACsScala {
def main(args: Array[String]) {
NetworkInterface
.getNetworkInterfaces
.flatMap(nic => Option(nic.getHardwareAddress))
.map(_ map ("%02x" format _) mkString ":")
.foreach(println(_));
}
}
@guilhermesilveira
Copy link

Opa Julio! Aqui no map.flatten do LstMacsScala.scala daria para ter invocado flatMap? Abraço!

@faermanj
Copy link
Author

daria...

NetworkInterface
.getNetworkInterfaces
.map(nic => Option(nic.getHardwareAddress))
.flatMap(x=>x)
.map(_ map ("%02x" format ) mkString ":")
.foreach(println(
));

Abs!

@guilhermesilveira
Copy link

guilhermesilveira commented Mar 16, 2012 via email

@faermanj
Copy link
Author

Eu tentei : .flatMap(_ map ("%02x" format _) mkString ":")
Mas java.util.IllegalFormatConversionException: x != [B (os elementos ficam diferentes )

Como seria direto com flatMap?

@guilhermesilveira
Copy link

guilhermesilveira commented Mar 16, 2012 via email

@faermanj
Copy link
Author

Humm.. entendi e alterei no gist, obrigado!

@guilhermesilveira
Copy link

guilhermesilveira commented Mar 16, 2012 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment