Drzwi przesuwne mają różne ceny w zależności od szerokości drzwi. Różne ceny są następujące:
- 60 - 80 cm: ¤150
- 81 - 100 cm: ¤200
- 101 - 120 cm: 20220
Kupując szafę, oczywiście chcesz zminimalizować koszty, więc Twoim zadaniem jest znalezienie szerokości drzwi, która minimalizuje całkowity koszt w oparciu o całkowitą szerokość szafy.
Zasady:
- Całkowita szerokość zostanie przyjęta jako dane wejściowe
- Wszystkie drzwi będą miały tę samą szerokość
- Wybierz najmniejsze drzwi, jeśli dwa rodzaje drzwi kosztują tyle samo
- Szerokości podano w centymetrach, liczbach całkowitych, a nie dziesiętnych
- Zaokrąglaj liczby dziesiętne
- Cena zostanie zwrócona w postaci liczby całkowitej (bez znaku waluty)
- Formaty wejściowe i wyjściowe są opcjonalne, ale kolejność wyjścia muszą być:
Number of doors, Width, Price
. - Dane wejściowe będą w zakresie
[120 1000)
.
To jest kod golfowy. Najkrótszy kod w bajtach wygrywa.
Przykłady:
Input: 156
Output: 2, 78, 300
Input: 331
Output: 3, 111, 660
Input: 420
Output: 4, 105, 880
code-golf
arithmetic
Stewie Griffin
źródło
źródło
201
jest interesującym przypadkiem testowym ...Odpowiedzi:
05AB1E , 47 bajtów
Kod:
Nie najlepsze zgłoszenie, ale przynajmniej coś :)
Wypróbuj online!
źródło
JavaScript (ES6), 101 bajtów
-~(~-a/b)
jest taki sam jak Math.ceil (a / b) w 31-bitowych liczbach całkowitych.źródło
Perl,
190180154133128117 bajtówzawiera +1 dla
-p
Skomentowano:
Zaoszczędź 11 bajtów, wstawiając i dzieląc skrót na dwie tablice
Zaoszczędź 5 bajtów, używając
-p
(dzięki @ dev-null)Zaoszczędź 18 bajtów, używając POSIX :: ceil i 3 więcej, używając składni listy dla skrótu (dzięki @ msh210)
źródło
sub r{$a=$_[0];~~$a==$a?$a:1+~~$a}
jestsub r{use POSIX;ceil pop}
.(80=>150,100=>200,120=>220)
jest(80,150,100,200,120,220)
.[120-1000)
, ale zawsze można zmienić1E4
na1E9
...PowerShell,
137135 bajtówDane wyjściowe są oddzielone znakiem nowej linii.
Bierzemy wkład
$a
, ustawiamy nasz koszt$j
na9000000000
(duża liczba, która jest o wiele większa niż kiedykolwiek byśmy potrzebowali). Następnie zapętlamy od60..120
z|%{...}
. Przy każdej iteracji obliczamy$p
cenę bieżącego elementu za pomocą pseudo-trójki , a następnie obliczamy$c
pułap$a/$_
. Jeśli bieżąca suma jest mniejsza niż najmniejsza suma, jaką widzieliśmy ($j
), zapisz wszystkie te zmienne:$j
(suma),$k
(wymagana liczba drzwi) i$i
(szerokość drzwi) i kontynuuj pętlę. Po zakończeniu pętli wyślij najlepsze wartości.Edytuj - Zapisano dwa bajty, przenosząc przypisania
$c
i$p
doif
warunkowegoźródło
Pyth, 65 bajtów
Wypróbuj tutaj!
Wyjaśnienie
Najpierw generuje listę wszystkich możliwych kombinacji liczby drzwi / szerokości drzwi i oblicza cenę dla każdej z tych kombinacji. Następnie musimy go zamówić tylko według ceny i szerokości drzwi i wziąć pierwszy element z wynikowej listy.
Wyjaśnienie kodu następuje po tym, jak grałem w golfa.Pomóż mi w tymzagrać wgolfa.źródło
JavaScript (ES6) 96
Jak zauważył @Neil,
=-~(~-n/d)
jest równoważne dzieleniu z zaokrąglaniem w górę dla liczb całkowitych 32-bitowych lub mniejszych.źródło
R ,
135104 bajtówWypróbuj online!
Zapisano 31 bajtów przez
utf8ToInt
cbind
bezpośrednio, a nie po zdefiniowaniu zmiennychJak to działa:
approx
zwraca cenę pojedynczych drzwi na podstawie ich długości. ZwracaNA
poza zakres[60,120]
.(number of doors, door width, total price)
jest zwracany.order
Funkcja służy do zlokalizowania cenę minimalną; na tej podstawie wyodrębniany jest właściwy tryplet. W przypadku remisóworder
zwróci wpis, który jest pierwszy, a ponieważ zapętliliśmy od 16 do 1, zwrócona zostanie największa liczba drzwi (najmniejsza szerokość drzwi).źródło
stepfun
jest dłuższe - ponieważ należy usunąć szerokość poza[60,120]
.