Created
March 15, 2012 12:16
-
-
Save faermanj/2043922 to your computer and use it in GitHub Desktop.
Avaliando Scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def ++ [B >: A, That] (that: TraversableOnce[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) } | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' : ':'); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object ListMACsScala { | |
def main(args: Array[String]) { | |
NetworkInterface | |
.getNetworkInterfaces | |
.flatMap(nic => Option(nic.getHardwareAddress)) | |
.map(_ map ("%02x" format _) mkString ":") | |
.foreach(println(_)); | |
} | |
} |
daria...
NetworkInterface
.getNetworkInterfaces
.map(nic => Option(nic.getHardwareAddress))
.flatMap(x=>x)
.map(_ map ("%02x" format ) mkString ":")
.foreach(println());
Abs!
Opa JUlio! Acho que da pra juntar ele com a linha de cima ai fica
flatMAp(nic ... ) sem a linha seguinte. Literalmente o flatmap eh o map
flateado.
Abraco!
…On Mar 16, 2012 9:48 AM, "Julio Faerman" < ***@***.***> wrote:
daria...
NetworkInterface
.getNetworkInterfaces
.map(nic => Option(nic.getHardwareAddress))
.flatMap(x=>x)
.map(_ map ("%02x" format _) mkString ":")
.foreach(println(_));
Abs!
---
Reply to this email directly or view it on GitHub:
https://gist.github.com/2043922
Eu tentei : .flatMap(_ map ("%02x" format _) mkString ":")
Mas java.util.IllegalFormatConversionException: x != [B (os elementos ficam diferentes )
Como seria direto com flatMap?
Opa julio
Desculpa estou no cel ai sai tudo pela metade. E assim?
NetworkInterface .getNetworkInterfaces .flatmap(nic =>
Option(nic.getHardwareAddress)) .map(_ map ("%02x" format _) mkString ":")
.foreach(println(_));
…On Mar 16, 2012 9:55 AM, "Julio Faerman" < ***@***.***> wrote:
Eu tentei : .flatMap(_ map ("%02x" format _) mkString ":")
Mas java.util.IllegalFormatConversionException: x != [B ( os elementos
ficam diferentes )
Como seria direto com flatMap?
---
Reply to this email directly or view it on GitHub:
https://gist.github.com/2043922
Humm.. entendi e alterei no gist, obrigado!
Combinar funcoes eh sempre uma diversao... Eu era mais reticente. Agora so
soi um pouco...
…On Mar 16, 2012 11:53 AM, "Julio Faerman" < ***@***.***> wrote:
Humm.. entendi e alterei no gist, obrigado!
---
Reply to this email directly or view it on GitHub:
https://gist.github.com/2043922
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Opa Julio! Aqui no map.flatten do LstMacsScala.scala daria para ter invocado flatMap? Abraço!