Multiplizieren oder dividieren Sie mit n
Hier ist eine einfache Herausforderung, so dass hoffentlich viele Sprachen teilnehmen können.
Bei einer positiven ganzen Zahl \$n\$, Ausgabe \$A076039(n)\$von der OEIS .
Beginnen Sie also mit \$a(1)=1\$. Dann für \$n>1\$::
$$a(n)=\left\{ \begin{array}{ll} n\cdot a(n-1), & \text{if } n>a(n-1) \\ \lfloor a(n-1)/n \rfloor, & \text{otherwise.}\end{array} \\ \right. $$
Testfälle:
1 -> 1
2 -> 2 (2 > 1, so multiply)
3 -> 6 (3 > 2, so multiply)
4 -> 1 (4 < 6, so divide and take the integer part)
5 -> 5
6 -> 30
17 -> 221
99 -> 12
314 -> 26
Weitere Testfälle finden Sie auf der OEIS-Seite.
Gemäß den üblichen Sequenzregeln können Sie auf allgemein akzeptierte Weise eingeben und ausgeben: 1- oder 0-basierte Indizierung, Ausgabe einer unendlichen Sequenz, Ausgabe des ersten \$n\$Werte, geben Sie nur die \ aus$n^\text{th}\$ Wert und so weiter, aber geben Sie dies in Ihrer Antwort an.
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache!
Antworten
Gelee , 6 Bytes
R×:<?/
Ein monadischer Link, der eine positive ganze Zahl akzeptiert, \$n\$, was eine positive ganze Zahl ergibt, \$a(n)\$.
Probieren Sie es online aus! Oder sehen Sie sich die Testsuite an .
Wie?
R×:<?/ - Link:
R - range -> [1..n]
/ - reduce by (i.e. evaluate f(f(...f(f(f(1,2),3),4),...),n) with this f(a,b):
? - if...
< - ...condition: (a) less than (b)?
× - ...then: multiply -> a×b
: - ...else: integer divide -> a//b
Geben Sie die Sequenz bis zu \ aus$a(n)\$ mit:
R×:<?\
Scratch 3.0, 29 27 Blöcke / 234 167 Bytes

Als SB-Syntax:
define f(n)
if<(n)=(1)>then
add(1)to[v v
else
f((n)-(1
set[d v]to(item(length of[v v])of[v v
if<(n)>(d)>then
add((n)*(d))to[v v
else
add([floor v] of ((n)/(d)))to[v v]
end
end
when gf clicked
delete all of [v v
ask()and wait
f(answer)
Versuchen Sie es von Grund auf neu
Ich bin mir bei einigen Eingabe- / Ausgabemethoden ein wenig unsicher, daher dachte ich, ich wäre sicher und würde es einfach zu einem vollständigen Programm mit einer Hilfsfunktion machen.
Durch die Beantwortung dieser Frage konnte mein Konto von "neu" auf "Standard" hochgestuft werden. Das macht also immer Spaß.
-67 Bytes dank @att
Shakespeare-Programmiersprache , 221 Bytes
,.Ajax,.Puck,.
Act I:.Scene I:.[Enter Ajax and Puck]
Ajax:You cat.
Scene V:.
Puck:You is the sum ofYou a cat.
Ajax:Open heart.Is I nicer you?If notYou is the quotient betweenyou I.
If soYou is the product ofyou I.Let usScene V.
Gibt die unendliche Liste aus. Beachten Sie jedoch, dass es kein Trennzeichen zwischen den Ausgabewerten gibt, sodass die Ausgabe etwas schwer lesbar ist.
Mein bester Versuch, ein Trennzeichen (ein Null-Byte) hinzuzufügen, ist wie folgt
Shakespeare-Programmiersprache , 297 Bytes
,.Ajax,.Puck,.Page,.
Act I:.Scene I:.
[Enter Ajax and Puck]
Ajax:You cat.
Scene V:.[Exit Puck][Enter Page]
Ajax:Speak thy.
Page:You is the sum ofYou a cat.
Scene X:.[Exit Page][Enter Puck]
Ajax:Open heart.Is I nicer you?If notYou is the quotient betweenyou I.
If soYou is the product ofyou I.Let usScene V.
Python 2 , 47 43 39 Bytes
4 Bytes dank xnor gespeichert !!!
4 Bytes dank Neil gespart !!!
r=i=1
while 1:r=r/i or r*i;print r;i+=1
Druckt \$\{a(n)\mid n \in \mathbb{N}\}\$ als unendliche Folge.
R , 43 39 Bytes
-4 Bytes dank Giuseppe.
for(i in 1:scan())T=T%/%i^(2*(i<T)-1);T
Gibt das \ aus$n\$th Term, 1-indexiert.
Initialisieren der Sequenz mit \$a(0)=1\$funktioniert auch, da die Formel dann \ gibt$a(1)=1\$wie gewünscht. Die Variable T
wird zur Ganzzahl gezwungen 1
, und wir wenden wiederholt eine kompaktere Version der Formel an:
$$a(n)=\left\lfloor \frac{a(n-1)}{n^{2\mathbb{I_{n<a(n-1)}} -1}}\right\rfloor $$
(mit \$\mathbb I\$die Anzeigefunktion). Dies umfasst beide Fälle der ursprünglichen Definition.
APL (Dyalog Unicode) , 18 Bytes (SBCS)
{⍺>⍵:⍺×⍵⋄⌊⍵÷⍺}/⌽ö⍳
Eine kaum Golf, aber sichere Funktion, die das n-te Element der Sequenz ausgibt.
APL (Dyalog Unicode) , 15 bis 14 Byte (SBCS)
1 Byte dank @ Adám gespeichert
(⌊⊢×⊣*∘×-)/⌽ö⍳
Gibt das n-te Element der Sequenz aus. Ich habe gerade festgestellt, dass dies nicht funktioniert, wenn \$n = a(n-1)\$weil es n zur Potenz von \ erhebt$n - a(n-1)\$und multipliziert das mit \$a\$, soweit ich das beurteilen kann , funktioniert diese Funktion bis mindestens n = 2.000.000.
(⌊⊢×⊣*∘×-)/⌽ö⍳
⍳ ⍝ Make a range to n
⌽ö ⍝ Then reverse it and
(⌊⊢×⊣*∘×-)/ ⍝ reduce it with a train:
× ⍝ Multiply
⊢ ⍝ a(n-1) with
⊣ ⍝ n
*∘× ⍝ to the power of the sign of
- ⍝ n - a(n-1)
⌊ ⍝ Floor it
Haskell , 40 Bytes
a#n|n>a=a*n|1>0=a`div`n
a=scanl1(#)[1..]
- Gibt eine unendliche Reihenfolge aus.
Der Infix-Operator # berechnet den nächsten Term. Wir verwenden ihn, um alle positiven ganzen Zahlen [1 ..] zu falten, verwenden jedoch stattdessen scanl1, wodurch wir alle Schritte erhalten.
R , 41 Bytes
for(m in 1:scan())T=`if`(m>T,T*m,T%/%m);T
Ich zwang mich, Robin Ryder's R-Antwort nicht anzusehen , bevor ich es versuchte. Glücklicherweise haben wir uns unterschiedliche Herangehensweisen ausgedacht, obwohl beide (bisher) genau die gleiche Länge in Bytes zu haben scheinen, leider ist seine jetzt 2 Bytes kürzer ...
C (gcc) , 35 Bytes
Nimmt einen 1-basierten Startindex und gibt den n-ten Sequenzwert zurück.
f(i,j){i=i?i>(j=f(i-1))?j*i:j/i:1;}
Forth (gforth) , 82 Bytes
: f 2dup 2dup > if * else swap / then dup . swap drop swap 1+ swap recurse ;
1 1 f
Gibt eine unendliche Folge aus, die durch Leerzeichen getrennt ist.
Perl 5 -Minteger
-061
, 36 , 27 Bytes
-9 Bytes dank @Abigail und @Sisyphus.
gibt eine unendliche Folge aus
say$/while$/=$//++$i||$/*$i
Python 3.8+ , 45 39 Bytes
-2 danke an xnor ( while print(...)!=0:
→ while[print(...)]:
)
-4 danke an Neil ( [a*n,a//n][a>n]
→ a//n or a*n
)
a=n=1
while[print(a:=a//n or a*n)]:n+=1
Ein vollständiges Programm, das \ druckt$a(n)\$ für alle natürlichen Zahlen.
Als rekursive Funktion 49:
f=lambda v,n=1,a=1:a*(v<n)or f(v,n+1,a//n or a*n)
JavaScript (Node.js) , 38 35 Byte
3 Bytes dank @Neil gespeichert
Gibt das \ zurück$n\$-th term, 1-indexiert.
f=(n,k=i=1n)=>i++<n?f(n,k/i||k*i):k
Faktor 45 Bytes
[ [1,b] 1 [ 2dup < [ * ] [ /i ] if ] reduce ]
Einfache Reduzierung. Nimmt einen 1-basierten Index und gibt den n-ten Term zurück.
[ ! anonymous lambda
[1,b] 1 [ ... ] reduce ! reduce {1..n} by the following, starting with 1:
2dup < ! ( an n -- an n an<n)
[ * ] [ /i ] if ! ( a_n+1 ) multiply if an < n, int-divide otherwise
]
Schale , 11 Bytes
Fμ?*`÷<¹³)ḣ
F # Fold a function over
ḣ # sequence from 1..input;
μ?*`÷<¹³) # function with 2 arguments:
? # if
<¹³ # arg 2 is smaller than arg 1
* # arg 1 times arg 2
`÷ # else arg 1 integer divided by arg 2
Perl 5 -Minteger -p
, 35 Bytes
map$.=$_>$.?$.*$_:$./$_,2..$_;$_=$.
Nimmt n
als Eingabe und druckt das n
th
Element in der Liste.
05AB1E , 12 10 Bytes
Druckt die unendliche Sequenz.
λN>₁N›i÷ë*
Kommentiert :
λ # infinite list generation
# implicitly push a(n-1) (initially 1)
N> # push n, since N is 0-indexed, this needs to be incremented
₁N› # is a(n-1) > n-1?
i÷ # if this is true, integer divide a(n-1) by n
ë* # else multiply a(n-1) and n
K (oK) , 22 bis 20 Bytes
{_x*(1%y;y)y>x}/1+!:
Anstatt zu verwenden $[y>x;y;1%y]
, werden Indizes (1%y;y)
mit der booleschen Bedingung in die Liste aufgenommen y>x
, um ein paar Bytes zu speichern.
Forth (gforth) , 51 Bytes
: f 1+ 1 tuck ?do i 2dup <= if * else / then loop ;
Code Erklärung
: f \ start word definition
1+ \ add 1 to n
1 tuck \ set up accumulator and loop parameters
?do \ loop from 1 to n (if n > 1)
i 2dup \ set up top two stack values and duplicate
<= if \ if a(n-1) <= n
* \ multiply
else \ otherwise
/ \ divide
then \ end if
loop \ end loop
; \ end word definition
Java (JDK) , 52 Byte
n->{int i,a=i=1;for(;i++<n;)a=i>a?i*a:a/i;return a;}
Hinweis: Vielen Dank an @RedwolfPrograms für -1 Byte und @user für -10 (?) Bytes.
Gelee , 11 Bytes
1’ß×:>@?$Ị?
Wie es funktioniert
1’ß×:>@?$Ị? - Main link f(n). Takes n on the left
? - If statement:
Ị - If: n ≤ 1
1 - Then: Yield 1
$ - Else:
’ - n-1
ß - f(n-1)
? - If statement:
>@ - If: n > f(n-1)
× - Then: n × f(n-1)
: - Else: n : f(n-1)
Brachylog , 10 Bytes
⟦₁{÷ℕ₁|×}ˡ
Gibt die Singleton-Liste [1]
anstelle von 1
n = 1 an, aber sonst nichts Außergewöhnliches.
ˡ Reduce
⟦₁ 1 .. n
{ } by:
÷ integer division
ℕ₁ if the result is 1 or greater,
|× multiplication if not.
Gaia , 9 Bytes
┅⟪<₌×/?⟫⊢
Grundsätzlich das gleiche wie die kürzere Jelly-Antwort. 1-indiziert, Druck a(n)
, obwohl ⊢
mit getauscht werden könnte , ⊣
die ersten bekommen n
Elemente statt.
# implicit input n
┅ # push 1...n
⟪ ⟫⊢ # reduce the list by the following function:
<₌ # push an extra copy of a(i-1) and i and check if less than?
× ? # if true, then multiply
/ # else integer divide
# implicitly print top of stack
Netzhaut , 58 Bytes
K`_ _
"$+"+L$`(^_+|_)(?<=(\1)+) (\1)+
_$`$1 $#3*$#2*
r`_\G
Probieren Sie es online aus! Keine Testsuite, da das Skript den Verlauf verwendet. Erläuterung:
K`_ _
Ersetzen Sie den Eingang durch ein Paar von 1s (unär). Der erste ist der Schleifenindex, während der zweite die Ausgabe ist.
"$+"+
Schleifenzeiten n
.
L$`(^_+|_)(?<=(\1)+) (\1)+
Teilen Sie sowohl den Ausgabe- als auch den Schleifenindex durch den Schleifenindex oder durch 1, wenn die Division Null wäre.
_$`$1 $#3*$#2*
Erhöhen Sie den Schleifenindex und multiplizieren Sie die beiden Quotienten miteinander. Dies führt zu output/index*index/index
oder output/1*index/1
jeweils.
r`_\G
Konvertieren Sie die endgültige Ausgabe in eine Dezimalzahl.
PHP , 57 Bytes
function a($n){return$n?($n>$x=a($n-1))?$x*$n:$x/$n|0:1;}
cQuents , 14 Bytes
=1:$>Z?$Z:Z_/$
Erläuterung
=1 first term is 1
: mode sequence: given n, output nth term; otherwise, output indefinitely
each term equals:
$>Z? : if n > seq(n - 1) else
$Z n * seq(n - 1)
Z_/$ seq(n - 1) // n
Schläger , 66 Bytes
(λ(n)(foldl(λ(x y)((if(< y x)* quotient)y x))1(range 1(+ 1 n))))
J , 21 Bytes
[:(]<.@*[^*@-)/1+i.@-
Ein J- Port der APL-Lösung von @user - vergessen Sie nicht, sie zu verbessern!
MathGolf , 11 9 Bytes
1k{î`<¿*/
-2 Bytes dank @ovs .
Gibt das \ aus$n^{th}\$ Wert.
Erläuterung:
1 # Push 1
k{ # Loop the input amount of times:
î # Push the 1-based loop index
` # Duplicate the top two items
<¿ # If the current value is smaller than the 1-based loop index: a(n-1)<n:
* # Multiply the value by the 1-based loop index
# Else:
/ # Integer-divide instead
# (after the loop, the entire stack joined together is output implicitly)