En la serie de videojuegos Anno hay 6 juegos con un séptimo anunciado para principios de 2019. Sus títulos siempre cuentan con un año en un patrón específico:
Anno 1602, Anno 1503, Anno 1701, Anno 1404, Anno 2070, Anno 2205, Anno 1800
- La suma digital es siempre 9.
- Los años son cuatro dígitos de largo.
- Contienen al menos un cero.
Dentro de estas restricciones existen 109 títulos posibles:
[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]
Su objetivo es enumerarlos a todos en cualquier forma razonable en la menor cantidad de bytes.
code-golf
number
kolmogorov-complexity
Laikoni
fuente
fuente
Respuestas:
R ,
5951 bytesEmite los números válidos como los nombres de una lista de 201. ¿Por qué 201? Porque ASCII 0 es 48, y 4 * 48 + 9 es ... sí. Guardado 6 bytes por aliasing
^
aMap
y otro 2 utilizando1:9e3
como gama.Pruébalo en línea!
Explicación
fuente
grep
¿por qué nunca recuerdo que se lanza acharacter
...Perl 6 ,
3533 bytes-2 bytes gracias a Jo King
Pruébalo en línea!
fuente
Python 2 ,
676664 bytesPruébalo en línea!
Salvado:
fuente
ord sum == 201
truco de otras respuestas.Jalea , 11 bytes
Pruébalo en línea!
Cómo funciona
fuente
PowerShell ,
5049 bytesPruébalo en línea!
Construye un rango de
999
a10000
, luego usa en línea-match
como filtro para extraer aquellas entradas con las que coinciden las expresiones regulares0
. Esto nos deja con1000, 1001, 1002, etc.
Luego lo canalizamos en unaWhere-Object
cláusula donde tomamos el número actual como una cadena"$_"
, lo convertimos en unchar
matriz,-join
esos caracteres junto con+
yI
nvoke-Ex
presión (similar a eval) para obtener su suma de dígitos. Verificamos si eso es-eq
ual9
, y si es así, se pasa a la tubería. Al finalizar el programa, esos números se recogen de la tubería y se envían implícitamente.fuente
JavaScript (ES6),
7873 bytesGuardado 2 bytes gracias a @KevinCruijssen
Devuelve una cadena separada por espacios.
Pruébalo en línea!
¿Cómo?
Repetimos el rango[1008..9000] con un incremento de 9 , ignorando los números que no tienen un 0 .
Todos estos números son múltiplos de9 , por lo que la suma de sus dígitos es un múltiplo de 9 .
Como los números válidos tienen al menos un0 , no tienen más de dos 9 , lo que significa que la suma de los dígitos restantes es como máximo 18 . Por lo tanto, es suficiente para probar si la suma de los dígitos es impar.
De ahí la prueba:
fuente
1008
a999
, ya que de todos modos no contiene un 0, y999+9 = 1008
.f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)
(sin embargo, contiene una coma final, por lof=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)
que el delimitador de espacio, incluido el espacio final, puede parecer más bonito)JavaScript (Node.js) , 89 bytes
Pruébalo en línea!
JavaScript (Node.js),
12912712612411511411111010597939290 bytesPruébalo en línea!
Explicación
Primera vez haciendo código golf en JavaScript. No creo que deba decirlo, pero si estoy haciendo algo mal, notifíqueme en los comentarios a continuación.
-3 bytes gracias a @Luis felipe De jesus Munoz
-6 bytes gracias a @Kevin Cruijssen
fuente
[...Array(9e3)]
en cambioArray(9e3).fill()
ahorra 2 bytes.map(a=>+a)
en cambio.map(Number)
guarda otro byte(_, i)
para guardar un byte, ys[0]+s[1]+s[2]+s[3]
puede sereval(s.join`+`)
para guardar 4 bytes adicionales.||
puede estar|
en su respuesta..map()
solo usa para generar el rango y mantiene el filtrado por separado, puede guardar 8 bytes: ¡ Pruébelo en línea!Python 2 , 57 bytes
Pruébalo en línea!
2 bytes gracias a Dennis
Utiliza un
exec
bucle para contarn
en pasos de 9 como 1008, 1017, ..., 9981, 9990, imprimiendo los que cumplen la condición.Solo los múltiplos de 9 pueden tener una suma de dígitos 9, pero los múltiplos de 9 en este rango también pueden tener una suma de dígitos de 18 y 27. Los descartamos con la condición
int(`n`,11)%10>8
. Interpretandon
en la base 11, su suma de dígitos es igual al número módulo 10, al igual que en la base 10 un número es igual a su suma de dígitos módulo 9. La suma de dígitos de (9, 18, 27) corresponde a (9, 8, 7) módulo 10, por lo que tomar esos>8
trabajos para filtrar nueves.El número que contiene un cero es cheque con membresía de cadena.
'0'in`n`
. Esta condición se une con la otra con una desigualdad encadenada, usando que Python 2 trata las cadenas como mayores que los números.fuente
sed y grep (y seq),
726463 bytesfuente
grep
, ¿así que tal vez lo estoy ejecutando mal?)Haskell , 55 bytes
Gracias a @Laikoni, mira los comentarios.
Legible:
fuente
(-48+)
y comparando la suma en201
lugar de9
. Por cierto, esto también le permite usar en1
lugar de1000
para el rango.main=print
estaba bien según este consenso sobre Meta .9999
puede ser5^6
en su lugar.R , 82 bytes
Pruébalo en línea!
Genera una matriz
x
de todos los números posibles de 4 dígitos, excluyendo los ceros a la izquierda, bajando las columnas. Luego, los filtros para sumas de columnas (digitales) de 9 y que contienen cero, es decir, noall
son distintos de cero.write
impresiones de las columnas, por lo quewrite
astdout
con una anchura de4
y un separador de""
.Superado por J.Doe
fuente
Japt ,
2018 bytes.-2 bytes gracias a @Shaggy y @ETHproductions
Pruébalo en línea!
fuente
A³ò9000 f_ìx ¥9©ZsøT
lo vuelve a bajar a 20.ì
en lugar des
y¬
, que se tiene que hacer en el filtro:f_=ì)x ¥9...
. Luego puede guardar otro comprobando si el producto de Z es cero con«Z×
: ¡ Pruébelo en línea!Java 8,
128117115 bytes-11 bytes gracias a @nwellnhof .
Pruébalo en línea.
Explicación:
fuente
chars().sum()==201
?R , 85 bytes
(solo compitiendo por el mejor abuso de los corchetes R ...: P)
Pruébalo en línea!
fuente
05AB1E ,
15131210 bytes-2 bytes gracias a @Emigna
-3 bytes gracias a @Grimy
Pruébalo en línea.
Explicación:
°
) Y el número en base-1 convertido a un entero en base-10 (ö
) actuaría como una suma de dígitos.°
) Yö
, por supuesto, el número en base 10 convertido a un entero en base 10 ( ) seguirá siendo el mismo.°
) Y el número en base-100 convertido a un entero en base-10 (ö
) actuaría como una unión0
en este caso (es decir, se2345
convierte en2030405
).°
) Y el número en base-100 convertido a un entero en base-10 (ö
) actuaría como una unión00
en este caso (es decir, se3456
convierte en3004005006
).0
s en la 'unión'.Si el dígito más pequeño es> 0 con el rango dado [ 1000 , 10000 ] , el número resultante después [ 1111 , 9000000009000000009000000009 ] , por lo que nunca puede ser igual a 9 9 . Si el resultado es igual a9 9 ( re= 0 , resultando en una base-1 con 9 9 .
°ö
estaría dentro del rango9Q
) significaría que el dígito más pequeño es°ö
; y la suma de los dígitos erafuente
₄4°Ÿʒ0å}ʒSO9Q
. Los filtros de división suelen ser más cortos4°
. Gracias. Y de hecho tiene razón en que múltiples filtros sueltos (al final) son más cortos. También lo agregaré a una de mis respuestas de consejos. Gracias por los dos bytes!4°Lʒ0å}ʒÇOт·-
. Dejando esto aquí, tal vez alguien pueda seguir₄4°ŸʒD0åôO9Q
. El uso de un solo filtro suele ser más corto.₄4°ŸʒW°ö9Q
Pip , 18 bytes
Use un indicador de formato de
-p
salida como para obtener una salida legible. Pruébalo en línea!fuente
Wolfram Language (Mathematica) ,
5655 bytesPruébalo en línea!
Probamos el rango de 9 !! = 945 a 9999, ya que no hay resultados entre 945 y 999. Quizás también haya una forma más corta de escribir un número entre 9000 y 10007.
Tr@#==Times@@#+9&
aplicado a las{a,b,c,d}
pruebas ifa+b+c+d == a*b*c*d+9
, que termina siendo equivalente a The Anno Condition.fuente
9*7*5*3*1
.Ruby ,
46 4241 bytesPruébalo en línea!
Cómo funciona:
(Gracias Laikoni por -2 bytes)
fuente
9*3
puede ser justo9
, porque verificar contra 201 ya requiere números de 4 dígitos.Octava , 49 bytes
6 bytes guardados usando un formato de salida más conveniente como lo sugiere J.Doe .
Gracias a @Laikoni por una corrección .
Pruébalo en línea!
fuente
disp
fuera ...Dart ,
10310096 bytesBastante autoexplicativo. genera una lista de celdas 9001 (0-9000) con el índice de la celda como valor, filtra las que contienen un 0 y luego la que tiene una suma ASCII de 201 (El resultado si todos los caracteres ASCII suman 9). Estas condiciones incluyen implícitamente que el año tiene 4 dígitos porque al usar 2 números ASCII (y el 0), no puede llegar a 201.
Pruébalo en Dartpad!
fuente
Bash (con
seq
,grep
), 39 bytesPruébalo en línea!
fuente
seq 0 9 1e4|awk '/([0-4].*){3}/&&/0/'
guardar dos bytes.K (ngn / k) , 22 bytes
Pruébalo en línea!
fuente
55_&9=+/y*|/'~y:!4#10
por 21?'
en|/'
apariencia equivocada. el resultado incluye 1116, 1125, 1134, etc, que no se supone que debe estar allíAPL (Dyalog Unicode) , 23 bytes
Pruébalo en línea!
fuente
<
es inteligente. puede hacerlo aún más corto con⎕io←0
y(
)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;
Tenga en cuenta que esto pone un espacio para cada número "fallido", lo que lleva a algún tipo de espaciado funky. Esto se puede cambiar a separación por coma, pero agregará otros 4 caracteres:
?$i.",":""
Se hizo más grande porque no estaba buscando 0. Derp. ¡Acortado por 13 por Tito!
fuente
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
?"$i,":""
er ... ahora al revés:?"":"$i,"
APL (Dyalog),
3329 bytes-4 bytes gracias a @Adam
Pruébalo en línea!
fuente
1e3+⍸(0∘∊∧9=+/)¨⍎¨∘⍕¨1e3+⍳9e3
Scala (
76636156 bytes)Pruébalo en línea
fuente
t.sum==201
funciona en lugar det.map(_.asDigit).sum==9
.s"$n"
puede sern+""
ys"$t "
puede sert+" "
.Tcl , 77 bytes
Pruébalo en línea!
fuente
Japt, 16 bytes
Devuelve una matriz de matrices de dígitos.
Pruébalo
Explicación
fuente
APL (NARS), 45 caracteres, 90 bytes
prueba después de algún formato:
posible alternativa
fuente
Jalea , 13 bytes
Pruébalo en línea!
¿Cómo?
fuente