Fracciones intermedias
El reto:
Deberá crear un código que tome al menos 3 entradas; 2 enteros y "una representación de fracción" - el tipo que se adapte a su idioma para representar los incrementos de fracción) es decir. Si elige una cadena, la entrada sería "1/4" o podría elegir 2 entradas enteras adicionales o una tupla o w / e.
La entrada puede ser razonable (STDIN, argumentos de función, desde un archivo, etc.) y, por lo tanto, puede salir (STDOUT, valor de retorno de función, a un archivo, etc.)
Reglas:
- La "fracción" de entrada siempre será una fracción válida, menor que 1; ejemplo "1/4"
- El segundo entero de entrada siempre tendrá un valor más alto que el primer entero. Es decir, el primer entero de entrada siempre tendrá un valor más bajo que el segundo.
- Los enteros de entrada pueden ser negativos.
- Las fracciones producidas deben reducirse tanto como sea posible (simplificado)
El código deberá generar cada "paso de fracción" entre los 2 números en incrementos de la fracción de entrada.
El código debe ser un programa o función como se indica aquí
Ejemplo 1:
Entrada: -2,3,"1/2"
Salida:
-2
-3/2
-1
-1/2
0
1/2
1
3/2
2
5/2
3
Ejemplo 2
Entrada: 1,2,"2/3"
Salida:
1
5/3
2
o
1
4/3
2
Nota: El conteo puede comenzar desde cualquier dirección (gracias @Mego)
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
fuente

Respuestas:
Octava,
3430 bytesAhora toma la fracción como una expresión numérica en lugar de un numerador y un denominador separados.
Muestra sobre ideona
fuente
@(a,b,c)rats(union([a:c:b],b))?1/2una entrada numérica en lugar de una cadena), pero esa no es la forma en que interpreté "una representación de fracción". Si el OP está de acuerdo, me complacerá eliminar 4 bytes.Mathematica, 16 bytes
Una función sin nombre que toma dos enteros y un número racional y devuelve una lista de números, por ejemplo:
Mathematica's
Rangehace exactamente lo que pide el desafío, excepto que omite el límite superior si la diferencia entre el límite inferior y el superior no es exactamente un múltiplo del tamaño del paso. Por lo tanto, tomamos elUnion(usar⋃) con la lista que contiene solo el límite superior, lo que garantiza que aparezca exactamente una vez. Tenga en cuenta queUnionclasificará el resultado, pero queremos ordenarlo de todos modos, ya que el tamaño del paso siempre es positivo. Además, dado que estamos trabajando con racionales, se reducen automáticamente tanto como sea posible.fuente
T-SQL 2012+,
831535477270246240219 bytesTenga en cuenta que este es un trazador de líneas: sql no tiene una función integrada para reducir la fracción. Puede que no sea el mejor idioma para este tipo de preguntas. Es legible para los humanos (más o menos, en comparación con algunos de los otros idiomas).
Pruébalo en línea
fuente
@no@dde llanura@. Su consulta CTE para N podría serN AS(SELECT N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N))oN AS(SELECT 1N FROM sys.all_views). Dado que es casi seguro que haya unos pocos cientos en esta vista, también podría reducir las uniones cruzadas.ISNULLes más corto queCOALESCEy debería funcionarPython 2, 81 bytes
Pruébalo en línea
fuente
Haskell,
3126 bytesEvaluación perezosa FTW! Manifestación:
(Inicialmente me sentí tentado por la
[a,a+c..b]notación de Haskell , pero tiene algunas peculiaridades que requieren algo así comof a b c|l<-[a,a+c..b-c/2]=l++[b|last l<b]41 bytes of a b c=[x|x<-[a,a+c..],x<b]++[b]33).fuente
import Data.Ratioen tu recuento de bytes, creo que no puedes usarlofsin eso, ¿verdad?Data.Ratioparafsí mismo, porque es polimórfico para todos los tipos numéricos. Sin embargo, cuando desea llamarlo con valores de tipoRatio, necesita importar. El desafío solo requiere "crear código que ...", no usarlo. Creo que está bien sin la importación.%operador cree las fracciones de prueba1 % 2y2 % 3. No estoy haciendo trampa aquí: realmente puedes poner esos 26 bytes en un archivo, ejecutar el intérprete en ese módulo y tener la interacción que mostré. (Incluso podría evitar escribirimport Data.Ratioen la interacción de demostración, si en su lugar se deletrea%comoData.Ratio.%.)MAT ,
1615 bytesEsto puede fallar para denominadores muy grandes. Espero que el formato de salida sea aceptable.
Pruébalo en línea!
fuente
Ruby ,
325448 bytesEsta solución se basa en la respuesta Python de Mego y supone que
csiempre será unRationalformato de fracción de Ruby. Pruébalo en línea!Editar: se corrigió un error por el cual los enteros no se presentaban como enteros. -6 bytes gracias a Not That Charles y MegaTom.
Las funciones se llaman de esta manera:
fuente
Rationalforma más simple de3en Ruby es(3/1).step(b,c).mapdebería reducir el recuento de bytes aquí(a==a.to_i)puede sera%1==0de -4 bytes.-2,3,1/2r(ejemplo 1) imprime el último3dos veces.Julia, 14 bytes
Esto es similar a la respuesta de Mathematica, excepto que los rangos de Julia ya están en el formato deseado, por lo que es aún más corto. También devuelve una colección de números. Salida de ejemplo:
Tenga en cuenta que los enteros se muestran con 1 en el denominador, y se utiliza una barra doble para las fracciones. Para obtener el resultado exactamente como se define en la pregunta, se requiere más código:
fuente
Matlab con caja de herramientas simbólica / octava con SymPy, 27 bytes
Gracias a @sanchises por señalar un error, ahora corregido
Esta es una función anónima. Para llamarlo, asígnelo a una variable o use
ans.Ejemplo:
fuente
cque puede usar, cito, el tipo que se adapte a su idioma para representar los incrementos de fracción o w / e . Creo que está bastante claro quesymbolices una opción lógica y permitida (@VisualBean podría querer confirmar esto). El resultado del operador de dos puntos se 'actualiza' a unasymbolicmatriz, lo que significa que puede deshacerse delsym()llamada por completo.Javascript,
108 90 8681 bytesUna función anónima. Después de la asignación a una variable con nombre con espacio en blanco:
Ejemplos de prueba:
Un enfoque imperativo que utiliza JavaScript, sin recursividad, biblioteca o programación funcional.
fuente
Smalltalk - 89 bytes
¡Por una vez Smalltalk es casi competitivo!
Llama así:
fuente
R - 71 bytes
Asume que ya ha instalado el
MASSpaquetefuente
Pyret, 56 bytes
Toma en principio (b), final (e), numerador (n) y denominador (d). Crea un rango de enteros, los divide y agrega el final a la lista (al vincular y luego ordenar).
fuente