Bahasa pemrograman dua dimensi sering memiliki perintah cermin seperti /
dan \
untuk mengarahkan ulang pointer instruksi di grid:
>>>>\
v
v
<<<</
Dalam tantangan ini, Anda diberi arah masuk dan cermin dan Anda perlu menentukan arah keluar.
Aturan
Arah masuk akan diberikan sebagai salah satu karakter NESW
dan cermin akan diberikan sebagai salah satu /
atau \
. Anda dapat menerima ini dalam urutan apa pun. Anda harus menggunakan huruf besar.
Anda dapat mengambil input dalam format apa pun yang nyaman, termasuk string dua karakter, string menggunakan pemisah antara karakter, sepasang karakter dalam daftar, atau bahkan sepasang string tunggal. Jika Anda menggunakan string dengan pemisah, pemisah tidak dapat menggunakan karakter apa pun NWSE\/
.
Output harus berupa karakter dari NESW
atau string karakter tunggal.
Anda dapat menulis sebuah program atau fungsi dan menggunakan salah satu metode standar kami untuk menerima input dan memberikan output.
Anda dapat menggunakan bahasa pemrograman apa pun , tetapi perhatikan bahwa celah ini dilarang secara default.
Ini adalah kode-golf , sehingga jawaban terpendek yang valid - diukur dalam byte - menang.
Uji Kasus
Hanya ada 8 kemungkinan input yang perlu Anda tangani, jadi tidak ada alasan untuk tidak menguji kode Anda pada semuanya:
N / --> W
N \ --> E
E / --> S
E \ --> N
S / --> E
S \ --> W
W / --> N
W \ --> S
sumber
\
. Jika jawaban Anda adalah penyerahan fungsi yang mengambil string, maka tentu saja Anda perlu\\
dalam kode sumber untuk menyebutnya dengan benar, tetapi jika Anda membaca input Anda dari input standar, misalnya, maka itu harus tunggal\
. Dengan kata lain, jika Anda memanggil fungsi string-length masing-masing bahasa Anda pada input, hasilnya harus selalu sama, terlepas dari apakah input berisi/
atau\
.readline()
dapat mengatasinya.Jawaban:
Python,
4038 byte-2 byte terima kasih kepada @MitchSchwartz
(ord(d)+ord(m))%8
->ord(d)+ord(m)&7
pencarian jawaban secara sederhana dalam daftar (string AKA) yang diindeks oleh mod terkecil dari jumlah ordinal yang berfungsi.
Kasus uji ada di ideone
sumber
%8
, dan melakukan indeks. Lalu saya melihat Anda memposting solusi yang sama lebih dari satu jam yang lalu. Hah. Punya +1.Python 2, 40 byte
Sp3000 disimpan satu byte (
.index
→.find
).Penjelasan
Kami ingin memetakan arah seperti ini:
Kita dapat menetapkan kode 2-arah arah, dan melihat kedua membalik sebagai XOR-ing bit pertama dan kedua:
Pemetaan antara string bit dan arah terjadi menggunakan string
k
. Sekarang kita hanya perlu memetakan karakter cermin'/'
dan'\\'
ke nilai1
dan2
. Karena'/' < '\\'
, kita bisa menggunakan(m>'/')+1
sebagai formula secara naif . Tapi tunggu! Leksikografis,dan kami telah
'NWES'
ditugaskan dengan baikk
! Jadi kita bisa menggunakannya(m>k)+1
.sumber
CJam, 14 byte
(@MartinEnder mengirim jawaban Python saya )
Bagaimana?
Tes ada di aditsu
sumber
Javascript (ES6),
50414037 byteDisimpan 3 byte lebih banyak dengan menggunakan perbandingan, berkat jawaban Lynn
Pemakaian
sumber
MATL ,
1917 byteCobalah online! Atau verifikasi delapan kasus .
Penjelasan
sumber
Pyth,
171615 byteTerima kasih kepada @Jakube dan @Maltysen untuk -1 byte masing-masing
Sebuah program yang mengambil input dari dua string kutipan yang dipisahkan baris-baru, pertama arah dan kemudian cermin, dan mencetak hasilnya.
Ini adalah port dari jawaban Python @ Lynn .
Cobalah online
Bagaimana itu bekerja
sumber
<QE
dengan>E
.05AB1E , 14 byte
Cobalah online!
sumber
Jelly ,
14 1312 byte(port jawaban Python saya )
-1 byte terima kasih kepada @MartinEnder (tambahkan spasi di akhir string dan hapus kebutuhan modulo 8)
-1 byte terima kasih kepada @LuisMendo (gunakan argumen string tunggal daripada dua)
Bagaimana?
Uji di TryItOnline
sumber
Java 7,
717068 byteTerlalu buruk
charAt
danindexOf
memakan banyak byte ..Tidak dikumpulkan & semua uji kasus:
Coba di sini.
Keluaran:
sumber
Python,
636159 byteCukup mudah. Pasti bisa bermain golf lebih banyak. Memutuskan apakah akan menambahkan 1 atau -1 ke indeks input dalam
'NESW'
.Ini adalah ungkapan lambda; untuk menggunakannya, awali dengan
f=
.Ide itu!
sumber
Java 8,
625856 byteProgram tes tidak digabungkan
sumber
PowerShell v2 +, 34 byte
Mengambil input sebagai dua
char
s eksplisit , output achar
.Ini berfungsi sebagai berikut: Jika kita mengurutkan output, kita ingin
S
/
entah bagaimana sama denganN
\
,W
/
untuk samaE
\
, dll. Atau, setidaknya, menghasilkan angka yang "cukup dekat" namun masih berbeda. Jika kita melihat nilai ASCII, kita mendapatkan tabel seperti di bawah ini:Menjalankan brute-forcer cepat pada kolom penjumlahan (berasal dari menjumlahkan poin kode ASCII dari input) menunjukkan bahwa jika kita mengambil modulo penjumlahan
8
, kita mendapatkan yang berikut2 2 | 6 1 | 3 4 | 5 7
. Itu dibuktikan dalam string"xNESSWNW"
, sepertiE
pada indeks2
,N
di6
dan1
, dan seterusnya.Jadi, kita hanya perlu menjumlahkan input (secara implisit berpindah dari
char
keint32
sepanjang jalan), mengambil itu%8
, dan menggunakannya untuk mengindeks ke dalam string kita.Uji Kasus
sumber
Batch, 111 byte
Menerima mis.
W/
Sebagai parameter baris perintah string dua karakter. Itu\
dan/
membuat looping canggung; itu akan mengambil 124 byte.sumber
\r
?Oktaf, 30 byte
Menggunakan urutan argumen yang sama dengan Jonathan Allan.
Mengambil input sebagai string dua karakter
'W\'
.Cobalah online .
sumber
'NESSWNW 'is)
(lihat semua kasus uji ).i
aku sinput
,s
adalahsum
, dan)
pengindeksan, yang bersifat modular. Saya menambahkan spasi dalam string sehingga modulo adalah 8C,
44,35,34 byteDibutuhkan dua karakter sebagai dua variabel. Dibutuhkan huruf besar dan kecil. Ini menggunakan banyak manipulasi bit. Fragmen
a&a/2
menghasilkan nilai yang memiliki nilai unik untuk dua bit yang lebih rendah,&3
memotong semua bit yang lebih tinggi. Ini digunakan sebagai indeks ke string "NWES" untuk\
cermin. Untungnya, dua bit lebih rendah dari karakter ASCII\
dan/
masing-masing adalah 00 dan 11, yang sempurna untuk XOR dengan indeks yang disebutkan di atas untuk mendapatkan arah yang benar untuk/
mirror.sumber
return"NWES"[...]
(hilangkan spasi).CJam , 17 byte
Input dipisahkan oleh ruang.
Cobalah online!(Sebagai rangkaian uji yang dipisahkan dengan linefeed.)
Ini adalah solusi yang saya temukan sebelum memposting tantangan. Tidak sesingkat pengindeksan Jonathan, tapi saya pikir pendekatan ini cukup menarik (dan novel).
Penjelasan
Tujuannya adalah menggunakan transliterasi (yaitu menggunakan pemetaan karakter-ke-karakter) untuk mengganti karakter input dengan karakter output. Untuk melakukan ini, kita perlu memilih peta yang benar berdasarkan apakah cermin itu
/
atau tidak\
. Kami akan memetakan dariSWEN
daftar ke daftar lain yang akan kami pilih dengan syarat. Jika daftar inputnya adalahSWEN
, dua peta output harus sebagai berikut:Perhatikan bahwa ini adalah dalam urutan dan urutan-terbalik (itulah sebabnya kami memilih urutan yang tampaknya acak
SWEN
sebagai set input). Kita dapat membuat ini dengan mengurutkan daftar input dan membalikkan hasilnya jika inputnya ada\
, tetapi ada cara yang lebih baik:sumber
SED
48(42 +1 untuk -r) 43Disimpan 5 berkat Martin Ender ♦
Mengambil input sebagai string dua karakter.
sumber
Mathematica, 98 byte
Fungsi anonim. Mengambil dua string sebagai input dan mengembalikan string sebagai output.
sumber
C, 81 byte
Pemakaian
Keluaran:
sumber
Pyth, 13 byte
Suite uji
Jumlahkan poin kode, indeks modular, string terkompresi.
sumber
TI-Basic, 40 byte
Hardcodes input. Membosankan, tapi cara terpendek.
sumber