Masz basen wypełniony po brzegi wodą. Musisz go opróżnić, ale nie możesz wymyślić skutecznej metody. Więc decydujesz się użyć czerwonego kubka solo. Będziesz kilkakrotnie napełniał kubek do końca i zrzucał go na zewnątrz basenu.
Wyzwanie
Jak długo potrwa opróżnienie basenu?
Wejście
[shape of pool] [dimensions] [shape of cup] [dimensions] [speed]
shape of pool
będzie jednym z tych ciągów:circle
,triangle
, lubrectangle
. Zauważ, że faktycznie odnoszą się one do trójwymiarowych kształtów: cylindra, trójkątnego pryzmatu i prostokątnego pryzmatu.dimensions
będą się różnić w zależności od kształtu.- koło:
[radius] [height]
. Objętość = π r 2 godz - trójkąt:
[base] [height] [length]
. Objętość = 1/2 (bh) * długość - prostokąt:
[width] [length] [height]
Objętość = lwh
- koło:
shape of cup
idimensions
działa w ten sam sposób. Kielich może być również kołem, trójkątem lub prostokątem.speed
to czas potrzebny do opróżnienia jednej filiżanki pełnej wody w kilka sekund .
Wynik
Liczba sekund potrzebnych do opróżnienia basenu. Można to zaokrąglić do najbliższej sekundy.
Notatki
- Na wejściu nie będzie żadnych jednostek. Zakłada się, że wszystkie jednostki odległości są takie same (kształt nie będzie miał wysokości w calach i szerokości w stopach).
- Użyj 3.14 dla
pi
. - Dane wejściowe będą się składać z ciągów i liczb zmiennoprzecinkowych.
- Nigdy nie będzie padać. Nigdy nie zostanie dodana woda.
- Masz bardzo pewną rękę. Za każdym razem napełnisz kubek dokładnie po brzegi i nigdy go nie rozlejesz.
- Gdy zbliżysz się do końca, trudno będzie zebrać pełną szklankę wody. Nie musisz się o to martwić. Jesteś bardzo silny, więc możesz przechylić basen na bok (nie zużywając więcej czasu).
- Za każdym razem, gdy wykonujesz obliczenia, możesz zaokrąglić do najbliższej setnej . Twoja ostateczna odpowiedź nie musi być dokładna.
Przypadki testowe
Dane wejściowe: Dane triangle 10 12.25 3 circle 5 2.2 5
wyjściowe: 10
Mimo że na ostatniej miarce pozostało mniej niż 172,7, opróżnienie zajmuje jeszcze całe pięć sekund.
Wejście: triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2
Wyjście:804.2
- Po każdym obliczeniu powinieneś zaokrąglić do najbliższej setnej.
- Końcowe obliczanie zaokrągla się z 804.05567 do 804.2. To dlatego, że ostatnia odrobina wody musi zostać opróżniona.
Zasady
- Możesz napisać pełny program lub funkcję.
- Dane wejściowe należy pobierać z parametrów stdin lub funkcji. Wyjście powinno zostać wydrukowane przez standardowe wyjście lub zwrócone.
- Format wejściowy można zmienić, pod warunkiem, że określisz go we wniosku. Możesz także skrócić ciągi „koło”, „trójkąt” i „prostokąt”.
- Biblioteki i wbudowane funkcje obejmujące wolumin lub obszar są niedozwolone.
Punktacja
To jest golf golfowy . Zgłoszenie z najmniejszą liczbą bajtów wygrywa.
Odpowiedzi:
JavaScript ES6,
10078828174 bajtyDzięki @UndefinedFunction za pomoc w golfa z 4 bajtów
Stosowanie:
źródło
.5*v
tego nie mógłbyś tego zrobićv/2
?t(["triangle", [10, 12.25, 3]], ["triangle", [10, 12.25, 3]], 5)
? Rozumiem,10
ale czy nie powinna być odpowiedź5
? EDYCJA: właśnie pobity przez edc65, ten sam problem.f=(p,c,s,v=([s,a,b,c])=>s<'r'?a*a*b*3.14:a*b*c/(s<'t'?1:2))=>Math.ceil(v(p)/v(c))*s
-~
miał problemy z liczbami dziesiętnymi i spowodowałby zaokrąglenie w górę dodatkowego kroku. Musiałem dodać,a<'t'?1:2
ponieważ(1+(a>'t'))
z jakiegoś powodu nie działa.CJam, 46 bajtów
Wyjaśnienie:
Wypróbuj online .
źródło
Python 3,
340304 bajtówStosowanie:
Gdzie
i
jest ciąg informacji.Przykłady:
q("t 10 12.25 3 c 5 2.2 5")
q("t 5 87.3 20001 r 5.14 2 105.623 0.2")
Uwaga: Nazwy kształtów zostały odpowiednio skrócone do ich pierwszych liter.
źródło
JavaScript (ES6), 91
Przyjmowanie danych wejściowych jako ciągów kształtów, tablic liczb dla wymiarów i pojedynczej liczby dla prędkości:
Definiuje to funkcję anonimową, więc
g=
przed dodaniem należy użyć add . Następnie można go nazwać jakalert(g("triangle", [10, 12.25, 3], "circle", [5, 2.2], 5))
Wyjaśnienie:
Moje oryginalne rozwiązanie zajęło jeden ciąg i miało długość 111 bajtów:
Definiuje to także funkcję anonimową, więc
f=
przed dodaniem należy użyć add . Następnie można go nazwać jakalert(f("triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2"))
źródło
K5 (oK), 123 bajty
źródło
Julia,
122116958979 bajtówZakłada się, że podana zostanie tylko pierwsza litera nazw kształtów. W przeciwnym razie rozwiązanie jest o 6 bajtów dłuższe.
Niegolfowane + wyjaśnienie:
Zaoszczędzono 21 bajtów dzięki edc65 i 10 dzięki UndefinedFunction!
źródło
ceil
w Julii, aby użyć zamiastfloor
wycinać wszystkie informacje o wyniku liczby całkowitej?a>'s'?prod(x)/2:prod(x)
zprod(x)/(a>'s'?2:1)
? (być może nawet bez nawiasów nie mam pod ręką ideu juili i nie byłem w stanie tego przetestować)a<'d'?3.14x[1]^2*x[2]:a>'s'?prod(x)/2:prod(x)
zeprod(x)*(a<'d'?3.14x[1]:a>'s'?.5:1)
? (Ponownie, niesprawdzone)F #,
217186184160 bajtówCholerne wymagania dotyczące wcięć!
Stosowanie:
Aktualizacja
Dzięki Alex za uwagę na wcięcie pojedynczej przestrzeni, które F # wydaje się wspierać
Udało się zwalić ładunek bardziej, zmieniając z
array
nalist
typy wmatch
instrukcjiźródło
x**2.
tego możeszx*x
? To mogłoby zaoszczędzić 2 bajty.Python 2.7 306 bajtów
Pobiera dane wejściowe ze standardowego wejścia.
Testowanie
źródło
Python 2,
22214613911910393 bajtówDość prosta implementacja. Dzięki Sp3000 za
-(-n//1)
podstęp do sufitu, który powinien działać we wszystkich przypadkach (tj. Nie znalazłem jeszcze z nim problemu).Dane wejściowe powinny być sformatowane w następujący sposób:
Stosowanie:
Nie golfowany:
Oryginalne rozwiązanie, 222 bajty
Stało się tak, gdy reguły wciąż wymagały wprowadzenia całego słowa zamiast litery. Wykorzystałem fakt, że
hash(s)%5
zmapowałem jecircle -> 2, triangle -> 3, rectangle -> 1
, ale jeśli wezmę tylko jedną literę jako dane wejściowe, myślę, że mogę to skrócić.Stosowanie:
źródło
Python 2/3,
252249 bajtówPrzykłady użycia:
Wersje tylko Python 2 i tylko Python 3 różnią się tylko sposobem otrzymywania danych wejściowych;
raw_input()
dla Python 2 iinput()
Python 3, w przeciwieństwie dore.sys.stdin.readline()
wersji Python2 / 3.Python 2,
240237 bajtówPython 3,
236233 bajtówZmiany:
Zmieniono
for o in[0,3if i[0]<'d'else 4]:
nafor o in[0,[4,3][i[0]<'d']]:
. Dzięki Vioz za inspirację :).źródło
[0, 3 if i[0] < 'd' else 4]
. Jest późno (wcześnie?): P.for
oświadczeniu :).Pyth -
4039363534 bajtówUżywa prostej metody, mapując oba kontenery, a następnie redukując według podziału.
Staje wejście przecinek oddziela się od standardowego wejścia z pierwszej litery każdego kształtu, takich jak:
"t", 10, 12.25, 3, "c", 5, 2.2, 5
.Pakiet testowy .
źródło