As portas deslizantes têm preços variados com base na largura das portas. Os preços diferentes são os seguintes:
- 60 - 80 cm: ¤150
- 81 - 100 cm: ¤200
- 101 - 120 cm: ¤220
Ao comprar um armário, obviamente, você deseja minimizar o custo; portanto, sua tarefa é encontrar a largura das portas que minimiza o custo total com base na largura total do armário.
Regras:
- A largura total será tomada como entrada
- Todas as portas terão a mesma largura
- Escolha as portas menores se dois tipos de portas custarem o mesmo
- As larguras estão em centímetros, números inteiros não decimais
- Decimais arredondados
- O preço deve ser retornado como um número inteiro (não é necessário o sinal de moeda)
- Os formatos de entrada e saída são opcionais, mas a ordem da saída deve ser:
Number of doors, Width, Price
. - A entrada estará no intervalo
[120 1000)
.
Isso é código de golfe. O código mais curto em bytes vence.
Exemplos:
Input: 156
Output: 2, 78, 300
Input: 331
Output: 3, 111, 660
Input: 420
Output: 4, 105, 880
code-golf
arithmetic
Stewie Griffin
fonte
fonte
201
é um caso de teste interessante ...Respostas:
05AB1E , 47 bytes
Código:
Não é a melhor apresentação, mas pelo menos alguma coisa :)
Experimente online!
fonte
JavaScript (ES6), 101 bytes
-~(~-a/b)
é o mesmo que Math.ceil (a / b) em números inteiros de 31 bits.fonte
Perl,
190180154133128117 bytesinclui +1 para
-p
Comentado:
Salve 11 bytes inserindo e dividindo o hash em duas matrizes
Salve 5 bytes usando
-p
(graças a @ dev-null)Economize 18 bytes usando POSIX :: ceil e mais 3 usando a sintaxe da lista para hash (graças a @ msh210)
fonte
sub r{$a=$_[0];~~$a==$a?$a:1+~~$a}
ésub r{use POSIX;ceil pop}
.(80=>150,100=>200,120=>220)
é(80,150,100,200,120,220)
.[120-1000)
, mas sempre se pode mudar1E4
para1E9
...PowerShell,
137135 bytesA saída é separada por nova linha.
Tomamos informações
$a
, definimos nosso custo$j
para9000000000
(um grande número que é muito mais do que precisaríamos). Em seguida, passamos de60..120
com|%{...}
. Cada iteração calcula o$p
preço do item atual com uma declaração pseudo-ternária e calcula o$c
teto de$a/$_
. Se o total atual for menor que o menor que já vimos ($j
), salve todas essas variáveis:$j
(o total),$k
(o número de portas necessárias) e$i
(a largura da porta) e continue o loop. Quando o loop terminar, basta exibir os melhores valores.Editar - salvou dois bytes movendo as atribuições
$c
e$p
para aif
condiçãofonte
Pitão, 65 bytes
Experimente aqui!
Explicação
Primeiro, isso gera uma lista de todas as combinações possíveis de contagem / largura de porta e calcula o preço de cada uma dessas combinações. Depois, basta solicitar por preço e largura da porta e pegar o primeiro elemento da lista resultante.
A explicação do código segue depois que eu joguei isso para baixoPor favor me ajude a jogar isso, isso é muito longo.fonte
JavaScript (ES6) 96
Conforme observado por @Neil,
=-~(~-n/d)
é equivalente à divisão com arredondamentos para números inteiros de 32 bits ou menos.fonte
R ,
135104 bytesExperimente online!
Salvo 31 bytes por
utf8ToInt
cbind
diretamente ao invés de definir variáveisComo funciona:
approx
retorna o preço de uma única porta com base no seu comprimento. RetornaNA
fora do intervalo[60,120]
.(number of doors, door width, total price)
é retornado.order
função é usada para localizar o preço mínimo; o trigêmeo correto é extraído com base nisso. Em caso de empate,order
retornará a entrada que vem primeiro e, como passamos de 16 para 1, o maior número de portas (menor largura de porta) será retornado.fonte
stepfun
é mais longa - pois é necessário remover a largura fora de[60,120]
.