Detail
Tulis fungsi atau program yang, diberi array (atau daftar), hanya berisi integer, mengembalikan atau output array dengan semua sub-elemen terbalik. Yaitu, balikkan semua elemen dari array terdalam, kemudian yang terdalam kedua, dll. Dimensi tidak perlu ditentukan, tetapi fungsi atau program harus bekerja untuk array bergerigi dalam format asli bahasa pemrograman Anda.
Contohnya
Ini:
[[1,2], [3,4]]
Akan menjadi ini:
[[4,3], [2,1]]
Ini:
[[[ 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]]]
Akan menjadi ini:
[[[54,53,52], [51,50,49], [48,47,46]],
[[45,44,43], [42,41,40], [39,38,37]],
[[36,35,34], [33,32,31], [30,29,28]],
[[27,26,25], [24,23,22], [21,20,19]],
[[18,17,16], [15,14,13], [12,11,10]],
[[ 9, 8, 7], [ 6, 5, 4], [ 3, 2, 1]]]
Ini:
[[[1,2]],
[[3,4], [5]],
[[6,7,8], [9], [10,11]],
[[[12,13], [14,15]], [16], [17,18,19,20]],
[21]]
Akan menjadi ini:
[[21],
[[20,19,18,17], [16], [[15,14], [13,12]]],
[[11,10], [9], [8,7,6]],
[[5], [4,3]],
[[2,1]]]
Bonus
Mudah - mudahan ini akan mendorong jawaban dalam beberapa bahasa pemrograman berorientasi objek ...
-50% Bytecount Jika program Anda dapat mengambil sebagai input array (atau daftar) dengan anggotanya dari berbagai jenis (ini bisa dalam bentuk objek) dan berhasil membalikkan semua array.
Ini:
[["Foo",["Bar",1]],
2,
["Baz"],
[[["Qux"],3],3.14]]
Akan menjadi ini:
[[3.14,[3,["Qux"]]],
["Baz"],
2,
[[1,"Bar"],"Foo"]]
Jawaban:
Pyth, 11 - 50% = 5,5 byte
Cobalah online: Demonstrasi atau Test Suite .
Ini mendefinisikan suatu fungsi
y
. 3 byte tambahan<newline>yQ
cukup memanggil fungsi dengan daftar input dan karenanya tidak perlu dihitung terhadap total byte.Penjelasan:
sumber
Dyalog APL , 14 - 50% = 7 byte
⌽⍵
argumen terbalik⍣(×|≡⍵)
jika argumen itu bukan atom (tanda kedalaman [absolut]) ...∇¨
... terapkan fungsinya ke setiap elemen (dari argumen terbalik).Jika
⎕ML←3
(gaya IBM), yang merupakan kasus pada sistem yang bermigrasi dari APL2, satu byte dapat disimpan dengan menghapus|
.Coba APL online.
Untuk rasa ingin tahu, int dan float reversing yang diusulkan :
Fungsi batin:
0::⌽⍵
jika ada kesalahan, kembalikan argumen yang⍎⌽⍕
dibuat menjadi string, balikkan, buat menjadi angkasumber
Prolog, 40 - 50% = 20 byte
Predikat panggilan rekursif ini
a/2
denganmaplist/3
, untuk setiap anggota daftar, hinggareverse/2
gagal (yaitu elemen terakhir bukan daftar).sumber
Python 2, 40 - 50% = 20
Hanya beberapa modifikasi kecil yang diperlukan dari cara dasar untuk melakukannya diperlukan untuk mendapatkan bonus. Menggunakan fakta bahwa semua daftar kurang dari string kosong, dan semua angka kurang dari daftar kosong.
Semua uji kasus
sumber
f=lambda x:map(f,x)[::-1]if x>[]else x
.Emacs Lisp, 46 byte * 0,5 = 23
Contoh penggunaan:
(g '((1 2) 3 (four 5)))
->((5 four) 3 (2 1))
Pendekatan rekursif klasik: jika argumennya bukan daftar, anggaplah tidak berubah, jika itu daftar, petakan fungsinya di balik daftar.
sumber
Mathematica, 34/2 = 17 byte
Atau hanya
Reverse//@#&
jika Anda ingin banyak kesalahan dan adaReverse
di mana-mana.sumber
Clojure 43/2 = 21,5 byte
sumber
JavaScript ES6, 42 - 50% = 21 byte
Skor saya sempurna dalam banyak hal. Menerapkan fungsi
r
yang secara rekursif berlaku sendiri untuk anggota inputnya.Jika kita menganggap tidak ada objek yang memiliki properti
pop
, maka ini menjadi (31 - 50% = 15.5), terima kasih kepada dev-null:Atau, jika kita mengasumsikan objek memiliki sifat waras
reverse
, kita dapat melakukannya juga (35 - 50% = 17,5):sumber
a.pop?a.reverse().map(r):a
. Dengan asumsi tidak perlu menanganivoid 0
dan objek kustom.Lua,
11199 * .5 =55,549,5 byteSedikit rekursi yang bagus
sumber
CJam, 20 byte * 50% = 10
Menentukan blok bernama
F
yang dapat diterapkan ke array di atas tumpukan (atau apa pun, dalam hal ini adalah no-op).Uji di sini.
sumber
Brachylog , 5 - 50% = 2,5 byte
Cobalah online!
Karena
↔
dapat juga membalik string dan integer, kita harus secara eksplisit gagal dengan non-listċ
.sumber
Bahasa Wolfram (Mathematica) , 23 -50% = 11,5 byte
Cobalah online!
List
s di Mathematica ({...}
) setara denganList[...]
.@*
adalah operator komposisi, jadi mengganti setiap kemunculanList
denganReverse@*List
membalikkan setiap daftar yang terjadi pada input (Reverse@*List[...]
=Reverse[{...}]
).24 -50% = 12 byte
Cobalah online!
Tidak hanya berfungsi pada
List
s.sumber
Clojure, 38 byte
(dan bonus saya rasa, tetapi Clojure adalah bahasa yang dinamis sehingga gratis)
Ini adalah awal yang baik tetapi tidak menggunakan optimasi ini:
fn
alih - alih yang bernama dengandefn
. Tetapi kita masih membutuhkan nama "cakupan"f
untuk rekursiseq?
sebagai gantinyacoll?
(into () ...)
sebagai gantireverse
x
sebelum pemetaan, kita tidak membutuhkan banyak ruang saat itusumber
Ruby , 32 - 50% = 16 byte
Fungsi rekursif. Menggunakan
rescue
untuk menangkapNoMethodError
pemicu ketika mencoba untukreverse
nomor ataumap
string ternyata lebih pendek 2 byte daripada memeriksa apakah input adalah array melaluia==[*a]
.Cobalah online!
sumber