Pengantar:
Meskipun saya awalnya memiliki lagu Belanda di kepala saya, di mana liriknya adalah: " Doe 'n stapje naar voren, en' n stapje terug " (yang diterjemahkan menjadi " Ambil sedikit langkah maju, dan sedikit mundur "), ketika Saya mencari lirik lengkap, saya menyadari mereka hanya bolak-balik, dan tidak pernah menyamping.
Jadi, alih-alih sekarang saya menggunakan lirik dari Mr C The Slide Man alias DJ Casper - Cha-Cha Slide untuk tantangan ini.
Jika kita mengabaikan yang lainnya dan hanya melihat kata "kiri", "kanan", "kembali", dan "hop" (saya menghitung "hop" ke depan) termasuk jumlah yang disebutkan, lagu lengkap akan memiliki daftar berikut ( Saya menggunakan singkatan LRBH di sini):
LBHRLLBHRLBHHRRLLLRLBHHHHRRLLLBHHHHHRLRLRLHRLLBHHLRLBHH
Di sini lirik lagu lengkap dalam cuplikan kode JavaScript yang dapat disembunyikan (untuk menghemat ruang), tempat gerakan dan jumlahnya dikelilingi dengan tanda kurung yang diblokir:
Tantangan:
Sekarang ke tantangan itu sendiri. Kami mengambil satu, dua, atau tiga input † . Salah satunya adalah daftar bilangan bulat indeks (jadi non-negatif untuk 0-diindeks; atau positif untuk 1-diindeks). (Input lain bersifat opsional dan dijelaskan dalam aturan tantangan.)
Setiap test case akan dimulai pada suatu posisi {x=0, y=0}
.
Sekarang gunakan daftar lirik gerakan dan hapus semua gerakan pada indeks daftar masukan yang diberikan. Kemudian 'berjalan' di atas gerakan (hingga indeks terbesar dari array-input) dan output posisi Anda akan berakhir di.
Bergerak akan mengubah koordinat sebagai berikut:
- R
: x+1
- L
: x-1
- H
: y+1
- B
:y-1
Aturan tantangan:
- Daftar bergerak dapat diakses dengan cara apa pun yang Anda inginkan. †: Dapat menjadi input tambahan; bisa dalam file terpisah di disk yang akan Anda baca; bisa dalam variabel tingkat kelas yang Anda akses. Ini akan harus dalam bentuk
L
,R
,B
danH
meskipun (dapat berupa string atau karakter-list / array), sehingga Anda tidak bisa menyimpan bergerak-daftar sebagai1
s dan-1
s atau bilangan bulat. - Daftar-pindah yang diberikan di atas adalah kode-keras dan akan selalu sama. (Itulah mengapa tidak apa-apa untuk menempatkannya sebagai bidang tingkat kelas alih-alih menganggapnya sebagai input jika ini membantu byte-count jawaban Anda.)
- Input-list dapat berupa 0-diindeks atau 1-diindeks (terserah Anda)
- Kami hanya 'menapaki' pergerakan ke atas dan mengecualikan indeks terbesar dari daftar.
- †: Anda juga diperbolehkan mengambil item terakhir ini sebagai input integer yang terpisah, alih-alih item terakhir dari array-input.
- Output dari koordinat x dan y yang kita dapatkan bisa dalam format yang wajar (integer-array yang berisi dua item, string yang dibatasi, dicetak ke STDOUT pada dua baris yang terpisah, dll.)
- Anda dapat menganggap daftar input diurutkan dari terendah ke tertinggi (atau tertinggi ke terendah jika itu yang Anda inginkan, dalam hal ini item pertama adalah ukuran awal dari daftar bergerak - jika tidak diambil sebagai input yang terpisah). Dan itu juga tidak akan berisi indeks yang digandakan.
- Jika indeks terbesar dari daftar input lebih besar dari daftar langkah di atas (55 langkah ada di daftar bergerak di atas), kami membungkus kembali ke awal daftar lagi (sebanyak yang diperlukan tergantung pada indeks terbesar dari input).
- Anda diizinkan untuk menghasilkan
y,x
bukanx,y
, tetapi harap tentukan ini dalam jawaban Anda jika Anda melakukannya.
Contoh:
Memasukkan: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
Di sini gerakan dan (indeks-0) indeks di atas satu sama lain:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
L, B, H, R, L, L, B, H, R, L, B, H, H, R, R, L, L, L, R, L, B, H, H, H, H, R, R, L, L, L, B, H, H, H, H, H, R, L, R, L, R, L, H, R, L, L, B, H, H, L, R, L, B, H, H, L, B, H, R, L, L, B, H, R, L
Menghapus indeks dari daftar input, kita akan memiliki sisa daftar berikut:
1, 2, 3, 5, 6, 7, 9,11,12,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,35,36,37,38,39,40,41,45,46,47,48,49,51,52,54,55,57,58,61,62,63
B, H, R, L, B, H, L, H, H, L, L, L, R, L, B, H, H, H, H, R, R, L, L, B, H, H, H, H, R, L, R, L, R, L, L, B, H, H, L, L, B, H, L, H, R, B, H, R
Sekarang jika kita berjalan dari posisi {0, 0}
melewati gerakan yang tersisa, kita akan memiliki koordinat baru berikut setelah setiap gerakan:
{0,0};B,{0,-1};H,{0,0};R,{1,0};L,{0,0};B,{0,-1};H,{0,0};L,{-1,0};H,{-1,1};H,{-1,2};L,{-2,2};L,{-3,2};L,{-4,2};R,{-3,2};L,{-4,2};B,{-4,1};H,{-4,2};H,{-4,3};H,{-4,3};H,{-4,5};R,{-3,5};R,{-2,5};L,{-3,5};L,{-4,5};B,{-4,4};H,{-4,5};H,{-4,6};H,{-4,7};H,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};L,{-5,8};B,{-5,7};H,{-5,8};H,{-5,9};L,{-6,9};L,{-7,9};B,{-7,8};H,{-7,9};L,{-8,9};H,{-8,10};R,{-7,10};B,{-7,9};H,{-7,10};R,{-6,10}
Jadi hasil akhirnya adalah: {-6, 10}
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
0-indexed input: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
1-indexed input: [1,5,9,11,14,15,28,35,43,44,45,51,54,57,60,61,65]
Output: {-6, 10}
0-indexed input: [55] (Note: There are 55 moves in the unmodified list)
1-indexed input: [56] (Note: There are 55 moves in the unmodified list)
Output: {-6, 11}
0-indexed input: [0,1,4,5,6,9,10,15,16,17,19,20,27,29,30,37,38,39,41,44,45,46,49,51,52]
1-indexed input: [1,2,5,6,7,10,11,16,17,18,20,21,28,30,31,38,39,40,42,45,46,47,50,52,53]
Output: {10, 16}
0-indexed input: [2,3,7,8,11,12,13,14,18,21,22,23,24,25,26,31,32,33,34,35,36,38,40,42,43,47,48,50,53]
1-indexed input: [3,4,8,9,12,13,14,15,19,22,23,24,25,26,27,32,33,34,35,36,37,39,41,43,44,48,49,51,54]
Output: {-18, -7}
0-indexed input: [0]
1-indexed input: [1]
Output: {0, 0}
0-indexed input: [4,6,7,11,12,13,15,17,20,28,31,36,40,51,59,66,73,74,80,89,92,112,113,114,116,120,122,125,129,134,136,140,145,156,161,162,165,169,171,175,176,178,187,191,200]
1-indexed input: [5,7,8,12,13,14,16,18,21,29,32,37,41,52,60,67,74,75,81,90,93,113,114,115,117,121,123,126,130,135,137,141,146,157,162,163,166,170,172,176,177,179,188,192,201]
Output: {-17, 37}
0-indexed input: [25,50,75,100,125,150,175,200,225,250]
1-indexed input: [26,51,76,101,126,151,176,201,226,251]
Output: {-28, 49}
sumber
Jawaban:
05AB1E ,
1512 byteDisimpan 3 byte berkat Erik the Outgolfer
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
Æ
. Cara cerdas untuk hanya menghitung semua gerakan dan gunakanÆ
untuk menghitung perbedaan untukRL
danBH
pasangan.Æ
sudah ada selamanya, bukan? Saya berasumsi begitu, mengingat saya tidak tahu tentang itu. Sepertinya perintah yang saya pikir "baru" sudah ada sejak awal, tapi saya tidak pernah tahu bagaimana menggunakannya lol. Oh, +1Ruby ,
98 ... 5855 byteCobalah online!
Penjelasan:
Trik utamanya adalah menggunakan bilangan kompleks untuk mewakili gerakan: 'B' adalah -i, 'H' adalah + i, 'L' adalah -1 dan 'R' adalah +1. Jika kita mengonversi semua gerakan menjadi bilangan kompleks, maka dengan jumlah tunggal kita mendapatkan hasil yang tepat.
Saya mencoba berbagai cara, tetapi kemudian saya menemukan keajaiban nomor 19: kita tidak perlu bermain-main dengan pencocokan regex karena:
Jadi, kumpulkan semuanya, jumlahkan, balikkan tanda itu, dan kita sudah selesai.
Terima kasih Jakob untuk -3 byte
sumber
(m*c+m)[c]
denganm[c%55]
.JavaScript (ES6), 85 byte
Sesuai aturan tantangan, kode ini mengharapkan string global-scope m untuk menyimpan daftar gerakan. (Menyimpan 3 byte, seperti yang disarankan oleh @KevinCruijssen.)
Mengambil input sebagai daftar indeks berbasis 0, dipesan dari terendah ke tertinggi.
Cobalah online!
Bagaimana?
Setiap karakter move dikonversi ke posisinya dalam string move
"LBHR..."
. Kami mengalikan hasilnya dengan 3 dan menerapkan modulo 5 , yang memberikan p . Kami kemudian memiliki:Di mana tanda mod b adalah tanda a .
sumber
Jelly , 14 byte
Cobalah online!
Argumen 1 / Argumen Kiri: Indeks berbasis 1 maksimum.
Argumen 2 / Argumen Kanan: indeks berbasis 1.
Argumen 3: Daftar-bergerak sebagai string. Fungsi masih dapat digunakan kembali jika argumen baris perintah ketiga digunakan untuk tujuan ini.
sumber
Java 10,
12911911210710086 byteMengambil maksimum sebagai input tambahan; move-list adalah array karakter pada level kelas.
Terinspirasi oleh @Emigna 's jawaban 05AB1E .
-7 byte berkat @Jakob .
-14 byte terima kasih kepada @Geobits .
Cobalah online.
Penjelasan:
s[m%55]/73
peta ke koordinat x atau y tergantung pada karakter ( Coba online ):s[m%55]*3%5-2
peta ke karakter yang benar+1
atau-1
tergantung ( Coba online ):sumber
a.add(m)
sebagaiif
kondisi.int c[]
bisa jadiint[]c
.int c[]
berasal dari versi sebelumnya di mana saya masih menggunakan indeksi
daripada menggunakanm
. Dan pintar menggunakan Setadd
bukan!contains
, terima kasih!c[2]
untuk sumbu (dengans[m%55]/73
) dan berjalan dengan sesuatu seperti3*s[m%55]%5-2
(saya berharap saya bisa melihat cara untuk mempersingkat itu, tapi ...). Bersama dengan terner, inia->m->{var c=new int[2];for(;m-->0;)c[s[m%55]/73]-=a.add(m)?3*s[m%55]%5-2:0;return c[1]+","+c[0];}
untuk 98.int[]
bukan sebuah String. :)Python 3, 85 byte
b
adalah daftar indeks (aset
) danl
merupakan indeks akhir. Daftar pindah (daftar string atau karakter) muncul sebagais
. Ini adalah port dari jawaban Ruby GB , dan penjelasan pendekatannya dapat ditemukan di sana.Cobalah secara Online
Tidak disatukan
sumber
MATL , 16 byte
Cobalah online!
Membawa 3 input seperti jawaban Jelly, indeks terbesar, daftar indeks untuk dilewati, dan array 55 karakter.
sumber
Bersih ,
148... 130 byteCobalah online!
Menentukan fungsi
$ :: [Int] -> (Int, Int)
, mengambil daftar indeks (diurutkan dari yang terkecil hingga terbesar) untuk dihapus dari gerakan sebelumfoldr
mengakhiri operasi yang berlaku(0,0)
.sumber