Skor
Bagian ini akan diisi ketika kiriman dimasukkan.
Normal
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
Putaran Bonus
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
Latar Belakang
Kursus pengantar yang populer ke Jawa adalah Karel J. Robot (Saya menggunakannya sendiri). Robot berinteraksi dengan grid jalan (bilangan bulat positif y-koordinat) dan jalan (bilangan bulat positif x-koordinat) serta beepers, yang dapat ditempatkan dan disimpan di grid (perhatikan bahwa Karel dan beepers apa pun hanya dapat ada di kisi-kisi) poin). Karel (robot) hanya melakukan lima tindakan: bergerak maju dengan 1, belok kiri di tempat, meletakkan pager, mengambil pager, dan mematikannya.
Di kelas Ilmu Komputer saya, salah satu tugas pertama kami adalah memprogram Karel untuk belajar cara berbelok ke kanan, berbalik, dan melakukan tindakan gabungan untuk bergerak maju dengan 1 dan meletakkan pager. Tugas beberapa hari kemudian adalah menggunakan metode ini dan menulis metode baru untuk menghasilkan huruf-huruf alfabet.
Tentu saja, setelah saya menyelesaikan tugas ini, saya menulis lebih banyak metode untuk membuat setiap huruf alfabet, serta sepuluh digit angka, dan saya berencana untuk mencari cara membuat semacam pengolah kata dari robot, di mana sebuah string akan dimasukkan ke STDIN dan robot akan meletakkan pager di grid dengan cara yang menyerupai huruf.
Setiap kali saya menulis private void draw#
untuk setiap karakter #
, saya menambahkan komentar setelahnya yang akan memberi saya singkatan untuk urutan perintah yang saya butuhkan.
Saya memiliki perintah berikut (ditulis dalam pseudocode) yang saya inginkan (klarifikasi - ini adalah satu-satunya perintah yang berguna ).
Turn Left
Rotate the robot 90˚ counterclockwise
Abbreviated as "l"
Turn Right
Rotate the robot 90˚ clockwise
Abbreviated as "r"
Move
Move one space forwards
Abbreviated as "m"
Put Beeper
Put a beeper on the spot that Karel is on
Abbreviated as "p"
Drop Beeper
Move, then Put Beeper
Abbreviated as "d"
Turn Around
Turn Left, then Turn Left
Abbreviated as "a"
Kondisi
Robot harus melanjutkan dalam urutan berikut.
- Robot dimulai di sudut kiri bawah persegi panjang 5xN area minimal huruf yang akan ditarik.
- Robot menggambar surat itu.
- Robot bergerak ke sudut kanan bawah persegi panjang.
- Robot bergerak dua ruang ke kanan dan harus menghadap ke utara / atas
Mari kita bekerja melalui contoh. Misalkan kita ingin menggambar A
. Lokasi robot adalah huruf yang menunjukkan arahnya (utara, selatan, timur, barat). Huruf ditulis dengan huruf besar jika robot berada di tempat dengan pager dan huruf kecil jika robot berada di tempat tanpa pager. o
mewakili tempat dengan penyeranta dan.
mewakili bintik-bintik tanpa beepers
Seperti yang akan kita lihat nanti, A
apakah ini.
.ooo.
o...o
ooooo
o...o
o...o
Inilah salah satu solusi yang mungkin.
Grids ..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... N.... E.... oE... ooE.. oooE. oooW.
..... ..... N.... o.... o.... o.... o.... o.... o....
n.... N.... o.... o.... o.... o.... o.... o.... o....
Letters p d d r d d d a
..... ..... ..... ..... ..... n.... e.... .E... .oE..
..... ..... ..... ..... N.... o.... o.... o.... o....
ooWo. oWoo. Wooo. Nooo. oooo. oooo. oooo. oooo. oooo.
o.... o.... o.... o.... o.... o.... o.... o.... o....
o.... o.... o.... o.... o.... o.... o.... o.... o....
m m m r d m r d d
.ooE. .oooe .ooos .ooo. .ooo. .ooo. .ooo. .ooo.
o.... o.... o.... o...S o...o o...o o...o o...o
oooo. oooo. oooo. oooo. ooooS ooooo ooooo ooooo
o.... o.... o.... o.... o.... o...S o...o o...o
o.... o.... o.... o.... o.... o.... o...S o...E
d m r d d d d l
Akhir mml
untuk menyelesaikan peluru keempat adalah implisit karena muncul di setiap huruf dan karena saya tidak ingin kembali dan menambahkan dua kolom ke semua yang ada dalam solusi yang diusulkan di atas.
Dengan demikian, satu solusi untuk dibuat A
adalah pddrdddammmrdmrdddmrddddlmml
.
Perhatikan bahwa ini tidak harus menjadi solusi Anda. Algoritme Anda dapat melewati setiap kolom, meletakkan penyeranta di tempat yang tepat dan tidak mengandalkan tempat penyeranta lain akan ditempatkan. Tidak masalah apa algoritma Anda, robot hanya dapat menempatkan satu pager per ruang di grid.
Program
Program Anda akan memasukkan kisi-kisi 5xN dari kisi untuk surat itu. Perhatikan bahwa tidak ada robot pada input; robot diasumsikan berada di sudut kiri bawah (barat daya), menghadap ke utara.
Outputnya akan menjadi urutan huruf yang merupakan singkatan untuk urutan.
Input sampel
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
Output sampel
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
Ini kode golf, kawan. Aturan CG standar berlaku. Kode terpendek dalam byte menang.
Putaran Bonus
Aturan
Jika Anda ingin berpartisipasi dalam putaran bonus, pastikan untuk membuat kode Anda efisien! Di bawah ini adalah perpustakaan dari semua huruf 5x5 yang dibuat oleh program saya saat dijalankan. Tujuan dari putaran bonus adalah untuk menulis program yang mencetak urutan untuk ABCDEFGHIJKLMNOPQRSTUVWXYZ
yang berisi gerakan sesedikit mungkin. Tidak ada input untuk STDIN. Kode akan dinilai bukan pada panjang kode tetapi pada "skor bergeraknya". Skor bergerak dirancang untuk mencegah algoritma penyapu yang mengunjungi setiap titik dalam persegi panjang.
d: 1
l: 1
m: 4
p: 1
r: 1
Surat
.ooo. oooo. ooooo oooo. ooooo ooooo .oooo o...o
o...o o...o o.... o...o o.... o.... o.... o...o
ooooo oooo. o.... o...o oooo oooo. o.ooo ooooo
o...o o...o o.... o...o o.... o.... o...o o...o
o...o oooo. ooooo oooo. ooooo o.... oooo. o...o
ooooo ....o o...o o.... ooooo o...o ooooo oooo.
..o.. ....o o..o. o.... o.o.o oo..o o...o o...o
..o.. ....o oo... o.... o.o.o o.o.o o...o oooo.
..o.. o...o o..o. o.... o...o o..oo o...o o....
ooooo .ooo. o...o ooooo o...o o...o ooooo o....
oooo. oooo. ooooo ooooo o...o o...o o...o o...o
o..o. o...o o.... ..o.. o...o o...o o...o .o.o.
o..o. oooo. ooooo ..o.. o...o .o.o. o.o.o ..o..
oooo. o..o. ....o ..o.. o...o .o.o. o.o.o .o.o.
....o o...o ooooo ..o.. ooooo ..o.. ooooo o...o
o...o ooooo
.o.o. ...o.
..o.. ..o..
.o... .o...
o.... ooooo
Prosedur yang sama dengan tantangan asli harus diikuti: huruf harus ditarik satu per satu dengan pemisahan ruang antara setiap huruf.
Aturan CG standar berlaku. Entri dengan skor bergerak terendah menang.
Untuk meringkas, kedua kode pada dasarnya akan melakukan hal yang sama. Kode pertama harus memiliki jumlah byte minimal dalam kode, dan kode kedua harus menggunakan jumlah gerakan terkecil.
Jawaban:
perl -p0,
60 5654 + 2 bytegolf
catatan
sumber
@-
, mungkin bermanfaat untuk berbagi tips bermain golf di pertanyaan Perl !JavaScript (ES6), 91
Mencoba pertama untuk tantangan dasar.
Tes menjalankan cuplikan di bawah ini di peramban yang mendukung EcmaScript 6 (diuji di Firefox)
Tampilkan cuplikan kode
BONUS CHALLENGE JAWABAN - Skor untuk alfabet penuh = 869
Tes menjalankan wnippet di bawah ini di Firefox (layar penuh lebih baik)
Karena saya tidak suka tantangan input tetap / output tetap , Anda dapat mencoba input Anda. Ingat, hanya huruf yang akan dicetak.
sumber