Ringkasan
Tugasnya adalah menavigasi penjelajah Mars dan memberi tahu koordinat dan arah akhirnya.
Memasukkan:
Input pertama:
Pertama program Anda harus mengambil input yang akan berada dalam format berikut:
[X-Coordinate],[Y-Coordinate],[Direction]
Arah harus: N
atau S
atau E
atau W
(Mulai surat Utara, Selatan, Barat, Timur)
Contoh: 10,20,N
(x = 10, y = 20, arah = N (Utara))
Input kedua:
Input kedua terdiri dari serangkaian R
, L
, M
untuk kanan, kiri dan bergerak masing-masing.
Untuk R
dan L
(kanan dan kiri) arah rover harus berubah.
Untuk M
bajak harus bergerak 1 unit ke depan ke arah itu sebelum bergerak.
Aturan untuk menghitung koordinat:
N = Y + 1
E = X + 1
S = Y - 1
W = X - 1
Keluaran:
Koordinat akhir dan arah rover saat ini.
Contoh:
Enter initial data: 1,2,N
Enter the instructions: MRMLM
Output: 2,4,N
Koordinat dapat berupa bilangan bulat apa saja dan dapat negatif .
Semua celah standar tidak diizinkan. Jika memberikan demo di situs seperti http://ideone.com dll. Adalah mungkin, maka silakan lakukan, sehingga saya dapat memverifikasi :)
Ini adalah kontes popularitas, jadi jadilah kreatif!
Mengikuti saran orang lain, saya memutuskan untuk menjadikan ini golf kode .
Jawaban:
Ruby ≥ 2.0, 101
Solusi ini dapat diuji di sini: https://ideone.com/C4PLdE
Perhatikan bahwa solusi yang ditautkan pada ideone lebih panjang satu karakter (
1.i
daripada1i
di baris 3). Alasannya adalah karena ideone hanya mendukung Ruby 1.9, yang tidak memungkinkan sintaksis pendek untuk literal kompleks.sumber
x,y,i=eval"[#{gets}]"
denganeval"x,y,i="+gets
untuk menyimpan beberapa karakter.eval
's aturan scoping:ruby -e 'eval"x=1";p x'
melemparkanNameError
untukx
dip x
. Itu berfungsi ketika menggunakan konstanta (eval"X,Y,I="+gets
), tetapi karena saya memodifikasii
, ini akan membutuhkan tambahani=I
untuk mencegah peringatan tentang mendefinisikan ulang konstanta. Tetapi mungkin kita berbicara tentang versi Ruby yang berbeda?x,y,i=eval"*a="+gets
. Terima kasih!Javascript ( ES6 )
145141127Sunting: Menghapus kebutuhan akan array terjemahan menggunakan metode dari solusi C edc65
Tidak Terkumpul / Berkomentar:
sumber
Jawa - 327
Dengan spasi putih:
Seperti biasa dengan Java, sekitar setengahnya hanya mem-parsing input dan membentuk output. Logikanya cukup mudah.
sumber
Javascript (E6) 175
Edit Fixed bug, mungkin di luar kisaran nilai pengembalian untuk d
139 Logika, 36 I / O
Dasar tidak diserang
Uji Tes di konsol javascript di Firefox. Lebih mudah untuk menguji fungsi F menghindari popup.
Keluaran
sumber
C 164
180 186Edit format input Tetap dan hapus strchr.
Edit array offset yang dihapus, hitung menggunakan bit
Tidak disatukan
sumber
C, 148
150151Tweak solusi @ edc65 untuk menggunakan pendekatan penyalahgunaan nilai ASCII saya.
Secara khusus:
d%8%5
memetakan karakter masingENWS
-0,1,2,3
masingc%23
berubahL
menjadi7
,M
menjadi8
danR
menjadi 13. Karenad
(variabel arah) selalu digunakan mod 4, ini secara efektif membuatL
add -1 mod 4,M
tambahkan 0 mod 4, danR
tambahkan 1 mod 4.d&1
adalah 1 untukNS
dan 0 untukEW
arah.d&2
adalah 2 untukWS
dan 0 untukNE
arah.~-(d&2)
adalah 1 untukWS
dan -1 untukNE
arah.c%2
adalah 1 untukM
dan 0 untukLR
.sumber
c%(2*(1-(d&2)))
Python 3 (dengan grafis turtle),
251199 bytePythonista yang bijak, mohon bersikap lembut, karena ini adalah upaya pertama saya untuk sebuah program yang ditulis dalam bahasa Anda.
Turtles on Mars!
Tantangan ini memetakan secara alami ke grafis gaya penyu logo, yang python memiliki impor, tentu saja.
Membaca input dari dua baris dari STDIN.
Keluaran:
Apa yang saya terutama sukai tentang program ini adalah sebenarnya menampilkan jalur rover. Menambahkan
exitonclick()
ke akhir program sehingga output grafis berlanjut hingga pengguna mengklik:Saya cukup yakin ini bisa bermain golf lebih signifikan - ada saran! Saya membuat CW ini, karena saya berharap masyarakat dapat bermain golf lagi.
Perubahan:
sumber
GolfScript,
116 98 88 8471 71Ini harus mendapatkan koordinat dan instruksi sebagai argumen dengan cara berikut:
1 2 'N' 'MRMLM'
. Argumen dibuat menjadi string dan didorong ke stack.Jika Anda ingin menguji ini secara daring, buka skrip web golf dan rekatkan titik koma yang diikuti dengan string dengan argumen (misalnya
;"1 2 'N' 'MRMLM'"
) sebelum kode ( di sini tautan dengan contoh).Contoh output:
Usaha Saya Sebelumnya
84 karakter:
88 karakter:
98 karakter:
116 karakter:
sumber
Delphi (819)
Ketika saya mulai itu bukan kode-golf . Akan diedit nanti.
Tidak dapat menemukan kompiler online.
Tidak disatukan
sumber
=
? Mengapa mereka dibutuhkan? Juga, nama-nama variabel tampak terlalu lama bagi sayaJavascript (353)
Ini adalah upaya nyata pertama saya di kode golf, tampaknya paling tidak berhasil!
sumber
var
itu.Python (263)
Pasti ada cara yang lebih elegan untuk melakukan ini juga, tidak perlu cabang setelah yang lain.
http://ideone.com/eD0FwD
Masukannya buruk, saya ingin melakukannya
split(',')
tetapi menemukan masalah casting antara int dan string. Idealnya saya juga ingin menambahkan posisi lama dengan posisi bergerak ... oh itu kode-golf sekarang. Oh well terserahlah, saya akan tinggalkan di sini, mungkin memberi inspirasi. Gagasan lain yang saya miliki menggunakan modulo 4 dari arah setelah memetakan bantalan awal ke indeks. Juga menggabungkan belokan dan memindahkan array ke satu karena tidak ada tombol yang bertabrakan.Meski begitu, memperpendek nama variabel dan menghapus spasi itu 263:
sumber
Python 2.7 -
197192 byteSaya sebenarnya sangat bangga dengan yang ini.
Penjelasan
Pertama, mari kita bersihkan kekacauan ini. Saya menggunakan titik koma alih-alih jeda baris di banyak tempat karena saya pikir itu membuat saya keren. Ini biasanya (ini masih 197 byte, itu belum ungolfed sama sekali). Ya, masih ada tanda titik koma, tetapi yang sebenarnya menyimpan byte.
Mari kita mulai!
Pertama kita mendefinisikan
q
sebagai string'NESW'
. Kami menggunakannya dua kali kemudian, danlen("q='NESW';qq") < len("'NESW''NESW'")
.Di sini kita membagi baris pertama dari inpupt pada setiap koma. Koord x kami disimpan di
x
, y diy
, dan huruf pertama dari arah kami did
.Kemudian kita hanya membuat ints coords. (Saya terkejut bahwa saya tidak bisa memikirkan cara yang lebih baik untuk mengubah dua string menjadi int. Saya mencoba
x,y=map(int,(x,y))
tetapi ternyata lebih lama.)Ini mengubah arah kami menjadi bilangan bulat. 0 di utara, 1 di timur, 2 di selatan dan 3 di barat.
Di sinilah kesenangan dimulai.
Ketika kita pergi ke utara, Y bertambah 1. Jadi kamus ini mengambil 0 dan memberikan string
'y+'
, untuk "tambah y". Ini memberikan hasil yang serupa untuk arah lain: y atau x diikuti oleh + atau -.Kami akan kembali ke sini.
Saya sudah pergi sedikit kebebasan untuk tidak mengasingkan yang satu ini.
Untuk setiap karakter pada input baris kedua, kami melakukan dua hal. Pertama, kita atur variabelnya
m
ke kamus apa pun dari sebelumnya memberi kita untuk arah kita saat ini. Tidak ada alasan kita membutuhkan ini terjadi setiap saat, tetapi itu lebih mudah daripada mewujudkannya ketika kita membutuhkannya.Berikutnya, kami membuat daftar dengan tiga elemen:
'd+'
,'d-'
, danm
. CATATAN EDITOR: Saya pikir saya bisa lolos dengan tidak menggunakan variabelm
sama sekali. Saya pikir saya bisa langsung memasukkannya kev[d]
dalam daftar. Itu akan menyelamatkan saya beberapa byte jika berhasil, tapi saya tidak ingin mengujinya sampai saya selesai penjelasan ini sehingga kalian semua bisa berurusan.(Yap, itu berhasil.)Kami mencari karakter input saat ini di string 'RL'.
str.find
mengembalikan -1 jika tidak menemukan karakter, jadi ini mengubah R ke 0, L ke 1 dan apa pun ke -1. Tentu saja, satu-satunya input lain yang dapat kita miliki adalah M, tetapi lebih sedikit karakter untuk membuatnya bekerja untuk semuanya.Kami menggunakan nomor itu sebagai indeks untuk daftar yang kami buat. Indeks daftar python dimulai pada akhirnya jika negatif, jadi kita mendapatkan elemen pertama jika inputnya adalah R, yang kedua jika itu adalah L, dan yang terakhir jika itu adalah M. Demi kenyamanan, saya akan berasumsi bahwa kita menghadap ke utara, tetapi prinsip serupa berlaku untuk arah lain.
Nilai-nilai yang mungkin kami kerjakan adalah
'd+'
untuk R,'d-'
untuk L dan'y+'
untuk M. Kemudian, kami lampirkan'=1;d=d%4'
di akhir masing-masing. Itu berarti kemungkinan nilai kami adalah ...Itu kode python yang valid! Itu kode python valid yang melakukan persis apa yang ingin kita lakukan untuk masing-masing karakter input! (Bagian ini
d=d%4
membuat arahan kita tetap waras. Lagi-lagi, tidak perlu melakukannya setiap saat, tapi itu kurang karakter.)Yang harus kita lakukan adalah mengeksekusi kode yang kita dapatkan untuk setiap karakter, mencetaknya (mengubah arah kita kembali ke string), dan kita selesai!
sumber
C - 350
Simpan sebagai
rover.c
:Menyusun:
Contoh dijalankan:
Ideone
Tidak Terkumpul:
sumber
Haskell - 412 byte
Diuji dengan:
sumber
f=many digit
BANYAK LOL - SUCH WOWread
berkali-kali membutuhkan lebih banyak karakter daripada menggunakan parsec ...Bash + coreutils, 159 byte
Input dibaca dari 2 baris STDIN.
Keluaran:
sumber
PowerShell,
170167166Tidak bisa bermain golf ini lebih jauh, yang agak memalukan. Tetapi semua peretasan yang jelas tidak benar-benar bekerja di sini.
Saya tidak bisa
iex
input karena a)N
,S
,E
danW
akan menjadi fungsi untuk itu untuk bekerja (atau saya akan perlu untuk awalan yang dengan$
dan b)1,2,N
harus menguraiN
dalam modus ekspresi, tidak mampu untuk menjalankan perintah .The
switch
tampaknya menjadi jalan terpendek melakukan gerakan. Tabel hash dengan blok skrip atau string tidak lebih pendek baik dan untuk setiap cara selain dariswitch
aku punya overhead dari loop eksplisit.Saya tidak bisa menyingkirkannya
IndexOf
karena pipa dengan?
lebih lama, masih.Saya juga tidak bisa menghilangkan tipe eksplisit dalam deklarasi awal karena saya memiliki tipe campuran di sana, jadi sederhana
|%{+$_}
tidak membantu dan setiap opsi lainnya lebih panjang.Terkadang saya benci penanganan input di PowerShell.
sumber
Python, 135
137138Menyalahgunakan nilai ASCII dari
L
,M
danR
untuk menghindari penggunaan pernyataan bersyarat.Cobalah di ideone .
sumber
Python 2.7,
170149Hal-hal yang saya ubah dari aslinya:
Alias raw_input, mengubah kamus v [d], yang seharusnya merupakan daftar, untuk beberapa pemilihan string, digunakan
%=
.Sunting: menggunakan tuple unpacking dan eval (raw_input ()) == input () untuk menyimpan 21 karakter.
Sangat dipinjam dari @undergroundmonorail, tetapi dengan banyak perbaikan.
sumber
Bash / SHELF ,
243235" SHE akan pergi LF " adalah perpustakaan golf untuk Bash yang menyediakan beberapa alias berguna. Ini adalah jawaban yang valid karena perpustakaan ada dan ada di GitHub sebelum tantangan diposting.
Maaf, saya tidak bisa menjalankan ini pada ideone.
Bagaimana cara menjalankannya
Ini mengambil posisi awal (dipisahkan dengan koma seperti yang ditentukan; ini menambahkan banyak karakter ke kode) sebagai argumen pertama, dan instruksi pada input standar.
Output sampel
Kode
Penjelasan
d
adalah untuk perbandingan; ia mengembalikan 0 jika dua argumennya sama dan 1 sebaliknya, maka ia dapat memiliki perintah lain yang dirangkai dengannya&&
dan||
.y
sepertitr
(tetapi dilakukan melaluised
).Y
sepertised 's/.../.../g'
untuk dua argumennya.P
adalahecho -e -n
;p
hanyaecho -e
.Bit selanjutnya sangat jelek, dengan sekitar 145 karakter pada satu baris. Jika perintah saat ini adalah M, ubah koma dalam $ o menjadi spasi, konversikan ke array dan simpan ke $ z. Kemudian, lakukan sakelar ... blok kasus untuk elemen terakhir $ z (arah rover menunjuk. Ubah koordinat yang sesuai, lalu konversikan $ z kembali menjadi string yang dipisahkan koma dan simpan ke $ o.
sumber
shelf.sh
menjadi bagian dari solusi? Seperti Anda harusrequire
paket tertentu di Ruby atauimport
mereka di Python juga jika Anda membutuhkannya.import
PYG ketika menulis program Python dengannya, atau Rebmu (AFAIK) ketika menulis program Rebol dengannyaHaskell, 291
Saya tidak yakin seberapa fleksibel format string input dan output, jadi saya memastikan itu tampak persis seperti contohnya (minus petunjuknya, tentu saja), tetapi itu menambahkan banyak karakter tambahan. Tautan ideone
sumber
PHP - 224
Yah, saya mencobanya.
Masukan dalam STDIN, mis:
sumber
Python3 (288)
Implementasi menggunakan penggunaan terner ifs yang berat.
Menghilangkan omelan input yang jelas, memberikan nilai string intrinsik string arah mungkin telah menguntungkan ukuran skrip. Namun, pendekatan di sini sangat fungsional (jadi saya percaya)
sumber
Python 3 (143)
http://ideone.com/wYvt7J
Kami menggunakan tipe bilangan kompleks bawaan Python untuk menyimpan pasangan koordinat. Arah dihitung dengan mengambil unit imajiner
1j
ke kekuatand
, yang menyimpan arah mod 4. Rotasi dilakukan dengan menambah atau mengurangid
. Ekspresi'ML'.find(c)
memberikan jumlah yang ingin kita ubahd
:1
untukL
,0
untukM
, dan-1
(default untuk tidak ditemukan) untukR
.Python tidak memiliki cara pendek untuk mengubah bilangan kompleks menjadi tuple, jadi kita harus melakukan panggilan mahal ke
.real
dan.imag
.sumber