Reduzindo frações da maneira errada
Neste desafio do código-golfe, você precisa encontrar frações que podem ser reduzidas da maneira errada, mas que acabam no mesmo número.
Nota: reduzir frações da maneira errada tem aqui uma definição exata, veja detalhes.
Exemplo:
64/16 = 6 4/1 6 = 4/1 = 4
Claro que você não pode simplesmente acertar os 6es, mas aqui você ainda terá o valor correto. Neste desafio, você precisa encontrar exemplos como este.
Detalhes
Você precisa escrever uma função / programa que aceite um número inteiro positivo n
como entrada e produz / retorna uma lista / matriz das frações no formato
numerator1,denominator1,numerator2,denominator2,...
O programa tem que descobrir por cada fracção a/b
com a+b=n
e a,b>0
se ele pode ser reduzido de forma errada . (Não importa se ele pode ser reduzido da maneira convencional ou se existem muitas possibilidades de reduções, basta que seja possível reduzi-la da maneira errada de pelo menos uma maneira.)
Definição da maneira errada: Uma fração pode ser reduzida da maneira errada se e somente se a mesma sequência de dígitos sucessivos aparecer em aeb e se o valor da fração permanecer o mesmo se você remover a substring.
Exemplo: 1536/353 pode ser 'reduzido' para 16/3, mas esses dois valores não são iguais, portanto, você não pode reduzir essa fração da maneira errada .
Observe que essa definição de redução da maneira errada também pode incluir frações reduzidas da maneira correta: 110/10 = 11/1
está dentro da definição de redução da maneira errada, mesmo que seja uma etapa válida.
Pontuação
O menor número de bytes vence. Você pode escrever uma função ou programa que aceita um número inteiro e retorna uma matriz ou um programa que usa stdin / stdout ou pode considerar n salvo em uma variável e no final do programa a lista deve ser salva em outra variável.
Casos de teste
Inclua os seguintes casos de teste (diga-me quais devo adicionar, não tenho idéia de quantas dessas frações existem / quantos exemplos esperar)
n=80 (64/16 should be in this list)
n=147 (98/49 should be in this list)
n=500 (294/196 should be in this list) WRONG since 294+196 != 500 Thanks Falko
fonte
1010/10 = 101/1 && 1010/10 /= 110/1
n=147
) está incorreta:49/89 != 4/8
.Respostas:
Python
2-181180a entrada deve ser armazenada
n
, a saída será armazenadal
.Casos de teste:
n = 80:
n = 147:
n = 490:
Se duplicatas na saída forem proibidas, elas terão 10 caracteres a mais:
fonte
Haskell,
207206 (209?) CaracteresSe não for permitido retornar a mesma proporção mais de uma vez (400/400 = 40/40 = 4/4), use
f n=nub[...
para filtrá-los.Retorna uma lista de pares. Uma lista de pares de dois elementos custa o mesmo. Uma lista de frações reais exigiria importação
Data.Ratio
ou qualificação completaData.Ratio.%
(que também colide com a%
função definida aqui)casos de teste (com
nub
):ungolfed e comentou :
fonte
Python 2-236
fonte
Python 3-302
Nota: Devido a dificuldades de análise, não há frações com o número 0 em (portanto, nenhuma fração é calculada usando o método correto).
Com n = 80:
Com n = 147
Com n = 500
fonte
n=80
isso[[64, 16], [65, 26]]
, mas obviamente65 + 26 = 91 > 80
.if
s em um único grandeif
comand
s conectando todas as condições? Economiza alguns caracteres, eu acho.10/70
,20/60
e30/50
?