Tantangan:
Diberikan daftar daftar kosong dari bilangan bulat, kembalikan daftar tupel dari formulir berikut: Daftar pertama tupel dimulai dengan setiap elemen dari daftar pertama diikuti oleh elemen pertama dari setiap daftar berikutnya, sehingga tuple ke-i seharusnya [ith element of first list, first element of second list, ... , first element of last list]
. Sebagai contoh:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => [[1, 4, 7], [2, 4, 7], [3, 4, 7], ...
Kemudian lakukan tupel formulir [last element of first list, ith element of second list, first element of third list, ..., first element of last list]
, jadi dalam contoh kita ini akan menjadi:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => ..., [3, 4, 7], [3, 5, 7], [3, 6, 7], ...
Lanjutkan dengan setiap daftar yang tersisa, sampai Anda mendapatkan [last element of first list, ..., last element of second to last list, ith element of last list]
:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => ..., [3, 6, 7], [3, 6, 8], [3, 6, 9]]
Output penuh adalah sebagai berikut:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] =>
[[1, 4, 7], [2, 4, 7], [3, 4, 7], [3, 5, 7], [3, 6, 7], [3, 6, 8], [3, 6, 9]]
Beberapa boilerplate untuk ukuran yang baik:
- Jika Anda ingin input menjadi daftar string, atau daftar bilangan bulat positif, tidak apa-apa. Pertanyaannya adalah tentang memanipulasi daftar, bukan tentang apa yang ada dalam daftar.
- Input dan output dapat dalam format apa pun yang dapat diterima .
- Program atau fungsi lengkap diizinkan.
- Celah standar tidak diizinkan secara default.
- Pertanyaan ini adalah kode golf, jadi byte-count terendah akan menang.
Contoh:
[] => [[]] (or an error, thanks to ngn for correcting the output in this case)
[[1]] => [[1]]
[[1, 2], [3, 4], [5]] => [[1, 3, 5], [2, 3, 5], [2, 4, 5]]
[[1], [2], [5, 6], [3], [4]] => [[1, 2, 5, 3, 4], [1, 2, 6, 3, 4]]
[[1, 2, 3], [4, 5]] => [[1, 4], [2, 4], [3, 4], [3, 5]]
[[1, 2, 3], []] => unspecified behavior (can be an error)
[[3, 13, 6], [9, 2, 4], [5, 10, 8], [12, 1, 11], [7, 14]] =>
[[3, 9, 5, 12, 7], [13, 9, 5, 12, 7], [6, 9, 5, 12, 7], [6, 2, 5, 12, 7],
[6, 4, 5, 12, 7], [6, 4, 10, 12, 7], [6, 4, 8, 12, 7], [6, 4, 8, 1, 7],
[6, 4, 8, 11, 7], [6, 4, 8, 11, 14]]
[[16, 8, 4, 14, 6, 7, 10, 15], [11, 1, 12, 2, 19, 18, 9, 3], [13, 5, 17]] =>
[[16, 11, 13], [8, 11, 13], [4, 11, 13], [14, 11, 13], [6, 11, 13],
[7, 11, 13], [10, 11, 13], [15, 11, 13], [15, 1, 13], [15, 12, 13], [15, 2, 13],
[15, 19, 13], [15, 18, 13], [15, 9, 13], [15, 3, 13], [15, 3, 5], [15, 3, 17]]
Jika ada yang memiliki judul yang lebih baik, beri tahu saya.
sumber
[] => []
seharusnya[] => [[]]
tetapi tidak dapat menemukan kata-kata untuk menjelaskan mengapa.[[]]
karena ada satu tuple kosong dengan satu entri dari masing-masing (nol) daftar. Mungkin terlalu menjengkelkan untuk memerlukan program untuk menampilkan ini dengan benar, jadi saya akan mengatakan bahwa itu tidak perlu.[]
, sebenarnya, adalah daftar kosong dari daftar yang tidak kosong, tetapi hasilnya ambigu antara[]
dan[[]]
jika itu merupakan input yang diizinkan. ("Daftar pertama tupel dimulai dengan setiap elemen dari daftar pertama ..." - tidak ada daftar pertama, jadi kita selesai ->[]
)[]
seharusnya[[]]
. Misalnya, jumlah tupel keluaran adalahsum(inner list lengths) - length of outer list + 1
yang dalam kasus kosong berikan1
, yang merupakan panjang[[]]
tetapi bukan panjang[]
. Ini sedikit masalah yang pedantic ...Jawaban:
JavaScript (ES6), 59 byte
Mengharapkan daftar daftar bilangan bulat positif .
Cobalah online!
Bagaimana?
Pada setiap iterasi:
sumber
a.some
trik mengagumkan!awe.some
tidak akan membuang-buang byte ... :)Python 2 , 62 byte
Cobalah online!
Menggunakan ide pop Chas Brown terinspirasi oleh pengajuan JS Arnauld .
Python 2 , 68 byte
Cobalah online!
Memotong elemen pertama dari daftar untuk menyimpan nilai yang diinginkan. Ini
[[0,0]]+
adalah hack jelek untuk mencetak nilai awal pertama.sumber
Jelly , 15 byte
Cobalah online! (catatan kaki menampilkan daftar yang dikembalikan sebenarnya daripada representasi Jelly)
Bagaimana?
Mengindeks ke dalam produk Cartesian dari daftar pada poin yang diperlukan ...
ẈṚ’ṣ1T$¦ƬUṚị"€
(14 byte) gagal untuk input dengan panjang (non-trailing) satu daftar; tapi mungkinṣ1T$
bisa diganti dengan yang lain?sumber
K (ngn / k) ,
40211918 byteCobalah online!
menggunakan ide dari jawaban @ H.PWiz
{
}
berfungsi dengan argumenx
#:'
panjang masing-masing|
balik!
semua indeks tupel untuk array dengan dimensi tersebut sebagai kolom dalam matriks (daftar daftar)|
balik+
mengubah urutan|\
menjalankan maxima?
unikx@'/:
gunakan setiap tuple di sebelah kanan sebagai indeks dalam daftar yang sesuai darix
sumber
Arang , 33 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Keluarkan bilangan bulat ke string sebelum secara implisit mencetak menggunakan format output default untuk daftar, yang merupakan setiap item pada barisnya masing-masing, dan daftar bersarang memiliki spasi ganda.
Ambil jumlah panjang daftar dan kurangi panjang daftar daftar. Kemudian putar dari 0 ke nilai ini termasuk.
Peta dari daftar daftar dan indeks ke dalam setiap daftar.
Jepit indeks ke 0 dan indeks terakhir dalam daftar. (Kurung penutup tersirat.)
Setelah daftar pertama, kurangi panjang yang dikurangi dari semua daftar sebelumnya dari indeks terluar. (Ini tidak berfungsi untuk daftar pertama karena panjang daftar kosong dan jumlahnya bukan angka.)
sumber
Python 2 , 72 byte
Cobalah online!
Ini adalah port Python dari algoritma Javascript yang luar biasa dari Arnauld .
sumber
APL (Dyalog Classic) ,
323027 byteCobalah online!
program yang lengkap, input dari keyboard (
⎕
)untuk
[]
output input[[]]
(padanan APL mereka adalah0⍴⊂⍬
dan,⊂⍬
)mengasumsikan keunikan angka dalam input
sumber
,⊂,1
JavaScript (ES6),
5854 byteSetelah 14+ upaya menurunkan kode saya (menghapus semua contoh while loop,,
push
danconcat
), saya tiba pada iterasi yang secara algoritmik mirip dengan jawaban @ Arnauld , tidak mengejutkan mengingat betapa ringkasnya itu!Menerima daftar daftar bilangan bulat positif. Cobalah online!
58 byte
Untuk 1 byte lebih, mengganti
s = y.shift()
dengany.shift(s = 1)
harus menangani semua bilangan bulat (mungkin, karena saya belum mengujinya secara pribadi).58 byte
Versi bonus, dengan sedikit penataan ulang:
Penjelasan
Versi awal dari kode mencoba untuk memodifikasi klon dari (array) elemen pertama dari setiap array, tetapi langkah ekstra menginisialisasi array itu mahal ... sampai saya menyadari bahwa pemetaan elemen pertama dari setiap array kira-kira operasi "hanya" yang diperlukan jika saya mengubah array asli.
Menggunakan bendera boolean untuk memeriksa apakah array telah digeser (yaitu disingkat). Gantikan pemeriksaan bersyarat lebih jauh dengan mengamati bahwa JS memaksa array dengan nilai angka sebagai satu-satunya elemen ke dalam angka itu, sementara memaksa array dengan beberapa nilai sebagai NaN.
sumber
APL (Dyalog) , 15 byte ( SBCS )
Terima kasih ngn untuk menunjukkan byte yang tidak perlu
Cobalah online!
{∪⌈\,⍉⍳≢¨⍵}
menghasilkan daftar untuk diindeks ke dalam input. misalnya(1 2 3) (4 5 6) (7 8 9) -> (0 0 0) (1 0 0) (2 0 0) (2 1 0) (2 2 0) (2 2 1) (2 2 2)
≢¨⍵
: panjang setiap daftar di input,⍉⍳
membuat semua kombinasi angka hingga inputnya. misalnya2 3 -> (0 0) (1 0) (0 1) (1 1) (0 2) (1 2)
⌈\
: memindai dengan maksimal. misalnya contoh di atas sekarang akan menjadi(0 0) (1 0) (1 1) (1 1) (1 2) (1 2)
∪
: hapus duplikat⊃¨¨⊂
melakukan pengindeksan, memperhatikan kedalaman dari kedua argumensumber
⊆
sepertinya tidak perlu .Python 2 , 91 byte
Cobalah online!
sumber