Ich baue einen riesigen Legoroboter und muss einige bestimmte Übersetzungsverhältnisse mithilfe eines Satzes von Zahnrädern erzeugen. Ich habe viele Zahnräder mit den üblichen Lego-Zahnradgrößen: 8, 16, 24 oder 40 Zähne. Schreiben Sie ein Programm, das ich verwenden kann, indem ich ein Übersetzungsverhältnis eingebe, und das Programm sagt mir, welche Kombination von Zahnrädern ich verwenden soll, um das angeforderte Übersetzungsverhältnis zu erhalten.
Das Eingabeverhältnis wird in der Standardeingabe (oder in der Entsprechung Ihrer Sprache) mit zwei durch einen Doppelpunkt getrennten Ganzzahlen angegeben. Ein Verhältnis von a:b
bedeutet, dass sich die Abtriebswelle a/b
so schnell drehen soll wie die Antriebswelle .
Der Ausgang auf der Standardausgabe sollte eine einzige Zeile eine durch Leerzeichen getrennte Liste von Übersetzungsverhältnissen enthält, in Form sein , x:y
wo x
die Größe des Getriebes auf der Antriebswelle und y
ist die Größe des Getriebes auf der Ausgangswelle. Sie müssen die minimal mögliche Anzahl von Gängen für die angegebene Übersetzung verwenden. Jeder x
und y
muss einer von 8,16,24,40
.
Beispiele:
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
Wenn das gewünschte Übersetzungsverhältnis nicht möglich ist, drucken Sie "UNMÖGLICH". Wenn keine Zahnräder erforderlich sind, drucken Sie die leere Zeichenfolge.
Dies ist Code Golf, die kürzeste Antwort gewinnt.
1:5 -> 8:40
und10:1 -> 40:8
sinnvoll, aber die anderen nicht so sehr.1:5
bedeutet, dass sich die Abtriebswelle 5-mal langsamer dreht, und ein 8-Zahn-Zahnrad am Eingang und ein 40-Zahn-Zahnrad am Ausgang machen dies möglich.10:1 -> 40:8 16:8
, nicht was du gesagt hast. Was verwirrt dich mit den anderen?9:4
wird dabei3:2
doppelt implementiert .3:2
wird implementiert mit24:16
.7:7
ist das gleiche wie1:1
, so dass es keine Zahnräder erfordert, um zu implementieren.Antworten:
Python - 204
Ok, ich gehe zuerst:
bearbeiten:Um die Ausgabe zu optimieren, kann dies vor der
print
Anweisung hinzugefügt werden.Ich glaube , das sind insgesamt 266 Zeichen .
quelle
<1
ersetzen können==0
. Auchif b:a=...return a
kannreturn b and...or a
.23:12
.elif i!=1:return[]
zum Original löst das Problem, führt jedoch ein anderes ein.$ python gears.py <<< 21:28
=>24:16
.. Ich werde mich darum kümmern. Es sieht so aus, als wäre das Problem doch nicht so einfach: DI Ich denke, der Code muss noch länger sein, oder ich brauche einen anderen Ansatz.6:15
kann mit getan werden,16:40
aber Ihr Code kehrt zurück24:40 16:24
.Perl -
310 306 294 288272Ich bin ein bisschen verrostet mit Perl und habe noch nie Code-Golf gespielt ... aber keine Ausreden. Die Anzahl der Zeichen erfolgt ohne Zeilenumbrüche. Verwendung von Perl v5.14.2.
Ich freue mich auf Kritik und Hinweise. Es ist nicht so einfach, Tipps und Tricks für Code-Golf (in Perl) zu finden.
quelle
$1:$2 ->
. Sie werden in der Ausgabe nicht benötigt.$a[$_]=8 if!$a[$_];
zu$a[$_]||=8;
($v,$n)=split/:|\s/,<>;
(ungetestet) abgekürzt werden .swi-prolog,
324250248204 bytesProlog kann ein solches Problem ziemlich gut lösen.
Die Eingabe wird als zu prädizierender Begriffsparameter übergeben
m
. Die Ausgabe wird nach stdout geschrieben. Entschuldigung für das nachfolgende 'true'; Das ist nur die Art des Dolmetschers, mir mitzuteilen, dass alles in Ordnung war.quelle
C
246216213 BytesIn einem (vergeblichen) Versuch, meine eigene Prolog-Lösung zu schlagen, habe ich die C-Lösung komplett neu geschrieben.
Meine ursprüngliche C-Lösung (246 Byte):
Es war eine schöne Übung, um zu beweisen, dass es ohne das Erstellen von Listen möglich ist.
quelle
Pyth, 101 Bytes
(Mit ziemlicher Sicherheit keine Teilnahme am Wettbewerb, da eine neuere Sprache als September / 2012 verwendet wird.)
Eine Implementierung von @daniero 'Python-Antwort, jedoch halboptimiert für Pyth.
Probieren Sie es hier aus
Oder testen Sie jeden Fall
quelle
ES6, 230 Bytes
Einer meiner längsten Golfplätze, also muss ich etwas falsch gemacht haben ... Ungolfed:
quelle