Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

3º. Duelo Todos contra Todos...

Recommended Posts

Bom, aparentemente eu venci o 2º. Duelo e não sabia (noob), então depois de avisado por MP pensei em algo interessante para duelarmos.

 

A idéia base eu tive quando, antes de sair pro trampo, era "obrigado" a aguentar todo mundo em caso assistindo o mesmo desenho animado que passava 6 vezes todos os dias porém, sem nunca colidir os episódios na mesma semana.

 

Estarei deixando a estrutura base pronta para aperfeiçoamento SEM a parte mais importante do Desafio, que é evitara colisão:

 

episodes.php

<?php 

class Episodes {

   private  $days = array( 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado' );

   private $hours = array( 6, 12, 15, 18, 20, 22 );

   private $episodes = array( 'Uma idéia idiota', 'Um Desafio sem lógica', 'Por que estou participando?' );

   private $shown = array();

   public function __construct( array $episodes = array() ) {

       if( count( $episodes ) != 0 ) {

           $this -> addEpisodes( $episodes );
       }
   }

   public function addEpisodes( $episodes ) {

       if( is_array( $episodes ) ) {

           foreach( $episodes as $episode ) {

               $this -> addEpisode( $episode );
           }

       } else {

           $this -> episodes[] = $episodes;
       }

       return $this;
   }

   public function show() {

       $day     = $this -> days[ array_rand( $this -> days, 1 ) ];
       $hour    = $this -> hours[ array_rand( $this -> hours, 1 ) ];
       $episode = $this -> episodes[ array_rand( $this -> episodes ) ];

       // Aqui é onde o Desafio REALMENTE começa

       $this -> shown[ $day ][ $hour ] = $episode;

       return $this -> shown;
   }

   public function getShownList() {
       return $this -> shown;
   }

   public function getEpisodes() {
       return $this -> episodes;
   }
}

?>

 

index.php

<?php 

error_reporting( E_ALL | E_STRICT );

$start = getTime();

require 'Episodes.php';

$episodes = new Episodes;

print'<pre>';

// Listando Episódios

print_r( $episodes -> getEpisodes() );

// Adicionando um novo e re-exibindo

$episodes -> addEpisodes( 'Um novo siginificado para \'treta\'' );

print_r( $episodes -> getEpisodes() );

// Mostrar um Episódio e ver quando ele foi exibido

$episodes -> show();

print_r( $episodes -> getShownList() );

$end = getTime();

printf( '<br />Runtime: %f', ( $end - $start ) );

print '</pre>';

function getTime() {

   list( $usec, $sec)  = explode( " ", microtime() );

   return ( ( float ) $usec + ( float ) $sec );
}

?>

Não fiz um layout porque a idéia é resolver a situação e não "apresentar". Mas vocês são livres para tanto.

 

A graça (se é que existe) não é em evitar a colisão entre um ou dois dias ou um ou dois horários, mas sim, entre todos os horários em todos os dias da semana.

 

Acredito que, nesse caso, vence o código mais rápido e, para isso, precisamos de um juiz.

 

Bom divertimento!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que, nesse caso, vence o código mais rápido e, para isso, precisamos de um juiz.

 

Bom divertimento!

 

 

Caso não haja acordo, eu(João Batista Neto) decidirei qual é o melhor código fazendo uma avaliação completa entre os dois. Ou seja, eu apenas atuarei como mediador, caso não haja acordo; Os participantes que farão as avaliações sobre o que está ruim e o que pode ser melhorado.

Creio que, se não for possível, ele passe a responsa pra alguém de confiança dele.

 

Boa sorte a todos os participantes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, eu estava pensando em justamente nele, para explorar pedir essa participação Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

[...] assistindo o mesmo desenho animado que passava 6 vezes todos os dias porém, sem nunca colidir os episódios na mesma semana.

Ele só deu a base, por isso 3 episódios catalogados. Pela lógica, o mínimo de episódios seriam 42.

 

Pra quem estiver a fim de começar, segue uma lista de dois clássicos da infância de muita gente por aqui:

http://en.wikipedia.org/wiki/List_of_The_Simpsons_episodes

http://www.chavodel8.com/capitulos/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato, por isso incluir um método addEpisodes(), para que você possa adicioná-los manualmente.

 

Veja que eu sequer usei nomes de episódios reais. Se você(s) optar(em) por usar algum cartoon que realmente exista, pode, recriar a matriz de episódios.

 

Quanto aos programas passados pelo Evandro eu nem tinha pensado neles. O Chaves apesar de passar toda vez que o IBOPE do SBT cai devido alguma porcaria nova, não repete o dia inteiro.

 

E os Simpsons também não. A Globo só passa(va) de Sábado e a Fox, se não me falha a memória, no máximo três vezes ao dia (salvo as maratonas e especiais que ficavam até 4 horas direto).

 

Abaixo uma modificação para quem quiser usar um desenho real, com epísódios reais, ignorando os fictícios padrão da classe:

 

episodes.php

<?php 

class Episodes {

