Dada uma lista de expressões matemáticas que são verdadeiras e consistem em cálculos de módulo restante com dois números e um resultado, sua tarefa é produzir os primeiros n
números que são verdadeiros para todas as declarações da lista.
Por exemplo:
[m % 3 = 0, m % 4 = 1, m % 5 = 3]
, onde% é o operador de módulo.
Para n
= 3, os 3 primeiros números (contando de 0) que se encaixam na sequência são 33, 93, 153
, portanto, o resultado seria esse (o formato é seu).
Regras / IO
- Você pega um número positivo
n
e uma lista de verdades. Obviamente, o que você precisa é apenas o RHS da operação do módulo e o resultado. n
e os números na lista de verdades sempre estarão no intervalo 1 -> 2 ^ 31-1 , e também os resultados.- Você recebe entradas de qualquer forma conveniente e saídas de qualquer forma conveniente. Por exemplo, a entrada de:
3 [3 0, 4 1, 5 3]
e saída:33 93 153
. - É garantido que a solução é matematicamente possível.
- A fonte de entrada pode ser de um arquivo, parâmetros de função, stdin, etc ... O mesmo vale para a saída.
- Sem brechas.
- Isso é código-golfe, então a menor contagem de bytes vence.
Casos de teste
# Input in the form <n>, <(d r), (d2 r2), ...>
# where <d> = RHS of the modulo expression and <r> the result of the expression. Output in the next line.
5, (3 2), (4 1), (5 3)
53 113 173 233 293
3, (8, 0), (13, 3), (14, 8)
120 848 1576
Implementação de referência em pseudo-código
n = (an integer from stdin)
truths = (value pairs from stdin)
counter = 0
while n != 0 {
if matches_criterias(counter, truths) {
print counter
n -= 1
}
counter += 1
}
0
um resultado válido?Respostas:
Geléia , 7 bytes
Este é um programa completo. Os argumentos são divisores, módulos de destino e número de soluções, nessa ordem.
Experimente online!
Como funciona
fonte
Perl 6 , 33 bytes
Tente
A entrada é
( number-of-values, list-of-divisors, list-of-remainders )
Expandido:
fonte
JavaScript (ES6),
7168 bytesUma função recursiva simples. Use currying na matriz primeiro e
n
segundo, da seguinte maneira:fonte
JavaScript (ES6),
747069 bytesRecebe a entrada como um número inteiro
n
e uma matriza
de[modulo, remainder]
matrizes com sintaxe de currying(n)(a)
.Casos de teste
Mostrar snippet de código
fonte
Haskell, 47 bytes
Exemplo de uso:
3 # [(8,0),(13,3),(14,8)]
->[120,848,1576]
.fonte
Python, 67 bytes
fonte
range(2**31)
. Além disso, muito bom. Eu vim com esta resposta de forma independente.JavaScript (ES6),
7270 bytesCurry sobre a matriz de condições primeiro e o número de resultados em segundo. Editar: salvou 2 bytes por não manipular o caso zero.
fonte
Mathematica, 42 bytes
Função sem nome, retornando uma lista de números inteiros positivos e recebendo três entradas: a lista de módulos, a lista de restantes e o número
n
de números inteiros a serem retornados. Por exemplo, o segundo caso de teste é chamado pore retorna
{120, 848, 1576}
.O builtin
#2~ChineseRemainder~#
fornece a menor solução não negativa; para obter todas as soluções desejadas, adicionamos esse número aRange[0,#3-1]LCM@@#
, que é o primeiron
múltiplo não negativo do múltiplo menos comum de todos os módulos.Até onde eu sei, o Mathematica não possui listas infinitas avaliadas preguiçosamente; portanto, essa implementação foi mais curta do que qualquer coisa que eu descobrisse que testava números inteiros não negativos um por um - mesmo com o tamanho do nome da função
ChineseRemainder
, e mesmo que um testeMod[k,{8,13,14}]=={0,3,8}
funcione perfeitamente bem.fonte
PHP, 97 bytes
resposta mais longa até agora. Mas estou feliz por ter conseguido abaixo de 100.
recebe entrada de argumentos separados da linha de comando,
imprime correspondências separadas e rastreadas por sublinhados.
O loop nunca quebra; pouco adequado para testadores online.
Corra como
php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...
.demolir
notas
$argc==count($argv)
. Para três pares, existem 8 argumentos: o nome do arquivo$argv[0]
,n
=$argv[1]
e osmodulo
/result
pares acima disso.$v=2
incrementado 3 vezes dá5
>$argc/2
.Adicione um byte para uma saída limpa: Substitua
&&$a[1]-->0?print$k._
por?$a[1]--?print$k._:die
.fonte
Pitão -
1413 bytesExperimente online aqui .
fonte
SmileBASIC, 102 bytes
Esta é a primeira vez que usei
ON
no SB. A razão pela qual eu usei aqui em vez deIF F GOTO@L
foi para poder colocá-?T
lo na mesma linha, economizando 1 byte.fonte
Python, 59 bytes
m
é uma lista de expressões em forma de sequência, como["i % 4 == 1", ...]
Experimente on-line (com um intervalo menor, para que realmente termine)
fonte
PHP, 91 bytes
Tome a lista como matriz associativa
Experimente online!
fonte