Saya terkejut tidak menemukan ini ditanyakan, meskipun ada pertanyaan besar pada pemeriksaan anak panah: Anak panah bertemu Codegolf
Tantangan Anda adalah menghitung skor mana yang tidak mungkin dengan panah 'n' di bawah skor maksimum untuk panah 'n'. Misalnya untuk n = 3, skor maksimum yang mungkin adalah 180 sehingga Anda akan mengembalikan [163,166,169,172,173,175,176,178,179]
Untuk ringkasan aturan tulang kosong:
Skor yang mungkin untuk satu panah adalah:
- 0 (kangen)
- 1-20, 25, 50
- dua kali lipat atau tiga kali lipat 1-20
Aturan:
- aturan golf kode standar berlaku
- Anda harus mengambil satu parameter 'n' dengan cara apa pun yang bahasa Anda memungkinkan dan mengembalikan daftar / array semua skor unik di bawah skor maksimum yang tidak dapat dicetak dengan n panah. Anda juga dapat mencetak nilai-nilai ini ke konsol.
- urutan hasil tidak penting
- kode terpendek dalam byte menang
Jawaban:
Python 3 ,
80795957 byte-1 byte, terima kasih kepada Arnauld
-20 byte, terima kasih kepada ArBo
-2 byte, berkat negatif tujuh
Cobalah online!
sumber
Perl 6 , 42 byte
Cobalah online!
Solusi brute force yang menghitung semua nilai panah yang mungkin.
sumber
JavaScript (ES6),
5554 byteDisimpan 1 byte berkat @Shaggy
Berdasarkan pola yang digunakan oleh Rod .
Cobalah online!
sumber
s=60*n
->n*=60
untuk menyimpan byte.Perl 6 , 39 byte (37 karakter)
Ini jelas menggunakan palu besar tetapi berhasil. (Itu tidak hanya brutal memaksanya, brutal juga brutal memaksanya)
Cobalah online!
Berikut penjelasannya:
The
X* ^4
lintas multiplier menghasilkan banyak nilai ganda (akan ada 20 + nol terlibat dan bahwa ini sebelum melakukan penambahan lintas), tapi itu tidak menyebabkan masalah karena kita menggunakan set perbedaan∖
yang bekerja dengan nilai-nilai yang unik.Saat ini gagal untuk
$n == 1
(yang seharusnya mengembalikan set kosong), tetapi ada masalah yang diajukan dan kemungkinan akan bekerja di versi mendatang. Versi JoKing sedikit lebih lama, tetapi berfungsi untuk$n == 1
Rakudo saat ini.sumber
Jelly , 19 byte
Cobalah online!
sumber
MATL ,
2523 byteTerima kasih kepada @Giuseppe , yang memperbaiki kesalahan dan golf 2 byte!
Cobalah online!
Penjelasan
Pendekatan kekerasan.
sumber
n=2
, jadi saya memperbaikinya dan beralih dari byte ke boot! Cobalah online!J ,
4845 byteCobalah online!
-3 byte terima kasih kepada FrownyFrog
Mencoba solusi brute force, tetapi tidak dapat mengalahkan terjemahan ide Rod ini.
sumber
626b66jh
b
"pembatas" di sana dan sedang membacanya sebagai bagian dari nomor ....R , 64 byte
Cobalah online!
Port jawaban yang luar biasa ditemukan oleh Rod .
R ,
857368 byteCobalah online!
Brute force menghasilkan semua skor yang mungkin dengan
n
panah, kemudian mengambil perbedaan set yang sesuai.Kredit untuk solusi Octave OrangeCherries untuk mengingatkan saya pada
combn
.5 byte lebih banyak berkat saran Robin Ryder untuk menggunakan
%o%
.sumber
FUN
argument ofcombn
! You can get 68 bytes with%o%
instead ofx*3,x*2
.Octave,
91 bytes73 bytes71 BytesAnother brute force method.
Down to
73 Bytesthanks to GiuseppeDown to 71 Bytes by replacing nchoosek with combnk
Try it online!
sumber
Pyth, 22 bytes
Try it online!
Times out in TIO for inputs greater than 3.
sumber
U4
toS3
the performance is improved a bit because both cartesian products don't have to deal with all those additional useless 0s. Input 3 outputs in ~13 seconds instead of ~30 in that case (although input 4 still times out, and this is code golf, so doesn't matter that much ;p).-S*60QsM^*MP*S3aU21 25
, but that space between21
and25
is a bit annoying.. With a 0-based inclusive rangeyT
could be used instead of21
, kinda like this:-S*60QsM^*MP*S3a}ZyT25
(but then without theZ
of course, with the}
replaced with the 0-based inclusive range). Maybe you see something to golf in this alternative approach of adding the25
to the list, and removing the75
after the first cartesian product?Stax, 24 bytes
Run and debug it
It's pretty slow for n=3, and gets worse from there.
sumber
Python 2, 125 bytes
Try it online!
Python 3,
126125122 bytesTry it online!
-3 bytes, thanks to Rod
sumber
05AB1E,
212018 bytes-3 bytes thanks to @Grimy.
Times out pretty quickly the higher the input goes due to the cartesian product builtin
ã
.Try it online or verify a few more test cases.
Explanation:
sumber
60 * input
, bukan 180.Jeli , 28 byte
Cobalah online!
sumber
MathGolf , 26 byte
Cobalah online!
-2 byte terima kasih kepada Kevin Cruijssen
Penjelasan
sumber
3╒*mÅ~*N_∞α+
toN▐3╒*mÅ~*╡
. (PS: Why do you mention "for input 3" in your explanation header?)Wolfram Language (Mathematica), 69 bytes
Try it online!
Based off of lirtosiast's answer.
Array
's third argument specifies the offset (default 1), and its fourth argument specifies the head to use instead ofList
.##&
is equivalent toSequence
, soArray[1##&,{4,21},0,##&]
returns a (flattened)Sequence
containing members of the outer product of0..3
and0..20
.sumber
Charcoal, 36 bytes
Try it online! Link is to verbose version of code. Uses @Rod's algorithm; brute force would have taken 60 bytes. Works by truncating the string to 9 characters if the input is greater than 1, then taking the ordinals of the characters and adding the appropriate multiple of 60.
sumber
C # (Visual C # Interactive Compiler) , 305 byte
Yah, sepertinya tidak ada cara mudah untuk menghitung semua kombinasi yang mungkin dalam C #, jadi ini bencana kode yang bisa saya buat.
Ditambah lagi dibutuhkan sekitar 30-an untuk menyelesaikan ...
Senang melihat solusi yang lebih baik.
Cobalah online!
sumber
Kotlin , 118 byte
Cobalah online!
sumber
Perl 5
-n
,969391 byteCobalah online!
Itu dioptimalkan untuk panjang kode daripada waktu berjalan, jadi agak lambat. Ini menghasilkan banyak entri berlebihan untuk hash pencariannya. Menjalankan
@b
array melaluiuniq
kecepatan sangat, tetapi biaya 5 byte lebih banyak, jadi saya tidak melakukannya.sumber
Bahasa Wolfram (Mathematica) , 81 byte
Cobalah online!
Mathematica memiliki beberapa builtin terkait termasuk
FrobeniusSolve
dan bentuk terbatasIntegerPartitions
, tetapi tidak ada yang lebih pendek dari brute force.sumber
{163,166,169,172,173,175,176,178,179}