Jika seseorang menghadap ke utara di titik A di kisi ini ingin arah mengikuti jalur hijau (karena mereka hanya bisa mengikuti garis kisi) ke titik B Anda mungkin memberi tahu mereka:
Pergi North, North, West, East, East, South, East, East
.
atau setara
Pergi Forward, Forward, Left, Back, Forward, Right, Left, Forward
.
(Di mana perintah Kanan , Kiri , atau Kembali secara implisit berarti berbalik ke arah itu, lalu maju.)
Tulis fungsi dengan satu argumen yang menerjemahkan antara arah absolut dan relatif ini di sepanjang jalur yang sama , bukan hanya ke titik yang sama. Anggaplah orang yang diarahkan selalu mulai menghadap ke utara.
Jika argumennya adalah serangkaian huruf NSEW
, kembalikan arah relatif yang setara.
mis. f("NNWEESEE")
mengembalikan string FFLBFRLF
.
Jika argumennya adalah serangkaian huruf FBLR
, kembalikan arah absolut yang setara.
mis. f("FFLBFRLF")
mengembalikan string NNWEESEE
.
String kosong menghasilkan dirinya sendiri. Asumsikan tidak ada kasus input lainnya.
Jika bahasa Anda tidak memiliki fungsi atau string gunakan apa pun yang tampaknya paling sesuai.
Kode terpendek dalam byte menang.
R
sama denganE
di awal.Jawaban:
CJam,
575349Versi sebelumnya
Contoh:
Keluaran:
Bagaimana itu bekerja
sumber
C ++,
9997Berikut ini diformat sebagai ekspresi lambda. Dibutuhkan satu
char*
argumen dan menimpanya.Bagi mereka yang tidak terbiasa dengan fitur ini (seperti saya 1 jam yang lalu), gunakan sebagai berikut:
Beberapa penjelasan:
flag ? (x = y) : (x += z)
, pasangan kedua tanda kurung diperlukan dalam C. Jadi saya menggunakan C ++!*s*9%37&4
menguji byte pertama; hasilnya 4 jika salahNESW
; 0 sebaliknya*s%11/3
mengubah byteNESW
menjadi 0, 1, 2, 3*s%73%10
mengubah byteFRBL
ke 0, 9, 6, 3 (yaitu 0, 1, 2, 3 modulo 4)d
variabel. Saya mencoba menata ulang kode untuk menghilangkannya sepenuhnya, tetapi tampaknya mustahil ...sumber
JavaScript (E6) 84
86 88 92 104Sunting: menggunakan & alih-alih%, prioritas operator yang berbeda (kurang kurung) dan berfungsi lebih baik dengan angka negatif
Sunting2: | bukannya +, op didahulukan lagi, -2. Terima kasih DocMax
Edit3: pemahaman array adalah 2 karakter lebih pendek dari peta (), untuk string
Uji di konsol FireFox / FireBug
Keluaran
sumber
&& o
pada akhirnya?array && value
Evalute tovalue
sebagai array yang dievaluasi ketruthy
4+(n-d&3)
dengan4|n-d&3
dan menyimpan 2 karakter.APL, 72
Jika konfigurasi juru bahasa dapat diubah tanpa penalti, maka skornya adalah 66 , dengan mengubah
⎕IO
ke0
:sumber
Python,
171139Tidak ada cara yang sesingkat solusi lain, tapi saya kira itu seharusnya relatif baik untuk apa yang dapat dilakukan dengan Python:
Versi diperluas untuk keterbacaan yang sedikit lebih baik:
sumber
Pergi, 201
Versi yang dapat dibaca:
sumber
GNU sed, 356 bytes
Tantangannya menuntut transformasi sederhana pada aliran karakter.
sed
, editor aliran adalah pilihan bahasa yang jelas ;-)(Komentar dan spasi dilucuti untuk keperluan perhitungan skor golf)
Keluaran:
Penjelasan:
Idenya di sini adalah bahwa ketika kita mengubah kerangka acuan, selalu ada pemetaan langsung antara
{N, E, S, W}
dan{F, R, B, L}
.Dalam kasus absolut ke relatif, kami bekerja melalui string. Untuk setiap karakter kita peta
{N, E, S, W}
untuk{F, R, B, L}
, kemudian memutar sisa[NESW]
karakter sesuai dengan karakter kita hanya dipetakan, kemudian pindah ke karakter berikutnya.Untuk kasus relatif ke absolut, kami melakukan sebaliknya. Kami bekerja mundur melalui string, memutar semua
[NESW]
karakter berikut sesuai dengan karakter di depan. Kemudian kita memetakan bahwa karakter{N, E, S, W}
ke{F, R, B, L}
, sampai kita ke awal string.sumber
Haskell, 224
Ini menetapkan angka rotasi ke arah relatif, dan nomor orientasi ke arah absolut, kemudian menemukan rotasi antara orientasi berurutan atau orientasi setelah rotasi berurutan. The
i
Fungsi menemukan indeks dalam dua legenda.sumber