Максимальное количество отдельных подстрок

9

Описание

Учитывая длину nи размер алфавита k>0, ваша программа должна определить количество строк с теми параметрами, которые имеют максимальное количество уникальных подстрок. В случае k=2этого генерируется OEIS A134457 .

пример

Например, 2210есть подстроки , 2, 22, 221, 2210, 2, 21, 210, 1, 10, и 0, в общей сложности 11. Тем не менее, 2появляется дважды, поэтому он имеет только 10 уникальных подстроки.

Это как можно больше для длины 4 строки , содержащей 3 различных символов, но она связывает с 35 другими строками в общей сложности 36 Tieing строк в том числе 0012, 2101и 0121. Следовательно, для n=4и k=3, ваша программа должна вывести 36.

Тестовые случаи

n    k    output

0    5    1
1    3    3
5    1    1
9    2    40
2    3    6
5    5    120
user1502040
источник
3
Не могли бы вы привести несколько примеров? Трудно понять проблему из этого очень короткого описания.
ETHproductions
Так что не будет n=2, k=3вывод 9 11,12,21,22,31,32,33,13,23:?
veganaiZe
@veganaiZe Двойные цифры имеют повторную подстроку.
user1502040

Ответы:

2

Желе , 9 байт

ṗµẆQLµ€ML

Попробуйте онлайн!

Ввод в обратном порядке. Грубая сила.

Дрянная Монахиня
источник
Сохраните байт, избегая цепочки из трех атомов с транспонированием и хвостом:ṗẆQ$€ZṪL
Джонатан Аллан
3

Pyth, 12 байт

l.Ml{.:Z)^UE

Попробуйте онлайн.

Чистая грубая сила.

объяснение

  • Неявный: добавить Qв программу.
  • Неявный: читать и оценивать строку ввода ( n) в Q.
  • E: прочитайте и оцените строку ввода ( k).
  • U: получить диапазон [0, ..., k-1].
  • ^: получить все nдлины строк [0, ..., k-1].
  • .M: найдите те, которые дают максимум для функции f(Z):
    • .:Z: найти подстроки Z
    • {: удалить дубликаты
    • l: получить количество уникальных подстрок
  • l: получить количество таких строк
PurkkaKoodari
источник
2

Mathematica, 96 байт

Last[Last/@Tally[Length@Union@Flatten[Table[Partition[#,i,1],{i,s}],1]&/@Tuples[Range@#2,s=#]]]&
J42161217
источник
2

Haskell, 82 байта

import Data.Lists
l=length
n#k=l$argmaxes(l.nub.powerslice)$mapM id$[1..k]<$[1..n]

Пример использования: 9 # 2-> 40.

Как это работает:

       [1..k]<$[1..n]  --  make a list of n copies of the list [1..k]
      mapM id          --  make a list of all combinations thereof, where
                       --  the 1st element is from the f1st list, 2nd from 2nd etc
  argmaxes             --  find all elements which give the maximum value for function:
     l.nub.powerslice  --    length of the list of unique sublists
l                      --  take the length of this list
Ними
источник