   private  $days = array( 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado' );

   private $hours = array( 6, 12, 15, 18, 20, 22 );

   private $episodes = array( 'Uma idéia idiota', 'Um Desafio sem lógica', 'Por que estou participando?' );

   private $shown = array();

   private $reset = FALSE;

   public function __construct( array $episodes = array() ) {

       if( count( $episodes ) != 0 ) {

           $this -> addEpisodes( $episodes );
       }
   }

   public function addEpisodes( $episodes ) {

   	if( $this -> reset ) {
   		$this -> episodes = array();
   	}

       if( is_array( $episodes ) ) {

           foreach( $episodes as $episode ) {

               $this -> addEpisode( $episode );
           }

       } else {

           $this -> episodes[] = $episodes;
       }

       return $this;
   }

   public function show() {

       $day     = $this -> days[ array_rand( $this -> days, 1 ) ];
       $hour    = $this -> hours[ array_rand( $this -> hours, 1 ) ];
       $episode = $this -> episodes[ array_rand( $this -> episodes ) ];

       // Aqui é onde o Desafio REALMENTE começa

       $this -> shown[ $day ][ $hour ] = $episode;

       return $this -> shown;
   }

   public function getShownList() {
       return $this -> shown;
   }

   public function getEpisodes() {
       return $this -> episodes;
   }

   public function getResetFlag() {
   	return $this -> reset;
   }

   public function switchResetFlag() {
   	$this -> reset = ( $this -> reset ? FALSE : TRUE );
   }
}

?>

Assim, antes de adicionar qualquer episódio, basta invocar o método switchResetFlag() e adicionar o primeiro.

 

Depois reinvocá-lo (para desligar) e adicionar os outros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que seja isso:

 

A lista de episódios da série japonesa Jiraya:

private $episodes = array(		'1 - Pako, a Cápsula Miraculosa (em japonês: 磁雷矢VS妖魔一族, Jiraiya VS Yūma Ichizoku?)'		,'2 - Barão Owl, o Imperador Ninja (em japonês: 城忍フクロウ男爵, Jōnin Fukurou Danshaku?)' 	,'3 - A Esmeralda (em japonês: 牢忍ハブラムの秘宝!!, Rōnin Haburamu no Hihō!!?)' 	,'4 - A Retomada da Inscrição (em japonês: 破れ!! 火忍チャンカンフーの幻術, Yabure!! Kanin Chan Kan Fū no Genjutsu?)' 	,'5 - O Roubo da Espada Olímpica (em japonês: 奪われた磁光真空剣!!, Torawareta Jikkō Shinkū Ken!!?)' 	,'6 - O Mistério dos Mistérios (em japonês: 謎の謎は謎謎?!, Nazo no Nazo wa Nazonazo?!?)' 	,'7 - O Caçador da Selva (em japonês: ジャングルのハンター獣忍マクンバ, Janguru no Hantā Jūnin Makunba?)' 	,'8 - O Anjo da Paz (em japonês: 暗殺はデートの後で, Ansatsu wa Deeto no Ato de?)' 	,'9 - A Emboscada (em japonês: ワナワナ罠のパコ作戦, Wana Wana Wana no Pako Sakusen?)' 	,'10 - A Vingança do Kung-Fu Part I (em japonês: 生か死か! 霊幻忍法の恐怖, Sei ka Shi ka! Reigen Ninpō no Kyōfu?)' 	,'11 - A Vingança do Kung-Fu Part II (em japonês: 怒りの闘破・真っ向両断!!, Osori no Tōha・Makkō Ryō Dan!!?)' 	,'12 - A Promessa do Amor (em japonês: 折鶴のペンダントは愛の誓い, Orizuru no Pendanto wa Ai no Chikai?)' 	,'13 - As Sete Sombras (em japonês: 祭忍VS七人の忍者たち, Sainin VS Shichinin no Ninja-tachi?)' 	,'14 - O Franco-Atirador (em japonês: 小さな命に燃えた爆忍ロケットマン, Chiisa na Inochi ni Moeta Bakunin Roketto Man?)' 	,'15 - A Maldição Lendária (em japonês: 呪いの魔女伝説, Noroi no Majo Densetsu?)' 	,'16 - A Cruzada dos Ninjas (em japonês: 風に泣くサイボーグ忍者! 風忍馬風破, Kaze ni Naku Saibōgu Ninja! Kazenin Mafūba?)' 	,'17 - A Estrela das Trevas (em japonês: 夢破I 浜名湖に潜む魔王!, Yumeha I Hamanako ni Hisomu Maō!?)' 	,'18 - A Vingança de Agnes (em japonês: 夢破II 霊気が燃える大砂丘!, Yumeha II Reiki ga Moeru Dai Sakyū!?)' 	,'19 - A Invasão (em japonês: 武神館を占領せよ!, Bushinkan o Senriyō seyo!?)' 	,'20 - Procura-se Jiraiya (em japonês: ハロー! 雷忍ワイルドは陽気なガンマン, Harō! Rainin Wairudo wa Yōki na Ganman?)' 	,'21 - A Ira da Lua (em japonês: 聖忍アラムーサ・怒りの手裏剣を放て!, Seinin Aramūsa・Osori no Shuriken o Hanate!?)' 	,'22 - A Dimensão da Amizade (em japonês: 花咲け! 美しきくの一忍法, Hanasake! Utsukushikiku no Ichininpō?)' 	,'23 - O Sequestro dos Cientistas (em japonês: 毒斎より怖い?! 鉄忍ガメッシュ, Dokusai yori Kowai?! Tetsunin Gamesshu?)' 	,'24 - O Capitão Pirata (em japonês: 海賊キャプテンクックの金貨, Kaizoku Kyaputenkukku no Kinka?)' 	,'25 - O Rapto dos Animais (em japonês: ペットがいない! ラーメン小母さん大奮戦, Petto ga Inai! Rāmen Obasan Daifunsen?)' 	,'26 - A Primavera de Emiha (em japonês: おしゃれと危険! ケイと恵美破, Oshareto Kiken! Kei to Emiha?)' 	,'27 - Jiraiya, o inimigo de Toha (em japonês: 闘破の敵は磁雷矢, Tōha no Teki wa Jiraiya?)' 	,'28 - Quem sou eu? (em japonês: あぶない戸隠流・闘破は誰の子?, Abunai Togakure-ryū・Tōha wa Dare no Ko??)' 	,'29 - A Revolta do Pequeno Ninja (em japonês: 0点小僧の忍者オリンピック, Reitenkozō no Ninja Orinpikku?)' 	,'30 - O Ninja Solitário (em japonês: 忍法・ハナちょうちん!, Ninpō・ Hana Chōsan!?)' 	,'31 - A Espada de Shingen (em japonês: パリで見つかった武田信玄の愛刀, Pari de Mitsukatta Takeda Shingen no Ai Katana?)' 	,'32 - A Percepção Extrasensorial (em japonês: 渚のくの一忍法帖, Nagisa no Kunoichi Ninpōjō?)' 	,'33 - A Guitarra Cobiçada (em japonês: ギターかかえた渡り鳥・雷忍ワイルド, Gitā Kanaeta Watari Tori・Rainin Wairudo?)' 	,'34 - A Caveira Assassina (em japonês: 出た!! 妖魔巨獣 史上最大の危機, Deta!! Yōma Kyojū Shijō Saidai no Kiki?)' 	,'35 - O Desafio dos Togakure (em japonês: 天空に立つ磁雷神!!, Tenkū ni Tatsu Jiraijin!!?)' 	,'36 - O Feitiço do Gato Preto (em japonês: 闇に光る黒猫の目! 怪盗デビルキャッツ, Yami ni Hikaru Kuroneko no Me! Kaitō Debiru Kyattsu?)' 	,'37 - O Homem de 2300 Anos (em japonês: 2300年生きた男 宇宙忍デモスト, 2300 Nensei Kita Otoko Uchūnin Demosuto?)' 	,'38 - As Mil e Uma Faces (em japonês: 奇っ怪!! 百の顔の妖魔一族, Kikkai!! Hyaku no Kao no Yōma Ichizoku?)' 	,'39 - A Conspiração de Morgana (em japonês: 毒グモ爆弾!! 吉か・凶か?, Doku Kumo Bakudan!! Yoshi ka・Kyō ka??)' 	,'40 - A Traição (em japonês: 哀しみのジャンヌ, Kanashimi no Jannu?)' 	,'41 - Olímpica VS Satã (em japonês: 磁光真空剣VS暗黒剣, Jikkō Shinkū Ken VS Ankoku Ken?)' 	,'42 - Adeus, Mamãe (em japonês: さよなら! 幻の母上様, Sayonara! Maboroshi no Hahaue-sama?)'	);
Segue a lógica no método show():

public function show() {		$aux = array();		foreach($this->days as $dia) {			for($x = 0, $limit = count($this->hours); $x < $limit; $x++) {				do {					$episode = $this->episodes[array_rand($this -> episodes, 1)];				} while(array_key_exists($episode, $aux));								do {					$hour = $this->hours[$x];					$this->shown[$dia][$hour] = $episode;				} while(!array_key_exists($hour, $this->shown[$dia]));				$aux[$episode] = true;			}		}		 	return $this->shown;	}
Retorno:

 

 

Exibindo os Episódios - Array( [Domingo] => Array ( [6] => 37 - O Homem de 2300 Anos (em japonês: 2300????? ???????, 2300 Nensei Kita Otoko Uch?nin Demosuto?) [12] => 32 - A Percepção Extrasensorial (em japonês: ????????, Nagisa no Kunoichi Ninp?j??) [15] => 24 - O Capitão Pirata (em japonês: ?????????????, Kaizoku Kyaputenkukku no Kinka?) [18] => 27 - Jiraiya, o inimigo de Toha (em japonês: ????????, T?ha no Teki wa Jiraiya?) [20] => 6 - O Mistério dos Mistérios (em japonês: ???????!, Nazo no Nazo wa Nazonazo?!?) [22] => 35 - O Desafio dos Togakure (em japonês: ????????!!, Tenk? ni Tatsu Jiraijin!!?) ) [Segunda] => Array ( [6] => 26 - A Primavera de Emiha (em japonês: ???????! ??????, Oshareto Kiken! Kei to Emiha?) [12] => 31 - A Espada de Shingen (em japonês: ???????????????, Pari de Mitsukatta Takeda Shingen no Ai Katana?) [15] => 40 - A Traição (em japonês: ????????, Kanashimi no Jannu?) [18] => 5 - O Roubo da Espada Olímpica (em japonês: ?????????!!, Torawareta Jikk? Shink? Ken!!?) [20] => 29 - A Revolta do Pequeno Ninja (em japonês: 0????????????, Reitenkoz? no Ninja Orinpikku?) [22] => 28 - Quem sou eu? (em japonês: ???????????????, Abunai Togakure-ry??T?ha wa Dare no Ko??) ) [Terça] => Array ( [6] => 17 - A Estrela das Trevas (em japonês: ??I ????????!, Yumeha I Hamanako ni Hisomu Ma?!?) [12] => 25 - O Rapto dos Animais (em japonês: ???????! ???????????, Petto ga Inai! R?men Obasan Daifunsen?) [15] => 34 - A Caveira Assassina (em japonês: ??!! ???? ???????, Deta!! Y?ma Kyoj? Shij? Saidai no Kiki?) [18] => 14 - O Franco-Atirador (em japonês: ????????????????, Chiisa na Inochi ni Moeta Bakunin Roketto Man?) [20] => 42 - Adeus, Mamãe (em japonês: ????! ?????, Sayonara! Maboroshi no Hahaue-sama?) [22] => 3 - A Esmeralda (em japonês: ?????????!!, R?nin Haburamu no Hih?!!?) ) [Quarta] => Array ( [6] => 13 - As Sete Sombras (em japonês: ??VS???????, Sainin VS Shichinin no Ninja-tachi?) [12] => 22 - A Dimensão da Amizade (em japonês: ???! ????????, Hanasake! Utsukushikiku no Ichininp??) [15] => 12 - A Promessa do Amor (em japonês: ?????????????, Orizuru no Pendanto wa Ai no Chikai?) [18] => 2 - Barão Owl, o Imperador Ninja (em japonês: ????????, J?nin Fukurou Danshaku?) [20] => 8 - O Anjo da Paz (em japonês: ?????????, Ansatsu wa Deeto no Ato de?) [22] => 4 - A Retomada da Inscrição (em japonês: ??!! ????????????, Yabure!! Kanin Chan Kan F? no Genjutsu?) ) [Quinta] => Array ( [6] => 20 - Procura-se Jiraiya (em japonês: ???! ??????????????, Har?! Rainin Wairudo wa Y?ki na Ganman?) [12] => 10 - A Vingança do Kung-Fu Part I (em japonês: ????! ???????, Sei ka Shi ka! Reigen Ninp? no Ky?fu?) [15] => 33 - A Guitarra Cobiçada (em japonês: ?????????????????, Git? Kanaeta Watari Tori?Rainin Wairudo?) [18] => 7 - O Caçador da Selva (em japonês: ????????????????, Janguru no Hant? J?nin Makunba?) [20] => 18 - A Vingança de Agnes (em japonês: ??II ?????????!, Yumeha II Reiki ga Moeru Dai Saky?!?) [22] => 23 - O Sequestro dos Cientistas (em japonês: ???????! ???????, Dokusai yori Kowai?! Tetsunin Gamesshu?) ) [Sexta] => Array ( [6] => 11 - A Vingança do Kung-Fu Part II (em japonês: ???????????!!, Osori no T?ha?Makk? Ry? Dan!!?) [12] => 30 - O Ninja Solitário (em japonês: ??????????!, Ninp?? Hana Ch?san!?) [15] => 21 - A Ira da Lua (em japonês: ?????????????????!, Seinin Aram?sa?Osori no Shuriken o Hanate!?) [18] => 36 - O Feitiço do Gato Preto (em japonês: ????????! ?????????, Yami ni Hikaru Kuroneko no Me! Kait? Debiru Kyattsu?) [20] => 38 - As Mil e Uma Faces (em japonês: ???!! ????????, Kikkai!! Hyaku no Kao no Y?ma Ichizoku?) [22] => 39 - A Conspiração de Morgana (em japonês: ?????!! ??????, Doku Kumo Bakudan!! Yoshi ka?Ky? ka??) ) [Sábado] => Array ( [6] => 9 - A Emboscada (em japonês: ??????????, Wana Wana Wana no Pako Sakusen?) [12] => 1 - Pako, a Cápsula Miraculosa (em japonês: ???VS????, Jiraiya VS Y?ma Ichizoku?) [15] => 15 - A Maldição Lendária (em japonês: ???????, Noroi no Majo Densetsu?) [18] => 41 - Olímpica VS Satã (em japonês: ?????VS???, Jikk? Shink? Ken VS Ankoku Ken?) [20] => 19 - A Invasão (em japonês: ????????!, Bushinkan o Senriy? seyo!?) [22] => 16 - A Cruzada dos Ninjas (em japonês: ???????????! ?????, Kaze ni Naku Saib?gu Ninja! Kazenin Maf?ba?) ))Runtime: 0.001236
Ninguém vai participar desse negócio não? Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por W. O. ou falta de quórum (escolham o que quiserem) encerra-se o desafio com um único participante e, tão consequente quanto obviamente, o próprio como vencedor.

 

Parabéns ao Daniel pelo interesse (e pelo código - muito embora um lack de memória me tenha impedido de testá-lo). Imagem Postada

 

Aos outros que pelo menos visitaram o tópico, cumprimentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.