Zainspirowany tym . Przy podejmowaniu tego wyzwania nie ucierpiały żadne awokado.
Cześć, mam wyzwanie. Potrzebuję pomocy w przygotowaniu awokado, więc potrzebuję programu, który powie mi, jak długo powinienem produkować awokado
Obserwuj awokado sztuki ASCII:
######
# #
# #### #
# # p# #
## #### #
# #
######
To awokado składa się z części zewnętrznej #
s (konkretnie pierwszej i ostatniej sekwencji #
s w każdej linii) i dołu (kształt #
s w awokado, który nie dotyka zewnętrznej części awokado).
Poprzez rygorystyczne eksperymenty na tych awokado sztuki ASCII odkryłem, co następuje:
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
Na przykład, to awokado zajmie 26 (2 miejsca w jamie * 13) minut na sok i da 23 (19 miejsc w awokado, ale poza jamą + 2 * 2 miejsca w jamie) fl oz soku.
Wyzwanie
Biorąc pod uwagę dokładnie jedno awokado sztuki ASCII, takie jak powyższe, które składa się tylko z #
białych znaków, wypisz ilość czasu w minutach, jaką zajmie jego wyciśnięcie, i ilość soku, który wyprodukuje w dowolnej kolejności.
Możesz założyć, że awokado wejściowe zawsze będzie miało dokładnie jeden dół, a zarówno awokado, jak i dół będą zawsze zamknięte. Pit i awokado będą zawsze połączone, a także dowolny podzbiór pitów. Awokado i dół zawsze będą wypukłe. Pamiętaj, że zewnętrzna część awokado może być dowolnie gruba.
Przykładowe wejścia i wyjścia
######
# #
# #### #
# # # # -> 26 23
## #### #
# #
######
#######
# #
# ### ##
# # # # -> 26 35
# ## #
# #
##########
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Odpowiedzi:
Pyth,
5951 bajtówWypróbuj tutaj!
Zwraca najpierw czas na wyciskanie advacado (całkowicie poprawny angielski), aw następnym wierszu ilość soku.
Wyjaśnienie
Kod - przegląd
Szczegółowe objaśnienia części do obliczania rozmiaru patrz poniżej.
Uzyskanie rozmiaru advacado
Spójrzmy na to:
Najpierw usuwane są wiodące i końcowe białe spacje. Następnie zawijamy wszystko w jednym wierszu, co daje następujący ciąg:
Zawiera wszystkie białe spacje w advacado, więc musimy je policzyć (advacado zawsze będzie wypukłe, więc działa to na wszystkie prawidłowe dane wejściowe). Ta liczba nadal zawiera spacje w jamie, ale do obliczenia kwoty soku potrzebujemy tylko spacji w owocu bez pit-spacji. Dlatego też musimy je obliczyć.
Kod tego szczegółowo wyjaśniono:
Uzyskiwanie rozmiaru dołu
To trochę trudniejsze. Najpierw usuwamy linie, które nie wpływają na rozmiar dołu. Odbywa się to poprzez odfiltrowanie wszystkich linii, które mają mniej niż 4 grupy skrótów (za pomocą wyrażenia regularnego
#+
i zliczania dopasowań). W powyższym przykładzie tylko jedna linia przetrwa ten proces:Miejsca, które zaznaczyłem
-
tutaj, to te, które musimy policzyć. Więc po prostu usuwamy spacje, następnie hasze, a następnie spacje, co pozostawia nam to:Tam musimy tylko policzyć spacje. Robimy to wszystko dla każdej linii, która przetrwała proces filtrowania, podsumowując wszystko i gotowe. Reszta to banalna matematyka.
Kod tego szczegółowo wyjaśniono:
źródło
Retina , 70
Wypróbuj online.
źródło
$*
... nadal czuję się naprawdę dobrze gra w golfa ...$*_
? To miłe. Udało mi się uzyskać 70 bajtów .f
jest bardzo sprytne! Szkoda, że właściwym „argumentem”$*
może być tylko postać, a nie token ... może inny rodzaj zamiany na przyszłość? : 0Pyton,
141119 bajtówźródło
s
pomocąs=str.strip
, ciało pętli może się staćx=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
. Ponadto w ostatnim wierszu znajduje się niefunkcjonalne miejsce.