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,
}g
se 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"
24
Si , 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
x
función, comoa
yb
, respectivamente. La salida esn
impresa.Sin golf:
fuente
n=n+1
conn+=1
y moviéndolo justo después de la sentencia if (if...:n+=1
)a
yb
como variables pre-declaradas. Tienes que tener una función o tomarlos a través de la entradan=0
parte 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 laF
construcción.fuente
scipen
problema. Oh bien.Casco , 12 bytes
Pruébalo en línea!
Explicación
fuente
[000000, 001001]
debería dar como resultado2
(000000
y001001
), pero da como resultado en su1001
lugar. (1,000,000
1
Carbó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
sum
puede 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*r
en 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:
a
ab
), por lo quea
se pueden reutilizar como la variable del bucle, soltandoi
;b
anterior al ciclo). Lo uséb
como contenedor, incrementándolo cuando se encuentra un número de la suerte y al final del ciclob
está lejos de su valor anterior por la cantidad de números de la suerte, por lo queb-a
da el resultado correcto. Esto dejó caers
.Reemplazar
d
con operaciones directamente ena
acorta el ciclo. Sustitución dec
las operaciones directamente ena
dosis no acortar el bucle, pero, después de caerd
, el lazo debegin
yend
son 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 completoIntStream
ya que no está enjava.lang
.java.util.stream.
frenteIntStream
a 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.format
a"".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€S
ya 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€S
guarda elµ
.Powershell, 85 bytes
Script de prueba:
Salida:
fuente
Kotlin, 95 bytes
.kt
para 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 de10000
y asignar10
a 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!
t
convierte la cadena en números y los resume.r
toma el rango de números des
ae
y 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