En Rusia tenemos algo así como una tradición: nos gusta buscar boletos con suerte.
Así es como se ve un boleto normal:
Como puede ver, el boleto tiene un número de seis dígitos.
Un número de seis dígitos se considera afortunado si la suma de los primeros tres dígitos es igual a la suma de los últimos tres.
El número de la foto no tiene suerte:
038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19
Desafío
Dados los límites de un rango (inclusive), devuelve el número de números de boletos de suerte que contiene.
Parámetros
- Entrada: 2 enteros: el primero y el último entero en el rango
- Las entradas serán entre 0 y 999999 inclusive
- Salida: 1 entero: cuántos números de la suerte hay en el rango
- Puede tomar las entradas y devolver la salida en cualquier formato aceptable
- Suponga ceros a la izquierda para números menores a 100000.
Ejemplos
0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252
Este es el código de golf, por lo que gana la respuesta más corta en bytes en cada idioma.



Respuestas:
05AB1E ,
8 (¿o 10?)11 (¿o 13?) BytesPruébelo en línea o verifique algunos casos de prueba más .
NOTA: en 05AB1E, las cadenas y los enteros son intercambiables, por lo que los números de salida no contienen ceros a la izquierda. Sin embargo, esto podría solucionarse con 1 byte adicional ( 12 bytes ):
Pruébelo en línea o verifique algunos casos de prueba más .
+3 bytes para corregir errores con una longitud de 3 o menos (rango
[000000, 000999]).Explicación:
EDITAR: Parece que I (y la mayoría de las otras respuestas) interpretaron mal el desafío y se pregunta la cantidad de números en lugar de los números dentro del rango. En ese caso,
}gse puede agregar un final (cierre el filtro; y obtenga la cantidad de números restantes en la lista filtrada), por lo que son1013 bytes en su lugar:Pruébelo en línea o verifique algunos casos de prueba más .
fuente
R.C # (.NET Core) , 93 + 18 = 111 bytes
Pruébalo en línea!
18 bytes para
using System.Linq;. Supuse que los formatos de entrada y salida podrían ser flexibles. Entonces tomo dos enteros como entrada (el rango, inclusive).Algunos resultados de la prueba:
fuente
JavaScript (ES6), 66 bytes
Toma entrada en la sintaxis de curry
(m)(n), donde m es el límite superior inclusivoexclusivoyn es el límite inferior inclusivo.Pruébalo en línea!
¿Cómo?
Probamos cada número caminando a través de sus dígitos d i y actualizando un total t :norte reyo t
Si tenemos al final del proceso, entonces n es un número de la suerte.t = 0 norte
JavaScript (ES6), 67 bytes
Mismo formato de entrada.
Pruébalo en línea!
¿Cómo?
38937 --> 38.937['3','8','.','9','3','7']+:"3+8+.+9+3+7"+.con^:"3+8^+9+3+7"24Si , no se genera punto decimal y la expresión evaluada es solo una suma positiva (falsedad), a menos que (verdad). Este es el resultado esperado en ambos casos.n = 0n ≡ 0( mod1000 ) n = 0
fuente
Ruby ,
5654 bytesPruébalo en línea!
Método:
fuente
Japt ,
3815 bytes-23 gracias a Shaggy!
Mi primera presentación de Japt; ¡Gracias a Shaggy por toda la ayuda!
Pruébalo en línea!
fuente
Python 3,
117113106135 bytesEsta es mi primera respuesta, así que estoy seguro de que hay margen de mejora.
Obtiene los primeros tres dígitos a través de la división de enteros, y los últimos tres a través del módulo. El primer y el último número entero en el rango se ingresan como argumentos de la
xfunción, comoayb, respectivamente. La salida esnimpresa.Sin golf:
fuente
n=n+1conn+=1y moviéndolo justo después de la sentencia if (if...:n+=1)aybcomo variables pre-declaradas. Tienes que tener una función o tomarlos a través de la entradan=0parte al encabezado, comodef x(a,b,n=0)R ,
9386 bytesLógica más corta al final cumplidos de @ Giuseppe /
Pruébalo en línea!
Entradas enteras. Rellenarlos con
0. Convierte a los seis puntos de código ASCII. Abusar de laFconstrucción.fuente
scipenproblema. Oh bien.Casco , 12 bytes
Pruébalo en línea!
Explicación
fuente
[000000, 001001]debería dar como resultado2(000000y001001), pero da como resultado en su1001lugar. (1,000,0001Carbón de leña , 15 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Editar: Originalmente pensé que se requería la lista de números de la suerte. Esto se puede hacer en 14 bytes (quitando el
L, que toma la longitud de la lista), o en 20 bytes si desea un buen formato:Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Perl 5 +
-pl -MList::Util+(sum), 49 bytesPruébalo en línea!
Perl 5 +
-nl -MList::Util+(sum) -M5.010, 50 bytesPara generar cada boleto en su lugar es +1 byte:
Pruébalo en línea!
fuente
Python 3 ,
8986 bytes-2 gracias al Sr. Xcoder.
-3 inspirador de la respuesta de Asone Tuhid.
Resultados de las pruebas:
Pruébalo en línea!
fuente
sumpuede hacer cualquier generador para que[...]no se necesiten los soportesrange(a,b+1)La especificación ahora dice "inclusivo" (si no fuera así, podría usarlo*ren su lugara,b, consulte mi respuesta de Python 2). También tenga en cuenta que la especificación ahora confirma que debería ser el recuento que se emite.MATL , 24 bytes
Pruébalo en línea!
(-2 bytes gracias a Luis Mendo.)
&:- Haga un rango inclusivo entre los dos números dados1e3&\- 'divrem': divide entre 1000 y obtén los recordatorios y los cocientes del suelo en dos matrices.,- hacer dos veces!'03d'&V- transponer y convertir cada valor en una cadena de tres anchos con relleno de cero&s- suma los valores de cada filaw- cambie para sacar el conjunto de recordatorios y vuelva a hacer esto]- bucle final=- comprobar la igualdad (devuelve 1s en lugares donde las matrices son iguales)s- sumar aquellos para obtener el conteo (salida implícita)fuente
Kotlin ,
152119 bytesPruébalo en línea!
Tomar dos enteros que convertirlo en seis cadenas de símbolos y contar.
Lo optimizó gracias a mazzy y su solución a 119 bytes.
Pruébalo en línea!
fuente
{a:Int,b:Int->(a..b).map{"%06d".format(it)}.filter{(it[0]-'0')+(it[1]-'0')+(it[2]-'0')==(it[3]-'0')+(it[4]-'0')+(it[5]-'0')}.count()}dc , 44 bytes
Toma dos argumentos de una pila vacía, sale a la parte superior de la pila.
Pruébalo en línea!
El bit inteligente aquí es el uso de una macro sin nombre (es decir, sin almacenar) que se duplica antes de la ejecución para ejecutar una copia de sí mismo en la otra parte de tres dígitos.
Explicación
La macro interna
[rA~rA~++rx]tiene el efecto "calcular la suma de dígitos del número de tres dígitos que ocupa el segundo lugar en la pila, luego ejecuta la parte superior original de la pila como una macro".Programa principal:
fuente
Pascal (FPC) ,
163153 bytesPruébalo en línea!
Explicación
Aquí hay un código de aspecto normal primero:
Pruébalo en línea!
Luego abusé del comportamiento del bucle for:
aab), por lo quease pueden reutilizar como la variable del bucle, soltandoi;banterior al ciclo). Lo usébcomo contenedor, incrementándolo cuando se encuentra un número de la suerte y al final del ciclobestá lejos de su valor anterior por la cantidad de números de la suerte, por lo queb-ada el resultado correcto. Esto dejó caers.Reemplazar
dcon operaciones directamente enaacorta el ciclo. Sustitución declas operaciones directamente enadosis no acortar el bucle, pero, después de caerd, el lazo debeginyendson innecesarias y que terminó con el uso de variables de sólo 2 :)$inicia constantes hexadecimales en el código de golf. Si bien no guardan bytes, eliminan los espacios necesarios antes de las constantes decimales.fuente
Java (OpenJDK 8) , 162 bytes
... toma prestado del ejemplo de Kotlin anterior.
Pruébalo en línea!
Comparar la suma de los bytes de la cadena es tan bueno como sumar los dígitos reales.
fuente
a->b->), pero deberá calificar por completoIntStreamya que no está enjava.lang.java.util.stream.frenteIntStreama su código y el conteo de bytes. Como también mencionó Jakob , puede guardar un byte usandoa->b->, y también puede guardar algunos bytes adicionales al cambiarString.formata"".format. Pruébelo en línea: 139 bytes . Buena primera respuesta, sin embargo. +1 de mi parte ¡Disfruta tu estancia!PHP , 131 bytes
Para ejecutarlo:
Ejemplo:
O Pruébelo en línea!
fuente
Perl 6 ,
5149 bytesPruébalo en línea!
Bloque de código anónimo que toma dos números y devuelve el número de afortunados. Tiempos de espera para entradas más grandes
fuente
Jalea ,
98 bytes-1 gracias a Dennis (
rµ...E)S->r...E€Sya que todo se vectoriza).Un enlace diádico que acepta los dos puntos finales del rango (en ambos sentidos) que produce el recuento de boletos afortunados.
Pruébalo en línea! O ver un conjunto de pruebas
¿Cómo?
fuente
E€Sguarda elµ.Powershell, 85 bytes
Script de prueba:
Salida:
fuente
Kotlin, 95 bytes
.ktpara prueba:Explicación
Cuente los números del rango donde la suma de todos los dígitos numéricos es igual a la suma doble de los primeros 3 dígitos.
fuente
Stax , 14 bytes
¡Corre y depúralo , pero sé paciente!
fuente
Python 2 ,
8380 bytes-3 usando la observación de Asone Tuhid - ¡ ve a dar crédito!
Pruébalo en línea!
Al igual que mi respuesta Jelly (pero las entradas deben ordenarse aquí, es decir
a<=b)75 bytes para entrada
a, b+1(es decir, el rango excluye el límite derecho):Prueba este
fuente
Clojure, 102 bytes
Mezclar cadenas y matemáticas no es demasiado divertido.
fuente
J , 35 bytes
Pruébalo en línea!
fuente
C (gcc),
9088 bytesPuerto de mi respuesta Java . Pruébelo en línea aquí . Gracias a ceilingcat por jugar al golf dos bytes.
Sin golf:
fuente
L'✐'lugar de10000y asignar10a una variable.L'…'truco, está bien; pero guarda bytes? Me parece que es un carácter de varios bytes, por lo que al guardar caracteres, no puede guardar bytes ... ¿o sí?Java 8,
10199 bytesUn enfoque diferente al de la otra respuesta Java . En lugar de usar secuencias y cadenas, esto usa un bucle y evalúa los números directamente. Pruébelo en línea aquí .
Gracias a ceilingcat por jugar al golf dos bytes.
Sin golf:
fuente
VBA (Excel), 159 bytes
Usando la ventana inmediata y las celdas
[A1][A2]como entrada.fuente
F #, 110 bytes
Pruébalo en línea!
tconvierte la cadena en números y los resume.rtoma el rango de números desaey filtra los números que tienen mala suerte. Los primeros tres dígitos son recopilados porn/1000. Los segundos tres dígitos son calculados porn-(n/1000)*1000.fuente