Na série de videogames Anno, existem 6 jogos com o 7º anunciado para o início de 2019. Seus títulos sempre apresentam um ano em um padrão específico:
Anno 1602, Anno 1503, Anno 1701, Anno 1404, Anno 2070, Anno 2205, Anno 1800
- A soma digital é sempre 9.
- Os anos têm quatro dígitos.
- Eles contêm pelo menos um zero.
Dentro dessas restrições, existem 109 títulos possíveis:
[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]
Seu objetivo é listar todos eles de qualquer forma razoável no menor número de bytes.
code-golf
number
kolmogorov-complexity
Laikoni
fonte
fonte
Respostas:
R ,
5951 bytesEmite os números válidos como os nomes de uma lista de 201's. Por que 201? Porque ASCII 0 é 48 e 4 * 48 + 9 é ... sim. Salva 6 bytes fazendo alias
^
paraMap
e outros 2 usando1:9e3
como intervalo.Experimente online!
Explicação
fonte
grep
, por que eu nunca me lembro que ele lança paracharacter
...Perl 6 ,
3533 bytes-2 bytes graças a Jo King
Experimente online!
fonte
Python 2 ,
676664 bytesExperimente online!
Salvou:
fonte
ord sum == 201
truque de outras respostas.Gelatina , 11 bytes
Experimente online!
Como funciona
fonte
PowerShell ,
5049 bytesExperimente online!
Constrói um intervalo de
999
a e10000
, em seguida, usa inline-match
como um filtro para extrair as entradas com as quais a expressão regular corresponde0
. Isso nos deixa em1000, 1001, 1002, etc.
seguida. Nós colocamos isso em umaWhere-Object
cláusula em que pegamos o número atual como uma string"$_"
, ochar
colocamos como uma matriz,-join
esses caracteres juntamente com+
eI
nvoke-Ex
pression (semelhante a eval) para gerar sua soma de dígitos. Verificamos se isso é-eq
necessário9
e, se for o caso, é passado no pipeline. Na conclusão do programa, esses números são capturados no pipeline e gerados implicitamente.fonte
JavaScript (ES6),
7873 bytesGuardado 2 bytes graças a @KevinCruijssen
Retorna uma string separada por espaço.
Experimente online!
Quão?
Nós iteramos no intervalo[ 1008..9000 ] com um incremento de 9 , ignorando números que não possuem um 0 0 .
Como todos esses números são múltiplos de9 , é garantido que a soma de seus dígitos também seja um múltiplo de 9 .
Como os números válidos têm pelo menos um0 0 , eles não têm mais que dois 9 's, o que significa que a soma dos dígitos restantes é no máximo 18 . Portanto, basta testar se a soma dos dígitos é ímpar.
Daí o teste:
fonte
1008
para999
, já que ele não contém um 0 e999+9 = 1008
.f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)
(contém uma vírgula no final, porém, assimf=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)
com espaço delimitador incluindo espaço à direita pode parecer mais bonita)JavaScript (Node.js) , 89 bytes
Experimente online!
JavaScript (Node.js),
12912712612411511411111010597939290 bytesExperimente online!
Explicação
Primeira vez fazendo código de golfe em JavaScript. Acho que não preciso dizer, mas se estiver fazendo algo errado, notifique-me nos comentários abaixo.
-3 bytes graças a @Luis felipe De jesus Munoz
-6 bytes graças a @Kevin Cruijssen
fonte
[...Array(9e3)]
em vez disso,Array(9e3).fill()
salva 2 bytes.map(a=>+a)
em vez disso,.map(Number)
salva outro byte(_, i)
para salvar um byte, es[0]+s[1]+s[2]+s[3]
pode sereval(s.join`+`)
para salvar um adicional de 4 bytes.||
pode estar|
na sua resposta..map()
apenas para gerar o intervalo e manter a filtragem separada, poderá salvar 8 bytes: Experimente online!Python 2 , 57 bytes
Experimente online!
2 bytes graças a Dennis
Usa um
exec
loop para contarn
em etapas de 9 como 1008, 1017, ..., 9981, 9990, imprimindo aqueles que atendem à condição.Somente múltiplos de 9 podem ter a soma dos dígitos 9, mas múltiplos de 9 nesse intervalo também podem ter a soma dos dígitos de 18 e 27. Nós descartamos isso com a condição
int(`n`,11)%10>8
. Interpretaçãon
na base 11, sua soma de dígitos é igual ao número módulo 10, assim como na base 10 um número é igual a sua soma de dígitos módulo 9. A soma dos dígitos de (9, 18, 27) corresponde a (9, 8, 7) módulo 10, de modo a realizar essas>8
obras para filtrar nove.O número que contém zero é verificado com a associação da string.
'0'in`n`
. Essa condição é associada à outra com uma desigualdade encadeada, usando que o Python 2 trata as strings como maiores que os números.fonte
sed e grep (e seq),
726463 bytesfonte
grep
, então talvez eu esteja errado?)Haskell , 55 bytes
Graças a @Laikoni, veja os comentários.
Legível:
fonte
(-48+)
e comparando a soma em201
vez de9
. Aliás, isso também permite que você use em1
vez do1000
intervalo.main=print
foi boa de acordo com este consenso no Meta .9999
pode ser em5^6
vez disso.R , 82 bytes
Experimente online!
Gera uma matriz
x
de todos os possíveis números de 4 dígitos, excluindo zeros à esquerda, descendo colunas. Em seguida, os filtros para as somas da coluna (digital) de 9 e contendo zero, ou seja, nãoall
são diferentes de zero.write
imprime as colunas, então nóswrite
astdout
com uma largura de4
e um separador de""
.Superado por J.Doe
fonte
Japt ,
2018 bytes.-2 bytes graças a @Shaggy e @ETHproductions
Experimente online!
fonte
A³ò9000 f_ìx ¥9©ZsøT
você recebe de volta para baixo para 20.ì
em vez des
e¬
, o que tem que ser feito no filtro:f_=ì)x ¥9...
. Em seguida, você pode salvar outro, verificando se o produto de Z é zero com«Z×
: Experimente online!Java 8,
128117115 bytes-11 bytes graças a @nwellnhof .
Experimente online.
Explicação:
fonte
chars().sum()==201
?R , 85 bytes
(apenas competindo pelo melhor abuso de colchetes R ...: P)
Experimente online!
fonte
05AB1E ,
15131210 bytes-2 bytes graças a @Emigna
-3 bytes graças a @Grimy
Experimente online.
Explicação:
°
ö
) atuaria como uma soma de dígitos.°
ö
°
ö
0
2345
2030405
).°
ö
00
3456
3004005006
0
°ö
9Q
°ö
fonte
₄4°Ÿʒ0å}ʒSO9Q
. Filtros de divisão são geralmente mais curto4°
. Obrigado. E você está certo de que vários filtros soltos (no final) são mais curtos. Também o adicionarei a uma das minhas respostas de dicas. Obrigado por ambos os bytes!4°Lʒ0å}ʒÇOт·-
. Deixando esta aqui, talvez golf Alguém pode-lo ainda mais₄4°ŸʒD0åôO9Q
. Usar um único filtro geralmente é mais curto.₄4°ŸʒW°ö9Q
Pip , 18 bytes
Use um sinalizador no formato de saída,
-p
para obter uma saída legível. Experimente online!fonte
Wolfram Language (Mathematica) ,
5655 bytesExperimente online!
Testamos o intervalo de 9 !! = 945 a 9999, já que não há resultados entre 945 e 999. Talvez haja uma maneira mais curta de escrever um número entre 9000 e 10007 também.
Tr@#==Times@@#+9&
aplicado a{a,b,c,d}
testes ifa+b+c+d == a*b*c*d+9
, que acaba sendo equivalente ao The Anno Condition.fonte
9*7*5*3*1
.Ruby ,
46 4241 bytesExperimente online!
Como funciona:
(Obrigado Laikoni por -2 bytes)
fonte
9*3
pode ser justo9
, porque verificar 201 já exige números de 4 dígitos.Oitava , 49 bytes
6 bytes salvos usando um formato de saída mais conveniente, conforme sugerido por J.Doe .
Obrigado a @Laikoni por uma correção .
Experimente online!
fonte
disp
off ...Dardo ,
103 10096 bytesBastante auto-explicativo. gera uma lista de 9001 (0-9000) células com o índice da célula como valor, filtra as que contêm um 0 e a que possui uma soma ASCII de 201 (o resultado se todos os caracteres ASCII somarem 9). Essas condições incluem implicitamente que o ano tem 4 dígitos porque, usando 2 números ASCII (e 0), você não pode alcançar 201.
Experimente no Dartpad!
fonte
Bash (com
seq
,grep
), 39 bytesExperimente online!
fonte
seq 0 9 1e4|awk '/([0-4].*){3}/&&/0/'
salvar dois bytes.K (ngn / k) , 22 bytes
Experimente online!
fonte
55_&9=+/y*|/'~y:!4#10
para 21?'
em|/'
parece errado. o resultado inclui 1116, 1125, 1134, etc, que não deveriam estar láAPL (Dyalog Unicode) , 23 bytes
Experimente online!
fonte
<
é inteligente. você pode torná-lo ainda mais curto com⎕io←0
e(
)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;
Observe que isso coloca um espaço para cada número "com falha", levando a algum tipo de espaçamento descolado. Isso pode ser alterado para separação por vírgula, mas adicionará outros 4 caracteres:
?$i.",":""
Aumentou porque eu não estava checando 0. Derp. Encurtado por 13 por Titus!
fonte
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
?"$i,":""
er ... agora o contrário:?"":"$i,"
APL (Dyalog),
3329 bytes-4 bytes graças a @Adam
Experimente online!
fonte
1e3+⍸(0∘∊∧9=+/)¨⍎¨∘⍕¨1e3+⍳9e3
Scala (
76636156 bytes)Experimente online
fonte
t.sum==201
funciona em vez det.map(_.asDigit).sum==9
.s"$n"
pode sern+""
es"$t "
pode sert+" "
.Tcl , 77 bytes
Experimente online!
fonte
Japonês, 16 bytes
Retorna uma matriz de matrizes de dígitos.
Teste-o
Explicação
fonte
APL (NARS), 45 caracteres, 90 bytes
teste depois de alguma formatação:
alternativa possível
fonte
Gelatina , 13 bytes
Experimente online!
Quão?
fonte