Vous devez écrire un programme ou une fonction qui reçoit le volume d'un bol et le volume d'eau qu'il contient en entrée et en sortie ou renvoie une représentation ASCII d'un bol contenant de l'eau avec les volumes souhaités.
Un bol a la structure suivante:
\ /
\___/
Le bol a au moins un _
caractère. Les nombres de \
'et /
' sont également positifs et ils sont égaux en raison de la symétrie.
Le volume du bol est le nombre total de caractères _
et space
entre les \
s et /
les plus un pour chaque paire de \
et /
. Cela signifie que le bol ci-dessus a le volume de 10
:
\ / => xxxxx x (the last one is for the \/ pair)
\___/ xxx x (the last one is for the \/ pair)
Notez que deux bols différents peuvent avoir le même volume. Par exemple, les deux bols suivants ont un volume de 18:
\ /
\ / \ /
\___/ \_______/
Nous pouvons verser un peu d'eau dans le bol. L'eau est représentée comme une rangée de ~
caractères au lieu d'espaces à l'intérieur du bol. La rangée du bas n'a pas d'espaces et ne peut donc pas contenir les ~
. Cela signifie que notre exemple peut être rempli d'eau d'une seule manière:
\~~~~~/
\___/
D'autres bols peuvent être remplis de plusieurs manières:
\~~~~~/ \ /
\ / \~~~/
\_/ \_/
Le volume d'eau dans un bol est le volume des rangées de bol sous les ~
caractères. Les exemples ci-dessus ont 4, 6 and 2
respectivement des volumes d'eau .
Contribution
- Deux entiers positifs, le volume du bol et le volume de l'eau.
- Vous pouvez choisir l'ordre des deux nombres.
- Les deux entiers peuvent être entrés dans n'importe quel format de liste commun (liste, tuple, tableau, etc.) ou sous forme de deux entiers distincts.
- Au moins une configuration d'eau de bol valide est garantie pour les valeurs d'entrée.
Production
- Représentation ASCII d'un bol avec de l'eau où les volumes du bol et de l'eau correspondent à l'entrée.
- Si vous choisissez de renvoyer le résultat au lieu d'imprimer, il doit être renvoyé sous forme de chaîne unique (ou l'alternative la plus proche de votre langue).
- Tout espace de fin est autorisé.
- Aucun espace blanc non nécessaire n'est autorisé.
- S'il existe plusieurs configurations correctes, vous êtes libre de choisir celle que vous produisez, mais vous ne pouvez en sortir qu'une.
Exemples
Chaque paire d'entiers en entrée est suivie de ses une ou plusieurs sorties possibles.
6 2
\~~~/
\_/
10 4
\~~~~~/
\___/
24 8
\ /
\~~~~~~/
\ /
\__/
42 12 //either of the two output is correct
\ /
\ /
\~~~~~~~/
\ /
\ /
\_/
\ /
\~~~~~~~~~~~~~/
\___________/
90 68
\~~~~~~~~~~~~~~~~~~~~~/
\ /
\ /
\ /
\_____________/
102 42
\ /
\ /
\~~~~~~~~~~~~~~~~~/
\ /
\ /
\___________/
C'est le golf de code, donc l'entrée la plus courte gagne.
la source
At least one valid bowl-water configuration is guaranteed for the input values.
- OPJavascript ES5, 364 octets
C'est ce que j'ai pu trouver rapidement pendant mon déjeuner, aidez-moi à jouer au golf pendant la fin de mon quart de travail!
La source
Golfé:
(parcouru la minifiante pour compresser, fin de quart de midi)
la source
Perl,
227172 octetsExécuter avec l'option -n:
Merci à Dennis pour son aide à jouer au golf.
Calcule le volume du bol en hauteur * (largeur + hauteur), où largeur est le nombre de
_
caractères et hauteur est le nombre de\
caractères.Chaque combinaison de hauteur et de largeur est testée dans une paire de boucles imbriquées jusqu'à ce que le volume de bol correct soit trouvé, puis une autre boucle sur les niveaux de hauteur d'eau possibles est effectuée pour déterminer si un volume d'eau correct est possible avec cette largeur.
Il est possible de supprimer la troisième boucle en calculant simplement le niveau d'eau en utilisant la formule quadratique avec a comme 1, b comme largeur et c comme négatif du volume d'eau souhaité, et en vérifiant s'il s'agit d'un entier, mais cela prend plus d'octets que de faire une boucle. Le voici quand même (183 octets):
la source
Python 2, 162 octets
Un peu désordonné, mais voici ma première tentative. Il essaie tous les nombres de lignes possibles
r
, définissant le nombre de soulignements de base à êtrea = V/r-r
. Ensuite, il essaie toutes les hauteurs de niveau d'eau possiblesk
et vérifie si le bol est valide, l'imprimant si c'est le cas.la source
Python 2.7,
284270260 octetsCela calcule essentiellement la hauteur et la largeur du seau et de l'eau et les imprime.
J'ai essayé dur de retirer la partie laide tout en boucle au début (dans laquelle je calcule la hauteur du seau et la hauteur d'où l'eau devrait être tirée. À l'heure actuelle, toutes les lignes du code, à l'exception de la dernière, servent à calculer la largeur et la taille). Toujours en train d'essayer: P Le
tester pour différents cas -
la source