Un numero di Bell ( OEIS A000110 ) è il numero di modi per partizionare un set di n elementi (distinti) etichettati. Il numero 0 Bell è definito come 1.
Diamo un'occhiata ad alcuni esempi (uso parentesi per indicare i sottoinsiemi e le parentesi graffe per le partizioni):
1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}
Esistono molti modi per calcolare i numeri Bell e sei libero di usarli. Un modo sarà descritto qui:
Il modo più semplice per calcolare i numeri di Bell è usare un triangolo numerico simile al triangolo di Pascal per i coefficienti binomiali. I numeri di Bell appaiono sui bordi del triangolo. A partire da 1, ogni nuova riga nel triangolo viene costruita prendendo l'ultima voce della riga precedente come prima voce, quindi impostando ciascuna nuova voce sul suo vicino sinistro più il suo vicino superiore sinistro:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
È possibile utilizzare 0-indicizzazione o 1-indicizzazione. Se si utilizza l'indicizzazione 0, viene immesso un input di 3dovrebbe 5, ma dovrebbe essere emesso 2se si utilizza l'indicizzazione 1.
Il tuo programma deve funzionare fino al 15 ° numero Bell, in uscita 1382958545. In teoria, il tuo programma dovrebbe essere in grado di gestire numeri più grandi (in altre parole, non codificare le soluzioni).
EDIT: non è necessario gestire un input di 0 (per 0-indicizzazione) o 1 (per 1-indicizzazione) perché non è calcolato dal metodo del triangolo.
Casi di test (presupponendo 0-indicizzazione):
0 -> 1 (OPTIONAL)
1 -> 1
2 -> 2
3 -> 5
4 -> 15
5 -> 52
6 -> 203
7 -> 877
8 -> 4140
9 -> 21147
10 -> 115975
11 -> 678570
12 -> 4213597
13 -> 27644437
14 -> 190899322
15 -> 1382958545
Le risposte che utilizzano un metodo integrato (come BellB [n] nella lingua di Wolfram) che produce direttamente numeri di Bell non saranno competitive.
Il codice più breve (in byte) vince.
3dovrebbe essere generato 2. Quindi cosa darebbe l'input 1con l'indicizzazione 1?



3dovrebbe essere output5Sarebbe uscito15, giusto? E con l'indicizzazione 1 avrebbe prodotto5