Ikhtisar
Buat program yang menghasilkan array dengan panjang acak dengan angka acak, lalu terapkan serangkaian aturan yang mengubah array. Setelah aturan diterapkan, cetak jumlah array kecuali ditentukan lain
Pengaturan array
Array harus panjang acak antara 5 dan 10 inklusif, dengan bilangan bulat acak antara 1 dan 20 inklusif. Setiap panjang array harus memiliki probabilitas yang sama untuk terjadi dan setiap integer harus memiliki probabilitas yang sama untuk dipilih per elemen.
7 aturan
Aturan harus bertindak seolah-olah diterapkan secara berurutan (misalnya: aturan 1 bertindak sebelum aturan 2) dan hanya diterapkan sekali. Untuk bukti aplikasi aturan, array harus dicetak ke konsol setelah setiap aplikasi aturan dan satu kali sebelum aturan diterapkan.
- Jika array berisi angka 7, kurangi 1 dari setiap elemen
- Jika aturan 1 diterapkan dan array sekarang berisi 0, tambahkan 1 ke setiap elemen
- Jika array berisi 13, kecualikan 13, dan semua elemen yang mengikuti, dari array
- Jika array berisi 2, kecualikan semua angka ganjil
- Jika array berisi 20, dan elemen ketiga genap, kembalikan 20 sebagai penjumlahan, lalu terminasi. Jika 20 hadir dan elemen ketiga ganjil, kembalikan 20 kali panjang array sebagai jumlah kemudian diakhiri.
- Jika jumlahnya lebih besar dari 50, hapus elemen terakhir berulang kali hingga kurang dari atau sama dengan 50
- Jika array berisi 16, cetak jumlah dalam desimal dan heksadesimal.
Contoh
Berikut ini adalah array awal,
[20, 2, 5, 7, 14, 8]
Aturan 1 dapat diterapkan:
[19, 1, 4, 6, 13, 7]
Aturan 3 diterapkan selanjutnya:
[19, 1, 4, 6]
Tidak ada aturan lain yang diperlukan, sehingga program mengembalikan 30 sebagai jumlah.
Catatan
- Saya bukan pegolf kode berpengalaman, meskipun saya dapat mengatakan catatan pribadi saya adalah di Python 3 dengan 369 byte .
- Aturan tidak harus benar-benar diterapkan secara berurutan, tetapi harus bertindak seolah-olah mereka melakukannya.
sumber
[3 3 3 3 4 3]
dan[4 4 3 4 4]
, masing-masing dengan probabilitas 50%, sesuai dengan apa yang tertulis di bawah "pengaturan array". Jadi saya bisa menampilkan19
setiap waktu? (Tentu saja, yang benar-benar saya pikirkan adalah bahwa definisi "acak" perlu diklarifikasi.)If the array contains a 20, and the third element is even/odd
, bagaimana jika array memiliki kurang dari 3 elemen pada langkah ini?Jawaban:
Python 3,
294301287356 byteSaya tidak tahu bagaimana Anda akan mencegah orang menghindari aturan, tetapi yang ini menggunakan prosedur yang ditentukan.
+7 byte; terima kasih kepada @YamB untuk menghemat beberapa byte; menambahkan lebih banyak untuk memperbaiki kesalahan sebelumnya.
-14 byte terima kasih kepada @RootTwo dan saya sendiri dan juga memperbaiki kesalahan.
+83 byte; ini menjadi sangat panjang karena OP terus mengubah aturan. -Beberapa jumlah byte berkat @ZacharyT
sumber
k=[r(1,20)for _ in'-'*r(5,11)]
. Anda dapat menyimpan byte lain menggunakank=[i+~-(1in k)*(7in k)for i in k]
untuk aturan 1 dan 2.1
, dan Anda dapat mengubahprint
baris kedua dan ketiga menjadi terakhirp
. Dan Anda ... belum memperbarui bytecount Anda.05AB1E , 91 byte
Cobalah online! atau Dengan input
sumber
Javascript (ES6),
344342340342335331333313311305298297290289283279 bytesSabas! Akhirnya
diikat denganmengalahkan Arnauld !Mengikuti pertukaran ini * dalam komentar tantangan dan setelah banyak pertimbangan saya telah memutuskan untuk menggunakan
new Date
sebagai seed untuk generator angka acakMath.random()
. Melakukannya berarti bahwa semua bilangan bulat dalam array akan memiliki nilai yang sama.Cobalah
Array(x).fill()
dengan[...Array(x)]
.+1
dengan a~
.0
dikembalikan untuk array kosong.while
.,
antara 2 pernyataan terakhir dengan a|
dan menghapus lampiran()
.console.log
denganalert
.a.includes()
.includes()
dan hanya menggunakanindexOf()
seluruh.s
variabel ke suatu tempat itu tidak perlu koma.Math.random()
dengannew Date
.Versi yang dapat dibaca & Diuji
console.log
sebagai gantialert
untuk kewarasan Anda! (Paling bagus dilihat di konsol peramban Anda)Tampilkan cuplikan kode
* Screenshot, kalau-kalau itu dihapus:
sumber
C (gcc) ,
621619593585570562557552529517500482461444442441 441438 byteAda banyak sekali golf yang diperlukan di sini ... Memperbaiki bug di mana ia akan mencetak hexidecimal satu kali untuk masing-masing 16 dalam daftar ...
Terima kasih khusus kepada ZacharyT dengan bantuan golfnya
Cobalah online!
sumber
JavaScript (ES6),
296295290289 byteProgram lengkap yang mencatat larik awal, hasil antara dan jumlah akhir untuk konsol.
Bagaimana itu bekerja
Ini dikompres menggunakan JS packer ini .
Kerusakan:
226225 byte6964 byteDi bawah ini adalah kode sumber asli dengan beberapa spasi putih dan umpan baris agar mudah dibaca. Alih-alih menerapkan trik golf standar, itu ditulis dengan cara yang menghasilkan string berulang sebanyak mungkin untuk menyenangkan pembungkus. Sebagai contoh, sintaksis
if(k=~a.indexOf(N))
digandakan di mana-mana meskipunk
hanya digunakan dalam aturan ke-3.Metode membongkar
Kode pembongkaran asli adalah:
Semua varian ES6 berikut memiliki ukuran yang persis sama:
Satu-satunya cara yang saya temukan sejauh ini untuk memangkas beberapa byte adalah dengan menggunakan
for ... of
:sumber
n&1^1
(tidak dikemas sama sekali, tetapi hanya satu byte lebih pendek dari!(n&1)
). Saya memikirkan hal itu pada suatu saat dan lupa untuk memasukkannya.Coba pertama kali di golf kode!
Sudah dikalahkan oleh javascript lainnya! Dangit! Saya akan memperbaiki!!! =)
Javascript ->
550402 bytePasti bisa ditingkatkan. Terkompresi Sekarang:
Asli:
sumber
Java 7,
622619618 byte-1 byte terima kasih kepada @Poke
Penjelasan:
Output sampel:
Komentar di balik output sampel tidak dicetak, tetapi saya menambahkannya sebagai klarifikasi.
Coba di sini.
sumber
List a = new ArrayList()
? Mungkin menghemat beberapa byte. Anda mungkin perlu menambahkan typecast saat melakukan aritmatika yang sebenarnya. Jika tidak,Long
lebih pendek dariInteger
List
saya harus menggunakan(int)
gips lima kali, serta mengubah setiap loop dariint
menjadiObject
dan menambahkan gips keenam. AdapunLong
: terima kasih, itu menghemat 1 byte :) (masih harus mengubah masing-masing dariint
kelong
, danr.nextInt(20)+1
ker.nextInt(20)+1L
).Ruby 2.4, 260 byte
Ruby 2.4 diperlukan untuk
Enumerable#sum
.Cobalah online! (Belum ada repl.it atau tio.run yang mendukung Ruby 2.4, jadi versi online ini diganti
sum
denganinject(:+)
, yang memiliki perilaku yang sama.)sumber
R (3.3.1), 325 byte
Implementasi yang cukup naif; Saya pikir saya mungkin bisa membuatnya sedikit lebih pendek.
sumber
PowerShell ,
525413 byteCobalah online!
Saya ingin mencoba yang ini walaupun saya pikir saya tidak akan mengalahkan jawaban yang sudah ada di sini: PI telah mencoba untuk menurunkan ini, saya yakin itu mungkin dengan byte lebih sedikit. Menemukan metode yang lebih baik untuk hex, tetapi mungkin masih bisa membaik.
Harus dilemparkan
$a
ke string berkali-kali lebih baik membuat filter untuk itu ...Ada beberapa golf mudah yang saya lewatkan seperti tanda kurung dan spasi. Masih ada beberapa di luar sana?
Agak lebih mudah untuk membaca kode:
sumber
MATLAB, 275 byte
Saya awalnya merencanakan mungkin satu jawaban Octave satu-liner, tetapi membutuhkan output dari semua aturan yang diterapkan menggagalkan rencana saya. Sebagai gantinya, jawaban MATLAB yang cukup mudah dengan beberapa optimisasi yang menarik, misalnya penggunaan
cumsum
alih - alih yang jelaswhile
untuk aturan 6. Namun, banyak jumlah byte terbuang padaif
s untuk mencegah output jika aturan tidak diterapkan.Cobalah online!
sumber
Scala 587 bytes satu liner
Scala, 763 byte apa adanya
sumber
a: Array[T]
dibutuhkan ruang ? Anda tidak memiliki ruangargs:Array[String]
, itulah yang menyebabkan pertanyaan saya.MATLAB,
228241bytesIni akan menerapkan semua aturan secara berurutan, mencetak nilai array setelah setiap langkah.
Program akan crash pada aturan 5 jika jumlah elemen yang dihasilkan kurang dari tiga. Saat ini tidak ada yang mengatakan apa yang harus terjadi jika tidak ada elemen ketiga, jadi saya berasumsi bahwa crash dapat diterima.Program sekarang akan mencetak 20 jika ada kurang dari 3 elemen dan satu atau lebih adalah 20.Menariknya langkah 2 dapat diterapkan terlepas dari apakah langkah 1 itu. Ini karena array input tidak akan pernah memiliki 0 di dalamnya yang berarti bahwa jika ada 0 di dalam array, itu harus sebagai hasil dari langkah 1 yang terjadi.
Semua aturan diterapkan secara berurutan, hingga 5, bahkan jika tidak ada perubahan yang dibuat. Akibatnya array akan dicetak pada awal dan kemudian setelah setiap langkah hingga 5. Setelah langkah 5 Anda akan mendapatkan jumlah jika diterapkan, atau tidak ada output sampai setelah langkah 6. Baris tambahan yang mengandung
a
dapat ditambahkan setelah pernyataan lain untuk memastikan bahwa nilai array dicetak setelah langkah 5 dengan biaya 2 byte.Saya juga ingin menyebutkan bahwa saya tidak melihat jawaban yang lain sampai setelah saya menulis ini. Saya melihat sekarang bahwa ada jawaban MATLAB lain dengan beberapa kesamaan - yang semuanya kebetulan.
sumber
Python 3,
297 293 289, 278 byteSaat Arnauld melihat, Anda tidak bisa mendapatkan 0 kecuali aturan 1 diterapkan, yang disimpan saat indentasi. Terima kasih untuk semua orang yang berkomentar dengan saran juga.
Cobalah online
sumber
and
dan~
.from random import* a=b=sample(range(1,20),randint(5,10))
menyimpan beberapa byte karena Anda dapat menghapus baris 2.Perl 6 , 246 byte
Tidak Disatukan:
sumber
Gangguan Umum, 490 byte
Di sini array diwakili sebagai daftar Common Lisp.
Seperti biasa, penggunaan besar
and
danor
sebagai struktur kontrol.sumber