Terinspirasi oleh pos StackOverflow ini .
pengantar
Tugas Bob adalah membuat spreadsheet dan mengaturnya. Cara dia mengaturnya diketahui sangat sedikit kecuali untuk Bob, tetapi dia membuat daftar masing-masing spreadsheet yang termasuk dalam kelompok yang sama. Ada banyak data dalam spreadsheet yang ia buat, tetapi hanya ada satu data yang sedang kami lihat saat ini: Jumlah hari antara hari ia memulai pekerjaan ini dan hari ia membuat spreadsheet. Hari pertama ia membuat dua spreadsheet, mencatat keduanya sebagai 0
dan mengurutkannya ke lokasi yang tepat.
Sekarang, bosnya meminta ulasan tentang jenis spreadsheet apa yang terjadi setiap hari, dan tugas Anda untuk menulis beberapa kode yang akan mencari tahu apa yang terjadi pada Bob; dia memiliki terlalu banyak spreadsheet untuk melakukannya dengan tangan.
Memasukkan
Info Bob yang ia berikan kepada Anda datang dalam bentuk array bergerigi (0-atau-1) di mana setiap datum berbentuk x = a[i][j]
. a
adalah apa yang saya sebut array bergerigi itu sendiri, i
adalah jenis spreadsheet, dan x
merupakan tanggal array dibuat. j
tidak penting.
Tugas
Diberikan array bergerigi dari hari pembuatan spreadsheet yang disusun berdasarkan jenisnya, kembalikan array bergerigi dari tipe spreadsheet yang diatur oleh hari pembuatan spreadsheet.
Contohnya
Bob tidak akan hanya meninggalkan Anda dengan data abstrak ini. Dia memberi saya bagian dari beberapa spreadsheet untuk membantu Anda mencari tahu apa yang seharusnya terjadi.
Input contoh (0-diindeks):
a = [
[3,2,5,0], # Bob doesn't necessarily sort his lists
[1,3],
[2,1,0,4],
[4,5,3],
[6,6]
]
Contoh output (dengan komentar, yang tentu saja tidak diperlukan):
output = [
[0,2] # On day 0, Bob made one type 0 and one type 2 spreadsheet
[1,2] # On day 1, Bob made one type 1 and one type 2 spreadsheet
[0,2] # On day 2, Bob made one type 0 and one type 2 spreadsheet
[0,1,3] # On day 3, Bob made one type 0, one type 1, and one type 3 spreadsheet
[2,3] # On day 4, Bob made one type 2 and one type 3 spreadsheet
[0,3] # On day 5, Bob made one type 0 and one type 3 spreadsheet
[4,4] # On day 6, Bob made two type 4 spreadsheets
]
Perhatikan bahwa Bob tidak selalu membuat dua spreadsheet setiap hari, dan hasilnya mungkin juga bergerigi. Tapi dia selalu membuat setidaknya satu spreadsheet setiap hari, jadi outputnya tidak perlu mengandung array kosong - walaupun jika output Anda memiliki array kosong di akhir, Anda tidak perlu menghapusnya.
Lebih banyak kasus uji:
[[3,5,6,2],[0,0,0],[1,0,3,4]] -> [[1,1,1,2],[2],[0],[0,2],[2],[0],[0]]
[[-1]] -> Undefined behavior, as all input numbers will be non-negative integers.
[[0],[0],[],[0]] -> [[0,1,3]]
Daftar bagian dalam output tidak perlu disortir.
Seperti biasa, tidak ada celah standar, dan tentu saja kode terpendek menang.
(Karena ini adalah pertanyaan pertama saya, beri tahu saya apa pun yang dapat saya lakukan untuk memperbaikinya.)
sumber
[[0 0]]
memberi output[[0 0] []]
?Jawaban:
Jelly ,
1110 byteInput dan output berbasis 1.
Cobalah online! atau verifikasi semua kasus uji (berbasis 0 untuk perbandingan mudah).
sumber
Pyth, 13 byte
Cobalah online
sumber
Pyth , 14 byte
Suite uji.
sumber
Brachylog , 28 byte
Penjelasan
Predikat utama, Input (
?
) = daftar daftarPredikat 1:
Predikat 2:
sumber
Lua, 114 byte
Ide itu!
Terinspirasi oleh jawaban Dennis dalam Python 2 .
sumber
JavaScript (ES6), 58 byte
sumber
CJam (
3029 byte)Demo online
Anehnya lebih pendek untuk di-hack
W
daripada menggunakanee
, terutama karena saya ingin indeks berakhir dalam variabel.e]
menyimpan dua byte lebih dulu dari menemukan elemen maksimumm
dan menginisialisasi array darim+1
array kosong.Terima kasih kepada Martin untuk penghematan satu byte dengan menyimpan nilai
X
alih-alih menyulapnya di tumpukan.NB Jika membuntuti array kosong diizinkan, ada pendekatan alternatif 29 byte dengan alih-alih menginisialisasi array hari kosong sebanyak ada spreadsheet:
sumber
CJam, 20 byte
Terima kasih kepada Peter Taylor karena mengizinkan saya mendasarkan kode ini pada solusinya dan menghemat 3 byte.
Blok tanpa nama yang mengharapkan input di atas tumpukan dan menggantinya dengan output.
Uji di sini.
Penjelasan
sumber
Python 2, 82 byte
Uji di Ideone .
sumber
Mathematica, 35 byte
Fungsi tanpa nama yang menerima dan mengembalikan daftar yang acak-acakan. Menggunakan indeks berbasis 1.
Untungnya
Max
secara otomatis meratakan semua inputnya, jadi ini membuat kami mendapatkan indeks hari terakhir meskipun inputnya adalah daftar acak-acakan. Kami kemudian hanya menghitung daftar#&@@@#~Position~i
untuk indeks sepanjang harii
. Ungkapan ini sendiri menemukan posisii
di dalam daftar kasar (kembali sebagai array indeks pada kedalaman berturut-turut), sehingga nilai yang kita inginkan adalah nilai pertama dari masing-masing daftar tersebut.#&@@@
adalah trik standar bermain golf untuk mengambil elemen pertama dari setiap sublist, dengan menerapkan#&
ke masing-masing sublists, yang merupakan fungsi tanpa nama yang mengembalikan argumen pertamanya.Atau, kita dapat mendefinisikan operator unary untuk byte-count yang sama (dengan asumsi file sumber yang disandikan ISO 8859-1):
sumber
Java, 314 byte
Terperinci
sumber
Map
?Perl 5, 48 byte
Subrutin:
Lihat dalam aksi seperti ini:
sumber