Mein Roboter ist irgendwie kurzgeschlossen und irgendwo von meinem Labor weggelaufen!
Glücklicherweise beginnt jedes Mal, wenn er dies tut, seine Abschaltsequenz, sodass er genug Zeit hat, sich nach dem Zufallsprinzip zu drehen und fünf Runden lang in die Richtung zu rennen, in die er weist, bevor er abschaltet. Seine Kreisel- und Beschleunigungsmesserfunktionen leiten die Daten immer noch an das Labor weiter, solange er noch eingeschaltet ist.
Die Daten werden beispielsweise immer in Form von fünf Sätzen zu je zwei Zahlen vorliegen.
12:234,-135:47,-68:230,140:324,127,87
Ihre Mission ist Golfer a) simuliert den hektischen Lauf des Roboters und Sequenz dreht durch die Anzeige fünf Sätze von Zahlen in Form von a1:d1,a2:d2,a3:d3,a4:d4,a5:d5
wo a
(n) ist der Winkel im Uhrzeigersinn (in Grad) , so dass -179<=a<=+180
der Roboter von seiner aktuellen Position drehen wird ( anfangs ist es auf null, bevor es amok läuft und sich zum ersten Mal dreht) und d
(n) ist die Entfernung in Fuß, die es vor dem nächsten Richtungswechsel zurückgelegt hat, und zwar so, dass die 0<=d<=500
Füße; und b) eine berechnete Überschrift aus dem Labor (die ebenfalls einer Überschrift von Null zugewandt ist), eine Entfernung in Fuß (Genauigkeit bis zu 3 Dezimalstellen wird dringend empfohlen, wenn Sie dies tun, -5 Byte) und die Orientierungsüberschrift (in Grad). von wo mein Roboter ist es ausgerichtet, wenn es ausgeschaltet ist.
Einfaches Beispiel:
Data: 0:1,45:1,90:1,90:1,90:1
Heading: 0
Distance: 1
Orientation: -45
Die zufälligen Kurven und Entfernungen sind genau das, zufällig. Es dürfen keine festgelegten Werte fest codiert werden, wir müssen die Zufälligkeit im Code in Aktion sehen.
Einschränkungen der Zufälligkeit: Keine auf der Uhr oder dem Datum basierenden Verweise. Wir benötigen einen systemeigenen random
Verweis im Code. Wann immer Sie diesen Code ausführen, muss die Zufälligkeit die Möglichkeit bieten, 1 von 360 möglichen Drehwinkeln bei jeder Umdrehung anzuzeigen. Der Roboter kann sich also in einer Umdrehung um -36 Grad drehen und in der nächsten um +157 Grad, gefolgt von einer weiteren Umdrehung um +2 Grad um -116 Grad und einer letzten Umdrehung um +42 Grad in der letzten Umdrehung. Bei jeder zufälligen Winkelerzeugung müssen mindestens 360 verschiedene Werte möglich sein (zwischen -179 und +180 Grad einschließlich).
Einschränkungen beim Streckenlauf: Ähnlich eingestellt, gibt es 501 mögliche Strecken, die der Roboter laufen kann (zwischen 0 und 500 Fuß einschließlich). Daher erwarte ich, dass die Zufälligkeit auch bei der Ermittlung der Laufstrecke des Roboters verfügbar ist. Der Roboter könnte theoretisch 45, 117, 364, 27 und 6 Fuß mit jeder seiner jeweiligen Runden laufen ...
Die Ihnen zugeführten Daten sind immer ganzzahlig ... der Roboter dreht sich in ganzzahligen Gradbereichen und läuft in ganzzahligen Entfernungsbereichen. Die Ausgabewerte werden jedoch float sein ...
Das ist Code-Golf. Kürzester Code gewinnt ... Jetzt geh und finde meinen Roboter!
PS: In Bezug auf meine "Genauigkeit bis zu 3 Nachkommastellen" können Sie die Überschrift (in Grad, auf ein Minimum von 3 Nachkommastellen) und einen Abstand in Fuß (auch genau, auch auf ein Minimum von 3 Nachkommastellen) angeben wird ein -5 Byte Bonus bekommen).
-180 < a <= +180
als<
Zeichen für sich allein verwenden bedeutet weniger als aber ohne AFAIK ...Antworten:
Perl 6:
188184 Zeichen - 5 = 180 PunkteGolf mit Leerzeichen:
Ungolfed:
Dadurch wird die Daten in komplexe Zahlen mit
unpolar
, legt die Summe von ihnen in$complex
und bekommt dann die Polarkoordinaten als$dist
,$ang
.Der kumulative Winkel
$cum-angle
wird erfasst, weil die Winkel relativ zum Roboter sind, wenn er sich durch das Labor bewegt, und weil wir den endgültigen Winkel des Roboters für unsere Ausgabe benötigen.Beispielausgabe:
Der einzige wirkliche Trick, den der Golf benutzt, ist, dass er alle drei speziellen Variablen von Perl 6 (falsch) benutzt, um eine gute Wirkung zu erzielen:
$!
wird für Bogenmaß ↔ Grad verwendet$_
enthält die Daten, und alles, was einsam aussieht,.method()
bedeutet tatsächlich$_.method()
(außer immap {…}
Block, wo$_
tatsächlich der Wert der Zahlenpaare übernommen wird, aus denen die Daten bestehen)$/
hält was in der ungolfed version($dist, $ang)
.$0
und$1
tatsächlich bedeuten$/[0]
, dh$dist
, und$/[1]
, dh,$ang
quelle
$_=((-179..180).pick=>(^501).pick)xx 5;my$o;$/=([+] .map:{unpolar .value,$o+=.key/($!=180/pi)}).polar;say "Data: {.fmt("%d:%d",",")} Heading: {$1*$!} Distance: $0 Orientation: {$o*$!}"
.map:
ist leider verpflichtendRuby,
274252249245214211207204202 Zeichen (-5 = 197)Wie hat PHP Ruby in char count geschlagen ?! >: O muss einen Weg zum Golf finden mehr ...
Bearbeiten: Ich habe die PHP-Antwort geschlagen, aber der Benutzer, der sie geschrieben hat, hat mir dabei geholfen! Geh und stimme ihm zu. er hat es verdient :-P
Noch eine Änderung: Gah! Er hat mich wieder passiert! Du bist ein sehr würdiger Gegner, @MathieuRodic; Glückwunsch, ich muss dich gewinnen lassen ;-)
Ungolfed Code (und
etwasältere Version):Beispielausgabe:
quelle
Orientation
Abschnitt zugewandt ist.% 360
?M=Math
undP=M::PI
ersetzen - und ein weiteres Zeichen, indem Sie das Leerzeichen nach dem zweiten entfernenputs
.PHP -
238232221212203199 Zeichen(Teste es hier: http://ideone.com/dNZnKX )
Nicht Golf Version:
(Teste es hier: http://ideone.com/1HzWH7 )
quelle
Python -
264259256258 - 5 = 253 Zeichen(Teste es unter http://ideone.com/FicW6e )
Ungolfed-Version:
(Test unter http://ideone.com/O3PP7T )
NB: viele Antworten enthalten -5 in ihrem Titel, während ihr Programm die Distanz nicht mit einer Genauigkeit von bis zu 3 Dezimalstellen darstellt ...
quelle
Python 301-5 = 296
Nichts Besonderes, eher wortreich. Dies ist ein Problem, für das ich nicht glücklich bin, dass die Triggerfunktionen von Python im Bogenmaß arbeiten.
quelle
Python 2 =
376319 Zeichen (-5 für Entfernung = 314)Beispielausgabe
quelle