Robot saya mengalami hubungan pendek entah bagaimana dan secara acak lari ke suatu tempat dari lab saya!
Untungnya, setiap kali dia melakukan ini, urutan pemadamannya dimulai, memberinya cukup waktu untuk secara acak berbalik dan berlari ke arah yang menghadapnya selama lima putaran sebelum dia mematikan. Fungsi gyro dan akselerometernya masih menyampaikan data kembali ke lab saat dia masih aktif.
Data akan selalu datang dalam bentuk lima set dua angka, misalnya.
12:234,-135:47,-68:230,140:324,127,87
Misi Anda, pegolf adalah untuk a) mensimulasikan gerakan panik dan memutar urutan robot dengan menampilkan lima set angka dalam bentuk di a1:d1,a2:d2,a3:d3,a4:d4,a5:d5
mana a
(n) adalah sudut searah jarum jam (dalam derajat) sedemikian rupa -179<=a<=+180
sehingga robot akan berubah dari pos saat ini ( pada awalnya ia berada di nol arah sebelum berjalan mengamuk dan berbelok untuk pertama kalinya), dan d
(n) adalah jarak di kaki yang telah berjalan sebelum perubahan pos berikutnya yang sedemikian rupa sehingga 0<=d<=500
kaki; dan b) Pos yang dihitung dari lab (yang juga menghadap ke pos nol), jarak dalam kaki (akurasi hingga 3 tempat desimal sangat dianjurkan, -5 byte jika Anda melakukannya), dan pos orientasi (dalam derajat) dari tempat robot saya menghadap ketika telah dimatikan.
Contoh mudah:
Data: 0:1,45:1,90:1,90:1,90:1
Heading: 0
Distance: 1
Orientation: -45
Putaran dan jarak acak hanyalah itu, acak. Tidak ada nilai yang ditetapkan yang akan dikodekan secara keras, kita harus melihat keacakan dalam tindakan dalam kode.
Batasan ke keacakan: Tidak ada referensi berbasis jam atau tanggal, kita perlu melihat random
referensi asli dalam kode. Setiap kali Anda menjalankan kode ini, keacakan harus muncul dengan kemungkinan menunjukkan 1 dari 360 kemungkinan sudut berbelok dengan setiap putaran turn-run. Jadi robot dapat berputar -36 derajat pada satu belokan dan dapat berbalik +157 derajat di tikungan berikutnya, diikuti oleh putaran lain +2 derajat dengan putaran lain -116 derajat dan putaran terakhir +42 derajat pada belokan terakhir. Setidaknya 360 nilai yang berbeda harus dimungkinkan (antara -179 hingga +180 derajat inklusif) dengan setiap generasi sudut acak.
Batasan untuk lari jarak: Sama halnya, ada 501 jarak yang mungkin dijalankan robot, (antara 0 dan 500 kaki inklusif), jadi saya berharap keacakan juga tersedia saat menentukan jarak lari robot. Robot secara teoritis dapat menjalankan 45, 117, 364, 27 dan 6 kaki dengan masing-masing putaran masing-masing ...
Data yang diumpankan kepada Anda akan selalu dalam nilai integer ... robot akan berubah dalam rentang derajat integer, dan akan berjalan dalam rentang jarak integer. Nilai output bagaimanapun, akan mengapung ...
Ini adalah kode-golf. Kemenangan kode terpendek ... Sekarang cari robot saya!
PS: Mengacu pada "Akurasi hingga 3 tempat desimal" saya, jika Anda dapat memberikan tajuk (dalam derajat, ke MINIMUM 3 tempat desimal) dan jarak dalam kaki (juga akurat juga ke MINIMUM 3 tempat desimal) Anda akan mendapatkan bonus -5 byte).
-180 < a <= +180
sebagai<
tanda pada cara sendiri kurang dari tetapi tidak termasuk AFAIK ...Jawaban:
Perl 6:
188184 karakter - 5 = 180 poinGolf dengan ruang putih:
Tidak Disatukan:
Ini mengubah data menjadi angka yang kompleks dengan
unpolar
, menempatkan jumlah mereka ke dalam$complex
, dan kemudian mendapat koordinat kutub sebagai$dist
,$ang
.Sudut kumulatif,
$cum-angle
dikumpulkan karena sudut relatif terhadap robot saat bergerak melalui lab dan karena kita membutuhkan sudut akhir robot dalam output kami.Output sampel:
Satu-satunya trik nyata yang digunakan golf adalah bahwa ia (salah) menggunakan ketiga variabel khusus Perl 6 dengan efek yang baik:
$!
digunakan untuk radian ↔ derajat$_
memegang data, dan segala sesuatu yang tampak seperti kesepian.method()
sebenarnya berarti$_.method()
(kecuali di dalammap {…}
blok, di mana$_
sebenarnya mengambil nilai dari pasangan angka yang membentuk data)$/
memegang apa yang ada di versi tanpa ungolfed($dist, $ang)
.$0
dan$1
sebenarnya berarti$/[0]
, yaitu$dist
, dan$/[1]
, yaitu,$ang
sumber
$_=((-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:
adalah wajibRuby,
274252249245214211207204202 karakter (-5 = 197)Bagaimana PHP mengalahkan Ruby dalam hitungan char ?! >: O Harus menemukan cara untuk bermain golf lagi ...
Sunting: Saya mengalahkan jawaban PHP, tetapi pengguna yang menulisnya membantu saya melakukannya! Pergilah angkat dia; dia layak mendapatkannya :-P
Suntingan lain: Gah! Dia melewati saya lagi! Anda adalah lawan yang sangat berharga, @MathieuRodic; selamat, saya harus membiarkan kamu menang ;-)
Kode tidak digabungkan (dan versi yang
sedikitlebih lama):Output sampel:
sumber
Orientation
bagian tersebut.% 360
di atasnya?M=Math
danP=M::PI
mengganti kode yang sesuai - dan satu karakter lagi dengan menghilangkan spasi setelah yang keduaputs
.PHP -
238232221212203199 199 karakter(uji di sini: http://ideone.com/dNZnKX )
Versi non-golf:
(uji di sini: http://ideone.com/1HzWH7 )
sumber
Python -
264259256258 - 5 = 253 karakter(coba di http://ideone.com/FicW6e )
Versi tidak disatukan:
(uji di http://ideone.com/O3PP7T )
NB: banyak jawaban termasuk -5 dalam judul mereka, sementara program mereka tidak mewakili jarak dengan akurasi hingga 3 tempat desimal ...
sumber
Python 301-5 = 296
Tidak ada yang terlalu mewah di sini, lebih tepatnya bertele-tele. Ini adalah salah satu masalah yang saya tidak senang bahwa fungsi trigonon python bekerja di radian.
sumber
Python 2 =
376319 karakter (-5 untuk jarak = 314)output sampel
sumber