Diberikan array kosong kosong dari bilangan bulat positif, "tambah" sekali sebagai berikut:
Jika semua elemen array sama, tambahkan a
1
ke akhir array. Sebagai contoh:[1] -> [1, 1] [2] -> [2, 1] [1, 1] -> [1, 1, 1] [3, 3, 3, 3, 3] -> [3, 3, 3, 3, 3, 1]
Lain, tambahkan elemen pertama dalam array yang merupakan nilai minimum array. Sebagai contoh:
[1, 2] -> [2, 2] [2, 1] -> [2, 2] [3, 1, 1] -> [3, 2, 1] -> [3, 2, 2] -> [3, 3, 2] -> [3, 3, 3] [3, 4, 9, 3] -> [4, 4, 9, 3] -> [4, 4, 9, 4] -> [5, 4, 9, 4] -> [5, 5, 9, 4] -> ...
(Masing-masing ->
mewakili satu peningkatan, yang harus dilakukan oleh semua program Anda.)
Keluarkan output array yang dihasilkan.
Kode terpendek dalam byte menang.
code-golf
number
arithmetic
array-manipulation
integer
Hobi Calvin
sumber
sumber
Jawaban:
Jelly ,
87 byteCobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Python 3,
62535150 byteFungsi yang mengubah daftar yang diteruskan ke itu ( diizinkan oleh meta ).
Coba di repl.it!
-9 byte terima kasih kepada Lynn untuk mengetahui hal itu, karena array akan bilangan bulat positif, saya dapat menambahkan '0' ke akhir array dan menambahkannya.
Terima kasih khusus kepada mbomb007 untuk bermain golf
len(set(a))
untuklen({*a})
, dan Dennis untuk trik floordiv!sumber
len({*L})<2
untuk menemukan apakah semua elemen daftar sama.a+=1//len({*a})*[0]
harus menyimpan byte.JavaScript (ES6), 61 byte
Keluaran dengan memodifikasi argumennya . Saya tidak dapat menemukan cara untuk menentukan apakah array hanya memiliki satu item unik dalam waktu kurang dari 17 byte, tetapi saran dipersilahkan.
Cuplikan tes
Tampilkan cuplikan kode
Upaya lain
Berikut adalah beberapa cara alternatif untuk memutuskan apakah array memiliki lebih dari satu input unik:
Keduanya
some
bisa digantifind
juga..sort
akan lebih pendek untuk menemukan minimum, jika jenis default tidak leksikografis (mengapa, JS, mengapa?):Saya mencoba rekursi untuk menemukan minimum, tetapi ternyata lebih lama:
Dan inilah solusi berbasis string yang sepertinya ide yang bagus pada awalnya: (input diberikan dalam format array dalam string, misalnya
"[1,2,3]"
)sumber
Mathematica,
705755 byteHampir semua peningkatan adalah karena Martin Ender, yang menendang pantat saya di pendekatan pencocokan pola! JHM juga memberikan solusi yang pada dasarnya sama di waktu yang sama. (jumlah byte menggunakan pengkodean ASCII)
Menentukan fungsi dengan
±
mengambil satu argumen argumen. Jika argumen daftar itu berisi sejumlah salinan dari elemen yang sama (terdeteksi olehx_..
dan dinamaip
), maka output daftar dengan yang1
ditambahkan. Kalau tidak, jika argumen daftar itu memiliki elemen khususy
(denganx
menjadi nol atau lebih elemen sebelumnyay
, danz
menjadi nol atau lebih setelah elemeny
) yang paling banyak minimum dari elemen lain, maka output daftar dengan yangy
bertambah. Setiap instance dari elemen minimum daftar akan dicocokkan dengany
, tetapi untungnya Mathematica memilih yang pertama untuk ditindaklanjuti.sumber
±
karakter 2 byte, kode Anda panjangnya 59 byte. Juga, harus ada ruang antarax_
dan..
karena Mathematica mengartikanx_..
sebagaix_. .
(yang melempar kesalahan). Plus, bentuk infiks dariMin
(x~Min~z
) akan membuat 2 byte ini lebih pendek (yang membuat solusi ini identik dengan salah satu milik saya: p ...) Mohon Anda dapat mengambil kredit karena hasil edit saya lebih lambat dari milik Anda ....±
dalam UTF-8 ( Mathematica menggunakan UTF-8 secara default; coba$CharacterEncoding
) adalah karakter dua byte (U + 00B1).±
.$CharacterEncoding
ditetapkan keWindowsANSI
CP1252 (yang cukup kompatibel dengan ISO 8859-1 untuk±
dan·
dapat digunakan untuk satu byte).C ++ 14,
178 176 174 155 142135 bytepengajuan
doa
ungolfed
Ini pertama kalinya saya bermain golf, bantuan dihargai.
EDIT: lupa menyebutkan Anda harus mengkompilasinya dengan setidaknya
-std=c++11
-std=c++14
EDIT2: Saya menyadari saya bisa meninggalkan ruang di dalamnya
#include <list>
EDIT3: menyimpan dua byte lagi dengan mengganti
l.begin()
denganbegin(l)
EDIT4: menyimpan 19 byte (!) Lainnya berkat @Quentin (lihat komentarnya)
EDIT5: Quentin mengurangi 13 byte lagi, terima kasih!
EDIT6: seperti yang ditunjukkan TuukkaX, lambdas / fungsi yang tidak disebutkan namanya cukup jadi saya menghapus
auto i=
di bytecountsumber
#include
garis.auto i=[](auto&l){...};
) menghemat satu byte (lebih jika kita menghitung jenis pengembalian yang Anda lupa;)), menggunakan^
bukan==
dan menukar operan menyimpan yang lain.std::list
Iterator sudah pastistd::
kelas, sehingga Anda dapat turunstd::
dari keduanyastd::count
danstd::min_element
terima kasih kepada ADL (-10).l.front()
juga*b
(-7). Saya berakhir dengan 120-byteauto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?void(++*find(b,e,*min_element(b,e))):l.push_back(1);};
:)std::min_element
menyatakan bahwa ia mengembalikan elemen terkecil pertama , sehinggafind()
tidak perlu, yaitu 11 byte. Dalam kondisional, menggunakan sepasang tanda kurung dan operator koma untuk memaksa ekspresi yang tepatint
lebih pendek daripada casting yang kiri menjadivoid
2 byte. Ini mengarah padaauto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};
, 142 byte :)05AB1E ,
212016 byteDisimpan 4 byte berkat Adnan .
Cobalah online!
Penjelasan
sumber
DÙgi0¸«}ÐWksgÝQ+
juga berfungsi.ÝQ
bersamak
. Terima kasih!Gores,
2534 blok +76 byteMengambil input sebagai array bilangan bulat yang telah ditentukan sebelumnya. Perhatikan bahwa array 1-diindeks dalam Gores.
Dalam Python, ini akan terlihat seperti: (Perhatikan bahwa tidak seperti Scratch, Python diindeks 0)
sumber
J,
2522 byteMengevaluasi ke kata kerja anonim. Cobalah secara Online!
Penjelasan
sumber
MATL , 16 byte
Cobalah online! Atau verifikasi semua kasus uji
Bagaimana itu bekerja
sumber
Mathematica, 56 byte
Menggunakan fungsi bernama
±
. Menggunakan penyandian ISO8859-1Solusi alternatif (58 byte)
Pemakaian
sumber
Haskell,
71 7062 byte@ Zgarb menyelamatkan 8 byte, terima kasih!
Ketika saya mulai, saya berharap untuk tipuan ikatan yang elegan, tapi cara @ Zgarb sama menakjubkannya.
sumber
f(a:b)|(x,y:z)<-span=<<(<).minimum$a:b++[0|all(a==)b]=x++y+1:z
(->)r
, yang diterapkan pada suatu tipe(->)r a = r->a
. Kemudian dari jenisreturn:: a->r->a
dan(>>=)::(r->a)->(a->r->b)->(r->b)
implementasinya jelas (berani saya katakan?):return=const
Danm>>=f = \r->f(m r)r
. Yang terakhir adalah persis apa yang diperlukan untuk mengekspresikan sesuatu sepertispan(predicate_depending_on l)l
sambil menyebutkanl
hanya sekali. Sekarang saya hanya perlu mengingatnya saat saya membutuhkannya.C #,
1231211207977 byteMemodifikasi argumen yang diteruskan ke fungsi.
Terima kasih kepada Cyoce karena telah menghemat 3 byte! ->
!Any
keAll
,+=1
untuk++
.Terima kasih kepada TheLethalCoder untuk menghemat 43 byte kekalahan! -> Menghapus kode tanda tangan metode. Tanda kurung dihapus di sekitar daftar parameter.
sumber
!l.Any(o=>o!=l[0]))
denganl.All(o=>o==l[0])
?Any
alih-alihAll
dan berpikir, itu tidak berhasil: D Terima kasih!++
?Action<List<int>>
untuk menghapus semua kode tanda tangan metodeusing
dengan C #, jadi saya tidak percaya bahwa itu sah untuk dikirimusing System.Linq
. Kecuali saya melihat pernyataan eksplisit yang mengatakan ini tidak perlu, saya akan tetap dengan ini. Terima kasih untuk sarannya! :)Perl 6 , 46 byte
(memodifikasi input Array, dan mengembalikannya)
Diperluas:
sumber
Jelly, 9 byte
Terima kasih untuk Dennis untuk -2 byte.
Badan harus minimal 30 karakter; Anda memasukkan ...
sumber
Mathematica,
53 byte57 byte59 bytesumber
〚
dan〛
merupakan karakter 3 byte. Juga, kode Anda tidak berfungsi karena{##,1}
bagian menyiratkan bahwa input bilangan bulat terpisah (yaituf[1, 2, 3]
) tetapix=#
bagian menyiratkan bahwa input adalahList
(yaituf[{1, 2, 3}]
). Sebuah perbaikan cepat akan mengubahx=#
kex={#}
dan menerima bilangan bulat baku sebagai input, membuat kode Anda 59 byte panjang.Equal@#
, meskipun#==##
lebih pendek.R ,
72 6665 byteCobalah online!
Peningkatan dilakukan menggunakan
which.min
yang mengembalikan pertandingan pertama."[<-"
memungkinkan untuk mengganti nilai dan mengembalikan vektor yang dimodifikasi dalam satu panggilan fungsi.-7 byte terima kasih kepada Giuseppe!
sumber
!=
dengan-
!Ruby, 46 byte
Saya merasa ada cara yang lebih baik untuk memeriksa apakah semua elemen sama daripada
a.uniq.size<2
, tetapi saya terlalu malas untuk menemukannya.sumber
a.uniq[1]
akan jujur jika ada nilai yang berbeda.a[a.index(a.min)]
menjadia[a.index a.min]
Oktaf,
696764 byteItu sebenarnya lebih pendek untuk membuat ini fungsi bernama lengkap daripada menggunakan keduanya
input
dandisp
.Disimpan 3 byte berkat Luis.
Jawaban lama, tidak menggunakan fungsi:
sumber
R, 97 byte
Sayang sekali bahwa synthax
x=+1
tidak ada di R!Tidak Disatukan:
sumber
TI-Basic, 53 byte
sumber
Matlab,
83,77, 71 BytesSaya relatif baru untuk kode golf jadi harap baik! Saya mencoba menggunakan fungsi anonim tetapi googling mengatakan Anda tidak dapat menggunakan jika pernyataan / lain dan matlab tidak memiliki operator ternary, jadi ini adalah yang terbaik yang saya bisa lakukan.
Sunting: Dikoreksi dan dipersingkat (dua kali!) Berkat stewie-griffin.
sumber
sum(a)/length(a)==a(1)
tidak menjamin bahwa semua elemen sama, itu hanya menunjukkan bahwa rata-rata sama dengana(1)
. Cara yang lebih sederhana untuk melakukan ini adalahmean(a)==a(1)
.numel
adalah satu byte lebih pendek darilength
, tetapi karena Anda tahu semua nilai positif, Anda dapat menggunakannnz
yang lebih pendek (itu masih tidak memberikan hasil yang benar dalam tantangan ini, tetapi setidaknya lebih pendek: P). Jika Anda menerimamin(a)
panggilan di depan loop, Anda dapat menggunakan kedua output dari itu dan memeriksa apakahall
elemen-elemennyaa
samamin(a)
.~nnz(a(a~=a(1)))
sederhana~nnz(a-a(1))
. Anda juga tidak perlu tanda kurung.if ~nnz(a-a(1));a=[a,1];else[~,I]=min(a);a(I)=a(I)+1;end
. Ini harus lebih pendek 5 byte (catatan: Saya belum mengujinya).range(a)
alih-alihnnz(a-a(1))
a
sama dengan nilai terendah dalam vektor itu. Sebuah vektora = [3 4 6]
akan menghasilkantrue
, dan sebuah vektora = [4 4 6]
akan menghasilkanfalse
. Saya tidak berpikir itu akan berguna di sini ...?Clojure,
112100 byteSayangnya
min-key
mengembalikan indeks terakhir dari indeks terkecil, bukan yang pertama. Ini berfungsi untuk input integer dan array yang lebih pendek dari 10 ^ 9 elemen;)Sunting: Menentukan fungsi anonim, menggunakan
(apply = a)
alih-alih(= 1(count(set a)))
.Asli:
Solusi 134 byte yang tidak terlalu retas membalikkan vektor sebelum memperbarui dan kemudian mengembalikannya lagi:
sumber
Java 8, 85 + 38 = 123 byte
Membatalkan lambda mengambil
List<Integer>
(output dimutasikan input). Hitungan byte termasuk lambda dan impor yang diperlukan.Cobalah secara Online
Ini hampir terlihat seperti Python dengan metode impor ...
sumber
MATLAB,
6653 byteKeluaran:
Inisialisasi:
Berjalan berturut-turut:
sumber
@(x) …
.SmileBASIC 3, 101 byte
Menentukan fungsi pernyataan di
I A
manaA
array bilangan integer kami. Output dicapai dengan memodifikasi input (karena array adalah referensi.)sumber
BREAK
denganM=0
, karenaA
tidak dapat berisi0
sehinggaM==A[C]
tidak akan pernah benar.SmileBASIC, 77 byte
sumber
Pyth, 16 byte
Program yang mengambil input daftar dan mencetak hasilnya.
Suite uji
Bagaimana itu bekerja
sumber
Haskell, 93 byte
f z|and$(==)<$>z<*>z=z++[1]|1>0=z#minimum z where(x:z)#m|x==m=x+1:z;(x:z)#m|1>0=x:z#m;[]#_=[]
Tidak Disatukan:
Upaya awal, akan mencoba memunculkan sesuatu yang lebih canggih nantinya.
sumber
where
?Bertanya-tanya , 44 byte
Ini bukan yang ada dalam pikiran saya ketika saya membuat bahasa ini ... Ini benar-benar lebih buruk daripada Perl dalam hal keterbacaan!
Pemakaian:
Penjelasan
Lebih mudah dibaca:
Pada dasarnya memeriksa apakah menjatuhkan 1 item dari subset argumen yang unik membuat daftar kosong. Jika tidak, maka kami menambah minimum array. Kalau tidak, kita hanya menggabungkan 1 argumen.
sumber
Kotlin, 75 byte
Memodifikasi argumen fungsi.
Sialan kamu mengetik kuat!
:MutableList<Int>
menyumbang 17 byte saja. Saya tidak berpikir ada solusi di mana jenisnya dapat disimpulkan, sayangnya.sumber