Reducir fracciones de manera incorrecta
En este desafío de código de golf tienes que encontrar fracciones que se puedan reducir de manera incorrecta pero que terminen en el mismo número.
Nota: la reducción de fracciones de la manera incorrecta aquí tiene una definición exacta, ver detalles.
Ejemplo:
64/16 = 6 4/1 6 = 4/1 = 4
Por supuesto, no puede simplemente golpear ambos 6es, pero aquí todavía termina con el valor correcto. En este desafío tienes que encontrar ejemplos como este.
Detalles
Debe escribir una función / programa que acepte un entero positivo n
como entrada y salidas / devuelva una lista / matriz de las fracciones en formato
numerator1,denominator1,numerator2,denominator2,...
El programa tiene que averiguar para cada fracción a/b
con a+b=n
y a,b>0
si puede reducirse de manera incorrecta . (No importa si se puede reducir de la manera convencional o si hay muchas posibilidades de reducciones, solo tiene que ser posible reducirlo de la manera incorrecta al menos de una manera).
Definición de la manera incorrecta: una fracción se puede reducir de manera incorrecta si y solo si la misma secuencia de dígitos sucesivos aparece en ayb y si el valor de la fracción permanece igual si quita la subcadena.
Ejemplo: 1536/353 se puede 'reducir' a 16/3 pero esos dos valores no son iguales, por lo que no puede reducir esta fracción de manera incorrecta .
Tenga en cuenta que esta definición de reducir el camino equivocado también puede incluir fracciones que se reducen del modo correcto: 110/10 = 11/1
está dentro de la definición de reducir el camino equivocado aunque sea un paso válido.
Puntuación
El menor número de bytes gana. Puede escribir una función o programa que acepte un número entero y devuelva una matriz o un programa que use stdin / stdout o puede considerar n guardado en una variable y al final del programa, la lista debe guardarse en otra variable.
Casos de prueba
Incluya los siguientes casos de prueba (dígame cuáles debo agregar, no tengo idea de cuántas de esas fracciones hay / cuántos ejemplos 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
fuente
1010/10 = 101/1 && 1010/10 /= 110/1
n=147
) es incorrecta:49/89 != 4/8
.Respuestas:
Pitón
2-183180la entrada debe almacenarse en
n
, la salida se almacenará enl
.Casos de prueba:
n = 80:
n = 147:
n = 490:
En caso de que se prohíban los duplicados en la salida, obtendrá 10 caracteres más:
fuente
Haskell
207206 (¿209?) CaracteresSi no está permitido devolver la misma proporción más de una vez (400/400 = 40/40 = 4/4), use
f n=nub[...
para filtrarlos.Devuelve una lista de pares. Una lista de pares de dos elementos cuesta lo mismo. Una lista de fracciones reales requeriría importación
Data.Ratio
o calificación completaData.Ratio.%
(que también colisiona con la%
función definida aquí)casos de prueba (con
nub
):sin golf y comentado :
fuente
Python 2 - 236
fuente
Python 3 - 302
Nota: Debido a dificultades de análisis, no hay fracciones con el número 0 (por lo que no se calculan fracciones utilizando el método correcto).
Con n = 80:
Con n = 147
Con n = 500
fuente
n=80
esto imprime[[64, 16], [65, 26]]
, pero obviamente65 + 26 = 91 > 80
.if
s en un solo grandeif
conand
s conectando todas las condiciones? Ahorra bastantes caracteres, creo.10/70
,20/60
y30/50
?