Você deve escrever um programa ou função que receba o volume de uma tigela e o volume de água nela como entrada e saída ou retorne uma representação ASCII de uma tigela com água nos volumes desejados.
Uma tigela tem a seguinte estrutura:
\ /
\___/
A tigela tem pelo menos um _
caractere. A contagem de \
's' e /
's também é positiva e é igual devido à simetria.
O volume da tigela é o número total de caracteres _
e space
entre os \
's /
' e mais um para cada par de \
e /
. Isso significa que a tigela acima tem o volume de 10
:
\ / => xxxxx x (the last one is for the \/ pair)
\___/ xxx x (the last one is for the \/ pair)
Observe que duas taças diferentes podem ter o mesmo volume. Por exemplo, as duas tigelas a seguir têm um volume de 18:
\ /
\ / \ /
\___/ \_______/
Podemos derramar um pouco de água na tigela. A água é representada como uma linha de ~
caracteres em vez de espaços dentro da tigela. A linha inferior não tem espaços, portanto não pode conter os ~
. Isso significa que nosso exemplo pode ser preenchido com água de apenas uma maneira:
\~~~~~/
\___/
Outras tigelas podem ser preenchidas de várias maneiras:
\~~~~~/ \ /
\ / \~~~/
\_/ \_/
O volume da água em uma tigela é o volume das linhas da tigela abaixo dos ~
caracteres. Os exemplos acima têm volumes de água 4, 6 and 2
respectivamente.
Entrada
- Dois números inteiros positivos, o volume da tigela e o volume da água.
- Você pode escolher a ordem dos dois números.
- Os dois números inteiros podem ser inseridos em qualquer formato de lista comum (lista, tupla, matriz etc.) ou como dois números inteiros separados.
- Pelo menos uma configuração válida de água da bacia é garantida para os valores de entrada.
Resultado
- A representação ASCII de uma tigela com água, onde os volumes da tigela e da água correspondem à entrada.
- Se você optar por retornar o resultado em vez de imprimir, ele deverá ser retornado como sequência única (ou a alternativa mais próxima do seu idioma).
- Qualquer espaço em branco à direita é permitido.
- Nenhum espaço em branco inicial desnecessário é permitido.
- Se houver várias configurações corretas, você poderá escolher qual delas será a sua, mas somente uma delas.
Exemplos
Cada par inteiro de entrada é seguido por uma ou mais saídas possíveis.
6 2
\~~~/
\_/
10 4
\~~~~~/
\___/
24 8
\ /
\~~~~~~/
\ /
\__/
42 12 //either of the two output is correct
\ /
\ /
\~~~~~~~/
\ /
\ /
\_/
\ /
\~~~~~~~~~~~~~/
\___________/
90 68
\~~~~~~~~~~~~~~~~~~~~~/
\ /
\ /
\ /
\_____________/
102 42
\ /
\ /
\~~~~~~~~~~~~~~~~~/
\ /
\ /
\___________/
Este é um código de golfe, portanto a entrada mais curta vence.
fonte
At least one valid bowl-water configuration is guaranteed for the input values.
- OPJavascript ES5, 364 bytes
Isto é o que eu poderia criar rapidamente durante o meu almoço, me ajudar a jogar golfe enquanto meu turno termina!
Fonte
Golfe:
(percorreu o minifier para comprimir, o turno do almoço terminou)
fonte
Perl,
227172 bytesExecute com a opção -n:
Agradeço ao Dennis por ajudar a resolver isso.
Calcula o volume da tigela como altura * (largura + altura), em que largura é o número de
_
caracteres e altura é o número de\
caracteres.Cada combinação de altura e largura é testada em um par de loops aninhados até que o volume correto do recipiente seja encontrado; em seguida, outro loop sobre os possíveis níveis de altura da água é feito para descobrir se é possível um volume correto de água com essa largura.
É possível remover o terceiro loop apenas calculando o nível de água usando a fórmula quadrática com a como 1, b como a largura ec como negativo do volume de água desejado e verificando se é um número inteiro, mas que consome mais bytes do que apenas fazer um loop. Aqui está assim mesmo (183 bytes):
fonte
Python 2, 162 bytes
Um pouco bagunçado, mas aqui está minha primeira tentativa. Ele tenta todos os números possíveis de linhas
r
, configurando o número de sublinhados basea = V/r-r
. Depois, tenta todas as alturas possíveis do nível da águak
e verifica se a tigela é válida, imprimindo-a se for o caso.fonte
Python 2.7,
284270260 bytesIsso basicamente calcula a altura e a largura do balde e da água e as imprime.
Tentei remover a parte feia do loop while no início (em que eu calculo a altura do balde e a altura de onde a água deve ser retirada. No momento, todas as linhas do código, exceto a última, destinam-se ao cálculo da largura e altura). Ainda tentando: P
Testando para casos diferentes -
fonte