Wir haben 40 Stöcke gleicher Breite, aber unterschiedlicher Höhe. Wie viele Anordnungen gibt es, um sie nebeneinander zu stellen, sodass wir von rechts gesehen 10 Stöcke sehen und von links gesehen genau 10 Stöcke?
Zum Beispiel ist eine solche Bestellung:
Schwarze Stöcke sind versteckt, rote Stöcke sind diejenigen, die Sie sehen können, wenn Sie von links schauen, die blauen Stöcke sind diejenigen, die Sie sehen können, wenn Sie von rechts schauen, und lila (dh der längste) ist derjenige, der gesehen werden kann von beiden Seiten.
Als Testfälle:
- Wenn wir 3 Stöcke hatten, ist die Anzahl der Bestellungen 2 von links und 2 von rechts ist 2
- Wenn wir 5 Sticks hatten, sehen wir 3 von links und 3 von rechts ist 6
- Wenn wir 10 Sticks hatten, ist die Anzahl der Bestellungen, um 4 von links und 4 von rechts zu sehen, 90720
code-golf
combinatorics
permutations
Kumpel
quelle
quelle
10!/40 = 90720
... das Zufall ist?Antworten:
PARI / GP, 80
Die Anzahl der sichtbaren Sticks wird nach dem Bleistift- / Rasterspiel auch als Skyscraper Numbers bezeichnet . Dieser Code basiert auf (nur geringfügig geänderten) Formeln aus OEIS A218531 . Ich weiß nicht viel über PARI, aber ich glaube wirklich nicht, dass es hier draußen viel zu golfen gibt.
Testfälle werden alle auf ideone.com gezeigt . Das Ergebnis für
f(40,10)
ist:quelle
v
links sichtbaren Sticks ist die Stirlingzahls(n,v)
. Wenn sich der höchste Stick an der Position befindetk
, sind die links sichtbaren Sticks der Stick und die links sichtbaren Sticks in der Sub-Permutation links von denk-1
Werten links von der Positionk
. Um alsov
links undv
rechts sichtbare Sticks zu haben, hat man dies(k,v-1)
Wahl, die linke unds(n-k-1,v-1)
die rechte Hälfte zu permutieren und diebinomial(n-1,k)
Wahl, die Sticks in zwei Hälften aufzuteilen.f(n,v,s=stirling)=abs(sum(k=1,n--,binomial(n,k)*s(k,v-1)*s(n-k,v-1)))
. Dies speichertsterling
in einer Variablen zur Wiederverwendung, lässt das letzte Argument aus, da 1 die Standardeinstellung ist, und subtrahiert 1 von n einmal anstatt dreimal.Python 3, 259 Bytes
Nicht sehr glücklich damit.
Beispiel für Ein- und Ausgabe:
Es generiert alle möglichen Kombinationen des angegebenen Bereichs und durchläuft sie dann in einer Schleife, wobei jede Zahl in ihnen überprüft wird, um festzustellen, ob sie dem Maximum der vorherigen Zahlen entspricht. Es macht dann dasselbe rückwärts und wenn die Zählung vorwärts (t) = die Zählung rückwärts (d) = die gegebene Ansichtsnummer (k) ist, ist es eine gültige. Dies wird zu einem Zähler (c) hinzugefügt und am Ende ausgedruckt.
quelle
R 104
Ein wenig entgolfen:
quelle
Pyth -
3836 BytesGrundsätzlich ein Port der R-Antwort. Ziemlich langsam, kann nicht einmal
10, 4
online abschließen .Die einzigen Dinge, die Pyth nicht hat, sind Cummax und das
==
Over-Vektoren, aber die Implementierung dauerte nur ein paar Bytes.Erklärung und weiteres Golfen folgen in Kürze.
Probieren Sie es hier online .
quelle