Tujuan dari tantangan ini adalah untuk mengambil array bilangan bulat positif, dan menghitung indeksnya, mengelompokkan elemen-elemen seperti.
Pencacahan tanpa duplikat dilakukan dengan hanya mengeluarkan array pasangan (value, index)
, misalnya, [3, 4, 13, 9, 2]
=> [[3,1],[4,2],[13,3],[9,4],[2,5]]
.
Namun, jika elemen yang diberikan muncul kedua kalinya, itu tidak diberikan pasangannya sendiri, tetapi malah ditambahkan ke grup kejadian pertama. Jika dalam contoh di atas kita mengganti 9 dengan 3, maka dalam output kita akan menghapus [9,4]
dan mengganti [3,1]
dengan [3,1,4]
.
Dalam output, grup harus dipesan berdasarkan kemunculan pertama mereka, dan indeks harus dalam urutan menaik. Elemen harus terlebih dahulu dalam grup, sebelum indeksnya. Output mungkin 0 atau 1 diindeks. Anda dapat menganggap array memiliki setidaknya satu elemen.
Kasus uji:
Input | Output (One-indexed)
[3, 2, 2, 3] | [[3, 1, 4], [2, 2, 3]]
[17] | [[17, 1]]
[1, 1] | [[1, 1, 2]]
[1, 1, 2] | [[1, 1, 2], [2, 3]]
[1, 2, 3, 4] | [[1, 1], [2, 2], [3, 3], [4, 4]]
[1, 1, 1, 1] | [[1, 1, 2, 3, 4]]
Ini adalah kode-golf , byte terkecil menang!
[[17,"1"]]
? (Belum tahu apakah saya bisa menyimpan byte dengan cara itu, masih bekerja di sana!)[[3, [1, 4]], [2, [2, 3]]]
?Jawaban:
Dyalog APL, 5 byte
Cobalah online!
,⌸
untuk 2 byte hampir berfungsi, tetapi memiliki nol di belakangnya: /sumber
⌸
lakukan?,⌸
trailing nol, dan nol tidak akan pernah ada dalam input, apakah mungkin untuk menjatuhkan semua nol dalam waktu kurang dari 3 byte?J , 12 byte
Diindeks nol.
Cobalah online!
Jika Anda bisa menghapus semua pekerjaan yang saya lakukan dengan kotak, Anda mungkin dapat mengurangi bytecount sedikit. Saya akan melihat apakah saya bisa mengetahuinya.
Penjelasan
Ini mungkin terlalu dini untuk dijelaskan (seharusnya ada lebih banyak golf).
sumber
05AB1E , 10 byte
Cobalah online!
Penjelasan
sumber
Python 3 ,
8382 byte-1 byte terima kasih kepada Mego
Cobalah online!
sumber
j+1
->j
(indeks mungkin tidak diindeks)Haskell , 48 byte
Cobalah online!
sumber
Attache , 15 byte
Cobalah online!
Ini adalah kasus yang menarik
=>
, bentuk operator dariMap
. Ketika diberikan dua argumen fungsionalf
dang
,Map
mengembalikan fungsif => g[x]
lebihx
. Artinya, RHS diterapkan pada input, kemudian LHS dipetakan.Builtin
Positions
menghasilkan larik yang mewakili pengelompokan entri berdasarkan indeks. Secara default, ketika tidak disertakan dengan argumen kedua,Positions
akan menggunakan argumen pertama.Flat
kemudian dipetakan di atas setiap item, karena itulah yang dibutuhkan pertanyaan.Solusi alternatif
31 byte
Cobalah online!
Alternatif yang cukup pendek, kurang built-in.
MapArgs
adalah fungsi sepertiMap
, kecuali Anda dapat memasukkan argumen tambahan ke dalamnya. Sebagai contoh,MapArgs[{_1 + _2}, 1..3, 3]
adalah[4, 5, 6]
. SepertiMap
, itu menjadi kari ketika dilengkapi dengan dua argumen fungsional. Fungsi yang dipetakan adalahConcat#~Indices
, yang merupakan garpu. Garpu ini diterapkan padaUnique
item input dan input itu sendiri. Ini diterjemahkan menjadiConcat[_, Indices[_2, _]]
(dengan argumenIndices
swapped through~
), yang memasangkan elemen yang dipetakan (_
) dengan indeks elemen tersebut_
dalam array input, yaitu_2
(seperti yang dijelaskan melaluiMapArgs
).43 byte
Cobalah online!
Ini benar-benar hanya kombinasi yang lebih verbose (namun sedikit lebih mudah dibaca) dari solusi # 1 dan # 2.
sumber
Jelly , 6 byte
Cobalah online!
Penjelasan:
sumber
Pyth , 7 byte
Diindeks 0.
Coba di sini! Alternatif.
Bagaimana?
sumber
MATL , 8 byte
Cobalah di MATL Online
Penjelasan
sumber
&f
tetapi tidak pernah berhasil.Sebenarnya , 24 byte
Cobalah online!
Penjelasan:
sumber
R , 56 byte
Cobalah online!
Ini adalah upaya pertama saya di codegolf, jadi setiap umpan balik dipersilahkan!
sumber
x
, tetapi harus ada cara membaca input - biasanya kita menggunakanscan
atau mendefinisikan suatu fungsi. Selain itu, harus di-output, jadi harus membungkus ini dengan aprint
atau acat
.Bahasa Wolfram (Mathematica) , 40 byte
Menyimpan satu byte berkat Martin Ender.
Cobalah online!
sumber
@*PositionIndex
kerjanya?@*
adalah komposisi fungsi.PositionIndex
pada dasarnya melakukan semua pekerjaan, tetapi mengembalikan asosiasi alih-alih daftar.{#,##&@@#2}&
menghemat satu byte.JavaScript (ES6), 64 byte
0 diindeks
Catatan, ini menganggap angka input menjadi positif, jadi v> 0
Tes sedikit dimodifikasi (1 diindeks) untuk mencocokkan kasus uji
sumber
APL NARS, 24 byte, 12 karakter
-4 byte berkat tes Adam:
sumber
{∪⍵,¨⍸¨⍵=⊂⍵}
SWI-Prolog ,
165117 byte-48 byte berkat tips golf Prolog .
Cobalah online!
Penjelasan
sumber
K (oK) , 10 byte
Larutan:
Cobalah online!
Contoh:
Penjelasan:
Evaluasi dilakukan dari kanan ke kiri. Saya masih berpikir ini bisa golf lebih jauh ...
Catatan:
x
,(,/)'+(!;.)@'=
, menyerah dengan pendekatan ini ...sumber
1+
.Julia 0,6 , 37 byte
Terima kasih kepada Pavel untuk off 1 byte.
Cobalah online!
sumber
]
danfor
untuk -1 byte.JavaScript (ES6), 68 byte
Diindeks 0.
Uji kasus
Tampilkan cuplikan kode
sumber
PHP 4.1, 88 byte
Ya, ini cukup panjang.
Ini mengasumsikan file default
php.ini
(short_open_tag = On
danregister_globals = On
).Ini menyajikan array dengan cara yang dapat dibaca manusia.
Nilai-nilai dapat dilewatkan oleh POST, GET dan COOKIE, di dalam kunci "A".
Untuk versi modern, seseorang dapat menggunakan (90 byte):
Hasilnya sama, kecuali semua nilai harus melewati parameter GET di dalam kunci "A".
sumber
Perl 6 ,
6361 byteUji (berbasiskan 0)
Uji itu (algoritma yang sama berbasis 0)
Diperluas:
sumber
Japt ,
149 byteDiindeks 0.
Cobalah
sumber
PHP 7.4+ , 71 byte
* 73 byte untuk mengutip
$_GET
kunci dan menghindari Peringatan.Cuplikan: ( Demo )
Berdasarkan perwakilan, saya menganggap IsmaelMiguel tahu cara terbaik untuk mengirim kode php di komunitas ini jadi saya membangun dari yayasannya . Tidak jelas bagi saya apakah
<?
akan dimasukkan / dihitung dalam cuplikan saya . Karena ini adalah posting perdana saya, saya senang bagi siapa saja untuk menjelaskan jika ada sintaksis yang tidak perlu. ps Saya juga membaca Tips untuk bermain golf di PHP yang bagi saya sepertinya adalah kandidat yang hebat untuk migrasi ke Meta .Perbaikan yang dilakukan pada cuplikan Ismael adalah:
array_values()
mengindeks kembali output.sumber
Bersih ,
6160 byteCobalah online!
Output diindeks 0
sumber
Kotlin , 83 byte
Yg diperindahkan
Uji
TIO
TryItOnline
sumber
i
sudah ditentukan sebelumnya. Anda dapat menjadikan ini valid dengan mengonversinya menjadi lambda yang mengambil parameteri
.Cepat 4, 107 byte
... Astaga.
Tidak Disatukan:
Sayang sekali kamus kehilangan urutan, memaksa saya untuk membuang begitu banyak karakter untuk mengurutkan kembali. Ini semacam pelecehan argumen penutupan implisit (
$0
,$1
, ...) dan anggota tuple implisit (.0
,.1
, ...) adalah Uhhhhh tidak cantik.sumber
Perl 5 , 63 + 1 (
-a
) = 64 byteCobalah online!
sumber
Ruby ,
5452 byteVersi ini memungkinkan nil (53 byte):
Cobalah online!
sumber
nil
bukan bilangan bulat positif.