Hintergrundgeschichte
Haftungsausschluss: Kann erfundene Informationen über Kängurus enthalten.
Kängurus durchlaufen mehrere Entwicklungsstufen. Je älter und stärker sie werden, desto höher und länger können sie springen, und desto öfter können sie springen, bevor sie hungrig werden.
In Stufe 1 ist das Känguru sehr klein und kann überhaupt nicht springen. Trotzdem bedarf es ständig der Ernährung. Wir können das Aktivitätsmuster eines Kängurus der Stufe 1 so darstellen.
o
In Stufe 2 kann das Känguru kleine Sprünge machen, aber nicht mehr als 2, bevor es hungrig wird. Wir können das Aktivitätsmuster eines Kängurus der Stufe 2 so darstellen.
o o
o o o
Nach Stufe 2 bessert sich das Känguru schnell. In jeder weiteren Phase kann das Känguru etwas höher (1 Einheit in der grafischen Darstellung) und doppelt so oft springen. Das Aktivitätsmuster eines Kängurus der Stufe 3 sieht beispielsweise so aus.
o o o o
o o o o o o o o
o o o o o
All das Springen erfordert Energie, so dass das Känguru nach Abschluss jedes Aktivitätsmusters Nahrung benötigt. Der genaue Betrag kann wie folgt berechnet werden.
Ordnen Sie jedem o im Aktivitätsmuster eines Stage n- Kängurus seine Höhe zu, dh eine Zahl von 1 bis n , wobei 1 dem Boden und n der höchsten Position entspricht.
Berechnen Sie die Summe aller Höhen im Aktivitätsmuster.
Zum Beispiel umfasst das Aktivitätsmuster eines Kängurus der Stufe 3 die folgenden Höhen.
3 3 3 3
2 2 2 2 2 2 2 2
1 1 1 1 1
Wir haben fünf 1 's, acht 2 ' s und vier 3 ‚s; die Summe ist 5 · 1 + 8 · 2 + 4 · 3 = 33 .
Aufgabe
Schreiben Sie ein vollständiges Programm oder eine Funktion, die eine positive ganze Zahl n als Eingabe verwendet und den Nährstoffbedarf pro Aktivität eines Stufe- n- Kängurus ausgibt oder zurückgibt .
Das ist Code-Golf ; möge die kürzeste Antwort in Bytes gewinnen!
Beispiele
1 -> 1
2 -> 7
3 -> 33
4 -> 121
5 -> 385
6 -> 1121
7 -> 3073
8 -> 8065
9 -> 20481
10 -> 50689
http://www.wolframalpha.com/input/?i=2%5E(n-1)*(n%5E2-1)%2B1
(Weird Markup , weil eine normale URL vermasselt wird)Antworten:
Gelee , 6 Bytes
Verwendet die Formel ( n 2 - 1) 2 n - 1 + 1, um jeden Wert zu berechnen. @ Qwerp-Derp's war so freundlich, einen Beweis zu erbringen .
Probieren Sie es online! oder Überprüfen Sie alle Testfälle.
Erläuterung
quelle
Kaffeeskript, 19 Bytes
Edit: Danke an Dennis für das Abhacken von 6 Bytes!
Die Formel zum Generieren von Känguru-Zahlen lautet:
Erklärung der Formel:
Die Anzahl von
1
's inK(n)
' s Endsumme ist2^(n - 1) + 1
.Die Anzahl der
n
's inK(n)
der Endsumme ist2^(n - 1)
, also ist die Summe allern
' sn * 2^(n - 1)
.Die Zahl jeder anderen Zahl (
d
) inK(n)
der Endsumme ist2^n
, also die Summe allerd
würde seind * 2^n
.Somit ist die Summe aller anderen Zahlen
= (T(n) - (n + 1)) * 2^n
, wobeiT(n)
das Dreieck die Zahlenfunktion ist (welche die Formel hatT(n) = (n^2 + 1) / 2
).Ersetzen wir dies, erhalten wir die endgültige Summe
Wenn wir alle Summen addieren, erhalten wir
K(n)
, was gleich ist... was der obigen Formel entspricht.
quelle
n=>(n*n-1<<n-1)+1
Java 7, 35 Bytes
quelle
Gelee , 4 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python 2,
2523 BytesVerwendete Meilenformel.
Vielen Dank an Jonathan Allan für -2 Bytes.
quelle
~-x
. Sie können auch verwendenx-1
(nicht kürzer), da die Subtraktion eine höhere Priorität hat als die Verschiebung.~-x
ich beschlossen, ihn unverändert zu lassen. Nun, es scheint, als würde jeder das vorziehenx-1
(Dennis sagte auch genau das).-~(x*x-1<<~-x)
-1
- 1
.Lua, 105 Bytes
Entgolft:
Unterhaltsames Problem!
quelle
Eigentlich 8 Bytes
Probieren Sie es online!
Erläuterung:
Dies berechnet einfach die Formel
(n**2 - 1)*(2**(n-1)) + 1
.quelle
GolfScript , 11 Bytes
Probieren Sie es online!
Vielen Dank an Martin Ender (8478) für das Entfernen von 4 Bytes.
Erläuterung:
quelle
CJam, 11 Bytes
Probieren Sie es online.
Erläuterung:
quelle
ri
...Mathematica, 15 Bytes
Da es keinen Bitverschiebungsoperator gibt, müssen wir die tatsächliche Exponentiation durchführen, aber dann ist es kürzer, durch 2 zu teilen, anstatt den Exponenten zu dekrementieren.
quelle
C 26 Bytes
Als Makro:
Als eine Funktion (27):
quelle
f(1+2)
.05AB1E , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
C #, 18 Bytes
Anonyme Funktion basierend auf der hervorragenden mathematischen Analyse von Qwerp-Derp .
Volles Programm mit Testfällen:
quelle
Batch, 30 Bytes
Nun, es schlägt Java sowieso.
quelle
MATL , 7 Bytes
Verwendet die Formel aus anderen Antworten.
Probieren Sie es online!
quelle
Oase , 9 Bytes
Ich bin überrascht, dass es kein eingebautes für gibt
2^n
.Probieren Sie es online!
Erläuterung:
quelle
m
achtsverheffing, das und der Mangel an Kreativität. Außerdem wurden viele Operatoren aufgrund von Faulheit und Verzögerung noch nicht implementiert.Schläger 33 Bytes
Mit der von @ Qwerp-Derp erläuterten Formel
Ungolfed:
Testen:
Ausgabe:
quelle
Ruby, 21 Bytes
@ Qwerp-Derp hat im Grunde das schwere Heben gemacht.
Aufgrund des Vorrangs von Ruby brauchen wir anscheinend einige Parens:
quelle
Scala, 23 Bytes
Verwendet Bitverschiebung als Potenzierung
quelle
Pyth, 8 Bytes
pyth.herokuapp.com
Erläuterung:
quelle
R, 26 Bytes
Schamlos die Formel anwenden
quelle
J , 11 Bytes
Basierend auf der gleichen Formel wie zuvor .
Probieren Sie es online!
Erläuterung
quelle
Groovy (22 Bytes)
Bewahrt nicht
n
, sondern verwendet die gleiche Formel wie alle anderen in diesem Wettbewerb. 1 Byte mit Dekrementen aufgrund erforderlicher Klammern gespeichert.Prüfung
quelle
JS-Forth, 32 Bytes
Nicht sehr kurz, aber kürzer als Java. Diese Funktion schiebt das Ergebnis auf den Stapel. Dies erfordert JS-Forth, weil ich benutze
<<
.Probieren Sie es online aus
quelle