В серии видеоигр Anno есть 6 игр, 7 из которых объявлены в начале 2019 года. Их названия всегда содержат год по определенной схеме:
Anno 1602, Anno 1503, Anno 1701, Anno 1404, Anno 2070, Anno 2205, Anno 1800
- Цифровая сумма всегда 9.
- Годы четырехзначные.
- Они содержат как минимум один ноль.
В рамках этих ограничений существует 109 возможных названий:
[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]
Ваша цель - перечислить их все в любой разумной форме с наименьшим количеством байтов.
code-golf
number
kolmogorov-complexity
Laikoni
источник
источник
Ответы:
R ,
5951 байтВыводит действительные числа в качестве названий списка 201-х годов. Почему 201? Потому что ASCII 0 это 48, а 4 * 48 + 9 это ... да. Сохраненные 6 байт от наложения спектров ,
^
чтобыMap
и еще 2, используя в1:9e3
качестве диапазона.Попробуйте онлайн!
объяснение
источник
grep
почему я никогда не вспоминаю, что это приводит кcharacter
...Perl 6 ,
3533 байта-2 байта благодаря Джо Кингу
Попробуйте онлайн!
источник
Python 2 ,
676664 байтаПопробуйте онлайн!
Добавлено:
источник
ord sum == 201
трюк из других ответов.Желе , 11 байт
Попробуйте онлайн!
Как это работает
источник
PowerShell ,
5049 байтПопробуйте онлайн!
Создает диапазон от
999
до10000
, затем использует встроенный-match
в качестве фильтра для извлечения тех записей, с которыми совпадают регулярные выражения0
. Это оставляет нас с1000, 1001, 1002, etc.
Мы затемWhere-Object
передаем это в предложение, где мы берем текущее число в виде строки"$_"
,char
приводим его как -array,-join
эти символы вместе с+
иI
nvoke-Ex
pression (аналогично eval), чтобы получить их сумму в цифрах . Мы проверяем, является ли это-eq
UAL9
, и если это так, он передается по конвейеру. По завершении программы эти числа извлекаются из конвейера и неявно выводятся.источник
JavaScript (ES6),
7873 байтаСохранено 2 байта благодаря @KevinCruijssen
Возвращает разделенную пробелами строку.
Попробуйте онлайн!
Как?
Мы выполняем итерацию в диапазоне[ 1008..9000 ] с шагом 9 , игнорируя числа без 0 .
Все эти числа кратны9 , поэтому сумма их цифр также будет кратна 9 .
Отсюда и тест:
источник
1008
к999
, так как она не содержит 0 в любом случае, и999+9 = 1008
.f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)
(хотя и содержит конечную запятую, хотяf=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)
с разделителем пробела, включая конечный пробел, может выглядеть красивее)JavaScript (Node.js) , 89 байт
Попробуйте онлайн!
JavaScript (Node.js),
12912712612411511411111010597939290 байтПопробуйте онлайн!
объяснение
Впервые занялся кодовым гольфом на JavaScript. Я не думаю, что мне нужно это говорить, но если я делаю что-то не так, пожалуйста, сообщите мне в комментариях ниже.
-3 байта благодаря @Luis felipe De jesus Munoz
-6 байт благодаря @Kevin Cruijssen
источник
[...Array(9e3)]
вместо этогоArray(9e3).fill()
экономит 2 байта.map(a=>+a)
вместо этого.map(Number)
сохраняет еще один байт(_, i)
чтобы сохранить байт, иs[0]+s[1]+s[2]+s[3]
может быть,eval(s.join`+`)
чтобы сохранить дополнительные 4 байта.||
может быть|
в вашем ответе..map()
только для генерации диапазона и не используете фильтрацию отдельно, вы можете сохранить 8 байтов: попробуйте онлайн!Python 2 , 57 байт
Попробуйте онлайн!
2 байта благодаря Денису
Использует
exec
цикл для отсчетаn
с шагом 9 как 1008, 1017, ..., 9981, 9990, печатая те, которые удовлетворяют условию.Только кратные 9 могут иметь сумму цифр 9, но кратные 9 в этом диапазоне также могут иметь сумму цифр 18 и 27. Мы исключаем их с условием
int(`n`,11)%10>8
. Интерпретируяn
в базе 11, его сумма цифр равна числу по модулю 10, точно так же как в базе 10 число равно его сумме цифр по модулю 9. Сумма цифр (9, 18, 27) соответствует (9, 8, 7) по модулю 10, так что взяв эти>8
работы, чтобы отфильтровать девятки.Число, содержащее ноль, проверяется со строковым членством.
'0'in`n`
, Это условие соединяется с другим с цепочечным неравенством, при котором Python 2 обрабатывает строки как числа больше, чем числа.источник
sed и grep (и seq),
726463 байтаисточник
grep
, так что, может быть, я ошибаюсь?)Haskell , 55 байтов
Спасибо @Laikoni, смотрите комментарии.
Удобочитаемый:
источник
(-48+)
и сравнив сумму201
вместо9
. Между прочим, это также позволяет использовать1
вместо1000
диапазона.main=print
была хороша в соответствии с этим консенсусом по Meta .9999
может быть5^6
вместо.R , 82 байта
Попробуйте онлайн!
Создает матрицу
x
из всех возможных четырехзначных чисел, исключая ведущие нули, идущие вниз по столбцам. Тогда фильтры для столбцовых (цифровых) сумм из 9 и содержащих ноль, т. Е. Неall
равны нулю.write
печатает вниз по столбцам, так что мыwrite
доstdout
шириной4
и сепаратора""
.Outgolfed Дж. Доу
источник
Japt ,
2018 байт.-2 байта благодаря @Shaggy и @ETHproductions
Попробуйте онлайн!
источник
A³ò9000 f_ìx ¥9©ZsøT
возвращает вас обратно до 20.ì
вместоs
и¬
, что должно быть сделано в фильтре:f_=ì)x ¥9...
. Затем вы можете сохранить другой, проверив, равен ли продукт Z нулю с помощью«Z×
: Попробуйте онлайн!Java 8,
128117115 байт-11 байт благодаря @nwellnhof .
Попробуйте онлайн.
Объяснение:
источник
chars().sum()==201
?R 85 байт
(просто соревнуемся за лучшее злоупотребление R квадратными скобками ...: P)
Попробуйте онлайн!
источник
05AB1E ,
15131210 байт-2 байта благодаря @Emigna
-3 байта благодаря @Grimy
Попробуйте онлайн.
Объяснение:
°
ö
°
ö
°
ö
0
2345
2030405
°
ö
00
3456
3004005006
0
°ö
9Q
°ö
источник
₄4°Ÿʒ0å}ʒSO9Q
, Расщепляющие фильтры обычно короче4°
. Спасибо. И вы действительно правы, что несколько незакрепленных фильтров (в конце) короче. Также добавлю это в один из моих советов. Спасибо за оба байта!4°Lʒ0å}ʒÇOт·-
. Оставив это здесь, возможно, кто-то может₄4°ŸʒD0åôO9Q
, Использование одного фильтра обычно короче.₄4°ŸʒW°ö9Q
Пип , 18 байт
Используйте флаг формата
-p
вывода, например, чтобы получить читаемый вывод. Попробуйте онлайн!источник
Wolfram Language (Mathematica) ,
5655 байтПопробуйте онлайн!
Мы тестируем диапазон от 9! = От 945 до 9999, поскольку между 945 и 999 нет результатов. Возможно, есть более короткий способ также написать число от 9000 до 10007.
Tr@#==Times@@#+9&
применяется к{a,b,c,d}
тестам ifa+b+c+d == a*b*c*d+9
, что в конечном итоге эквивалентно условию Anno.источник
9*7*5*3*1
.Рубин ,
46 4241 байтПопробуйте онлайн!
Как это работает:
(Спасибо Лайкони за -2 байта)
источник
9*3
может быть просто9
, потому что проверка по 201 уже требует 4-значных чисел.Октава , 49 байт
6 байтов сохранены с использованием более удобного формата вывода, предложенного J.Doe .
Спасибо @Laikoni за исправление .
Попробуйте онлайн!
источник
disp
...Дротик ,
103 10096 байтДовольно понятно. генерирует список из 9001 (0-9000) ячеек с индексом ячейки в качестве значения, фильтрует ячейки, содержащие 0, а затем ячейку с суммой ASCII, равной 201 (результат, если все символы ASCII суммируются до 9). Эти условия подразумевают, что год состоит из 4 цифр, потому что, используя 2 числа ASCII (и 0), вы не можете достичь 201.
Попробуйте это на Dartpad!
источник
Bash (с
seq
,grep
), 39 байтПопробуйте онлайн!
источник
seq 0 9 1e4|awk '/([0-4].*){3}/&&/0/'
сохранить два байта.К (нгн / к) , 22 байта
Попробуйте онлайн!
источник
55_&9=+/y*|/'~y:!4#10
за 21?'
в|/'
внешности неправильно. результат включает в себя 1116, 1125, 1134 и т. д., которых там не должно бытьAPL (Dyalog Unicode) , 23 байта
Попробуйте онлайн!
источник
<
умно. Вы можете сделать его еще короче с помощью⎕io←0
и(
)10⊥⍣¯1⍳9e3
->(
)¨,⍳4⍴10
PHP,
69, 87 байт,74 байтаfor($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;
Обратите внимание, что это ставит пробел для каждого «неудачного» числа, что приводит к некоторому фанки. Это можно изменить на разделение запятыми, но добавим еще 4 символа:
?$i.",":""
Стал больше, потому что я не проверял на 0. Сумасшедший. Сокращено на 13 от Тита!
источник
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
?"$i,":""
э-э ... теперь наоборот:?"":"$i,"
APL (Dyalog),
3329 байт-4 байта благодаря @ Адам
Попробуйте онлайн!
источник
1e3+⍸(0∘∊∧9=+/)¨⍎¨∘⍕¨1e3+⍳9e3
Scala (
76636156 байт)Попробуйте онлайн
источник
t.sum==201
работает вместоt.map(_.asDigit).sum==9
.s"$n"
может бытьn+""
иs"$t "
может бытьt+" "
.Tcl , 77 байт
Попробуйте онлайн!
источник
Japt, 16 байт
Возвращает массив массивов цифр.
Попробуй это
объяснение
источник
APL (NARS), 45 символов, 90 байтов
протестируйте после некоторого форматирования:
возможная альтернатива
источник
Желе , 13 байт
Попробуйте онлайн!
Как?
источник