Aujourd'hui est Pourim sur lequel une coutume est de distribuer des biscuits en forme de triangle avec une garniture appelée hamantaschen (singulier: hamantasch ). Une autre coutume est de boire beaucoup.
Je ne suis pas le boulanger le plus parfait .... J'ai tant de hamantaschen de taille irrégulière à donner et tant d'amis à leur donner! Si je vous ai envoyé une photo de mes cookies, pouvez-vous me dire combien j'ai de quelle taille et de quel remplissage? Mais parce que c'est Pourim et que je suis trop ivre pour lire beaucoup de code, il doit être aussi petit que possible.
Définitions
Taille
Un hamantasch peut être de n'importe quelle taille . Le plus petit hamantasch est de taille 1 et ressemble à ceci:
/\ --
-- \/
Parfois, plusieurs hamantaschen peuvent se chevaucher . La forme ci-dessous compte pour deux hamantaschen (une taille 1, une taille 2):
/\
/\ \
----
Certains hamantaschen ont du remplissage . Cela sera indiqué en remplissant tous les espaces à l'intérieur avec un caractère. Notez que la taille 1 hamantaschen ne peut pas avoir de remplissage.
Nous allons nommer hamantaschen en fonction de remplissage et la taille. Utilisons le format <filling> <size>
et s'il n'est pas rempli, - <size>
(vous pouvez utiliser un espace au lieu d'un -
, mais le démarque n'aime pas ça).
Voici un . 2
, un . 4
et un - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Ce sont a @ 3
, a . 2
et a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Voici quelque chose de plus difficile. Voyez comment le & 2
remplissage est moins important que prévu à cause de l'inclinaison du chevauchement - 3
? Il a un - 1
, un & 2
a - 3
et un & 4
:
--------
\ \/&/
\ /\/
\/&/
\/
Contribution
Vous recevrez un fichier texte ou une seule chaîne de hamantaschen (la nouvelle ligne de fin facultative et les espaces de fin facultativement rembourrés pour être pairs).
Limites
- Vous pouvez vous attendre à ce que la chaîne soit valide - c'est-à-dire que chaque caractère non blanc contribue à un hamantasch délicieusement sucré (pourquoi gaspiller la pâte?).
- Vous pouvez également vous attendre à être bien rempli ou non - qui est, chaque il sera Oreilles d'Aman entièrement rempli d'un caractère ASCII cohérent - ASCII 32 pour non rempli, ou quoi que ce soit pour 32..127 rempli ( à l' exception
/
,\
et-
). - Ces hamantaschen ne sont pas empilés en 3 espaces. Tout
/
et\
sera visible. Tous ceux-
qui ne sont pas bloqués par/
et\
seront visibles. Le remplissage vient en dernier. - Tous les hamantaschen auront au moins la moitié de leur ligne horizontale (arrondie) visible.
- Tout bloc de remplissage contigu ne remplit que le plus petit hamantasch qui l'entoure.
Production
Retourne une liste de "noms" de tous les hamantaschen qui répondent aux critères ci-dessus. La sortie peut être sous la forme que vous souhaitez (une chaîne, un hachage, une sortie standard, etc.).
Cas de test
Cas de test # 1
Entrée # 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Sortie # 1:
. 2
. 2
- 4
@ 3
* 4
Cas de test # 2
Entrée # 2:
/\----
/\/\*\/
/ /\d\/
------
Sortie # 2:
- 3
- 2
d 2
- 1
* 2
- 1
Test n ° 3
Entrée # 3:
----
\/\/
/\/\ /\
---- /::\
----
Résultat n ° 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Test n ° 4
Entrée # 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Sortie # 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Cas de test n ° 5 non valide
Contribution:
/\
\/
Production:
Vous n'avez pas besoin de gérer cela.
la source
/
et\
, et-
toujours l'emporterons sur le remplissage.(1,0)
, sont désactivées par+1
. Pourtant, je sais ce que vous voulez dire, et je ne suis pas d'accord. Quelle indication y a-t-il qui(2, 2)
est le centre supérieur d'un- 2
et pas seulement le haut droit et gauche des deux- 1
s supérieurs ? Aucun que je puisse voir. Et la même logique s'applique à(3, 2)
. A moins que vous ne vouliez ajouter une règle pour supposer un maximum de hamantaschen possible ...Réponses:
C #,
496452 octetsEdit: a trouvé un bug avec la vérification des limites ... mais aussi rayé une charge d'octets ayant été forcé de comprendre mon propre code. Dérouler la fonction locale a aidé un peu et a supprimé le code spécifique C # 7. Cette question a été très amusante.
Essayez-le en ligne
Programme complet, attend une entrée remplie d'espace à l'entrée standard, des sorties à la sortie standard. La sortie est une entrée par ligne, avec un saut de ligne de fin. Les cookies sont générés dans un ordre de taille croissant, en haut à gauche en premier. Il m'a fallu un bon moment pour comprendre les règles, mais je pense que cela passe tous les exemples fournis.
Il fonctionne en recherchant à plusieurs reprises sur toute la grille un Hamantaschen valide, en augmentant la taille «autorisée». Pour chaque cellule, il vérifie de haut en bas, en suivant le
\
et/
de chaque côté autant que possible. S'il remarque que la ligne suivante a beaucoup de-
et que la taille actuelle est la taille «autorisée», il détermine le remplissage et imprime l'entrée.Le remplissage se trouve en explorant tout l'espace du cookie, à la recherche d'une cellule «inutilisée». Lorsqu'une cellule inutilisée est trouvée, elle est marquée comme utilisée (puisque nous augmentons la taille autorisée, nous savons que nous sommes le plus petit cookie qui la contient), et nous enregistrons le remplissage.
Code formaté et commenté:
Sorties pour les 4 cas de test:
la source