Na Rússia, temos algo como uma tradição: gostamos de procurar bilhetes da sorte.
Veja como é um ticket normal:
Como você pode ver, o ticket tem um número de seis dígitos.
Um número de seis dígitos é considerado de sorte se a soma dos três primeiros dígitos for igual à soma dos três últimos.
O número da foto não tem sorte:
038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19
Desafio
Dado os limites de um intervalo (inclusive), retorne o número de números de bilhetes sorteados contidos nele.
Parâmetros
- Entrada: 2 números inteiros: o primeiro e o último número inteiro no intervalo
- As entradas estarão entre 0 e 999999, inclusive
- Saída: 1 inteiro: quantos números da sorte estão no intervalo
- Você pode pegar as entradas e retornar a saída em qualquer formato aceitável
- Suponha zeros à esquerda para números menores que 100000.
Exemplos
0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252
Isso é código-golfe, então a resposta mais curta em bytes em todos os idiomas vence.
Respostas:
05AB1E ,
8 (ou 10?)11 (ou 13?) BytesExperimente online ou verifique mais alguns casos de teste .
NOTA: No 05AB1E, cadeias e números inteiros são intercambiáveis, portanto, os números de saída não contêm zeros à esquerda. No entanto, isso pode ser corrigido com 1 byte adicional ( 12 bytes ):
Experimente online ou verifique mais alguns casos de teste .
+3 bytes para corrigir erros com um comprimento igual ou inferior a 3 (intervalo
[000000, 000999]
).Explicação:
EDIT: Parece que eu (e a maioria das outras respostas) interpretou mal o desafio e a quantidade de números está sendo solicitada em vez dos números dentro do intervalo. Nesse caso, um final
}g
pode ser adicionado (feche o filtro e obtenha a quantidade de números restantes na lista filtrada); portanto, são1013 bytes :Experimente online ou verifique mais alguns casos de teste .
fonte
R
.C # (.NET Core) , 93 + 18 = 111 bytes
Experimente online!
18 bytes para
using System.Linq;
. Supus que os formatos de entrada e saída pudessem ser flexíveis. Então, tomo dois números inteiros como entrada (o intervalo, inclusive).Alguns resultados do teste:
fonte
JavaScript (ES6), 66 bytes
Toma entrada em currying sintaxe
(m)(n)
, em que m é oexclusivoinclusiva limite superior e n é o limite inferior inclusivo.Experimente online!
Quão?
Testamos cada número percorrendo seus dígitos d ie atualizando um total de t :n dEu t
Se tivermos no final do processo, então n é um número da sorte.t = 0 n
JavaScript (ES6), 67 bytes
Mesmo formato de entrada.
Experimente online!
Quão?
38937 --> 38.937
['3','8','.','9','3','7']
+
:"3+8+.+9+3+7"
+.
por^
:"3+8^+9+3+7"
24
fonte
Ruby ,
5654 bytesExperimente online!
Método:
fonte
Japonês ,
3815 bytes23 graças a Shaggy!
Minha primeira submissão em japonês; obrigado a Shaggy por toda a ajuda!
Experimente online!
fonte
Python 3,
117113106135 bytesEsta é minha primeira resposta, então tenho certeza de que há espaço para melhorias.
Obtém os três primeiros dígitos pela divisão inteira e os três últimos pelo módulo. O primeiro e o último número inteiro no intervalo são inseridos como argumentos da
x
função, comoa
eb
, respectivamente. A saída én
impressa.Ungolfed:
fonte
n=n+1
comn+=1
e movendo-o logo após a instrução if (if...:n+=1
)a
eb
como variáveis pré-declaradas. Você tem que ter uma função ou levá-los através da entradan=0
peça para o cabeçalho, comodef x(a,b,n=0)
R ,
9386 bytesUma lógica mais curta no final complementa @ Giuseppe /
Experimente online!
Entradas inteiras. Almofada-los com
0
. Converta para os seis pontos de código ASCII. Abuse oF
builtin.fonte
scipen
problema. Ah bem.Casca , 12 bytes
Experimente online!
Explicação
fonte
[000000, 001001]
deve resultar em2
(000000
e001001
), mas resulta em1001
vez disso. (Eu adicionei1,000,000
e removeu a fuga1
como correção para isso, não tenho certeza o quão fácil / byte-eficiente que está em Palha de milho, no entanto.)Carvão , 15 bytes
Experimente online! Link é a versão detalhada do código. Edit: Eu originalmente pensei que era a lista de números da sorte que era necessária. Isso pode ser feito em 14 bytes (removendo o
L
, que ocupa o comprimento da lista) ou em 20 bytes, se você desejar uma boa formatação:Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Perl 5 +
-pl -MList::Util+(sum)
, 49 bytesExperimente online!
Perl 5 +
-nl -MList::Util+(sum) -M5.010
, 50 bytesA saída de cada ticket é +1 byte:
Experimente online!
fonte
Python 3 ,
8986 bytes-2 graças ao Sr. Xcoder.
-3 inspirador das respostas de Asone Tuhid.
Resultados dos testes:
Experimente online!
fonte
sum
pode fazer qualquer gerador de modo que os suportes[...]
não são necessáriosrange(a,b+1)
spec agora declara "inclusivo" (se não fosse, você poderia usar*r
no lugar doa,b
caminho - veja minha resposta do Python 2). Observe também que as especificações agora confirmam que de fato deve ser a contagem que é emitida.MATL , 24 bytes
Experimente online!
(-2 bytes graças a Luis Mendo.)
&:
- Faça um intervalo inclusivo entre os dois números dados1e3&\
- 'divrem' - divida por 1000 e obtenha os lembretes e quocientes de piso em duas matrizes.,
- faça duas vezes!'03d'&V
- transponha e converta cada valor em uma sequência de três larguras preenchida com zero&s
- soma os valores de cada linhaw
- alterne para exibir o array de lembretes e faça isso novamente nesse]
- loop final=
- verifique a igualdade (retorna 1s em locais onde as matrizes são iguais)s
- some aqueles para obter a contagem (saída implícita)fonte
Kotlin ,
152119 bytesExperimente online!
Usando dois números inteiros, converta-o em seis cadeias de símbolos e conte.
Otimizado graças ao mazzy e sua solução para 119 bytes.
Experimente online!
fonte
{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
Recebe dois argumentos de uma pilha vazia, que sai para o topo da pilha.
Experimente online!
O ponto inteligente aqui é o uso de uma macro sem nome (isto é, sem armazenamento) que é duplicada antes da execução para executar uma cópia de si mesma na outra parte de três dígitos.
Explicação
A macro interna
[rA~rA~++rx]
tem o efeito "calcular a soma de dígitos do número de três dígitos que é segundo na parte superior da pilha e, em seguida, execute a parte superior original da pilha como uma macro".Programa principal:
fonte
Pascal (FPC) ,
163153 bytesExperimente online!
Explicação
Aqui está um código de aparência normal primeiro:
Experimente online!
Então eu abusei do comportamento do loop for:
a
parab
), para quea
possam ser reutilizados como a variável do loop, caindoi
;b
antes do loop). Eu useib
como um contêiner, incrementando-o quando um número da sorte é encontrado e no final do loopb
está longe de seu valor antigo pela quantidade de números da sorte,b-a
fornecendo o resultado correto. Isso caius
.Substituir
d
por operações diretamentea
reduz o loop. Substituirc
por operações diretamente naa
dose não diminui o loop, mas, depois de soltard
, os loopbegin
eend
são desnecessários e eu terminei usando apenas 2 variáveis :)$
inicia constantes hexadecimais no código golfed. Enquanto eles não salvam bytes, eles eliminam os espaços necessários antes das constantes decimais.fonte
Java (OpenJDK 8) , 162 bytes
... empresta do exemplo de Kotlin acima.
Experimente online!
Comparar a soma dos bytes da String é tão bom quanto resumir os dígitos reais.
fonte
a->b->
), mas precisará se qualificar totalmente,IntStream
pois ele não estájava.lang
.java.util.stream.
frente doIntStream
código e a contagem de bytes. Como também mencionado por Jakob , você pode salvar um byte usandoa->b->
e também pode salvar alguns bytes adicionais alterandoString.format
para"".format
. Experimente online: 139 bytes . Boa primeira resposta, no entanto. +1 de mim. Aproveite sua estadia!PHP , 131 bytes
Para executá-lo:
Exemplo:
Ou Experimente online!
fonte
Perl 6 ,
5149 bytesExperimente online!
Bloco de código anônimo que recebe dois números e retorna o número de sortudos. Tempo limite para entradas maiores
fonte
Geléia ,
98 bytes-1 graças a Dennis (
rµ...E)S
->r...E€S
já que tudo vetoriza.)Um link diádico que aceita os dois pontos finais do intervalo (de qualquer maneira) que gera a contagem de tíquetes da sorte.
Experimente online! Ou veja uma suíte de testes
Quão?
fonte
E€S
salva oµ
.Powershell, 85 bytes
Script de teste:
Resultado:
fonte
Kotlin, 95 bytes
.kt
para teste:Explicação
Contar números do intervalo em que a soma de todos os dígitos numéricos é igual à soma dupla dos 3 primeiros dígitos.
fonte
Stax , 14 bytes
Execute e depure , mas seja paciente!
fonte
Python 2 ,
8380 bytes-3 usando a observação de Asone Tuhid - vá dar crédito!
Experimente online!
Muito parecido com a minha resposta Jelly (mas as entradas devem ser classificadas aqui, ie
a<=b
)75 bytes para entrada
a, b+1
(ou seja, o intervalo exclui o limite direito):Tente este
fonte
Clojure, 102 bytes
Misturar cordas e matemática não é muito divertido.
fonte
J , 35 bytes
Experimente online!
fonte
C (gcc),
9088 bytesPorta da minha resposta Java . Experimente online aqui . Obrigado ao ceilingcat por jogar dois bytes.
Ungolfed:
fonte
L'✐'
vez de10000
e atribua10
a uma variável.L'…'
truque, é legal; mas salva bytes? Parece-me que é um caractere de vários bytes, portanto, ao salvar caracteres, ele não pode salvar bytes ... ou pode?Java 8,
10199 bytesUma abordagem diferente da outra resposta Java . Em vez de usar fluxos e Strings, isso usa um loop e avalia os números diretamente. Experimente online aqui .
Obrigado ao ceilingcat por jogar dois bytes.
Ungolfed:
fonte
VBA (Excel), 159 bytes
Usando Janela Imediata e Células
[A1]
[A2]
como entrada.fonte
F #, 110 bytes
Experimente online!
t
converte a string em números e os resume.r
pega o intervalo de números des
atée
e filtra os números que não têm sorte. Os três primeiros dígitos são coletados porn/1000
. Os segundos três dígitos são calculados porn-(n/1000)*1000
.fonte