Code Contest: Em tempos de Mega Sena Acumulada  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
RodrigoSol
Virtual Machine Man
[Avatar]

Membro desde: 23/07/2003 10:09:10
Mensagens: 683
Localização: Belzonte
Offline

Um pequeno desafio:

Escrever em qualquer linguagem de programação um programa que realize 100.000 sorteios de um numero entre 1 e 60 e mostre na tela os 6 mais freqüentes.

Ganha quem fizer o programa com o menor numero de linhas possíveis, lembrando que a linha considerada é a linha da unidade léxica da linguagem, portanto a seguinte linha em Java seria considerada duas: int i =0; sysout(i);

Fiz com 3 linhas em Ruby:


Será possível fazer em menos linhas com Python, Groove, Haskell ou Prolog? Em Ruby da pra fazer com menos? Citei essas porque acho quase impossível fazer com menos do que isso com Java, C/C++ ou C#, mas se alguém quiser provar o contrario...


Site para candidato a vereador
aim icon [MSN]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

Esse desafio é meio furado... repare que vc está usando logo para começar Hash ( que suponho seja algo como Map)... logo ai tem um monte de linhas de codigo disfarçadas de objeto.
Se formos por essa linha em java vc faz com 1 linha





[adicionado]
O que quero dizer é que deveria ser explicito se se pode criar ou não classes especiais.
Se for usar só as classes padrão do Java tlv não dê para fazer em 3 linhas ou menos, mas se criar algumas
classes utilitárias concerteza dá.
[/adicionado]

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
RodrigoSol
Virtual Machine Man
[Avatar]

Membro desde: 23/07/2003 10:09:10
Mensagens: 683
Localização: Belzonte
Offline

Acho que voce nao entendeu o espirito da coisa, mas tudo bem...

Voce pode criar quantas classes quiser, mas cada linha que vc tiver digitado sera contada. Entao se seu metodo solve() tem 10 linhas mais a linha da chamada teriamos 11.

Alem disso, da forma que voce colocou, um simples "TESTE".equals("TESTE") teria varias linhas ja que o metodo equals() eh feito de um metodo com N linhas.



Site para candidato a vereador
aim icon [MSN]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline


Divirtam-se!

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
AllMighty
Java Ninja
[Avatar]

Membro desde: 16/08/2004 17:21:42
Mensagens: 266
Localização: São Paulo
Offline

Em Scala (acho que não deve ser difícil implementar em menos linhas, mas gostei dessa versão):


Rafael de F. Ferreira
Blog: http://www.rafaelferreira.net/
Links miscelâneos: http://stoa.usp.br/rafaelferreira
[Email] [WWW] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

O problema resolvido em Java. Deu 13 linhas, mas acho que este programa tem dois problemas:
- Não serve para um número de sorteios maior que 33.554.431 (leia o programa e me diga por quê)
- Uso um truque um pouco sujo (guardar dois números dentro de um "int"), que poderia muito bem ser feito em C, C++ ou Fortran.


[WWW]
RodrigoSol
Virtual Machine Man
[Avatar]

Membro desde: 23/07/2003 10:09:10
Mensagens: 683
Localização: Belzonte
Offline

thingol wrote:
- Não serve para um número de sorteios maior que 33.554.431 (leia o programa e me diga por quê)


Muito Bacana esta solucao...

Acredito que a limitacao vem dos 6 bits ou 2^6 que voce usou pra guardar o numero sorteado. Nesse caso sobrariam 2^25 que da 33,554,432. Mas o inteiro tem 32 bits ne? 6 + 26 + 1 do sinal = 32.

Agora nao entendi o 1 que ficou faltando da subtracao de 33.554.432 por 33.554.431?

aim icon [MSN]
RodrigoSol
Virtual Machine Man
[Avatar]

Membro desde: 23/07/2003 10:09:10
Mensagens: 683
Localização: Belzonte
Offline

thingol wrote:
- Uso um truque um pouco sujo (guardar dois números dentro de um "int"), que poderia muito bem ser feito em C,



Cara... Trabalho com um pouco de codigo em ALGOL e posso dizer que esse truque eh muito usado. Eh comum, por exemplo, guardar os 3 indices de uma matriz de 3 dimensoes em um REAL (que tem 48 bits). Isso te permite indexar 64k em cada dimensao. Junte a isso o DEFINE (parece com o do C, mas pode ser parametrizado) e temos codigo do tipo:

result := mat[IDX] para acessar o elemento na matriz.



aim icon [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

A solução abaixo também é grande e ainda por cima requer Java 6.0. Entretanto, é completamente estúpida (nenhuma coisa esquisita) e tem 19 linhas. Uma coisa que faz falta no Java é a parte de processamento de listas, presente nas linguagens funcionais e em muitas linguagens de script.
[WWW]
ZehOliveira
GUJ Ranger

Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline

Em io language:
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Em C++/STL deu 17 linhas. A solução é praticamente igual à do Java 6.0.
[WWW]
RodrigoSol
Virtual Machine Man
[Avatar]

Membro desde: 23/07/2003 10:09:10
Mensagens: 683
Localização: Belzonte
Offline

thingol,

Porque aquela diferença de 1 no seu primeiro exemplo?
Fiquei curioso...





Site para candidato a vereador
aim icon [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Ora, para fazer uma analogia: (é mais fácil pensar com números pequenos que grandes)
se um campo tem 4 bits, ele só pode conter valores de 0 até (2 elevado a 4) - 1, ou seja, 15. O número 16 requer 5 bits (10000 em binário). Certo?
[WWW]
AllMighty
Java Ninja
[Avatar]

Membro desde: 16/08/2004 17:21:42
Mensagens: 266
Localização: São Paulo
Offline

RodrigoSol, ALGOL? Fiquei curioso, para que tipo de plataforma é a aplicação?

Rafael de F. Ferreira
Blog: http://www.rafaelferreira.net/
Links miscelâneos: http://stoa.usp.br/rafaelferreira
[Email] [WWW] [MSN] [ICQ]
GiancarloBraga
Java Ninja
[Avatar]

Membro desde: 25/06/2007 06:00:00
Mensagens: 261
Offline

AllMighty wrote:RodrigoSol, ALGOL? Fiquei curioso, para que tipo de plataforma é a aplicação?


Confesso que fiquei curioso também.
Será você uma das excessões que entende o ALGOL 68?

-------------------------
Visitem meu novo Java Blog para iniciantes:
http://giancarlobraga.joolo.com/




 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team