Brüche falsch reduzieren
In dieser Code-Golf-Herausforderung musst du Brüche finden, die auf die falsche Weise reduziert werden können, aber immer noch die gleiche Anzahl haben.
Hinweis: Das falsche Reduzieren von Brüchen hat hier eine genaue Definition, siehe Details.
Beispiel:
64/16 = 6 4/1 6 = 4/1 = 4
Natürlich können Sie nicht beide 6en anschlagen, aber hier haben Sie immer noch den richtigen Wert. In dieser Herausforderung muss man solche Beispiele finden.
Einzelheiten
Sie müssen eine Funktion / ein Programm schreiben, die / das eine positive Ganzzahl n
als Eingabe akzeptiert und / oder eine Liste / ein Array der Brüche im Format ausgibt / zurückgibt
numerator1,denominator1,numerator2,denominator2,...
Das Programm muss für jede Fraktion herausfinden, a/b
mit a+b=n
und a,b>0
ob es falsch reduziert werden kann . (Es spielt keine Rolle, ob es auf herkömmliche Weise reduziert werden kann oder ob es viele Möglichkeiten für Reduzierungen gibt, es muss nur möglich sein, es auf mindestens eine Weise falsch zu reduzieren .)
Definition des falschen Weges: Ein Bruch kann nur dann falsch reduziert werden , wenn in a und b dieselbe Folge aufeinanderfolgender Ziffern vorkommt und der Wert des Bruches gleich bleibt, wenn Sie die Teilzeichenfolge entfernen.
Beispiel: 1536/353 kann auf 16/3 'reduziert' werden, aber diese beiden Werte sind nicht gleich, sodass Sie diesen Bruch nicht auf die falsche Weise reduzieren können .
Beachten Sie, dass diese Definition des Reduzierens des falschen Wegs auch Brüche einschließen kann, die auf die richtige Weise reduziert werden: Sie 110/10 = 11/1
liegt innerhalb der Definition des Reduzierens des falschen Wegs , obwohl es sich um einen gültigen Schritt handelt.
Wertung
Die geringste Anzahl von Bytes gewinnt. Sie können eine Funktion oder ein Programm schreiben, das eine Ganzzahl akzeptiert und ein Array oder ein Programm zurückgibt, das stdin / stdout verwendet, oder Sie können n als in einer Variablen gespeichert betrachten, und am Ende des Programms muss die Liste in einer anderen Variablen gespeichert werden.
Testfälle
Bitte fügen Sie folgende Testfälle bei (Sagen Sie mir, welche ich hinzufügen soll, ich habe keine Ahnung, wie viele dieser Brüche es gibt / wie viele Beispiele zu erwarten sind)
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
quelle
1010/10 = 101/1 && 1010/10 /= 110/1
n=147
) ist falsch:49/89 != 4/8
.Antworten:
Python 2 -
183180Die Eingabe muss in gespeichert werden
n
, die Ausgabe wird in gespeichertl
.Testfälle:
n = 80:
n = 147:
n = 490:
Sollten Duplikate in der Ausgabe verboten sein, werden 10 Zeichen länger:
quelle
Haskell,
207206 (209?) ZeichenWenn es nicht möglich ist, dasselbe Verhältnis mehr als einmal zurückzugeben (400/400 = 40/40 = 4/4),
f n=nub[...
filtern Sie sie heraus.Gibt eine Liste von Paaren zurück. Eine Liste von Zwei-Element-Paaren kostet dasselbe. Eine Liste der tatsächlichen Brüche müsste importiert
Data.Ratio
oder vollständig qualifiziert werdenData.Ratio.%
(was auch mit der%
hier definierten Funktion kollidiert ).Testfälle (mit
nub
):ungolfed und kommentiert :
quelle
Python 2 - 236
quelle
Python 3 - 302
Hinweis: Aufgrund von Analyseproblemen gibt es keine Brüche mit der Nummer 0 in (daher werden keine Brüche mit der richtigen Methode berechnet).
Mit n = 80:
Mit n = 147
Mit n = 500
quelle
n=80
druckt das[[64, 16], [65, 26]]
aber offensichtlich65 + 26 = 91 > 80
.if
s in ein einziges großes verwandeln,if
wobeiand
s alle Bedingungen miteinander verbindet? Spart ziemlich viele Zeichen, denke ich.10/70
,20/60
und30/50
?