Voici une citrouille ASCII sculptée dans un Jack-o-Lantern. N'est-ce pas mignon?
((^v^))
Voici un fantôme ASCII. Regardez comme c'est effrayant!
\{O.O}/
De toute évidence, les citrouilles doivent être au sol, avec un espace entre elles pour ne pas pourrir.
Les fantômes, cependant, aiment se tenir au-dessus des citrouilles, ils sont donc encore plus effrayants . Cependant, ils doivent se tenir sur deux citrouilles, sinon leur poids fantomatique écrasera la citrouille sous eux. Mais, en raison de la façon dont fonctionne leur magie fantomatique , plusieurs fantômes peuvent empiler et partager des citrouilles, à condition que les fantômes soient répartis également sur les citrouilles inférieures ou les fantômes inférieurs. En d'autres termes, former une forme comme une pyramide humaine . Notez que les fantômes ne peuvent pas s'accumuler sur les fantômes à moins qu'il n'y ait une citrouille en dessous (c'est ainsi que la magie fonctionne).
Étant donné deux nombres entiers non négatifs g
et p
, représentant le nombre d' g
hôtes et de p
umpkins, génère la formation la plus compacte la plus à gauche possible, en suivant les règles d'empilement pyramidales ci-dessus. Les restes de citrouilles et de fantômes (c'est-à-dire ceux qui ne forment pas la pyramide) vont au sol à droite.
Pour plus de clarté, ces formations sont OK (saut de ligne vierge séparé), et servent d'exemple d'E / S:
0p 1g
\{O.O}/
1p 0g
((^v^))
1p 1g
((^v^)) \{O.O}/
2p 1g
\{O.O}/
((^v^)) ((^v^))
2p 2g
\{O.O}/
((^v^)) ((^v^)) \{O.O}/
3p 1g
\{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 2g
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 3g
\{O.O}/
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
0p 4g
\{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/
3p 0g
((^v^)) ((^v^)) ((^v^))
7p 6g
\{O.O}/
\{O.O}/ \{O.O}/
\{O.O}/ \{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^))
Ces formations ne sont pas OK
\{O.O}/
((^v^))
\{O.O}/
((^v^))
((^v^)) ((^v^)) \{O.O}/
\{O.O}/
\{O.O}/
((^v^)) ((^v^))
\{O.O}/
\{O.O}/ ((^v^)) ((^v^))
((^v^))
((^v^)) ((^v^))
\{O.O}/
((^v^)) ((^v^))
Contribution
Deux entiers non négatifs dans n'importe quel format pratique . Au moins l'un des nombres sera différent de zéro. Vous pouvez prendre les entrées dans l’un ou l’autre ordre (c’est-à-dire dans les exemples que j’ai eu en premier), veuillez préciser comment vous prenez les entrées dans votre réponse.
Production
Une représentation ASCII des fantômes et des citrouilles, en suivant les règles ci-dessus. Les sauts de ligne de début / fin ou d'autres espaces blancs sont facultatifs, à condition que les fantômes et les citrouilles s'alignent correctement.
Règles
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Réponses:
JavaScript (ES7),
166164159 octets5 octets enregistrés grâce à Neil
Formaté et commenté
Mathématiques sous-jacentes
La partie délicate est de trouver la largeur optimale
G
de la pyramide fantôme.Le nombre de fantômes
g
dans une telle pyramide est donné par:Réciproquement, la largeur d'une pyramide contenant des
g
fantômes est la vraie racine de l'équation quadratique résultante:Ce qui conduit à la vraie racine suivante (également connue sous le nom de racine triangulaire ):
Cependant, la largeur de la pyramide est également limitée par le nombre de citrouilles: nous ne pouvons avoir que des
p-1
fantômes sur lesp
citrouilles. D'où la formule finale utilisée dans le code:Version ES6,
173171166 166 octetsCas de test (ES6)
Afficher l'extrait de code
la source
j=(g+g)**.5+.5|0
devrait marcher.Perl, 246 octets (les sauts de ligne ne font pas partie du code et sont fournis uniquement à des fins de lisibilité)
Accepte deux nombres: les citrouilles en premier, suivis des fantômes. Exemple d'entrée:
Exemple de sortie:
la source
0p 4g
cas de test a tous les fantômes dans une ligne, plutôt qu'empilés.