Zwischenfraktionen
Die Herausforderung:
Sie müssen Code erstellen, der mindestens 3 Eingaben akzeptiert. 2 Ganzzahlen und "eine Bruchdarstellung" - welcher Typ auch immer für Ihre Sprache zur Darstellung der Bruchinkremente geeignet ist. Wenn Sie eine Zeichenfolge auswählen, ist die Eingabe "1/4", oder Sie können 2 zusätzliche Ganzzahleingaben oder ein Tupel oder w / e auswählen.
Die Eingabe kann überall sinnvoll sein (STDIN, Funktionsargumente, aus einer Datei usw.) und kann daher ausgegeben werden (STDOUT, Funktionsrückgabewert, in eine Datei usw.).
Regeln:
- Der eingegebene "Bruch" ist immer ein gültiger Bruch, kleiner als 1; Beispiel "1/4"
- Die zweite Ganzzahl hat immer einen höheren Wert als die erste Ganzzahl. IE die erste Ganzzahl hat immer einen niedrigeren Wert als die zweite.
- Die Eingabe-Ganzzahlen können negativ sein.
- Ausgegebene Brüche sollten so weit wie möglich reduziert werden (vereinfacht)
Der Code muss jeden "Bruchschritt" zwischen den beiden Zahlen in Schritten des eingegebenen Bruches ausgeben.
Der Code sollte ein Programm oder eine Funktion sein, wie hier angegeben
Beispiel 1:
Eingang: -2,3,"1/2"
Ausgabe:
-2
-3/2
-1
-1/2
0
1/2
1
3/2
2
5/2
3
Beispiel 2:
Eingang: 1,2,"2/3"
Ausgabe:
1
5/3
2
oder
1
4/3
2
Hinweis: Die Zählung kann aus beiden Richtungen erfolgen (danke @Mego)
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
quelle
Antworten:
Oktave,
34-30BytesNimmt nun den Bruch als numerischen Ausdruck und nicht als getrennten Zähler und Nenner.
Probe auf Ideone
quelle
@(a,b,c)rats(union([a:c:b],b))
?1/2
als numerische statt als Zeichenfolgeeingabe), aber so habe ich "eine Bruchdarstellung" nicht interpretiert. Wenn das OP einverstanden ist, werde ich gerne 4 Bytes abschneiden.Mathematica, 16 Bytes
Eine unbenannte Funktion, die zwei Ganzzahlen und eine rationale Zahl verwendet und eine Liste von Zahlen zurückgibt, z.
Mathematics
Range
macht genau das, was die Herausforderung verlangt, außer dass die Obergrenze weggelassen wird, wenn der Unterschied zwischen Unter- und Obergrenze nicht genau ein Vielfaches der Schrittgröße ist. Deshalb nehmen wir dieUnion
(using⋃
) mit der Liste, die nur die obere Schranke enthält, was sicherstellt, dass sie genau einmal vorkommt. Beachten Sie, dassUnion
das Ergebnis sortiert wird, aber wir möchten, dass es trotzdem sortiert wird, da die Schrittgröße immer positiv ist. Da wir auch mit Rationalen arbeiten, werden diese automatisch so weit wie möglich reduziert.quelle
T-SQL 2012+,
831535477270246240219 BytesBitte beachten Sie, dass dies ein Einzeiler ist - SQL hat keine eingebaute Funktion, um den Anteil zu reduzieren. Ist möglicherweise nicht die beste Sprache für diese Art von Fragen. Es ist vom Menschen lesbar (im Vergleich zu einigen anderen Sprachen).
Probieren Sie es online aus
quelle
@n
oder@d
auf normal ändern@
. Ihre CTE-Abfrage für N könnteN AS(SELECT N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N))
oder seinN AS(SELECT 1N FROM sys.all_views)
. Angesichts der Tatsache, dass es in dieser Ansicht fast garantiert ein paar hundert gibt, können Sie auch die Cross-Joins reduzieren.ISNULL
ist kürzer alsCOALESCE
und sollte funktionierenPython 2, 81 Bytes
Probieren Sie es online aus
quelle
Haskell,
3126 BytesFaule Bewertung FTW! Demo:
(Ich war anfangs von Haskells
[a,a+c..b]
Notation versucht , aber es hat einige Macken, die so etwas wief a b c|l<-[a,a+c..b-c/2]=l++[b|last l<b]
für 41 Bytes oderf a b c=[x|x<-[a,a+c..],x<b]++[b]
für 33 erfordern .)quelle
import Data.Ratio
in Ihre Byteanzahl einbeziehen, ich denke, Sie könnenf
ohne das nichts anfangen , oder?Data.Ratio
für dichf
selbst, weil es für alle numerischen Typen polymorph ist. Wenn Sie es jedoch mit Werten vom Typ aufrufen möchten,Ratio
benötigen Sie den Import. Die Herausforderung besteht nur darin, "Code zu erstellen, der ..." und ihn nicht zu verwenden. Ich denke es ist in Ordnung ohne den Import.%
Operator die Testfraktionen1 % 2
und erstellt2 % 3
. Ich betrüge hier nicht: Sie können diese 26 Bytes wirklich selbst in eine Datei einfügen, den Interpreter für dieses Modul ausführen und die von mir angezeigte Interaktion durchführen. (Sie könnten sogar vermeiden,import Data.Ratio
die Demo-Interaktion%
Data.Ratio.%
MATL ,
1615 BytesDies kann bei sehr großen Nennern fehlschlagen. Ich hoffe das Ausgabeformat ist akzeptabel.
Probieren Sie es online!
quelle
Ruby ,
325448 BytesDiese Lösung basiert auf Megos Python-Antwort und geht davon aus, dass dies
c
immer eine sein wirdRational
Ruby-Bruchformat handelt. Probieren Sie es online!Bearbeiten: ein Fehler behoben, durch den Ganzzahlen nicht wie Ganzzahlen dargestellt wurden. -6 Bytes dank Not That Charles und MegaTom.
Die Funktionen werden folgendermaßen aufgerufen:
quelle
Rational
Form von3
in Ruby ist(3/1)
.step(b,c).map
sollte die Byteanzahl hier reduzieren(a==a.to_i)
kanna%1==0
für -4 Bytes sein.-2,3,1/2r
(Beispiel 1) druckt den letzten3
zweimal.Julia, 14 Bytes
Dies ähnelt der Mathematica-Antwort, außer dass Julias Bereiche bereits im gewünschten Format vorliegen und daher noch kürzer sind. Gibt auch eine Sammlung von Zahlen zurück. Beispielausgabe:
Beachten Sie, dass die Ganzzahlen im Nenner mit 1 angezeigt werden und für Brüche ein doppelter Schrägstrich verwendet wird. Um die Ausgabe genau wie in der Frage definiert zu erhalten, ist etwas mehr Code erforderlich:
quelle
Matlab mit Symbolic Toolbox / Octave mit SymPy, 27 Bytes
Vielen Dank an @sanchises für den Hinweis auf einen Fehler, der jetzt behoben wurde
Dies ist eine anonyme Funktion. Um es aufzurufen, weisen Sie es einer Variablen zu oder verwenden Sie
ans
.Beispiel:
quelle
c
Sie können auch verwenden, ich zitiere, welcher Typ zu Ihrer Sprache passt, um die Bruchinkremente [...] oder w / e darzustellen . Ich denke, es ist ziemlich klar, dass diessymbolic
eine logische und zulässige Wahl ist (@VisualBean möchte dies möglicherweise bestätigen). Das Ergebnis des Doppelpunktoperators wird dann zu einemsymbolic
Array 'aufgewertet' , was bedeutet, dass Sie densym()
Aufruf insgesamt loswerden können .Javascript,
108 90 8681 BytesEine anonyme Funktion. Nach der Zuweisung zu einer benannten Variablen mit Leerzeichen:
Testbeispiele:
Ein zwingender Ansatz, der Javascript, keine Rekursion, Bibliothek oder funktionale Programmierung verwendet.
quelle
Smalltalk - 89 Bytes
Ausnahmsweise ist Smalltalk fast konkurrenzfähig!
Rufen Sie wie folgt an:
quelle
R - 71 Bytes
Angenommen, Sie haben das
MASS
Paket bereits installiertquelle
Pyret, 56 Bytes
Nimmt Anfang (b), Ende (e), Zähler (n) und Nenner (d) auf. Erstellt einen Bereich von Ganzzahlen, teilt diese durch und hängt das Ende an die Liste an (durch Verknüpfen und anschließendes Sortieren).
quelle