Setiap kali Anda bergerak di Rubik's Cube, ada gerakan mundur yang membatalkan langkah pertama. Karena itu, setiap algoritma (serangkaian gerakan) memiliki algoritma terbalik yang membatalkan algoritma pertama.
Tujuan dari tantangan ini adalah untuk menemukan kebalikan dari algoritma yang diberikan.
Spesifikasi:
Input terdiri dari berbagai gerakan individu. Setiap gerakan adalah string dengan panjang 1 atau 2. Tentu saja, Anda dapat menggunakan format input apa pun yang paling masuk akal dalam bahasa Anda. Setiap gerakan terdiri dari struktur X
atau X'
atau X2
, di mana X
huruf besar atau kecil.
Untuk membalikkan X
, cukup ganti dengan X'
. Demikian juga, X'
menjadi X
. X2
di sisi lain tidak berubah.
Untuk membuat output, membalikkan setiap gerakan, lalu membalikkan array.
Contoh (string dipisahkan oleh spasi):
R
=> R'
D U'
=> U D'
S T A C K
=> K' C' A' T' S'
A2 B2
=> B2 A2
Mencetak:
Ini adalah kode-golf, sehingga jumlah byte terkecil yang menang. Tidak ada celah standar.
sumber
R2
->R2'
atauB
->B3
diizinkan?X3
atauX1
akan menjadi tambahan yang bagus untuk tantangan.D2R2
sebagai kasus uji ...Jawaban:
Python 2 ,
71575453 byte-15 bytes terima kasih untuk ovs! -3 byte terima kasih kepada Rod.
Cobalah online!
String I / O, 70 byte
Cobalah online!
sumber
V ,
1310 byteCobalah online!
3 byte disimpan berkat @nmjmcman menunjukkan fitur favorit saya. Penjelasan:
sumber
ä
suka mewakili regex saat dikompilasi ke vim?:g!/\d/norm A'<CR>:%s/''//g<CR>gg:g/^/m0<CR>
Informasi lebih lanjut tentang bagaimana V memampatkan ekspresi reguler dapat ditemukan di siniRetina 0.8.2 ,
2726 byteCobalah online! Tautan termasuk kasus uji. Penjelasan: Tahap pertama menambahkan tanda kutip setelah setiap alfanumerik. Ini menghasilkan apostrof ganda (dengan atau tanpa 2 inklusif) yang perlu dihapus. Tahap akhir membalikkan gerakan.
sumber
O$^
sebenarnya masih cara terbaik untuk membalik daftar pertandingan, sehingga jumlah byte sebenarnya tidak berubah di Retina 1.JavaScript (ES6), 45 byte
Solusi terpendek adalah dengan mengambil Array IO. Penggunaan penghancuran argumen yang sederhana dan tepat.
Output string adalah +8 byte untuk
.join` `
.Input string, Keluaran array: 69 byte
sumber
.reverse()
dengan::reverse
menghemat 1 byte tetapi membuat ES7Jeli , 11 byte
Tautan monadik yang mengambil kembali daftar daftar karakter ("array" dari "string").
Cobalah online! (Footer menghindari menghancurkan output, menampilkan daftar split dengan spasi.)
Bagaimana?
sumber
JavaScript (ES6), 46 byte
Mengambil input sebagai array gerakan.
Menguji
Masukkan daftar gerakan yang dipisahkan koma.
Penjelasan
Fungsi anonim mengambil array gerakan sebagai argumen melalui parameter
a
.Peta di atas array, melewati setiap string melalui fungsi, di mana
m
string saat ini.Periksa apakah string berisi karakter kedua (
"'"
atau"2"
) kedua.Jika itu mencoba untuk melemparkan string karakter itu ke integer. Jika string itu
"2"
, itu menjadi2
, yang benar. Jika string itu"'"
, itu menjadiNaN
, yang merupakan falsey.Jika tes sebelumnya benar, cukup kembali
m
.Jika tidak, kembalikan karakter pertama
m
.Jika string tidak mengandung karakter kedua, maka kembalilah
m
ditambahkan dengan a'
.Membalikkan array yang dimodifikasi.
sumber
Python ,
5148 byteFungsi tanpa nama mengambil dan mengembalikan daftar string.
Cobalah online!
Membalik daftar input dengan
a[::-1]
; menambahkan a'
ke setiap entri denganv+"'"
; mengepalai masing-masing karakter 1 atau 2 tergantung pada apakah aslinya memiliki'
atau tidak dengan[:2-("'"in v)]
.sumber
Python 3 ,
918972706965 byteCobalah online! (Dengan testcases)
Tampaknya Anda tidak perlu mengambil input dan output sebagai string, sehingga solusi 69 byte dimungkinkan
sumber
len(i)==1
len(i)-2
lebih pendek darilen(i)==1
(ingat 0 adalah falsey)Haskell , 43 byte
Cobalah online! Menyatakan fungsi anonim
map f.reverse
. Ikatg
dan gunakan sebagaig["S","T","A","C","K"]
.sumber
PHP , 81 byte
Cobalah online!
sumber
05AB1E , 13 byte
Cobalah online!
Penjelasan
sumber
J, 25 byte
J menangani yang satu ini dengan baik, selain dari urutan pelarian yang disayangkan yang diperlukan untuk mewakili satu kutipan:
Kita perlu mewakili daftar menggunakan data kotak, karena merupakan campuran dari satu dan dua item karakter, karenanya:
&.>
- "under unbox", yang berarti unbox setiap elemen, melakukan operasi yang mengikuti (yaitu, simbol yang dijelaskan di bawah) dan kemudian rebox ketika selesai(''''={:)
"Jika karakter ke-2 adalah kutipan tunggal" ....@.
(Kata kerja agenda J, semacam pernyataan terner general, atau pernyataan kasus) "lalu lakukan item kedua pada daftar agenda, jika tidak lakukan yang pertama"}:
(item ke-2 dalam daftar agenda), "hapus karakter terakhir", yaitu, kutipan tunggal`(J's tie verb) Anda dapat menganggap ini sebagai pemisah item agenda
,&''''
(item pertama pada daftar agenda) "tambahkan satu kutipan ke akhir"|.
"membalikkan"Cobalah online!
sumber
R , 51 byte
Cobalah online!
sumber
Ruby , 44 byte
Cobalah online!
sumber
Java 8,
141128126 byteMengambil input sebagai tunggal
String
tanpa spasi (yaituRUR'URU2R'U
).Penjelasan:
Cobalah online.
Contoh langkah-langkah di atas, dengan masukan yang diberikan:
RUR'URU2R'U
RUR'URU2R'U
→R'U'R'''U'R'U'2'R'''U'
R'U'R'''U'R'U'2'R'''U'
→R'U'RU'R'U'2'RU'
R'U'RU'R'U'2'RU'
→'R'UR'U'R'U'2R'U
'R'UR'U'R'U'2R'U
→'R'UR'U'R2UR'U
'R'UR'U'R2UR'U
→U'RU2R'U'RU'R'
sumber