Você é um jovem chef talentoso que acaba de receber a posição de sous chef no restaurante indiano mais prestigiado do mundo. Você tem pouca experiência com a preparação da culinária indiana, mas está determinado, e decide provar a si mesmo. Você decide se tornar o dosa líder especialista em . Para fazer isso, você deve não apenas dominar a criação de dosas, mas também poder escalá-las para serem arbitrariamente grandes.
Você encontra uma receita promissora para a massa dosa:
- 1 xícara de arroz
- 1 xícara ukda chawal
- 1/2 xícara de chá
- 1/4 xícara de poha
- 1/4 colher de chá de sementes de meti
- Sal a gosto
- Água conforme necessário
Isso fará uma dosa aproximadamente de 1/2 metro de comprimento.
Desafio
Escreva um programa ou função que informe à equipe do restaurante exatamente o que é necessário para fazer uma única dose de um múltiplo inteiro da receita fornecida .O espaço é pequeno na cozinha, então você deseja que seu código seja o mais curto possível. O código mais curto vence, com empates indo para o post anterior.
As colheres e xícaras de medição são fornecidas nos seguintes tamanhos padrão: 1/4, 1/3, 1/2, 2/3, 3/4 e 1. Para evitar irritar a equipe da cozinha, as medições devem ser relatadas na maior unidade da cujo número pode ser escrito como números mistos usando apenas tamanhos padrão .
As medidas são propagadas para tamanhos maiores de acordo com a seguinte convenção:
- 3 colheres de chá == 1 colher de sopa
- 4 colheres de sopa == 1/4 xícara
Assim, para um múltiplo de 12, 1/4 de colher de chá de sementes de meti se torna 1 colher de sopa. No entanto, para um múltiplo de 13, torna-se 3 1/4 de colher de chá. Caso contrário, não seria representado em tamanhos padrão.
A equipe de garçons deve ser capaz de levar o dosa para as mesas. Para garantir que a dosa não pare em trânsito, instrua-os a transportar a dosa em equipes. Cada pessoa pode transportar no máximo um metro de dose. Portanto, para uma receita única ou dupla, apenas uma pessoa é necessária para carregá-la. A equipe de espera é menos eficaz se eles são cortados em pedaços fracionários, portanto, um número inteiro de garçons é sempre necessário.
Entrada
Tome um número inteiro positivo via STDIN (ou alternativa mais próxima), argumento de linha de comando ou argumento de função. Esse número determina o fator de escala da receita e pode ser tão pequeno quanto 1, mas não maior que 2 32 -1. Pode ser qualquer número inteiro nesse intervalo.
Saída
Imprima em STDOUT (ou alternativa mais próxima) a lista de ingredientes escalados de acordo com a entrada, bem como o número de garçons necessários para transportar a dosa. Os ingredientes devem ser listados na ordem indicada acima e no formato fornecido abaixo.
Exemplos
Entrada:
2
Saída:
2 cups rice
2 cups ukda chawal
1 cup urad dal
1/2 cup poha
1/2 tsp methi seeds
Salt to taste
Water as needed
1 waiter
Observe que "cup" muda para "cups" quando o valor é maior que 1. "tsp" não muda. "garçom", como "xícara", torna-se plural.
Entrada:
5
Saída:
5 cups rice
5 cups ukda chawal
2 1/2 cups urad dal
1 1/4 cups poha
1 1/4 tsp methi seeds
Salt to taste
Water as needed
3 waiters
Valores não inteiros maiores que 1 são representados como números mistos, isto é, um número inteiro seguido por uma fração reduzida.
Nota: O título vem de um vídeo relevante .
fonte
Respostas:
CJam, 214 bytes
Experimente online no intérprete CJam .
fonte
Javascript (ES6), 443 caracteres
Foi muito divertido jogar golfe, mas o resultado é consideravelmente mais longo do que eu esperava.
Experimente:
Mostrar snippet de código
Aceita valores de até e inclusive incluindo
2^32
ou4294967296
. Depois disso, o 'urad dal' transborda em números ímpares e se torna negativo.Basicamente, ele calcula os valores corretos à medida que avança. Felizmente, apenas as sementes methi precisam ter medidas de colher de chá / colher de sopa / xícara; caso contrário, isso teria sido muito mais longo. (A linha de sementes methi sozinha é de 155 caracteres!)
Isso também teria pelo menos 500 caracteres no ES5. Eu ES6.
Como sempre, as sugestões são muito apreciadas!
Edit 1: Acabei de perceber que de acordo com as regras,
1 tsp
deve ser substituído por1/3 tbsp
, same with2 tsp
e2/3 tbsp
, as well as16 tsp
and1/3 cup
....fonte
-~
isso,b=-~t/2
é muito mais curto, você também pode excluir o parêntese-~1
resulta em2
, que não é o resultado pretendido. A melhor alternativa que eu pude encontrar,b=-~((n-1e-9)/2)
é o mesmo tempo, por isso continuarei do jeito que está por enquanto.Lisp comum, 435
Ligeiramente não-destruído
Todas as medidas estão expressas em
tsp
. Com base nak
função,g
decide quais unidades usar para impressão e chama a função de formataçãoh
com os argumentos apropriados.k
retorna true quando o argumento pode ser expresso como um múltiplo de 1, 1/4, 1/3, 2/3, 4/3 unidadesg
converte a entrada como um número de colheres de sopa e o número de colheres de sopa como um número de xícaras (conforme indicado na pergunta). Tentamos imprimir primeiro por unidades de xícaras, por unidades de colheres de sopa ou por tps.h
use diretivas de formatação condicionais para imprimirx
,x y/z
ouy/z
seguidas da formatação des
with argumentm
: for cups,s
é o"cup~P"
que plurializa a palavra de acordo comm
.Exemplo (n = 17)
fonte
R,
602603526 bytesAinda tenho muito espaço para jogar golfe, suspeito, mas o tempo acabou e eu realmente queria dar uma resposta para essa pergunta.
fonte
1/3 tbsp 1/4 tsp methi seeds
mas deve ser representado em uma única unidade comum. Assim deveria ser1 1/4 tsp methi seeds
(se minha matemática mental estiver correta).JavaScript (Node.js) , 419 bytes
Experimente online!
fonte