Avukat hakkında meydan okuma


16

Esinlenen bu . Bu meydan okumada hiçbir avokado zarar görmedi.

Merhaba ben meydan okuma avokado juic yardıma ihtiyacım var bu yüzden bana avocad için juic ne kadar süre söylemek için programa ihtiyacım var

Bu ASCII sanat avokadoyu gözlemleyin:

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

Bu avokado, #s'nin dışından (özellikle #her satırdaki s'nin ilk ve son sekanslarından ) ve bir çukurdan ( #avokadodaki avokado dışına dokunmayan bir s şeklinden ) oluşur.

Bu ASCII sanat avokadoları üzerinde titiz deneyler yaparak aşağıdakileri keşfettim:

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

Örneğin, bu avokado meyve suyuna 26 (2 çukur içinde 2 boşluk * 13 dakika) ve meyve suyu için 23 (avokado içinde 19 çukur dışında + çukur içinde 2 * 2 boşluk) verecektir.

Meydan okuma

Yukarıdaki gibi sadece bir tane ve beyaz alandan oluşan tam bir ASCII sanat avokado girdisi verildiğinde #, meyve suyunun alınması için geçen süreyi ve herhangi bir sırayla üreteceği meyve suyu miktarını çıktı olarak alın.

Giriş avokado'nun her zaman tam olarak bir çukura sahip olacağını ve hem avokado hem de çukurun daima kapalı olacağını varsayabilirsiniz. Çukur ve avokado her zaman bağlı olacak ve çukurun herhangi bir alt kümesi de bağlanacaktır. Avokado ve çukur her zaman dışbükey olacaktır. Avokado dış yüzeyin keyfi kalın olabileceğini unutmayın.

Örnek Girişler ve Çıkışlar

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


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

Bu , bayt en kısa kod kazanır.



3
@Mego Sohbet eden insanlarla konuştum ve avokado çukuru nedeniyle bunun yeterince farklı olduğuna karar verdik.
bir

3
Hala bir dupe olduğunu düşünüyorum.
Mego

1
@DigitalTrauma Düzeltildi.
bir

1
Geçerli giriş kümesinin ne olduğu hala belirsiz görünüyor.
feersum

Yanıtlar:


6

Pyth, 59 51 bayt

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

Burada deneyin!

Önce advacado (tamamen doğru ingilizce) juic zamanını ve sonraki satır juic miktarını çıkarır.

açıklama

Kod - Genel Bakış

* Ksm / .sssd \ \ # \ \ fq4l: T "# +" 4.z13 + - / s.sR \ .zdK * 2K # .z = tüm giriş satırlarının listesi

                    fq4l: T "# +" 4.z # Çukur hatlarını al
   m / .sssd \ \ # \ \ # Çukur hatlarını boşluk miktarıyla eşleştirin
 Ks # Çukur boşluklarının miktarını toplayın ve K'ye atayın
* 13 # Sulu zamanı yazdır
                                     /s.sR \ .zd # Avukattaki tüm boşlukları say
                                    - K # Çukur boyutunu ondan çıkarın
                                   + * 2K # Kalan miktar hesaplamasını yapın ve yazdırın


Boyut hesaplama parçalarının ayrıntılı açıklamaları aşağıya bakınız.

Avukat büyüklüğünün elde edilmesi

Şuna bakalım:

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

İlk olarak önde gelen ve arkadaki boşluklar kaldırılır. Bundan sonra her şeyi bir satıra sarıyoruz, bu da bu dizeyle sonuçlanıyor:

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

Bu advacado'daki tüm beyaz alanları içerir, bu yüzden onları saymamız gerekir (advacado her zaman dışbükey olacaktır, bu yüzden tüm geçerli girişler için çalışır). Bu sayı hala çukurdaki boşlukları içerir, ancak juic miktar hesaplaması için sadece çukur boşlukları olmayan meyvelerdeki boşluklara ihtiyacımız vardır. Bu yüzden onları da hesaplamamız gerekiyor.

Ayrıntılı olarak açıklanan kod:

/s.sR \ .zd # .z = tüm giriş satırlarının listesi

  .sR \ .z # her giriş satırından şerit boşlukları
 s # Tüm satırları birleştir
/ d # Tüm boşlukları say

Çukur Boyutunun Alınması

Bu biraz daha hileli. Önce çukur boyutuna katkıda bulunmayan hatları kaldırıyoruz. Bu, 4'den az karma grubuna sahip tüm satırları filtreleyerek yapılır (normal ifadeyi kullanarak #+ve eşleşmelerini sayarak). Yukarıdaki örnekte bu süreçte sadece bir satır var:

  #  #--# #

-Burada işaretlediğim boşluklar saymamız gereken yerler. Bu yüzden sadece boşlukları, sonra hash'leri ve sonra tekrar bizi boşluk bırakan boşlukları soyuyoruz:

#  #

Orada sadece boşlukları saymalıyız. Filtreleme işleminden sağ kalan her çizgi için her şeyi yapıyoruz, her şeyi toplayın ve bitti. Gerisi önemsiz matematik.

Ayrıntılı olarak açıklanan kod:

sm / .sssd \ \ # \ \ fq4l: T "# +" 4.z # .z = tüm giriş satırlarının listesi

                  f .z # girişi filtrele
                     l: T "# +" 4 # normal ifadesi için eşleşme uzunluğu # #
                   q4 # 4 grup karma varsa, çukur hattı
 m # çukur hatlarını ...
  / \ # .. içindeki boşlukların oluşumu
   .sssd \ \ # \ # ... soyulmuş çukur hattı (yukarıdaki açıklamaya bakınız)
s # Çukurlardaki tüm boşluk miktarlarını topla


5

Retina , 70

  • @FryAmTheEggman ve @randomra sayesinde 25 bayt kurtardı
T`` i` (? <= # + # +) * (? = # + + #)
T`` f` # + #
ben
13 $ * IFF
((İ) '| (f) | \ W) +
$ 2 $ 3 $

Çevrimiçi deneyin.


1
Eğer yardımcı olacak Dunno ama ben kullanarak 90 bayt var $*... yine de gerçekten golfable hissediyor ...
FryAmTheEggman

2
@FryAmTheEggman Ohh, değişmez değerlerle birlikte kullanabilirsiniz $*_? Bu iyi. 70 bayt almayı başardım .
randomra

1
@randomra evet, aslında herhangi bir "jeton" kullanacak ve çok güzel! Benzer bir şema bulmaya çalışmıştım, ancak ek ayrıştırma yapmak zorunda kaldım, tekrar kullanmak fçok zekice! Gerçi doğru "argümanı" $*sadece bir karakter olabilir, bir jeton değil ... belki geleceğin yerine başka bir tür olabilir? : 0
FryAmTheEggman

@randomra çok güzel - teşekkürler!
Dijital Travma

3

Python, 141 119 bayt

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
Programlama Bulmacaları ve Kod Golf hoş geldiniz! Eğer tanımlarsanız sile s=str.strip, döngü gövdesi haline gelebilir x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#')). Ayrıca, son satırda işlevsel olmayan bir alan var.
Dennis

ahh bunu yapabileceğini bile bilmiyordum, teşekkürler :)
mtp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.