Skip to content

Commit

Permalink
Reto mouredev#36 - Lisp
Browse files Browse the repository at this point in the history
  • Loading branch information
HydraDarkNg authored and HydraDarkNg committed Sep 7, 2023
1 parent feb74b2 commit 551d13b
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions Retos/Reto #36 - PERMUTACIONES [Media]/lisp/HydraDarkNg.lisp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
;; Reto #36: Permutaciones
;;;; Dificultad: Media | Publicación: 04/09/23 | Corrección: 18/09/23

;;; Enunciado

;;
;; Crea un programa que sea capaz de generar e imprimir todas las
;; permutaciones disponibles formadas por las letras de una palabra.
;; - Las palabras generadas no tienen por qué existir.
;; - Deben usarse todas las letras en cada permutación.
;; - Ejemplo: sol, slo, ols, osl, los, lso
;;

(declaim (optimize (speed 3) (safety 0)))

(declaim (ftype (function (list &optional list) list) all-permutations))
(declaim (ftype (function (string) null) generate-permutation))

(defun all-permutations (list &optional (remain list))
(cond ((null remain) nil)
((null (rest list)) (list list))
(t (append
(mapcar (lambda (l) (cons (first list) l))
(all-permutations (rest list)))
(all-permutations (append (rest list) (list (first list))) (rest remain))))))

(defun generate-permutation (string)
(format t "~{~{~a~}~%~}"
(all-permutations
(map 'list #'identity string))))

(generate-permutation "sol")

0 comments on commit 551d13b

Please sign in to comment.