Entrada
Um número inteiro n (≥ 1) e um dígito d (um número inteiro tal que 0 ≤ d ≤ 9).
Em qualquer ordem; de stdin ou parâmetros ou o que seja; para um programa ou função; etc.
Saída
Os números inteiros de 1 a n inclusive (em ordem) cujas representações decimais contêm um número par de d s. (Ou seja, os números inteiros na lista são os números inteiros que possuem, respectivamente, um número par de d s.)
Em qualquer formato padrão, etc. Em particular, a saída não precisa ser representada em decimal.
Se emitidos como uma única sequência, os números inteiros devem ser separados de alguma forma (espaços, vírgulas, novas linhas, bytes nulos, qualquer que seja).
Exemplos
in(d,n) ↦ out
1,12 ↦ 2 3 4 5 6 7 8 9 11
0,111 ↦ 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48,49,51,52,53,54,55,56,57,58,59,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96,97,98,99,100,111
obrigado
Para quintopia pelo título.
Respostas:
Geléia, 7 bytes
Experimente online!
Como funciona
fonte
05AB1E ,
1110 bytesCódigo:
Explicação:
Experimente online
Usa a codificação CP-1252 .
fonte
Haskell,
69635250 bytesSolução simples para o meu primeiro post aqui. Ele usa
show
para contar o número ded
's. Eu explicitamente não useiChar
como entrada parad
, o que teria economizado126 (após a edição de Damien) bytes.EDIT: 11 bytes a menos, graças a Damien! EDIT 2: mais 2 bytes a menos graças ao nimi!
fonte
Befunge,
1080945 bytesO resultado é que contamos o quadrado inteiro, incluindo novas linhas, o que faz sentido. Você pode copiar e colar o código no interpretador . Proporcionar duas entradas, a primeira d e, em seguida, n . Esta solução não funciona para valores maiores que n > 999.
Obviamente, isso não será um candidato ao grande prêmio, mas eu estou querendo implementar um codegolf no Befunge há algum tempo, então decidi fazê-lo. Eu acho que isso não chegará nem perto de uma solução ideal do Befunge, pois é a primeira coisa real que fiz no Befunge. Portanto, dicas são bem-vindas, se você precisar de esclarecimentos ou mais informações, informe-me nos comentários.
Tentativa de explicação:
Na primeira coluna para baixo, lemos um número inteiro da entrada, adicione 48 (6 * 8, você verá isso com mais frequência) para convertê-lo no valor ASCII correspondente e colocá-lo em
(10, 0)
.&
- entrada de leitura68*+
- adicionar 4855+0p
- coloque o valor em(10, 0)
Observe que o
d
at(1, 0)
é apenas uma maneira fácil de obter o número 100 na pilha.Depois disso, vamos para o leste e lemos outro número inteiro e seguimos para o que chamo de ASCIIfier. Isso transforma o número atual em uma série de caracteres ASCII. O ASCIIfier é a peça retangular de
(13, 12)
até(26, 17)
. Consiste em dois loops, contando primeiro os hunderds e as dezenas e colocando-os nos três dígitos em(6, 0)
e(5, 0)
. Depois disso, o último dígito é inserido(4, 0)
. Portanto, os números estão realmente ao contrário.Depois de colocar o número inteiro atual em uma série de caracteres ASCII, vamos um pouco mais ao sul para remover os zeros anexados. Assim, posteriormente, o que são inicialmente os três zeros no topo, será o número atual, sem zeros prependidos.
Depois, voltamos ao norte, onde colocamos os três dígitos na pilha. Repetimos os três dígitos no loop superior, cada vez incrementando o contador localizado
(1, 1)
se o dígito atual corresponde à entrada dQuando isso é feito, vamos verificar se o contador localizado em
(1, 1)
é ímpar ou par. Se for par, emitimos o número atual e passamos para o grande loop externo para diminuir o valor atual e começar de novo.fonte
Python 2, 50 bytes
Uma função recursiva que aceita o dígito
d
como uma sequência e o limite superiorn
como um número.A contagem de dígitos
d
em 'sn
é testado para ser mesmo por tê-la de bit complemento módulo 2, que dá1
para o mesmo e0
para ímpar. Muitosn
estão anexando à lista, e a função recua atén-1
, parando através de um curto-circuito lógico na lista vazia whenn==0
.Se a saída puder ser fornecida em ordem decrescente, um byte pode ser salvo, por 49 bytes:
Solução antiga de 51 bytes:
Uma função anônima que aceita o dígito
d
como uma sequência e o limite superiorn
como um número.Dois truques são usados:
range
é indexado em zero0...n-1
, adicionamos um a cada valor potencialx
. Em seguida, a contagemd
é emx+1
, ele salva um personagem para usar sua negação~x
em seu lugar.~_%2
qual primeiro bit alterna para alternar a paridade e, em seguida, pega o último bit&1
(o mesmo que%2
aqui), produzindo um valor de verdade somente se o original fosse par.fonte
Pitão, 10 bytes
Experimente online. Suíte de teste.
fonte
Lua, 86 bytes
Se o uso de separador inconsistente for permitido, eu poderia substituir
io.write
porprint
, o que significa que os números seriam separados por uma ou várias linhas novas.Este é um programa completo, que deve ser chamado assim:
lua file.lua d n
.Ele remove todos os não
d
caracteres do número atual e usa o tamanho da sequência resultante para decidir se deve ou não ser impressa.fonte
JavaScript (ES6) 64
Uma função anônima com saída para o console. Implementação direta usando
split
para contar os dígitos.A saída usando
alert
seria de 6 bytes a menos, mas eu realmente não gosto (e não vou vencer as linguagens de brinquedo)fonte
MATL ,
1210 bytesA primeira entrada é n , a segunda é d como uma string. Por exemplo:
Experimente online!
fonte
Ruby,
4742 bytesExecute com d e n como parâmetros da linha de comando, por exemplo
fonte
?1
para"1"
. E é menos bonita, mas um byte mais curto, para fazer%2>0
, em vez de.odd?
PowerShell,
6255editar: usar um bloco param neste caso é mais curto. removeu algum espaço redundante
Não é uma linguagem de golfe, mas é a única que eu realmente conheço. Isso funcionaria salvo como um script e chamado assim
M:\Scripts\cgNeverTellMeTheOdds.ps1 1 12
. O primeiro argumento é o dígito d e o segundo é o número n .Crie uma matriz do número 1 para n . Para cada um deles, converta isso em uma matriz de caracteres. 10 seria 1,0. Utilizando
-match
como operador de matriz, retorne todos os elementos que correspondem ao dígito d . Conte a quantidade de elementos retornados e mod 2 o resultado. O resultado será 0 para par e 1 para ímpar. 0 como booleano é falso, então usamos!
o loop para avaliar os resultados ímpares como falsos e os resultados pares como verdadeiros.A saída é uma nova linha delimitada no console.
fonte
Retina ,
99105 bytesObserve os espaços à direita.
<empty>
representa uma linha vazia.Toma entrada como
1 12
. A saída é espaço separado em ordem decrescente.Modifiquei
0*1(0|10*1)*
para corresponder a um número ímpar de\1
em um número. Mudei0
para(?!\1)\d
e1
para\1
criar a longa linha de expressão regular que você vê acima. Entender como o regex vinculado funciona é crucial.Experimente online
Explicação comentada da versão antiga
Se a ordem decrescente estiver correta
fonte
1+
e$.0
fazer a conversão de unário para decimal.Utilitários Bash + GNU, 37
fonte
*
seguinte entre parênteses de abertura parece ser redundante. Removê-lo economiza 1 byte.Python 3.4,
92857985 bytesEconomizou 7 bytes graças ao Mego
Economizou outros 6 bytes graças ao mbomb007
esses 6 bytes porque o Python 3.x
Esta é a minha primeira chance no código de golfe, então aqui não vale nada!
fonte
`d`
vez destr(d)
e, se assumir que n é um número inteiro (<2 ** 32), pode usar em`i`
vez destr(i)
.__repr__
python 2 e foram removidos no python 3. Você provavelmente deve alterar o cabeçalho para refletir essa restrição.Perl 6, 38 bytes
fonte
Braquilog , 32 bytes
Espera N como entrada e o dígito como saída, por exemplo
brachylog_main(12,1).
Explicação
fonte
Mathematica, 54 bytes
fonte
Perl, 28
2931bytesInclui +2 para
-an
Execute com o dígito da especificação e conte com linhas consecutivas no STDIN:
fonte
Oracle SQL 11.2,
11182 bytesfonte
Kotlin, 136 bytes
Programa totalmente funcional, aceita argumentos como: nd
Experimente online!
fonte
Java 8, 84 bytes
Esta é uma expressão lambda para um
BiConsumer< Integer, Integer>
:Explicação:
para cada número entre 1 e n, converta o número em uma sequência e divida-o usando d como delimitador. Se foi dividido em um número ímpar de seções, imprima o número seguido por uma nova linha.
fonte
Retina,
727155Muito obrigado a Martin, que totalmente por acidente me lembrou grupos atômicos!
Experimente online!
Explicação:
Substitua o número, mas não o dígito, pelo seu equivalente unário.
\B
corresponde a cada posição (largura zero) que não é um limite de palavra. Observe que isso não corresponderá a nenhum dos seguintes itens: início da sequência, final da sequência ou qualquer posição ao redor do caractere vírgula. Cada um desses não limites é então substituído por uma nova linha e, em seguida, pela string que vem antes da partida ($`
). Isso fornece uma lista como:Onde
d
está qualquer dígito decimal único.Isso converte todas as listas de
1
s na representação decimal de seus comprimentos. Convenientemente, isso não afetará o1
que poderia estar antes da vírgula, pois ela também é longa1
.Aqui,
G
ativa o modo grep, o que significa que as linhas que correspondem ao regex são mantidas e outras são descartadas. Esse regex é complicado, mas basicamente corresponde a grupos de 2 do dígito inicial (armazenado no grupo de captura 1, para que possamos fazer referência\1
).A chave aqui é que, se falhasse ao usar a correspondência não gananciosa até as duas primeiras aparências dos dígitos, ela seria revertida e tentaria novamente, com a
.
correspondência acima do dígito. Isso faria números como 111 corresponderem quando nosso dígito for 1. Portanto, usamos?>
para tornar a correspondência atômica, essencialmente impedindo que a regex retorne antes de corresponder a esse valor. Uma combinação atômica funciona como uma combinação possessiva em certos sabores. Como o*
meta-caractere é seguido por um,?
os.
caracteres corresponderão até que seja capaz de corresponder ao que armazenamos em um caractere adicional, nosso dígito, o que criaria correspondências inválidas.\1
. Então, uma vez que fazemos isso duas vezes, a "memória" da expressão regular é destruída, impedindo o comportamento que normalmente ocorreria, onde ela volta e tem o.
\1
Em seguida, verificamos que, a partir da posição final, depois de corresponder grupos repetidos de dois do dígito de entrada, não podemos corresponder a outro dígito de entrada.
Aqui, estamos apenas removendo o dígito e a vírgula de cada uma das cadeias, para que possamos obter nossa resposta agradável.
fonte
Python 2,
5754 bytesUso
fonte
Julia, 44 bytes
Esta é uma função que aceita dois números inteiros e retorna uma matriz.
Começamos com o conjunto de números inteiros de 1 a
n
, inclusive. Para cada número inteiroi
, determinamos quais de seus dígitos decimais são iguaisd
, o que gera uma matriz booleana. Fazemossum
isso para obter o número de ocorrências ded
como um dígitoi
efilter
o intervalo original com base na paridade da soma.Experimente aqui
fonte
Sério, 17 bytes
Toma entradas como
n\n'd'
(inteiro, nova linha, sequência).Experimente online!
Explicação:
fonte
Mathematica, 45 bytes
Usa o built-in
DigitCount
.fonte
Japonês,
1312 bytesA entrada é n , depois d está entre aspas. Teste online!
Como funciona
fonte
CJam, 38 bytes
Explicação
fonte
Scala, 66 bytes
fonte
R, 145 bytes (tenho certeza de que há maneiras de diminuir ainda mais isso) :)
fonte