Aufgabe
Gegeben ganze Zahlen x
und y
die beide zumindest sind 2
, finden Sie die kleinste positive Zahl , deren y
-te Leistung teilbar durch x
.
Beispiel
Vorausgesetzt x=96
und y=2
, die Ausgabe sollte 24
da sein, 24
ist das kleinste positive n
Ergebnis zufriedenstellend n^2 is divisible by 96
.
Testfälle
x y output
26 2 26
96 2 24
32 3 4
64 9 2
27 3 3
Wertung
Das ist Code-Golf . Lösung mit der niedrigsten Byteanzahl gewinnt.
Verweise
y=2
: OEIS A019554y=3
: OEIS A019555y=4
: OEIS A053166y=5
: OEIS A015052y=6
: OEIS A015054
X
immer größer sein alsY
?X
kleiner als istY
, und er kann die Länge einiger Antworten (zumindest meiner) verringern, wenn erX
immer größer als istY
. Ich hätte lieber, dassX
das entweder größer oder kleiner sein kann, aber dann wäre ein Testfall für Letzteres großartig.Antworten:
Brachylog ,
1917161512 Bytes2 Bytes gespart dank @LeakyNun.
Probieren Sie es online!
Erläuterung
quelle
Gelee , 6 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
R*%⁸i0
ist auch 6 Bytes.JavaScript (ES7), 32 Byte
quelle
f
. Ich denke, Sie müssen die Funktion zuweisenf
.Gelee , 6 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python 3,
604339 BytesVielen Dank an @LeakyNun und @ Sp3000 für die Hilfe
Eine Funktion, die Eingaben über Argumente entgegennimmt und die Ausgabe zurückgibt.
Wie es funktioniert
Die Funktion verwendet die Rekursion, um wiederholt Ganzzahlen zu überprüfen
i
, beginnend miti=1
, bis eine gefunden wird, die die erforderliche Bedingung erfüllti**y%x<1
. Dies wird erreicht, indem die Logikor
der Bedingung und das Ergebnis des Ausdrucks für "i+1
inkrementiert" herangezogen werden, was hier der Fall ist-~f(x,y,i+1)
. Dieser Ausdruck wird so lange fortlaufend ausgewertet,False
bis ein zufriedenstellender Wertj
gefunden wurde. An diesem Punkt wird er ausgewertetTrue
und die Rekursion wird beendet. Da diese zu0
und1
in Python äquivalent sind und die Funktion wiederholt1
über den inkrementierenden Teil hinzugefügt wurde , kehrt die Funktion nach(j-1)*False + True + (j-1)*1 = (j-1)*0 + 1 + (j-1)*1 = 1 + j-1 = j
Bedarf zurück.Probieren Sie es auf Ideone
quelle
def f(x,y,i=1):¶ while i**y%x:i+=1¶ print(i)
f=lambda x,y,z=1:z**y%x<1or-~f(x,y,z+1)
True
stattz
?-~
Teil, aber es würde zurückkehren,True
wennx
es 1 wäre.Haskell, 31 Bytes
Anwendungsbeispiel:
96#2
->24
.Direkte Implementierung: Probieren Sie alle ganzen Zahlen aus
n
, behalten Sie die Bedingungen bei und wählen Sie die erste aus.quelle
x#y=until(\n->mod(n^y)x<1)(+1)0
05AB1E (10 Byte)
Probieren Sie es online aus
>
Liest das erste Argument, erhöht es und legt es auf dem Stapel abG
öffnet den stack (a
) und startet eine Schleife, die den Rest des Programms enthält, in derN
der Wert übernommen wird1, 2, ... a - 1
.N²m
DrücktN
und der zweite Eintrag aus dem Eingabeverlauf, dann werden beide geknackt und der erste wird zur Potenz des zweiten.¹
schiebt den ersten Eintrag aus dem Eingabeverlauf auf den Stapel.Ö
Öffnet die beiden vorherigen Stapeleinträge und drückt danna % b == 0
auf den Stapel.i
Knallt das vom Stapel. Wenn true, wird der Rest des Programms ausgeführt. Andernfalls wird die Schleife fortgesetzt.N
drücktN
auf den Stapel.q
Beendet das Programm.Wenn das Programm beendet wird, wird der oberste Wert des Stapels gedruckt.
quelle
MATL , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
find
?f
aber das findet alle Indizes ungleich Null. Also müsste es sein~f1)
: Negieren, finden, den ersten Eintrag bekommenTatsächlich ,
1211 BytesVielen Dank an Leaky Nun für seine vielen Vorschläge. Golfvorschläge sind willkommen.Probieren Sie es online!
Ursprünglicher 12-Byte-Ansatz. Probieren Sie es online!
Ein weiterer 12-Byte-Ansatz. Probieren Sie es online!
Ein 13-Byte-Ansatz. Probieren Sie es online!
Ungolfing:
Erster Algorithmus
Ursprünglicher Algorithmus
Dritter Algorithmus
Vierter Algorithmus
quelle
;)
R,
61 Bytes,39 Bytes,37 Bytes, 34 BytesIch bin immer noch ein Neuling in der R-Programmierung und es stellt sich heraus, dass dies meine erste Funktion ist, die ich in R erstelle ( Yay! ), Also glaube ich, dass es immer noch Raum für Verbesserungen gibt.
Online-Test kann hier durchgeführt werden: RStudio auf rollApp .
Hauptfortschritt:
which.max
funktioniert, weil es den höchsten Wert in einem Vektor zurückgibt, und wenn es mehrere gibt, wird der erste zurückgegeben. In diesem Fall haben wir einen Vektor mit vielen FALSEs (die 0s sind) und einigen TRUEs (die 1s sind), sodass der erste TRUE zurückgegeben wird.Ein weiterer Fortschritt:
Schließlich schlägt es die Antwort mit Python um zwei Bytes. :)
Ein weiterer Fortschritt: (Schon wieder!)
Vielen Dank an Axeman und user5957401 für die Hilfe.
quelle
which.min
, könnten Sie die loswerden==0
. Der Modul gibt eine Zahl zurück, die nicht niedriger als 0 ist.function(x,y)which(!(1:x)^y%%x)[1]
.dc,
2322 BytesVielen Dank an Delioth für seinen Tipp zu Eingabemethoden und zum Speichern eines Bytes
Verwendet den Operator
z
für die Stapeltiefe zum Inkrementieren des Testfalls direkt auf dem Stapel und den Operator|
für die modulare Exponentiation für die modulare Exponentiation. Wiederholen Sie den Test, bis der Rest nicht mehr als Null ist.quelle
?
am Anfang technisch nicht , da eine Standardmethode zum Aufrufen einiger Dinge darin besteht> echo "x y [program]"|dc
, wox
undy
wie bei der Frage x und y wie gewohnt auf den Stapel abgelegt werden.-e
Option verwendet, aber das werde ich von nun an verwenden."
nicht implementiert sinddc
, während bei der Verwendung von Anführungszeichen offensichtlich Shell-Fehler auftreten. Gibt es etwas dagegen zu tun? Ich weiß,stderr
kann ignoriert werden, aber es stört mich immer noch.05AB1E , 8 Bytes
Erläuterung
Probieren Sie es online aus
quelle
Perl 6 ,
2625 BytesErläuterung:
quelle
Mathematica, 36 Bytes
quelle
Dyalog APL , 11 Bytes
Übersetzung davon .
0⍳⍨
finde die erste Null in⊣|
den Divisionsresten, wenn x(⍳⊣)*
die Ganzzahlen eins bis x dividiert , die auf die Potenz von⊢
yTryAPL online!
quelle
PowerShell v2 +, 48 Byte
Nimmt Eingabe
$x
und$y
. Erstellt einen Bereich von1
bis$x
undWhere-Object
filtert dann diese Zahlen. Der Filter nimmt die Zeichenfolge"$_*"
(dh die aktuelle Zahl mit einem Sternchen) und verwendet die Zeichenfolgenmultiplikation, um diese$y
Zeiten zu verketten . Anschliessend setzt er ein Finale1
auf und leitet das zuiex
(kurz fürInvoke-Expression
und ähnlich zueval
) weiter. Dies tritt an die Stelle von[math]::Pow($_,$y)
, da PowerShell keinen Exponentiationsoperator hat und zwei Bytes kürzer ist. Das wird in den Modulo-Operator eingespeist . Wenn es also teilbar ist, wird es von diesem Filter eingeschlossen, und alle anderen Zahlen werden ausgeschlossen.%
mit$x
- wenn es also teilbar ist, wird dies sein0
, also kapseln wir das in Parens und nehmen das Boolesche-Nicht!(...)
Schließlich kapseln wir die resultierenden Zahlen in Parens
(...)
und nehmen den[0]
Index. Da der eingegebene Bereich sortiert ist1..$x
, ist dies der kleinste. Das bleibt in der Pipeline und das Drucken ist implizit.Testfälle
quelle
PHP,
5533 Bytesquelle
Perl,
2926 BytesBeinhaltet +3 für
-p
(nicht +1, da der Code enthält'
)Führen Sie mit der Eingabe auf STDIN
power.pl
:quelle
Pyth, 9 Bytes
Ein Programm, das eine Liste des Formulars
[x, y]
in STDIN eingibt und das Ergebnis druckt.Probieren Sie es online aus
Wie es funktioniert
quelle
PHP 59 Bytes
Entschuldigung, aber ich kann das nicht von meinem Handy aus testen. :)
Golf gespielt
quelle