Jelly , 37 34 byte
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Cobalah online!
Mengambil input huruf kecil.
Terima kasih kepada Jonathan Allan .
-1 karena ternyata ini valid sebagai fungsi :)
Terima kasih kepada Jonathan Allan (dan Dennis), sekarang Anda dapat menghapus €
. Sayangnya, itu tidak akan bersaing di sini.
Penjelasan algoritma terperinci :
Kami biasanya mulai menjelaskan dari bawah (utama) tautan, turun, tapi di sini saya merasa lebih tepat untuk menjelaskan dari atas.
Pertama, kami hanya memuat daftar [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Ini terlihat seperti angka acak ya? Nah, ini sebenarnya adalah daftar angka basis-5-terkompresi, jadi kami basis-5-dekompreskan. Sekarang sepertinya [[1], [1, 1, 2], [1, 2], [2, 1, 2], [2], [2, 3, 2], [3, 2], [3, 3, 2], [3], [3, 3, 4], [3, 4], [4, 3, 4], [4], [4, 1, 4], [1, 4], [1, 1, 4]]
. Masih tampak acak, tapi ini sebenarnya NESW
daftar enam belas koordinat yang dipetakan, jadi kami tidak jauh dari menyelesaikan daftar (Jelly adalah indeks 1). Melakukan pemetaan akhir, kita dapatkan [['N'], ['N', 'N', 'E'], ['N', 'E'], ['E', 'N', 'E'], ['E'], ['E', 'S', 'E'], ['S', 'E'], ['S', 'S', 'E'], ['S'], ['S', 'S', 'W'], ['S', 'W'], ['W', 'S', 'W'], ['W'], ['W', 'N', 'W'], ['N', 'W'], ['N', 'N', 'W']]
, yang merupakan daftar lengkap yang kita inginkan (string Jelly ada di formulir [char1, char2, char3, ...]
.)
Karena kami sekarang telah membangun daftar koordinat, kami bekerja dengannya. Tautan utama ikut berperan. Pertama, kita memuat daftar yang telah kita buat, dan kemudian mengambil indeks bahwa koordinat input (sebagai argumen baris perintah) berada. Kemudian, kita memasangkan pendahulunya dan penggantinya ke dalam daftar, dan kita menggunakannya sebagai modular indeks ke dalam daftar koordinat yang sama untuk mengambil koordinat ke kiri dan kanan input masing-masing. Anda sekarang berpikir kita akhirnya selesai, tetapi sebenarnya ada satu hal lagi, pemisah. Ini valid sebagai fungsi, karena 1) Anda dapat memanggilnya menggunakan <integer>Ŀ
2) Anda juga diizinkan untuk mendefinisikan fungsi lain (seperti mengimpor modul). Sekarang, kita sudah selesai. Sebagai program lengkap, ini tidak memiliki pemisah, tapi tidak apa-apa, karena berfungsi sebagai fungsi.
Penjelasan kode tautan-per-tautan :
¢iµ’,‘ị¢K Main link. Arguments: z = cmd0
¢ Run the helper link niladically (i.e. load the coordinate list).
i Find the index of z in the list.
µ Start a new monadic chain. Arguments: z = list_index.
’ Decrement z.
‘ Increment z.
, Pair x and y into [x, y].
¢ Run the helper link niladically.
ị Take the elements of y at the indices in x.
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦» Helper link. Arguments: [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
“¢ ¬9£Hæz¥{çb¤S®!‘ Generate the integer list (the argument).
“¡&¦» Literal "newsy".
ṃ€ Base-length(y)-decompress every integer in x, then index into y.
Mathematica,
118112 byteTerima kasih kepada Martin Ender karena telah menghemat 6 byte!
Fungsi yang tidak disebutkan namanya (sebuah asosiasi, benar-benar) yang mengambil string sebagai input dan mengembalikan pasangan string yang dipesan. Pada dasarnya hanya hardcodes jawabannya.
sumber
Python 2,
116115103 byte-12 byte terima kasih kepada Neil
Cobalah secara Online!
sumber
d[n-15]
untuk menghindari kondisi tersebut.JavaScript ES6,
106102 byteCobalah online!
sumber
let
sebagai gantinyaconst
.05AB1E ,
4443 byte (Terima kasih kepada Adnan)Cobalah online!
Keluaran exmaple:
Versi yang mendorong
N0NNE0NE0ENE0E0ESE0SE0SSE0S0SSW0SW0WSW0W0WNW0NW0NNW
sebagai gantinya:Juga 44-byte, ada 0 alasan untuk refactor saya dan ada 0 alasan untuk membagi pada 4's.
sumber
4
s?•17¿$Mn]6VAÆ—Dªd—•5B4LJ"NSWE"‡0¡©skD<®ès>®è)
ternyata tidak, tidak ada alasan sama sekali. Menggunakan 0 sebagai pembatas adalah rasio kompresi yang sama, karena tidak menurunkan panjang angka dalam konversi basis-5 ke basis-214. Bisakah sumpah melakukannya seperti itu menyelamatkan saya satu byte sekalipun.„ €Ã¦•174SÝ©l2ÎG¦˜fÐ98•5BSè#ÐIk©<ès®>è)
untuk menghemat 4 byte.Javascript -
234154156152120106102 byteHanya kedua kalinya saya melakukan kode golf !!
Revisi terbaru:
Terima kasih kepada @ fəˈnɛtɪk untuk trik variabel yang rapi ini!
Sebelum Itu: Oke revisi terbaru: Input adalah string dan output adalah string yang ada dalam aturan, jadi saya membuatnya menjadi sebuah fungsi, dan dengan pengurangan saya menjadi lebih kecil (juga fungsi anonim, yang sekarang berarti milik saya memiliki entah bagaimana menyatu dengan jawaban js lain oops! Dia (powelles) memilikinya dulu !!):
Dapat digunakan oleh:
Dibuat kembali (tidak berfungsi) dengan Output - 120:
Perhatikan bahwa saya membuat kesalahan pada awalnya, memiliki sama dengan a.length, bukan a.length-1 untuk indeks pertama. Terima kasih @Neil untuk menunjukkan bahwa itu tidak berfungsi untuk NNW.
Catatan 2: Terima kasih kepada @Neil dan @ETHProductions karena membantu saya mempersingkat kodenya!
Asli:
sumber
NNW
.,
, i = a.indexOf (p), [a [i-1 & 15], a [i + 1 & 15]])Batch, 196 byte
Putar melalui masing-masing pasangan titik kompas, mencetak satu ketika yang lain cocok. Misalnya, untuk parameter
ENE
, ketika loop mencapaiENE
, variabels
berisiNE
yang dicetak, kemudian ketika loop majuE
, variabels
berisiENE
danE
dicetak. Satu pasang kemudian perlu casing khusus untuk menghindari titik kompas dicetak dalam urutan yang salah.sumber
Jelly ,
4038 byteCobalah online! (menambahkan footer untuk menunjukkan output adalah daftar dua item) ... atau lihat semua case .
(Aku tidak yakin mengapa
1323DRẋ4
menggantikannya saat“¢)`)’ḃ3R
ini tidak berhasil.)Bagaimana?
sumber
Haskell ,
10099 byteCobalah online! Panggilan
(s#) "N"
kembali("NNW","NNE")
.s
adalah pengulangan tak terhingga dari daftar arah, jadi kami tidak perlu menambahkan tambahanN
danNNE
menyukai beberapa jawaban lain untuk menangani tepi daftar dengan benar.Terima kasih kepada @nimi karena telah menghemat satu byte!
sumber
(a:b:c:r)!x| ... =r!x;(s!)
.SOGL , 33 byte
Bagian pertama
≠┐πΜ]ρ½d⁹V¹-┐*╔╤¹Ψæ;¶‘
adalah string terkompresidikompresi dengan kamus khusus dengan
ENSW
Sisa program:
sumber
bytes
dalam judul memiliki tautan ke codepagePHP, 122 byte
sumber
$argv[1]
dengan$argn
dan menggunakan opsi -R. jika Anda menggunakan fungsi yang tidak digunakan lagi jika bisa diakhiri denganereg("([^_]+)_{$argn}(_[^_]+)",N_NNE_NE_ENE_E_ESE_SE_SSE_S_SSW_SW_WSW_W_WNW_NW_NNW_N_NNE,$t);echo$t[1].$t[2];
Ruby - 94 Bytes
Riff pada jawaban Blue Okiris , hanya untuk mengambil keuntungan dari beberapa tulisan singkat Ruby yang bagus (
%w[]
sintaksis danp
khususnya):sumber
Japt ,
6652 byteDisimpan 14 byte berkat produk @ETH
Cobalah online!
Penjelasan:
sumber
'
dalamq'o
dan itu akan bekerja persis sama :-)[J1]£VgX+VaU
untuk menghemat beberapa byteCJam, 41
Cobalah online
sumber
PHP, 115 Bytes
-2 Bytes menggunakan fungsi usang
split
bukanexplode
PHP, 128 Bytes
PHP, 134 Bytes
sumber
PHP,
110109 byteDisimpan 1 byte berkat Jörg Hülsermann .
sumber
preg_replace
denganpreg_filter
menyimpan 1 bytePython 3 -
112107 byteSaya mendasarkan ini pada jawaban Javascript saya:
Dibuat ulang:
Gunakan seperti kata
Asli:
sumber
MATL , 43 byte
Cobalah online!
Penjelasan
sumber
c,
222216211 byteCobalah online
sumber
Javascript (ES6), 189 byte
Hanya mengambil input, mencarinya, dan mengembalikannya.
sumber
JavaScript (ES6), 94 byte
Mengharapkan string dalam huruf besar seperti
"ENE"
. Mengembalikan string yang dipisahkan koma seperti"NE,E"
.Bagaimana itu bekerja
Ekspresi
0+s+0
dipaksa ke string ketikasplit()
dipanggil. Misalnya, jika inputnya adalah"ENE"
, string akan dipecah menjadi"0ENE0"
:Ini mengarah ke array berikut:
Sekali lagi, array ini dipaksa ke string ketika
exec()
dipanggil. Jadi, ekspresi reguler sebenarnya diterapkan pada:Kami mencari karakter non-numerik berturut-turut (
\D+
) diikuti oleh koma, diikuti oleh karakter non-numerik berturut-turut. Ini mengembalikan array[ "NE,E" ]
. Kita bisa berhenti di sana dan mengembalikannya. Tetapi tantangannya adalah meminta string yang dibatasi atau array dua elemen. Jadi, kami mengekstrak string dengan[0]
.Demo
Tampilkan cuplikan kode
sumber
Pyth , 39 byte:
dimana
❤
merupakan surat yang tidak patut.Cobalah online!
Hexdump:
sumber