Ir para conteúdo

POWERED BY:

Arquivado

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

Daniel Ribeiro

[DESAFIO] Caixa Eletrônico

Recommended Posts

Qual é o objetivo do desafio ? Distribuir o maior ou menor número de notas ?

 

E se eu quiser R$ 101,00 ?

Se for menor: Uma nota de R$100 e outra de R$1. (Quer queira ou não, a nota de R$1 é essencial nesses casos: R$101, R$201, R$301, R$401, R$501, R$1001, R$2001, R$5001.

 

(A não ser que faça uma verificação e pergunta qual o último número do valor. Se for 1 subtrai ele e fala que não vai dar 1 real pro usuário.)

 

Se for maior: Uma nota de R$50, Duas notas de R$20, Uma nota de R$5 e três notas de R$2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o objetivo do desafio ? Distribuir o maior ou menor número de notas ?

 

E se eu quiser R$ 101,00 ?

Se for menor: Uma nota de R$100 e outra de R$1. (Quer queira ou não, a nota de R$1 é essencial nesses casos: R$101, R$201, R$301, R$401, R$501, R$1001, R$2001, R$5001.

 

(A não ser que faça uma verificação e pergunta qual o último número do valor. Se for 1 subtrai ele e fala que não vai dar 1 real pro usuário.)

 

Se for maior: Uma nota de R$50, Duas notas de R$20, Uma nota de R$5 e três notas de R$2.

 

O desafio é retornar o MENOR número de notas possíveis para chegar à quantia solicitada.

 

As notas disponíveis devem ser 2, 5, 10, 20, 50 e 100.

 

OBS: A nota de 1 só é necessária para os valores 1 e 3. Todos os outros valores podem ser retirados com as notas disponíveis no vetor inicial.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem contar Go Back, que desse jeito o preguiçoso aqui já fez e tomou na cabeça :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Daniel

 

E aí??? Cadê o(s) seu(s) código(s)? Você disse que tinha 2 (um implementando Chain of Responsability e outro mais simples, focado na resolução do problema). Até agora não vimos nenhum código seu, só análises em cima do código dos outros...

 

Ficamos todos no aguardo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Daniel

 

E aí??? Cadê o(s) seu(s) código(s)? Você disse que tinha 2 (um implementando Chain of Responsability e outro mais simples, focado na resolução do problema). Até agora não vimos nenhum código seu, só análises em cima do código dos outros...

 

Ficamos todos no aguardo.

 

Carlos Eduardo

 

Não Matias, essa implementação abstrata utilizando o pattern Chain of Responsibility eu não tenho implementada ainda. O que eu disse é que ela seria implementada e postada mais à frente.

 

Com relação à solução do desafio, estou aguardando mais pessoas se manifestarem para participar. Gostaria de ver o Bruno corrigir o código dele também, mas não sei se ele vai fazer.

 

O Go Back também manifestou interesse em participar, então vamos aguardar.

 

Não precisa de pressa cara , com calma a gente chega lá.

 

De que adianta eu postar a solução pronta de uma vez? Perde totalmente a proposta do tópico. Assim que tivermos algumas participações a mais e códigos solucionando o problema, aí sim eu posto o meu.

 

OBS: Até agora pelo menos 4 ou 5 pessoas participaram, e só o seu código resolveu o problema. Quero ver mais entusiasmo dos outros ;D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa de pressa cara , com calma a gente chega lá.

 

Apenas tome cuidado para não causar um abandono do pessoal.

 

Um desafio precisa de métricas para avaliação e prazos para execução e, até esse momento, não vi qualquer métrica ou prazo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fora que, usualmente, um desafio é encabeçado pelo Desafiante com um código a ser melhorado OU, depois de algumas respostas, o Desafiante posta o dele para que continue-se o debate sobre um escopo global de todos os códigos, incluindo o o Desafiante.

 

O meu código, como eu disse no post #40 é final porque não sei (ou pelo menos, não sei se sei) como atender estritamente o pressuposto pelo Desafio.

 

Eu penso de forma diferente, mais na relação usuário-ATM do que no objetivo em si, por isso não vou mexer mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias, peguei seu cód. e colei no eclipse para eu testar(estudar) e ver o funcionamento, mas ele acusa um erro na linha 42 e 44

 

// removendo as notas maiores do que o valor solicitado, evitando iterações desnecessárias
	$notasDisponiveis = array_filter($this->notasDisponiveis, function ($elemento) use ($valorSolicitado) { 
			return (bool)($elemento <= $valorSolicitado); 
	} );

 

pode usar esse function() use() { }; ?

 

Obrigado e desculpe a minha falta de conhecimento ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias, peguei seu cód. e colei no eclipse para eu testar(estudar) e ver o funcionamento, mas ele acusa um erro na linha 42 e 44

 

// removendo as notas maiores do que o valor solicitado, evitando iterações desnecessárias
	$notasDisponiveis = array_filter($this->notasDisponiveis, function ($elemento) use ($valorSolicitado) { 
			return (bool)($elemento <= $valorSolicitado); 
	} );

 

pode usar esse function() use() { }; ?

 

Obrigado e desculpe a minha falta de conhecimento ^_^

 

Isto são closures ou funções anônimas. Só funcionam a partir do PHP 5.3.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

acredito que devamos impedir que membros lancem desafios, sem antes comprovarem o ter resolvido.

 

Isso abre brechas que já conhecemos, de gente 'querendo que os outros resolvam algo que eles não sabem resolver'.

 

Nesse caso, sugiro que para este fórum de Desafio, o membro que quiser abrir, envie a solução para algum moderador antes de começar, e só daí, o desafio começaria e seria liberado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pior é que é difícil até dar o benefício da dúvida quanto à Ultima Atividade do Daniel, já que foi hoje mesmo.

 

Não acredito que ele tenha esquecido ou mesmo não tido tempo de postar algo que, segundo ele, já está pronto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pior é que é difícil até dar o benefício da dúvida quanto à Ultima Atividade do Daniel, já que foi hoje mesmo.

 

Não acredito que ele tenha esquecido ou mesmo não tido tempo de postar algo que, segundo ele, já está pronto.

Pois é. Eu iniciei a postagem no desafio porque "confiei" no Daniel. Não poderia imaginar que ele estava só querendo um código "de grátis".

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@all

 

Pelo amor de Deus, né gente. Nem acredito no nível de discussão que vocês conseguiram alcançar com a minha ausência.

 

Estive acompanhando o tópico nestes quatro ou cinco últimos dias só pra não perder o fio da meada, mas estou com alguns problemas pessoais que não me permitiram dedicar tempo suficiente para voltar efetivamente ao desafio.

 

Como eu disse anteriormente, e vou repetir pela última vez: tenho a solução do desafio pronta. Irei postar em breve, e gostaria que todos tenham um pouco mais de paciência.

 

E por favor, em vez de ficarem me julgando sem nem mesmo conhecer a situação em que me encontro, poderiam estar fazendo algo mais produtivo, como tentar resolver o desafio em primeiro lugar. Como já sabemos, somente um membro conseguiu resolver o problema proposto.

 

Não estou querendo arrumar richa com ninguém, só acho totalmente desnecessária essa discussão proposta nos últimos replys.

 

OBS: Tem um detalhe interessante sobre isso tudo: o João postou há algum tempo que já tinha, da mesma forma, a solução para o problema e, por questões pessoais, não quis postá-la ainda. Alguém duvida de que ele tenha a solução? Não quero comparar ninguém ou julgar ninguém. Mas fica aí a pulga na orelha de cada um de vocês.

 

Como eu disse, em breve postarei a solução aqui. Até logo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Calma cara, ninguém está te julgando. Só acho que se você abriu o desafio e pintou algum problema pessoal, poderia ter dado um toque de iria demorar um pouco para postar sua solução explicando o motivo.

 

Não precisava entrar em detalhes, mas apenas para que tivessemos ciência da situação como um todo.

 

Quanto ao João, em mesmo duvido que ele tenha pronto, mas acredito que alienígena do jeito que ele é assim que apertarem ele, o código aparece da noite pro dia. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

... mas acredito que alienígena do jeito que ele é assim que apertarem ele, o código aparece da noite pro dia. :lol:

 

Eheheh

 

Isso é verdade :yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite, pessoal!

 

Estou começando a estudar a POO no PhP e lendo o artigo achei uma boa tentar fazer para treinar.

Estou postanto o meu código mas não reparem, é coisa de iniciante.. rsrsrs

 

Bom, ainda estou começando e aceito sugestões onde posso melhorar.

 

<?php
class ATM{

   /**
    * Notas disponíveis no caixa eletrônico.
    * @var int
    */
   private $bills = array(2, 5, 10, 20, 50, 100);

  	/**
    * Retorna a quantidade de notas necessárias para a determinada
    * quantia de dinheiro.
    *
    * @param int $valorSaque
    * @return String $Mensagem
   */
public function saque($valorSaque)
{
	arsort($this->bills);
	$qtdNotas = 0;
	$notaAtual = 0;
	$total = $valorSaque;
	$mensagem = "";

	if($valorSaque == 1 OR $valorSaque == 3){
		return "Saque não disponível";
	}

	foreach($this->bills as $notaAtual){
		$notaDaVez = 0;
		while( $total-$notaAtual >= 0 ){
			if($total-$notaAtual == 1 OR $total-$notaAtual == 3){
				break;
			}
			$total -= $notaAtual;
			$qtdNotas++;
			$notaDaVez++;
		}
		if($notaDaVez > 0){
			$mensagem .= "Notas de R$".$notaAtual.",00: ".$notaDaVez ."<br />"; 
		}
	}
	if($total != 0)
		$mensagem = "<br />.............................<br />O valor de saque solicitado não é possivel pois não existem notas que atendam À solicitação";

	$mensagem = "<br />Saque de R$".$valorSaque.",00.<br />Foram utilizadas ".$qtdNotas." notas, sendo:<br />".$mensagem."<hr />";

	return $mensagem;


}

}

$atm = new ATM();
print $atm->saque(175);
print $atm->saque(101);
print $atm->saque(102);
print $atm->saque(103);

 

E o resultado seria algo do tipo:

 

 

Saque de R$175,00.

Foram utilizadas 4 notas, sendo:

Notas de R$100,00: 1

Notas de R$50,00: 1

Notas de R$20,00: 1

Notas de R$5,00: 1

 

Saque de R$101,00.

Foram utilizadas 7 notas, sendo:

Notas de R$50,00: 1

Notas de R$20,00: 2

Notas de R$5,00: 1

Notas de R$2,00: 3

 

Saque de R$102,00.

Foram utilizadas 2 notas, sendo:

Notas de R$100,00: 1

Notas de R$2,00: 1

 

Saque de R$103,00.

Foram utilizadas 8 notas, sendo:

Notas de R$50,00: 1

Notas de R$20,00: 2

Notas de R$5,00: 1

Notas de R$2,00: 4

 

Ps: Acho que está pior que o "Monstro Gambiarrento" do Matias... rsrrs

 

Abraços!

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.