Buduję gigantycznego robota Lego i muszę wygenerować określone przełożenia przy użyciu zestawu kół zębatych. Mam wiele kół zębatych ze zwykłymi rozmiarami kół LEGO: 8, 16, 24 lub 40 zębów. Napisz program, którego mogę użyć, w którym wprowadzę przełożenie, a program powie mi, jakiej kombinacji biegów powinienem użyć, aby uzyskać żądany przełożenie.
Współczynnik wejściowy zostanie określony na standardowym wejściu (lub w twoim języku) za pomocą dwóch liczb całkowitych oddzielonych dwukropkiem. Stosunek a:b
oznacza, że wał wyjściowy powinien obracać się a/b
tak szybko, jak wał wejściowy.
Dane wyjściowe na standardowe dane wyjściowe powinny być pojedynczą linią zawierającą rozdzieloną spacjami listę przełożeń przekładni, w postaci x:y
gdzie x
jest wielkość koła zębatego na wale wejściowym i y
wielkość koła zębatego na wale wyjściowym. Musisz użyć minimalnej możliwej liczby biegów dla danego przełożenia. Każdy x
i y
musi być jednym z 8,16,24,40
.
przykłady:
1:5 -> 8:40
10:1 -> 40:8 16:8
9:4 -> 24:16 24:16
7:1 -> IMPOSSIBLE
7:7 ->
6:15 -> 16:40
Jeśli żądane przełożenie jest niemożliwe, wydrukuj „NIEMOŻLIWE”. Jeśli nie są wymagane żadne koła zębate, wydrukuj pusty ciąg.
To jest golf golfowy, wygrywa najkrótsza odpowiedź.
1:5 -> 8:40
i10:1 -> 40:8
ma sens, ale inni nie tak bardzo.1:5
oznacza, że wał wyjściowy obraca się 5-krotnie wolniej, a koło zębate 8 zębów na wejściu i koło zębate 40 zębów na wyjściu sprawia, że tak się dzieje.10:1 -> 40:8 16:8
, nie to, co powiedziałeś. A co z innymi, mylisz się?9:4
jest realizowane3:2
dwukrotnie.3:2
jest implementowany za pomocą24:16
.7:7
jest taki sam jak1:1
, więc nie wymaga żadnych narzędzi do wdrożenia.Odpowiedzi:
Python - 204
Ok, pójdę pierwszy:
edytować:Aby „zoptymalizować” wynik, można go dodać przed
print
instrukcją,łączna liczba maksymalnie 266 znaków , jak sądzę.
źródło
<1
może zastąpić==0
. Ponadto,if b:a=...return a
może byćreturn b and...or a
.23:12
.elif i!=1:return[]
do oryginału rozwiązuje problem, ale wprowadza inny.$ python gears.py <<< 21:28
=>24:16
.. Zajmę się tym. Wygląda na to, że problem nie był wcale taki prosty: DI Myślę, że kod musi być jeszcze dłuższy, albo potrzebuję innego podejścia.6:15
można to zrobić,16:40
ale kod zwraca24:40 16:24
.Perl -
310 306 294 288272Jestem trochę zardzewiały z perlem i nigdy nie grałem w golfa ... ale bez wymówek. Liczba znaków nie zawiera podziałów linii. Korzystanie z Perla v5.14.2.
Nie mogę się doczekać krytyków i wskazówek. Nie jest tak łatwo znaleźć porady i wskazówki dotyczące gry w golfa kodowego (w perlu).
źródło
$1:$2 ->
, nie jest to wymagane na wyjściu.$a[$_]=8 if!$a[$_];
do$a[$_]||=8;
($v,$n)=split/:|\s/,<>;
(niesprawdzony).swi-prolog,
324250248204 bajtówProlog radzi sobie całkiem dobrze w rozwiązywaniu takich problemów.
Dane wejściowe są przekazywane jako parametr określający predykat
m
. Dane wyjściowe są zapisywane na standardowe wyjście. Przepraszam za końcowe „prawda”; to tylko sposób, w jaki tłumacz mówi mi, że wszystko jest w porządku.źródło
C,
246216213 bajtówW (daremnej) próbie pokonania własnego rozwiązania Prolog całkowicie przepisałem rozwiązanie C.
Moje oryginalne rozwiązanie C (246 bajtów):
Miło było udowodnić, że można to zrobić bez list budynków.
źródło
Pyth, 101 bajtów
(Niemal na pewno nie konkuruje w konkursie, ponieważ używa języka nowszego niż wrzesień / 2012)
Implementacja odpowiedzi Pythona @daniero, ale częściowo zoptymalizowana pod kątem Pyth.
Wypróbuj tutaj
Lub przetestuj każdy przypadek
źródło
ES6, 230 bajtów
Jeden z moich najdłuższych pól golfowych, więc musiałem zrobić coś złego ... Ungolfed:
źródło