Inspirado por isso . Nenhum abacate foi prejudicado na realização deste desafio.
Olá eu tenho desafio, preciso de ajuda juic um abacate, então eu preciso de um programa para me dizer quanto tempo juic avocad para
Observe este abacate de arte ASCII:
######
# #
# #### #
# # p# #
## #### #
# #
######
Esse abacate consiste em um exterior de #
s (especificamente a primeira e a última sequências de #
s em cada linha) e um caroço (uma forma de #
s no abacate que não toca o exterior do abacate).
Através de rigorosas experiências com esses abacates de arte ASCII, descobri o seguinte:
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
Por exemplo, este abacate levará 26 (2 espaços dentro do poço * 13) minutos para o suco e dará 23 (19 espaços dentro do abacate, mas fora do poço + 2 * 2 espaços dentro do poço) fl oz de suco.
Desafio
Dada a entrada de exatamente um abacate de arte ASCII, como o descrito acima, que consiste apenas em #
espaço em branco, produza a quantidade de tempo em minutos que leva para o suco e a quantidade de suco que ele produzirá em qualquer ordem.
Você pode supor que o abacate de entrada sempre terá exatamente um poço e o abacate e o poço sempre estarão fechados. O poço e o abacate sempre estarão conectados e qualquer subconjunto do poço também será conectado. O abacate e o caroço serão sempre convexos. Observe que o exterior do abacate pode ser arbitrariamente espesso.
Amostras de entradas e saídas
######
# #
# #### #
# # # # -> 26 23
## #### #
# #
######
#######
# #
# ### ##
# # # # -> 26 35
# ## #
# #
##########
Isso é código-golfe , então o código mais curto em bytes vence.
Respostas:
Pitão,
5951 bytesExperimente aqui!
Mostra o tempo para juic o advacado (inglês totalmente correto) primeiro e na próxima linha a quantidade de juic.
Explicação
Código - Visão Geral
Explicações detalhadas das peças de cálculo de tamanho, veja abaixo.
Obtendo o tamanho do advacado
Vamos olhar para este:
Primeiro, os espaços em branco à esquerda e à direita são removidos. Depois disso, agrupamos tudo em uma linha, o que resulta nessa string:
Como contém todos os espaços em branco no advacado, precisamos apenas contá-los (o advacado sempre será convexo, portanto, isso funciona para todas as entradas válidas). Esse número ainda contém os espaços no poço, mas para o cálculo da quantidade de juic, precisamos apenas dos espaços na fruta sem os espaços no poço. Então, precisamos calculá-los também.
O código para isso explicado em detalhes:
Obtendo o tamanho do poço
Isso é um pouco mais complicado. Primeiro, removemos as linhas que não contribuem para o tamanho do poço. Isso é feito filtrando todas as linhas que possuem menos de 4 grupos de hashes (usando o regex
#+
e contando suas correspondências). No exemplo acima, apenas uma linha sobreviverá a esse processo:Os espaços que marquei
-
aqui são os que precisamos contar. Então, apenas separamos os espaços, depois os hashes e depois os espaços novamente, o que nos deixa com isso:Lá, apenas temos que contar os espaços. Fazemos tudo isso para todas as linhas que sobreviveram ao processo de filtragem, somamos tudo e terminamos. O resto é matemática trivial.
O código para isso explicado em detalhes:
fonte
Retina , 70
Experimente online.
fonte
$*
... ainda parece realmente jogável ...$*_
? Isso é bom. Eu consegui obter 70 bytes .f
é muito inteligente! É muito ruim que o "argumento" certo$*
possa ser apenas um personagem e não um símbolo ... talvez outro tipo de substituto para o futuro? : 0Pitão,
141119 bytesfonte
s
coms=str.strip
, o corpo do loop poderá se tornarx=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
. Além disso, há um espaço não funcional na última linha.