关于advacado的挑战


16

灵感来自。挑战过程中没有鳄梨受到伤害。

你好,我有挑战,我需要帮助鳄梨,所以我需要程序告诉我鳄梨需要多长时间

观察此ASCII艺术鳄梨:

    ###### 
   #      #
   # #### #
  #  # p# #
  ## #### #
   #      #
    ######

该鳄梨由#s 的外部(特别是#每行上s 的第一个和最后一个序列)和一个凹坑(#鳄梨中的s 形状,不接触鳄梨的外部)组成。

通过对这些ASCII艺术鳄梨的严格测试,我发现了以下内容:

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

例如,这种鳄梨将花费26(在窖内2个空间* 13个空间)来榨汁,并会给23(在鳄梨内但在窖内19个空间+ 2 * 2个窖内空间)液量盎司的果汁。

挑战

给定仅输入一个 ASCII艺术鳄梨的输入,例如仅由#空格组成的上述输入,输出以分钟为单位的榨汁时间以及以任何顺序生产的榨汁量。

您可以假设输入的鳄梨将始终仅具有一个凹坑,而鳄梨和凹坑将始终是封闭的。坑和鳄梨将始终保持连接,并且坑的任何子集也将被连接。鳄梨和基坑将始终是凸起的。请注意,鳄梨的外观可以任意厚。

样本输入和输出

    ###### 
   #      #
   # #### #
  #  #  # # -> 26 23
  ## #### #
   #      #
    ######


   #######
  #       #
  #  ###   ##
  #  #  #   # -> 26 35
  #   ##   #
  #        #
  ##########

这是,因此以字节为单位的最短代码获胜。



3
@Mego我在聊天中与人交谈,我们认为由于鳄梨坑,它与众不同。
意大利面条

3
我仍然认为这是骗子。
Mego 2016年

1
@DigitalTrauma固定。
意大利面条

1
仍然不清楚有效输入的集合是什么。
feersum '16

Answers:


6

Pyth,59 51字节

*Ksm/.s.s.sd\ \#\ \ fq4l:T"#+"4.z13+-/s.sR\ .zdK*2K

在这里尝试!

首先输出advacado的时间(完全正确的英语),然后在下一行输出juic的量。

说明

代码-概述

* Ksm / .sssd \\#\\ fq4l:T“#+” 4.z13 +-/ s.sR \ .zdK * 2K#.z =所有输入行的列表

                    fq4l:T“#+” 4.z#获取底线
   m / .sssd \ \#\ \#将凹线映射到空白量
 Ks#将凹坑空间的总和分配给K
* 13#打印榨汁时间
                                     /s.sR \ .zd#计算advacado中的所有空格
                                    -K#从中减去坑的大小
                                   + * 2K#进行剩余的计算并打印


尺寸计算部分的详细说明请参见下文。

获取advacado大小

让我们看一下这个:

    ###### 
   ##
   ######
  ####
  ## #####
   ##
    ######

首先,删除前导和尾随空格。之后,我们将所有内容包装在一行中,这将导致以下字符串:

#######      ## #### ##  #  # ### #### ##      #######

它包含advacado中的所有空格,因此我们只需要计算它们(advacado始终是凸的,因此适用于所有有效输入)。该数字仍包含果核中的空格,但是对于果汁量的计算,我们只需要水果中没有果核空间的空格。因此,我们也需要计算它们。

该代码详细解释:

/s.sR \ .zd#.z =所有输入行的列表

  .sR \ .z#从每条输入行去除空格
 s#连接所有行
/ d#计算所有空间

得到坑的大小

这有点棘手。首先,我们删除对坑尺寸没有影响的线。这是通过过滤出所有哈希数少于4组的行(使用正则表达式#+并计算其匹配项)来完成的。在上面的示例中,只有一行可以保留此过程:

  #  #--# #

我在-此处标记为a的空间是我们需要计算的空间。因此,我们只删除空格,然后再散列,然后再空格,这使我们有了:

#  #

在那里,我们只需要计算空间。我们为在过滤过程中幸存下来的每一行做所有这些事情,将所有事情相加并完成。其余的是微不足道的数学。

该代码详细解释:

sm / .sssd \ \#\ \ fq4l:T“#+” 4.z#.z =所有输入行的列表

                  f .z#过滤输入
                     l:T“#+” 4#正则表达式`#+`的匹配长度
                   q4#如果有4组哈希值,则其坑线
 m#将坑线映射到...
  / \#出现空格。
   .sssd \ \#\#...剥离的凹坑线(请参见上面的说明)
s#将所有凹坑中的空间总和


5

视网膜,70

  • @FryAmTheEggman和@randomra节省了25个字节
T` i`(?<=#+#+)*(?=#+ +#)
T`f`#+#
一世
13 $ * iff
((i)|(f)| \ W)+
$#2 $#3

在线尝试。


1
邓诺(Dunno),如果有帮助的话,但我有90个字节的使用$*...虽然仍然感觉真的很不错……
FryAmTheEggman

2
@FryAmTheEggman哦,您可以将文字与$*_?一起使用。真好。我设法得到70个字节
randomra

1
@randomra是的,它实际上将使用任何“令牌”,非常好!我曾试图提出一个类似的方案,但是我一直不得不进行额外的解析,重用f非常聪明!尽管正确的“参数” $*只能是一个字符而不是一个标记,这太糟糕了……也许是未来的另一种替代方式?:0
FryAmTheEggman '16

@randomra非常酷-谢谢!
Digital Trauma

3

蟒蛇, 141 119字节

import sys
s=str.strip;l=len;o=i=0
for x in sys.stdin:x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
print o+2*i,13*i

1
欢迎来到编程难题和代码高尔夫球!如果s使用with 定义s=str.strip,则循环体可以变为x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))。此外,最后一行还有一个无法使用的空间。
丹尼斯

啊,我什至不知道你能做到,谢谢:)
mtp '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.