Tutaj, w Kalifornii, mamy suszę, więc musimy wiedzieć, ile wody nam pozostało, abyśmy mogli zaoszczędzić jak najwięcej wody.
Ponieważ ilość wody jest ograniczona, twój kod będzie musiał być jak najkrótszy.
Przykłady
| |
| |
|~~~|
|___|
Output: 0.5
|~~~~~|
| |
| |
|_____|
Output: 1
| |
|__|
Output: 0 (or bonus)
Specyfikacja
Dane wejściowe będą składały się wyłącznie ze wszystkich: |_ ~
i nowych linii. Wszystkie powyższe ~
są uważane za powietrze; _
, przestrzenie poniżej ~
i ~
same w sobie są uważane za wodę. Procent pozostałej wody to komputer water / (air + water)
. Twój wynik musi być dokładny do 4 miejsc po przecinku (chyba że wybierzesz premię procentową). Wejście zawsze będzie prostokątne. ~
Będzie tylko na jednej linii, jeśli na dowolny. Jeśli chcesz, dane wejściowe mogą opcjonalnie zawierać także wiersz końcowy.
Premia
Jeśli wybierzesz oba bonusy, premia -15% zostanie zastosowana przed premią -35
-35 bajtów Premia: Jeśli kod wypisuje „Ta koza suszy z ręki”, zamiast 0, gdy wyjście ma wartość 0
-15% Premia: Jeśli wydasz procent.
Aby to zrobić, należy przesunąć miejsce dziesiętne o dwa miejsca w lewo, przyciąć początkowe zera i dodać %
na końcu. Zera końcowe (maks. 2) są dozwolone, o ile nie wpływają na wartość. 0.5
-> dowolny z:50.00% 50% 50.0%
|~~~|
(brak podkreślenia) prawidłowe dane wejściowe?Odpowiedzi:
Pyth -
17464552 * .85 - 35 = 9,2 bajtówFiltruje dane wejściowe (z nowym
#
meta-op!) Dla linii z~
nim zawartej, następnie indeksuje je do danych wejściowych, a następnie dzieli je przez długość danych wejściowych. Jeśli nie ma żadnych~
, powoduje to błąd i wyzwala klauzulę wyjątku.x
i wypisuje ciąg.Wypróbuj online tutaj .
źródło
Python 3, 37 bajtów
Brak bonusów. Pobiera ciąg wejściowy z nowymi liniami, w tym końcowymi nowymi liniami.
Zobaczmy, dlaczego formuła działa. Ułamek wody stanowi uzupełnienie ułamka powietrza, który otrzymamy.
0, 1, 2, ...
Mamy numerację rzędówTo samo dotyczy sytuacji, gdy oba są pomnożone przez szerokość każdego wiersza, licząc znaki nowego wiersza, które upraszczają wyrażenia w liczbie znaków.
Początek wiersz woda znajduje wyszukując ciąg wejściowy
x
dla|~
, a liczba znaków jest tylko długość.Na koniec, aby umożliwić wejście bez wody, dołączamy fikcyjny początek rzędu wody
|~
przed zakończeniem wyszukiwania, co sprawia, że wygląda na to, że poziom wody wynosi 0.Bonusy wydawały się nie warte zachodu. Najlepsze, co mam na pierwszym ciągu, to 73-35 = 38:
źródło
CJam,
19171658 * 0,85 - 35 = 14,3 bajtówWypróbuj online
Ta wersja otrzymuje oba bonusy. Dane wejściowe muszą mieć końcowy znak nowej linii, aby to rozwiązanie działało.
Dzięki @Martin Büttner za oszczędność 2 bajtów.
Wyjaśnienie:
źródło
JavaScript (ES6), 45 (94-15% -35)
Jako funkcja anonimowa. Używając ciągów szablonów, nowa linia jest znacząca i jest uwzględniona w liczbie bajtów
Edytuj 1 bajt zapisany thx @ user81655
Mniej golfa
Testowy fragment kodu
źródło
p=~i
zp=i
,&&-p
z&&p-q
i1+~p
do1+p
zaoszczędzić 1 bajt.Par , 57 * 85% - 35 = 13,45 bajtów
Wyjaśnienie
źródło
Perl, 70-15% - 35 = 24,5 bajtów
zawiera +1 dla
-p
Z komentarzami:
Wersja 26 + 1 bajtów, bez premii: 27
Wersja 34 + 1 bajtowa, z 15% premią: 29,75
Wersja 61 + 1 bajtowa, z premią -35: 27
Wersja 69 + 1 bajtowa, oba bonusy: 24,50
źródło
JavaScript, 59,3
Mam nadzieję, że dodatkowe miejsca po przecinku są OK. Nie zakłada końca nowej linii.
źródło
Haskell, 56 bajtów
Przykład użycia:
f "| |\n|~~|\n| |\n|__|"
->0.75
.l
jest funkcją o niestandardowej długości, która jest niezbędna, ponieważ wbudowana funkcjalength
zwraca wartości całkowite, ale potrzebujemy wartości zmiennoprzecinkowych do podziału (istniejegenericLength
również ta funkcja, ale jest ona dłuższa, nie mówiąc już o wymaganymimport Data.List
).f
dzieli dane wejściowei
na linie (->s
), a następnie na parę, w której pierwszy element jest listą ze wszystkimi liniami do (i z wyłączeniem) pierwszego z literą~
w nim. Drugi element to lista z resztą wierszy. Wynikiem jest długość drugiego elementu podzielona przez długośćs
.Bonusy się nie opłaca.
źródło
Python jest pełny!
Python: 98,45 bajtów
(157 * 0,85) - 35 = 98,45 bajtów
Ta wersja czyta ze standardowego wejścia i zbiera oba bonusy:
źródło
import sys;r=[x[1]for x in sys.stdin];print(1-r.index('~')/len(r))
print
jak funkcję, więc założyłem, że używasz Python 3.Awk, 72 znaki - 15% - 35 = 26,2
Przykładowy przebieg:
(Początkowo
1;
używany tylko w tych próbkach, aby wyświetlić zbiornik „czytelny dla człowieka”).źródło
PHP, 92 znaki - 15% - 35 = 43,2
(88 znaków w dwóch blokach kodu + 4 znaki opcji wiersza poleceń).
Zakłada się, że
error_reporting
jest ustawiona domyślnie.(Nie jest to wielka sprawa, po prostu chciałem użyć
-R
i-E
raz. Teraz tylko-B
zostało.)Przykładowy przebieg:
(Początkowo
echo"$argn\n";
używany tylko w tych próbkach, aby wyświetlić zbiornik „czytelny dla człowieka”).źródło
QBIC - 116-15 % = 98,6 bajtów
Stworzyłem QBIC, aby QBasic był bardziej konkurencyjny, ale nadal wymaga kilku ulepszeń. Na chwilę obecną nie ma skrótów do pułapkowania błędów
THEN
(co jest dość dużym niedopatrzeniem z mojej strony) iinput$
. Zostaną dodane wkrótce.Nie mogłem trafić do premii 0, zbyt kosztowne ... Udało mi się wydrukować procenty.
Przykładowe wejście / wyjście:
Program odczytuje dane wejściowe interaktywnie. Po wykryciu dna jeziora (
_
) drukuje procent i wychodzi. Testowane na pełne i puste pojemniki.Edycja: Aby pokazać, w jaki sposób QBIC został rozszerzony w ciągu ostatniego roku, oto ten sam program napisany dla bieżącego tłumacza:
87 bajtów, procent drukowania, to wynik 74.
źródło