Анаграммы в схеме - PullRequest
       4

Анаграммы в схеме

0 голосов
/ 13 ноября 2010

Кто-нибудь пробовал генерировать анаграммы в схеме ???

У меня есть список (A B C D E F), и мне нужно создать анаграммы длиной 4. Как «AAAA», «ABCD», «BCBC» и т. Д. Я полностью сбит с толку. (

Может кто-нибудь, пожалуйста, напишите мне, как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 13 ноября 2010

Хм ... Недавно я решил очень похожую задачу - создать анаграммы длины N из (0 1). Вот мое решение. Может быть, это поможет вам:

;; 
;; (define (generate n)) -> create list of string where
;;    * length of each string is n
;;    * each symbol of string is '0' or '1'
;;    * the list has all possible combinations of symbols '0' and '1'

(define (generate n)
(generate-engine (list "0" "1") n))

(define (generate-engine lst n)
 (cond
  [(= n 1) lst]
  [else (generate-engine (append (add-to-list lst "0") (add-to-list lst "1")) (- n 1))])    
)

(define (add-to-list lst symbol)
 (cond
  [(empty? lst) empty]
  [else (cons (add-to-element (first lst) symbol) (add-to-list (rest lst) symbol))]))

(define (add-to-element element symbol)
 (string-append element symbol)
)

;; example 

(generate 3)

Результат:

(list "000" "100" "010" "110" "001" "101" "011" "111")
0 голосов
/ 14 ноября 2010

Базовый корпус

Анаграммы длины 1 - это просто элементы в списке. Вернуть список.

Рекурсивный кейс

Анаграммы длины n - это каждый из пунктов в списке, добавленных ко всем анаграммам длины (- n 1).

Из этого вы должны быть в состоянии составить пример базового случая и рекурсивного случая. Вам, вероятно, понадобится вспомогательная функция.

0 голосов
/ 13 ноября 2010

Для каждого i = 0..x, где x - длина анаграммы, сгенерируйте случайное число r, такое, что 0 <= r <= n, где n - количество элементов в списке букв. Теперь используйте r в качестве индекса в списке букв и объедините его с результатом.

...