Dalam seri video game Anno ada 6 game dengan yang 7 diumumkan untuk awal 2019. Judul mereka selalu menampilkan setahun dalam pola tertentu:
Anno 1602, Anno 1503, Anno 1701, Anno 1404, Anno 2070, Anno 2205, Anno 1800
- Jumlah digital selalu 9.
- Panjangnya empat digit.
- Mereka mengandung setidaknya satu nol.
Dalam batasan-batasan ini terdapat 109 judul yang mungkin:
[1008,1017,1026,1035,1044,1053,1062,1071,1080,1107,1170,1206,1260,1305,1350,1404,1440,1503,1530,1602,1620,1701,1710,1800,2007,2016,2025,2034,2043,2052,2061,2070,2106,2160,2205,2250,2304,2340,2403,2430,2502,2520,2601,2610,2700,3006,3015,3024,3033,3042,3051,3060,3105,3150,3204,3240,3303,3330,3402,3420,3501,3510,3600,4005,4014,4023,4032,4041,4050,4104,4140,4203,4230,4302,4320,4401,4410,4500,5004,5013,5022,5031,5040,5103,5130,5202,5220,5301,5310,5400,6003,6012,6021,6030,6102,6120,6201,6210,6300,7002,7011,7020,7101,7110,7200,8001,8010,8100,9000]
Tujuan Anda adalah membuat daftar semuanya dalam bentuk wajar apa pun dalam jumlah byte paling sedikit.
code-golf
number
kolmogorov-complexity
Laikoni
sumber
sumber
Jawaban:
R ,
5951 byteMenghasilkan angka yang valid sebagai nama daftar tahun 201-an. Mengapa 201? Karena ASCII 0 adalah 48, dan 4 * 48 + 9 adalah ... ya. Disimpan 6 byte dengan aliasing
^
keMap
dan 2 lainnya dengan menggunakan1:9e3
rentang.Cobalah online!
Penjelasan
sumber
grep
mengapa saya tidak pernah ingat bahwa itu dilemparkan kecharacter
...Perl 6 ,
3533 byte-2 byte terima kasih kepada Jo King
Cobalah online!
sumber
Python 2 ,
676664 byteCobalah online!
Disimpan:
sumber
ord sum == 201
trik dari jawaban lain.Jelly , 11 byte
Cobalah online!
Bagaimana itu bekerja
sumber
PowerShell ,
5049 byteCobalah online!
Buat rentang dari
999
hingga10000
, lalu gunakan sebaris-match
sebagai filter untuk menarik entri yang cocok dengan regex0
. Ini membuat kita dengan1000, 1001, 1002, etc.
Kami kemudian pipa itu keWhere-Object
klausa di mana kita mengambil nomor saat ini sebagai string"$_"
, melemparkannya sebagaichar
-array,-join
karakter-karakter bersama-sama dengan+
danI
nvoke-Ex
pression (mirip dengan eval) untuk datang dengan jumlah digit mereka. Kami memeriksa apakah yang-eq
UAL untuk9
, dan jika demikian itu diteruskan pipa. Pada penyelesaian program, angka-angka itu diambil dari pipa dan secara implisit menghasilkan.sumber
JavaScript (ES6),
7873 byteDisimpan 2 byte berkat @KevinCruijssen
Mengembalikan string yang dipisahkan ruang.
Cobalah online!
Bagaimana?
Kami beralih pada kisaran[1008..9000] dengan selisih 9 , mengabaikan angka yang tidak memiliki 0 .
Semua angka ini adalah kelipatan dari9 , sehingga jumlah digit mereka dijamin kelipatan dari 9 juga.
Karena angka yang valid memiliki setidaknya satu0 , mereka tidak memiliki lebih dari dua angka 9 , yang berarti bahwa jumlah digit yang tersisa paling banyak 18 . Oleh karena itu, cukup untuk menguji apakah jumlah digitnya ganjil.
Karenanya tes:
sumber
1008
ke999
, karena tidak mengandung 0, dan999+9 = 1008
.f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)
(memang mengandung tanda koma, jadif=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)
dengan pembatas ruang termasuk ruang tambahan mungkin terlihat lebih cantik)JavaScript (Node.js) , 89 byte
Cobalah online!
JavaScript (Node.js),
12912712612411511411111010597939290 byteCobalah online!
Penjelasan
Pertama kali melakukan golf kode dalam JavaScript. Saya pikir saya tidak perlu mengatakannya, tetapi jika saya melakukan sesuatu yang salah, tolong beri tahu saya di komentar di bawah.
-3 byte berkat @Luis felipe De jesus Munoz
-6 byte terima kasih kepada @Kevin Cruijssen
sumber
[...Array(9e3)]
alih-alihArray(9e3).fill()
menghemat 2 byte.map(a=>+a)
sebagai gantinya.map(Number)
menyimpan byte lain(_, i)
untuk menghemat satu byte, dans[0]+s[1]+s[2]+s[3]
bisa jugaeval(s.join`+`)
untuk menyimpan 4 byte tambahan.||
bisa menjadi|
jawaban Anda..map()
hanya menggunakan untuk menghasilkan rentang, dan menjaga pemfilteran terpisah, Anda dapat menyimpan 8 byte: Coba online!Python 2 , 57 byte
Cobalah online!
2 byte berkat Dennis
Menggunakan
exec
loop untuk menghitungn
dalam langkah 9 sebagai 1008, 1017, ..., 9981, 9990, mencetak yang memenuhi syarat.Hanya kelipatan 9 yang dapat memiliki jumlah digit 9, tetapi kelipatan 9 dalam kisaran ini juga dapat memiliki jumlah digit 18 dan 27. Kami mengesampingkannya dengan ketentuan ini
int(`n`,11)%10>8
. Menafsirkann
dalam basis 11, jumlah digitnya sama dengan angka modulo 10, sama seperti pada basis 10 angka sama dengan jumlah modulo digitnya 9. Jumlah digit dari (9, 18, 27) sesuai dengan (9, 8, 7) modulo 10, jadi ambil itu>8
karya karya itu untuk menyaring sembilan.Angka yang mengandung nol diperiksa dengan keanggotaan string.
'0'in`n`
. Kondisi ini bergabung dengan yang lain dengan ketimpangan dirantai, menggunakan bahwa Python 2 memperlakukan string lebih besar daripada angka.sumber
sed and grep (and seq),
726463 bytessumber
grep
is, so maybe I'm running it wrong?)Haskell, 55 bytes
Thanks to @Laikoni, see the comments.
Readable:
sumber
(-48+)
and comparing the sum against201
instead of9
. Incidentally this also allows you to use1
instead of1000
for the range.main=print
was fine as per this consensus on Meta.9999
can be5^6
instead.R, 82 bytes
Try it online!
Generates a matrix
x
of all possible 4-digit numbers, excluding leading zeros, going down columns. Then filters for column (digital) sums of 9 and containing zero, i.e., notall
are nonzero.write
prints down the columns, so wewrite
tostdout
with a width of4
and a separator of""
.Outgolfed by J.Doe
sumber
Japt,
2018 bytes.-2 bytes thanks to @Shaggy and @ETHproductions
Try it online!
sumber
A³ò9000 f_ìx ¥9©ZsøT
gets you back down to 20.ì
instead ofs
and¬
, which has to be done in the filter:f_=ì)x ¥9...
. Then you can save another by checking if the product of Z is zero with«Z×
: Try it online!Java 8,
128117115 bytes-11 bytes thanks to @nwellnhof.
Try it online.
Explanation:
sumber
chars().sum()==201
?R, 85 bytes
(just competing for the best abuse of R square brackets ... :P )
Try it online!
sumber
05AB1E,
15131210 bytes-2 bytes thanks to @Emigna
-3 bytes thanks to @Grimy
Try it online.
Explanation:
°
). And the number in base-1 converted to an integer in base-10 (ö
) would act like a sum of digits.°
). And the number in base-10 converted to an integer in base-10 (ö
) will of course remain the same.°
). And the number in base-100 convert to an integer in base-10 (ö
) would act like a join with0
in this case (i.e.2345
becomes2030405
).°
). And the number in base-100 convert to an integer in base-10 (ö
) would act like a join with00
in this case (i.e.3456
becomes3004005006
).0
s in the 'join'.If the smallest digit is>0 with the given range [1000,10000] , the resulting number after [1111,9000000009000000009000000009] , so can never be equal to 9 . If the result is equal to 9 (d=0 , resulting in a base-1 with 9 .
°ö
would then be within the range9Q
) it would mean the smallest digit is°ö
; and the sum of the digits wassumber
₄4°Ÿʒ0å}ʒSO9Q
. Splitting filters are usually shorter4°
. Thanks. And you're indeed right that multiple loose filters (at the end) are shorter. Will also add it to one of my tip answers. Thanks for both bytes!4°Lʒ0å}ʒÇOт·-
. Leaving this here, maybe someone can golf it further₄4°ŸʒD0åôO9Q
. Using a single filter is usually shorter.₄4°ŸʒW°ö9Q
Pip, 18 bytes
Use an ouput-format flag such as
-p
to get readable output. Try it online!sumber
Wolfram Language (Mathematica),
5655 bytesTry it online!
We test the range from 9!! = 945 to 9999, since there are no results between 945 and 999. Maybe there's a shorter way to write a number between 9000 and 10007, as well.
Tr@#==Times@@#+9&
applied to{a,b,c,d}
tests ifa+b+c+d == a*b*c*d+9
, which ends up being equivalent to The Anno Condition.sumber
9*7*5*3*1
.Ruby,
46 4241 bytesTry it online!
How it works:
(Thanks Laikoni for -2 bytes)
sumber
9*3
can be just9
, because checking against 201 already requires 4 digit numbers.Octave, 49 bytes
6 bytes saved using a more convenient output format as suggested by J.Doe.
Thanks to @Laikoni for a correction.
Try it online!
sumber
disp
off...Dart,
103 10096 bytesPretty self-explanatory. generates a list of 9001 (0-9000) cells with the cell's index as value, filters the ones containing a 0 then the one having an ASCII sum of 201 (The result if all the ASCII characters sum to 9). These conditions implictly include that the year is 4 digits long because using 2 ASCII numbers (and the 0), you cannot reach 201.
Try it on Dartpad!
sumber
Bash (with
seq
,grep
), 39 bytesTry it online!
sumber
seq 0 9 1e4|awk '/([0-4].*){3}/&&/0/'
to save two bytes.K (ngn/k), 22 bytes
Try it online!
sumber
55_&9=+/y*|/'~y:!4#10
for 21?'
in|/'
looks wrong. the result includes 1116, 1125, 1134, etc which are not supposed to be thereAPL (Dyalog Unicode), 23 bytes
Try it online!
sumber
<
is clever. you can make it even shorter with⎕io←0
and(
)10⊥⍣¯1⍳9e3
->(
)¨,⍳4⍴10
PHP,
69, 87 bytes74 bytesfor($i=999;$i<9001;$i++){echo((array_sum(str_split($i))==9&strpos($i,"0")!=0)?$i:" ");}
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
Note this puts a space for every "failed" number, leading to some kind of funky spacing. This can be changed to comma separation, but will add another 4 characters:
?$i.",":""
Got bigger because I wasn't checking for 0. Derp. Shortened by 13 by Titus!
sumber
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
?"$i,":""
er ... now the other way round:?"":"$i,"
APL(Dyalog),
3329 bytes-4 bytes thanks to @Adam
Try it online!
sumber
1e3+⍸(0∘∊∧9=+/)¨⍎¨∘⍕¨1e3+⍳9e3
Scala (
76636156 bytes)Try it online
sumber
t.sum==201
works instead oft.map(_.asDigit).sum==9
.s"$n"
can ben+""
ands"$t "
can bet+" "
.Tcl, 77 bytes
Try it online!
sumber
Japt, 16 bytes
Returns an array of digit arrays.
Test it
Explanation
sumber
APL(NARS), 45 chars, 90 bytes
test afther some formatting:
possible alternative
sumber
Jelly, 13 bytes
Try it online!
How?
sumber