CJam ( 58 56 caractères)
Certains caractères non imprimables, et l'un est un onglet qui sera modifié par le logiciel StackExchange:
"¶3¬î¿Á· 7ÛÈmÈÚÚ¡"256b454b212f-{__W%.*A<1b+}qi*-4=
Démo en ligne . Cela s'exécutera en ligne pour n = 400 en environ trois secondes.
Encodé par xxd
:
0000000: 22b6 0233 93ac eebf c1b7 0609 3794 dbc8 "..3........7...
0000010: 6dc8 1015 dada a122 3235 3662 3435 3462 m......"256b454b
0000020: 3231 3266 2d7b 5f5f 5725 2e2a 413c 3162 212f-{__W%.*A<1b
0000030: 2b7d 7169 2a2d 343d +}qi*-4=
Explication
Une échelle Möbius est essentiellement une échelle avec deux bords supplémentaires. Étant donné une forêt restreinte sur une échelle, elle peut être élevée entre 1 et 4 forêts restreintes sur l'échelle Möbius. Les bords peuvent être ajoutés à condition de ne pas créer de sommet de degré 3 ni de cycle. Les degrés des quatre coins et leurs interconnexions forment 116 classes de forêt restreinte sur l'échelle, bien que certains d'entre eux soient équivalents en raison des symétries du rectangle. J'ai écrit un programme pour analyser les extensions d'une échelle de longueur n à une longueur n + 1, puis j'ai fusionné les classes en 26 classes d'équivalence. Cela donne une forme fermée
⎡⎣⎢⎢⎢1111⎤⎦⎥⎥⎥T⎡⎣⎢⎢⎢1120223021410110⎤⎦⎥⎥⎥n - 2⎡⎣⎢⎢⎢0100⎤⎦⎥⎥⎥+
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢221111122⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥T⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢210001030100001020112100120100010011101100010110000020100000010110001140100011122⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥n - 2⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢002200000⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥+
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1244113222344⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥T⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢0001001000000021001011000200200002000031004001002000011000001000100100000000010003002002000001000010000200101000000110002001001000101020000012100101101000220010010200004⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥n - 2⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1011201000121⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
les valeurs peuvent donc être calculées rapidement en prenant trois récurrences linéaires puis en les ajoutant, mais cela n'a pas l'air très golfique.
Cependant, si nous prenons les facteurs irréductibles des divers polynômes caractéristiques et multiplions ensemble l'un de chacun (en ignorant la multiplicité), nous obtenons un polynôme de degré 10 qui donne une seule récurrence linéaire de travail.
Approche constructive (58 caractères)
qi:Q2*,Wa*e!{Wa/{_W%e<}%$}%_&{{,1>},2few:~{:-z(Q(%}%0-!},,
Démo en ligne . Il fonctionnera en ligne n=2
sans problème et n=3
avec un peu de patience. Car n=1
il se bloque, mais comme OP a choisi d'exclure ce cas des exigences, ce n'est pas un problème fondamental.
Dissection
qi:Q e# Take input from stdin, parse to int, store in Q
2*,Wa*e! e# Take all permutations of (0, -1, 1, -1, 2, -1, ..., -1, 2*Q-1)
{ e# Map to canonical form...
Wa/ e# Split around the -1s
{_W%e<}% e# Reverse paths where necessary to get a canonical form
$ e# Sort paths
}%
_& e# Filter to distinct path sets
{ e# Filter to path sets with valid paths:
{,1>}, e# Ignore paths with fewer than two elements (can't be invalid; break 2ew)
2few:~ e# Break paths into their edges
{:-z(Q(%}% e# The difference between the endpoints of an edge should be +/-1 or Q (mod 2Q)
e# So their absolute values should be 1, Q, 2Q-1.
e# d => (abs(d)-1) % (Q-1) maps those differences, and no other possible ones, to 0
e# NB {:-zQ(%}% to map them all to 1 would save a byte, but wouldn't work for Q=2
0-! e# Test that all values obtained are 0
},
, e# Count the filtered distinct path sets
Une version plus efficace prend 98 octets:
qi2*:Q{a{__0=[1Q2/Q(]f+Qf%_&1$-\f{+E}~}:E~}/]{_W%>!},:MW=0{_{M\f{__3$_@&@:e<@|^{=}{^j}?}1b}{,)}?}j
Démo en ligne
Cela construit les chemins possibles par une recherche en profondeur d'abord, puis utilise une fonction mémorisée qui compte les forêts restreintes possibles pour un ensemble donné de sommets. La fonction fonctionne récursivement sur la base que toute forêt restreinte pour un ensemble de sommets non vide donné se compose d'un chemin contenant le plus petit sommet et d'une forêt restreinte couvrant les sommets ne se trouvant pas dans ce chemin.
34, 241, 1582, 10204, 65197, 415076, 2638366, 16759249, 106427154, 675771276, 4290678337
. Je ne sais pas pourquoi l'entrée1
n'est pas également requise, avec la sortie2
.