Inspiré par cela . Aucun avocat n'a été blessé dans la réalisation de ce défi.
Bonjour, j'ai un défi, j'ai besoin d'aide pour extraire un avocat, j'ai donc besoin d'un programme pour me dire combien de temps
Observez cet avocat d'art ASCII:
######
# #
# #### #
# # p# #
## #### #
# #
######
Cet avocat se compose d'un extérieur de #
s (spécifiquement les première et dernière séquences de #
s sur chaque ligne) et d'une fosse (une forme de #
s dans l'avocat qui ne touche pas l'extérieur de l'avocat).
Grâce à des expériences rigoureuses sur ces avocats d'art ASCII, j'ai découvert ce qui suit:
avocado juice in fluid ounces = number of spaces inside avocado but outside pit (the pit is marked with a p in the example) + 2 * number of spaces inside pit
time to juice avocado in minutes = 13 * number of spaces inside pit
Par exemple, cet avocat prendra 26 (2 espaces à l'intérieur de la fosse * 13) minutes à jus et donnera 23 (19 espaces à l'intérieur de l'avocat mais à l'extérieur de la fosse + 2 * 2 espaces à l'intérieur de la fosse) fl oz de jus.
Défi
Étant donné une entrée d' exactement un avocat d'art ASCII tel que celui ci-dessus qui se compose uniquement de #
et d'espaces, affichez le temps en minutes qu'il faudra pour le jus et la quantité de jus qu'il produira dans n'importe quel ordre.
Vous pouvez supposer que l'avocat d'entrée aura toujours exactement une fosse et que l'avocat et la fosse seront toujours fermés. La fosse et l'avocat seront toujours connectés, et tout sous-ensemble de la fosse sera également connecté. L'avocat et la fosse seront toujours convexes. Notez que l'extérieur de l'avocat peut être arbitrairement épais.
Exemples d'entrées et de sorties
######
# #
# #### #
# # # # -> 26 23
## #### #
# #
######
#######
# #
# ### ##
# # # # -> 26 35
# ## #
# #
##########
C'est le code-golf , donc le code le plus court en octets l'emporte.
Réponses:
Pyth,
5951 octetsEssayez-le ici!
Affiche le temps de juic de l'advacado (anglais totalement correct) en premier et sur la ligne suivante la quantité de juic.
Explication
Code - Présentation
Des explications détaillées des parties de calcul de taille voir ci-dessous.
Obtenir la taille de l'avocat
Regardons celui-ci:
Les espaces blancs avant et arrière sont d'abord supprimés. Après cela, nous emballons tout sur une seule ligne, ce qui donne cette chaîne:
Celui-ci contient tous les espaces dans l'advacado, nous devons donc simplement les compter (l'advacado sera toujours convexe, donc cela fonctionne pour toutes les entrées valides). Ce nombre contient toujours les espaces dans la fosse, mais pour le calcul de la quantité de jus, nous n'avons besoin que des espaces dans le fruit sans les espaces dans la fosse. Nous devons donc aussi les calculer.
Le code pour cela expliqué en détail:
Obtenir la taille de la fosse
C'est un peu plus compliqué. Nous supprimons d'abord les lignes qui ne contribuent pas à la taille de la fosse. Cela se fait en filtrant toutes les lignes qui ont moins de 4 groupes de hachages (en utilisant l'expression régulière
#+
et en comptant ses correspondances). Dans l'exemple ci-dessus, une seule ligne survivra à ce processus:Les espaces que j'ai marqués d'un
-
ici sont ceux que nous devons compter. Nous supprimons donc simplement les espaces, puis les hachages, puis les espaces à nouveau, ce qui nous laisse avec ceci:Là, il suffit de compter les espaces. Nous faisons tout cela pour chaque ligne qui a survécu au processus de filtrage, résumons tout et nous avons terminé. Le reste est des mathématiques triviales.
Le code pour cela expliqué en détail:
la source
Rétine , 70
Essayez-le en ligne.
la source
$*
... me semble toujours vraiment jouable ...$*_
? C'est zonte. J'ai réussi à obtenir 70 octets .f
est très intelligente! C'est dommage cependant que le bon "argument" de$*
ne puisse être qu'un personnage et non un jeton ... peut-être un autre type de remplacement pour l'avenir? : 0Python,
141119 octetsla source
s
avecs=str.strip
, le corps de la boucle peut devenirx=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
. De plus, il y a un espace non fonctionnel sur la dernière ligne.