Saya sebuah robot. Saya membeli keyboard ini karena tata letaknya yang mudah:
~` !1 @2 #3 $4 %5 ^6 &7 *8 (9 )0 _- +=
tab Qq Ww Ee Rr Tt Yy Uu Ii Oo Pp {[ }] \|
Aa Ss Dd Ff Gg Hh Jj Kk Ll :; "' [-enter-]
Zz Xx Cc Vv Bb Nn Mm <, >. ?/
[========= space =========]
Untuk mencetak teks manusia, saya perlu mengubahnya menjadi perintah yang dapat ditafsirkan oleh manipulator saya. Manipulator kiri saya melayang di atas Shiftkunci. Manipulator kanan saya, pada awalnya, melayang di atas ~kunci. Perintah yang dipahami manipulator saya adalah:
S : press the shift key
s : release the shift key
L : move the right manipulator left by 1
R : move the right manipulator right by 1
U : move the right manipulator up by 1
D : move the right manipulator down by 1
P : press the key under the right manipulator
p : release the key by the right manipulator
Tulis kode untuk mengonversi pesan ASCII menjadi daftar perintah. Input dapat berisi sejumlah 95 karakter ASCII yang dapat dicetak; mungkin juga TAB dan karakter baris baru. Keluaran harus berupa daftar perintah kepada manipulator.
Jadi, misalnya, untuk mengetik Hello World!
, perintahnya adalah
SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp
Saya mengatur ulang manipulator ke kondisi awal sebelum mencetak setiap pesan.
Ada beberapa bahaya mekanis yang harus dihindari dengan pemrograman yang tepat:
- Tidak ada pemindahan (
LRUD
) yang diizinkan saat pencetakan (P
) digunakan - Tidak ada gangguan manipulator: ketika manipulator terlibat (
S
atauP
), perintah berikutnya untuk manipulator ini harus melepaskan (s
ataup
), dan sebaliknya Tidak ada pemindahan yang tidak perlu: antara masing-masing dua perintah shift (
s
,S
), harus adaP
perintahJadi, untuk mencetak
~~
, perintahSPpPp
itu valid, sementaraSPpsSPp
tidakTidak bergerak keluar dari batas: tidak ada perintah gerakan yang harus mencoba untuk memindahkan manipulator kanan lebih dari 13 spasi ke kanan atau 4 ke bawah dari posisi awal (atau tempat ke atas atau ke kiri)
Catatan tambahan:
- Menekan tombol yang dinonaktifkan (seperti urutan perintah
DDPp
) menghasilkan tidak ada tombol yang ditekan dan diizinkan. - Menekan Shift+ Tabtidak memiliki efek, tetapi Shift+ Spacedan Shift+ Entermemiliki efek yang sama dengan tanpa Shift.
- Menekan sembarang tempat pada bilah spasi dan Entertombol memiliki efek yang sama.
- Kunci spasi putih dalam output tidak memiliki arti, tetapi dapat digunakan untuk memformatnya dengan cara yang indah.
Pp
? Sejauh yang saya bisa lihat, itu selalu merupakan tindakan tunggal dan tidak adaP
ataup
bisa muncul dengan sendirinya.Jawaban:
Python 2 ,
338337335331325 byteCobalah online!
Bergerak langsung dari setiap karakter ke yang berikutnya.
Penjelasan:
S=[c in K,s][c in' \n']
, periksa apakah karakter berikutnya harus huruf besar atau kecil. Jikac
spasi atau baris baru, kasingnya tetap sama.X=[max(x,12),min(max(x,5),10),p%15]['\n '.find(c)]
. Jikac
spasi atau baris baru, koordinat x terdekat dengan arus dipilih (karena tombol span beberapa kolom)print'sS'[S]*(s!=S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp'
, mencetak sakelar kasus, jumlah gerakan koordinat x, jumlah gerakan koordinat y, dan akhirnyaPp
, untuk setiap karakterVersi lebih pendek, jika jalur terpendek tidak diperlukan:
Python 2 ,
294293291287281 byteCobalah online!
sumber
space
/enter
?o
)JavaScript (ES6), 263 byte
Mengambil input sebagai array karakter.
Cobalah online!
sumber
.COM opcode,
108104 byteAmbil input dari keyboard dengan CapsLock mati
Golfnya jelek
sumber
Take input from keyboard
Bagaimana teman robot kita, yang meminta bantuan menggunakan keyboard-nya, memanfaatkan program ini?