Saya sedang membangun robot lego raksasa dan saya perlu membuat beberapa rasio roda gigi tertentu menggunakan satu set roda gigi. Saya memiliki banyak gigi dengan ukuran gigi lego yang umum: 8, 16, 24, atau 40 gigi. Tulis program yang bisa saya gunakan di mana saya memasukkan rasio roda gigi dan program memberi tahu saya kombinasi roda gigi mana yang harus saya gunakan untuk mendapatkan rasio yang diminta.
Rasio input akan ditentukan pada input standar (atau setara bahasa Anda) dengan dua bilangan bulat yang dipisahkan oleh titik dua. Rasio a:b
berarti bahwa poros keluaran harus berputar a/b
kali lebih cepat dari poros input.
Output ke output standar harus berupa garis tunggal yang berisi daftar rasio roda gigi yang dipisahkan oleh ruang, dalam bentuk di x:y
mana x
ukuran roda gigi pada poros input dan y
adalah ukuran roda gigi pada poros output. Anda harus menggunakan jumlah roda gigi minimum yang dimungkinkan untuk rasio yang diberikan. Masing x
- masing dan y
harus menjadi salah satu 8,16,24,40
.
contoh:
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
Jika rasio roda gigi yang diinginkan tidak mungkin, cetak "IMPOSSIBLE". Jika tidak diperlukan roda gigi, cetak string kosong.
Ini kode golf, jawaban terpendek menang.
1:5 -> 8:40
dan10:1 -> 40:8
masuk akal tetapi yang lain tidak begitu banyak.1:5
berarti poros keluaran berputar 5 kali lebih lambat, dan 8 gigi pada input dan 40 gigi pada output membuat itu terjadi.10:1 -> 40:8 16:8
, tidak apa yang kamu katakan. Bagaimana dengan yang lain membingungkan Anda?9:4
diimplementasikan melakukan3:2
dua kali.3:2
diimplementasikan menggunakan24:16
.7:7
sama dengan1:1
, jadi tidak memerlukan roda gigi untuk diimplementasikan.Jawaban:
Python - 204
Ok, saya akan pergi dulu:
edit:Untuk 'mengoptimalkan' output, ini dapat ditambahkan sebelum
print
pernyataan,membawa total hingga 266 karakter , saya percaya.
sumber
<1
dapat menggantikan==0
. Jugaif b:a=...return a
bisareturn b and...or a
.23:12
. , .elif i!=1:return[]
ke yang asli memecahkan masalah tetapi memperkenalkan yang lain.$ python gears.py <<< 21:28
=>24:16
.. Aku akan memeriksanya. Sepertinya masalahnya tidak begitu sederhana: DI Pikirkan kodenya harus lebih lama, atau saya perlu pendekatan lain.6:15
dapat dilakukan dengan16:40
tetapi kode Anda kembali24:40 16:24
.Perl -
310 306 294 288272Saya sedikit berkarat dengan perl dan tidak pernah melakukan kode-golf ... tapi tidak ada alasan. Penghitungan karakter tanpa jeda baris. Menggunakan perl v5.14.2.
Saya menantikan kritik dan petunjuk. Tidak mudah menemukan tip dan trik untuk kode-golf (dalam perl).
sumber
$1:$2 ->
, itu tidak diperlukan dalam output.$a[$_]=8 if!$a[$_];
ke$a[$_]||=8;
($v,$n)=split/:|\s/,<>;
(belum diuji).swi-prolog,
324250248204 byteProlog cukup baik dalam memecahkan masalah seperti ini.
Input diberikan sebagai parameter jangka waktu untuk predikat
m
. Output ditulis ke stdout. Maaf tentang jejak 'benar'; itu hanya cara penerjemah untuk memberi tahu saya bahwa semuanya baik-baik saja.sumber
C,
246216213 byteDalam upaya (sia-sia) untuk mengalahkan solusi Prolog saya sendiri, saya sepenuhnya menulis ulang solusi C.
Solusi C asli saya (246 byte):
Itu latihan yang bagus untuk membuktikan bahwa itu bisa dilakukan tanpa membuat daftar.
sumber
Pyth, 101 byte
(Hampir pasti non-bersaing dalam kontes karena menggunakan bahasa yang lebih baru dari September / 2012)
Implementasi jawaban python @daniero ' tetapi semi-dioptimalkan untuk Pyth.
Coba di sini
Atau uji setiap kasus
sumber
ES6, 230 byte
Salah satu golf terpanjang saya, jadi saya pasti telah melakukan sesuatu yang salah ... Tidak Diinginkan:
sumber