Pregunta:
Se le darán los enteros iniciales y finales de una secuencia y deberá devolver el número de enteros que no contienen el dígito 5
. ¡Se deben incluir los números de inicio y fin!
Ejemplos:
1,9 → 1,2,3,4,6,7,8,9 → Resultado 8
4,17 → 4,6,7,8,9,10,11,12,13,14,16,17 → Resultado 12
50,60 → 60 → Resultado 1
-59, -50 → → Resultado 0
El resultado puede contener cinco.
El número inicial siempre será más pequeño que el número final. ¡Ambos números también pueden ser negativos!
Tengo mucha curiosidad por sus soluciones y la forma en que las resuelve. Quizás alguien de ustedes encuentre una solución matemática pura y fácil.
Editar Este es un desafío de código de golf, por lo que gana el código más corto.
50, 59 -> 0
.Respuestas:
JavaScript (ES6),
3633 bytesToma entrada con la sintaxis de curry
(a)(b)
.Formateado y comentado
Casos de prueba
Mostrar fragmento de código
fuente
test
másexec
cuando sólo se necesita un valor lógico.)b<a
está allí para detener la recursividad después de contar todos los números desdeb
hastaa
, por lo que eliminarla solo causaría una recursión infinita.a
como argumento y devuelve laF
función, que a su vez tomab
como argumento y, como notó, se llama recursivamente para iterar deb
aa
, incrementando un contador para todos los enteros que no contienen un5
en su decimal representación.Gelatina ,
87 bytes-1 byte gracias a Dennis (use el hecho de que la indexación en un número trata ese número como una lista decimal)
TryItOnline!
¿Cómo?
* El átomo de valor absoluto
A
es necesario ya que un número negativo emitido a una lista decimal tiene entradas negativas, ninguna de las cuales sería nunca un5
(el ejemplo dado contaría los ocho en lugar de dos).fuente
rAw€5¬S
Guarda un byte.w
lanza un argumento entero a sus dígitos decimales.Bash + grep, 17 bytes
Pruébalo en línea!
fuente
2sable ,
65 bytesSalvó un byte gracias a Adnan
Pruébalo en línea!
Explicación
Nota: Esto funciona debido a un error al
¢
hacer que la función se aplique a cada elemento en lugar de contar elementos coincidentes en la lista.fuente
`
que se comporta igual en las matrices: p.Python2,
59555251474342 bytesUna solución recursiva. ¡Gracias a @xnor por motivarme a encontrar una solución utilizando operadores lógicos! Además, gracias a @JonathanAllan y @xnor por guiarme y cortar el byte del 43 al 42!
Otros intentos a 43 bytes
fuente
if!`x`.count('5')
?not
operador que está!
en lenguajes tipo C, pero que requiere 3 bytes :(and
yor
.not
.Utilidades Bash / Unix, 21 bytes
Pruébalo en línea!
fuente
05AB1E ,
876 bytesSalvó un byte gracias a Adnan
Pruébalo en línea!
Explicación
fuente
å
, que es.å
, por lo que puede hacerloŸ5.å_O
por 6 bytes.negate
significado-n
, on==0?1:0
?n==0?1:0
Pyth,
98 bytes¡Ahorré un byte gracias a FryAmTheEggman!
Explicación:
Pruébalo en línea!
fuente
Perl 6 , 23 bytes
Pruébalo en línea!
Cómo funciona
fuente
Haskell , 39 bytes
Pruébalo en línea! Uso:
Explicación:
fuente
R, 33 bytes
Uso:
fuente
Octava , 36 bytes
Pruébalo en línea!
fuente
Groovy,
47454340 bytesEste es un cierre sin nombre.
findAll
es similar a agregar unif
condición en una lista de comprensión en python.Pruébalo en línea!
fuente
PHP 7.1,
5755 bytesCorre con
php -r '<code>' <a> <b>
fuente
Mathematica,
464442 bytes¡Gracias a alephalpha y DavidC por guardar 2 bytes cada uno!
Función sin nombre que toma dos argumentos enteros y devuelve un entero.
IntegerDigits@Range@##
convierte todos los números entre las entradas en listas de dígitos;FreeQ@5
prueba esas listas para decidir cuáles no contienen ninguna5
. LuegoBoole
convierte los booleanos a ceros y unos, yTr
suma los resultados.Otras soluciones (44 y 47 bytes):
IntegerDigits@x~FreeQ~5
determina si la lista de dígitos de un número no tiene 5 segundos yCount[Range@##,x_/;...]&
cuenta cuántos números entre las entradas pasan esa prueba.1##&@@IntegerDigits@#-5
toma la lista de dígitos de un número, resta 5 de todos ellos y multiplica las respuestas juntas;Sign[...]^2
luego convierte todos los números distintos de cero a 1.fuente
Count[Range@##,x_/;IntegerDigits@x~FreeQ~5]&
Tr@Boole[FreeQ@5/@IntegerDigits@Range@##]&
Ruby,
3635 bytesThx IMP1 para -1 byte
fuente
?5
(el'5'
carácter) en lugar de/5
/ en la búsqueda para guardar un byte.Java 7,
8078 bytesSin golf:
Código de prueba:
Pruébalo aquí
Salida:
fuente
PowerShell,
4241 bytesLlamado desde la línea de comando como. \ No5s.ps1 1 20
fuente
-replace3
o-split1
o-notmatch5
).Python 2,
6156 bytes-5 bytes gracias a tukkaaX
fuente
not "5" in
:) Además, si está utilizando Python2, puede rodearx
con `` comillas, en lugar de hacerlostr(x)
.[]
. Tampoco necesitas el espacio antesif
.lambda a,b:sum(not"5"in`n`for n in range(a,b+1))
funciona sin embargo. tio.run/nexus/…Swift 52 bytes
fuente
Lote, 95 bytes
El bucle manual ahorra algunos bytes porque de todos modos necesito el contador de bucle en una variable.
fuente
PHP, 56 bytes
Corre así:
Una versión para PHP 7.1 tendría 53 bytes (créditos para Titus):
Explicación
fuente
trim
parámetro nuevamente.CJam "solución matemática pura y fácil", 60
Pruébalo en línea
Toma los números en cualquier orden, en una matriz.
Explicación:
Un problema central es calcular f (n) = el número de números que no son 5 de 1 a n (inclusive) para cualquier n positivo. Y la respuesta es: tome los dígitos decimales de n, reemplace todos los dígitos después de los primeros 5 (si los hay) con 9, luego reemplace todos los dígitos 5..9 con 4..8 (decremento), y convierta desde la base 9. Ej. 1752 → 1759 → 1648 → 1 * 9 ^ 3 + 6 * 9 ^ 2 + 4 * 9 + 8 = 1259. Básicamente, cada posición de dígito tiene 9 valores aceptables, y un 5xxxx es equivalente a un 49999 porque no hay más números válidos entre ellos.
Una vez que resolvimos esto, tenemos algunos casos: si los números de entrada (digamos a y b, a <b) son (estrictamente) positivos, entonces el resultado es f (b) -f (a-1). Si son negativos, entonces podemos tomar los valores absolutos, reordenarlos y usar el mismo cálculo. Y si a <= 0 <= b, entonces el resultado es f (-a) + f (b) +1.
El programa primero implementa la función F como se describió anteriormente (pero se aplica a cada número en una matriz), luego lee la entrada, convierte los números al valor absoluto y los reordena, y usa uno de los 2 cálculos anteriores, en función de si * b> 0 inicialmente.
fuente
Python 2 , 54 bytes
Pruébalo en línea!
No es la respuesta más corta de Python. Utiliza el mismo algoritmo pero una forma diferente de implementar con un ciclo while y no es una función lambda.
fuente
Java 7, 77 bytes
Esta es una mejora de la respuesta de Kevins , pero dado que aún no tengo la reputación de comentar, esta nueva respuesta tendrá que funcionar.
Entonces lo que hice fue:
indexOf
declaraciones concontains
(-1 byte)bucle for ( 77 bytes ):
recursivo ( 79 bytes ):
Salida:
¡Pruébalo aquí !
fuente
(""+a).contains("5")?0:1
ser reemplazable por!(""+a).contains("5")
?(""+a).contains("5")||r++
?C #, 67 bytes
fuente
for(int c=0;...)
pero luego falla al compilar porque el retorno está fuera del alcance dec
JavaScript (ES6),
58 5649 bytesGolfó 7 bytes gracias a ETHproductions .
fuente
c+=!/5/.test(s++)
para guardar algunos bytes :-)MATL , 10 bytes
Pruébalo en línea!
Explicación
fuente
C #, 77 bytes
Llamada anónima lambda.
Utiliza
n
(primer número) ym
(último número) como entrada, luego verifica mediante la contención de cadena ("".Contains("")
).fuente
5
en su número, por lo10
que (lo que su respuesta no contaría) debe contarse.g
debe inicializarse cuando se indica como se llama,var
por lo que necesitavar g="";
y puede usar curry, es decirn=>m=>
En realidad , 13 bytes
Pruébalo en línea!
Explicación:
fuente