Pergunta:
Você receberá os números inteiros inicial e final de uma sequência e deve retornar o número inteiro que não contém o dígito 5
. Os números inicial e final devem ser incluídos!
Exemplos:
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
O resultado pode conter cinco.
O número inicial sempre será menor que o número final. Ambos os números também podem ser negativos!
Estou muito curioso por suas soluções e pela maneira como você as resolve. Talvez alguém encontre uma solução fácil de matemática pura.
Editar Este é um desafio do código-golfe, portanto o código mais curto vence.
50, 59 -> 0
.Respostas:
JavaScript (ES6),
3633 bytesRecebe entrada com sintaxe de currying
(a)(b)
.Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte
test
maisexec
quando você só precisa de um boolean.)b<a
está lá para interromper a recursão depois de contar todos os números deb
paraa
, portanto, removê-lo causaria uma recursão infinita.a
como argumento e retorna aF
função, que por sua vez recebeb
como argumento e - como você notou - é chamada recursivamente para iterar deb
paraa
, incrementando um contador para todos os números inteiros que não contenham a5
em decimal representação.Geléia ,
87 bytes-1 byte graças a Dennis (use o fato de que a indexação em um número trata esse número como uma lista decimal)
TryItOnline!
Quão?
* O átomo de valor absoluto
A
é necessário, pois um número negativo convertido para uma lista decimal possui entradas negativas, nenhuma das quais seria um5
(o exemplo dado contaria todos os oito em vez de dois).fonte
rAw€5¬S
salva um byte.w
lança um argumento inteiro para seus dígitos decimais.Bash + grep, 17 bytes
Experimente online!
fonte
2sable ,
65 bytesGuardou um byte graças a Adnan
Experimente online!
Explicação
Nota: Isso funciona devido a um erro ao
¢
fazer a função se aplicar a cada elemento em vez de contar os elementos correspondentes na lista.fonte
`
que se comporta da mesma maneira nas matrizes: p.Python2,
59555251474342 bytesUma solução recursiva. Agradeço ao @xnor por me motivar a encontrar uma solução usando operadores lógicos! Além disso, obrigado a @ JonathanAllan e @ xnor por me orientarem e cortarem o byte de 43 para 42!
Outras tentativas em 43 bytes
fonte
if!`x`.count('5')
?not
operador que está!
em linguagens do tipo C, mas que leva 3 bytes :(and
eor
.not
.Utilitários Bash / Unix, 21 bytes
Experimente online!
fonte
05AB1E ,
876 bytesGuardou um byte graças a Adnan
Experimente online!
Explicação
fonte
å
, ou seja.å
, é possível fazer issoŸ5.å_O
por 6 bytes.negate
significado-n
, oun==0?1:0
?n==0?1:0
Pitão,
98 bytesGuardou um byte graças a FryAmTheEggman!
Explicação:
Experimente online!
fonte
Perl 6 , 23 bytes
Experimente online!
Como funciona
fonte
Haskell , 39 bytes
Experimente online! Uso:
Explicação:
fonte
R, 33 bytes
Uso:
fonte
Oitava , 36 bytes
Experimente online!
fonte
Groovy,
47454340 bytesEste é um fechamento sem nome.
findAll
é semelhante a adicionar umaif
condição em uma compreensão de lista em python.Experimente online!
fonte
PHP 7.1,
5755 bytesCorrer com
php -r '<code>' <a> <b>
fonte
Mathematica,
464442 bytesObrigado a alephalpha e DavidC por economizar 2 bytes cada!
Função sem nome, recebendo dois argumentos inteiros e retornando um número inteiro.
IntegerDigits@Range@##
converte todos os números entre as entradas em listas de dígitos;FreeQ@5
testa essas listas para decidir quais não contêm nenhuma5
. Em seguida,Boole
converte booleanos em zeros e uns eTr
soma os resultados.Outras soluções (44 e 47 bytes):
IntegerDigits@x~FreeQ~5
determina se a lista de dígitos de um número está livre de 5s eCount[Range@##,x_/;...]&
conta quantos números entre as entradas passam no teste.1##&@@IntegerDigits@#-5
pega a lista de dígitos de um número, subtrai 5 de todos eles e multiplica as respostas;Sign[...]^2
depois converte todos os números diferentes de zero em 1.fonte
Count[Range@##,x_/;IntegerDigits@x~FreeQ~5]&
Tr@Boole[FreeQ@5/@IntegerDigits@Range@##]&
Ruby,
3635 bytesThx IMP1 para -1 byte
fonte
?5
(o'5'
caractere) em vez de/5
/ na pesquisa para salvar um byte.Java 7,
8078 bytesUngolfed:
Código do teste:
Experimente aqui.
Saída:
fonte
PowerShell,
4241 bytesChamado na linha de comando como. \ No5s.ps1 1 20
fonte
-replace3
ou-split1
ou-notmatch5
).Python 2,
6156 bytes-5 bytes graças a tukkaaX
fonte
not "5" in
:) Além disso, se você estiver usando o Python2, poderá colocarx
`` aspas, em vez de fazê-lostr(x)
.[]
. Você também não precisa do espaço antesif
.lambda a,b:sum(not"5"in`n`for n in range(a,b+1))
funciona embora. tio.run/nexus/…Swift 52 bytes
fonte
Lote, 95 bytes
O loop manual salva alguns bytes porque, de qualquer maneira, eu preciso do contador de loop em uma variável.
fonte
PHP, 56 bytes
Execute assim:
Uma versão para PHP 7.1 seria de 53 bytes (créditos para Titus):
Explicação
fonte
trim
parâmetro novamente.CJam "solução fácil de matemática pura", 60
Experimente online
Leva os números em qualquer ordem, em uma matriz.
Explicação:
Um problema central é calcular f (n) = o número de números não-5 de 1 a n (inclusive) para qualquer n positivo. E a resposta é: pegue os dígitos decimais de n, substitua todos os dígitos após os 5 primeiros (se houver) por 9, depois substitua todos os dígitos 5..9 por 4..8 (decremento) e converta da base 9. Por exemplo, 1752 → 1759 → 1648 → 1 * 9 ^ 3 + 6 * 9 ^ 2 + 4 * 9 + 8 = 1259. Basicamente, cada posição de dígito possui 9 valores aceitáveis e um 5xxxx é equivalente a um 49999 porque não há mais números válidos entre eles.
Depois que resolvemos isso, temos alguns casos: se os números de entrada (digamos aeb, a <b) forem (estritamente) positivos, o resultado será f (b) -f (a-1). Se eles são negativos, podemos pegar os valores absolutos, reordená-los e usar o mesmo cálculo. E se a <= 0 <= b, o resultado é f (-a) + f (b) +1.
O programa implementa primeiro a função F conforme descrito acima (mas aplicada a cada número em uma matriz), depois lê a entrada, converte os números no valor absoluto e os reordena e usa um dos 2 cálculos acima, com base em se um * b> 0 inicialmente.
fonte
Python 2 , 54 bytes
Experimente online!
Não é a resposta mais curta do Python Usa o mesmo algoritmo, mas uma maneira diferente de implementar com um loop while e não é uma função lambda.
fonte
Java 7, 77 bytes
Esta é uma melhoria da resposta de Kevins , mas como ainda não tenho reputação de comentar, essa nova resposta terá que ser feita.
Então o que eu fiz foi:
indexOf
instruções porcontains
(-1 byte)loop for ( 77 bytes ):
recursivo ( 79 bytes ):
Saída:
Teste aqui !
fonte
(""+a).contains("5")?0:1
ser substituído por!(""+a).contains("5")
?(""+a).contains("5")||r++
?C #, 67 bytes
fonte
for(int c=0;...)
, mas depois ele não consegue compilar porque o retorno está fora do escopo parac
JavaScript (ES6),
58 5649 bytesGolfed 7 bytes graças a ETHproductions .
fonte
c+=!/5/.test(s++)
para salvar alguns bytes :-)MATL , 10 bytes
Experimente online!
Explicação
fonte
C #, 77 bytes
Chamada lambda anônima.
Usa
n
(primeiro número) em
(último número) como entrada e, em seguida, verifica via contenção de cadeia ("".Contains("")
).fonte
5
em seu número, para10
que (a sua resposta não conte) seja contada.g
deve ser inicializado quando indicado como é chamadovar
, então você precisavar g="";
e você pode usar currying ien=>m=>
Na verdade , 13 bytes
Experimente online!
Explicação:
fonte