From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.help Subject: Re: puzzle with string permutations [photo] Date: Wed, 08 Jun 2022 02:17:49 +0200 Message-ID: <874k0wm2j6.fsf@dataswamp.org> References: <87r141rn8n.fsf@dataswamp.org> <87wndtrlpg.fsf@mbork.pl> <87k09ssycf.fsf@dataswamp.org> <87fskgsy4c.fsf@dataswamp.org> <87bkv4sxnu.fsf@dataswamp.org> <87bkv4r35k.fsf@dataswamp.org> <8735ggr1z0.fsf@dataswamp.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="28544"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:wfz9J4S/tAEl31Looc+q6dnAgUs= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Wed Jun 08 02:18:30 2022 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nyjOz-00076t-Uh for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 08 Jun 2022 02:18:25 +0200 Original-Received: from localhost ([::1]:53928 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nyjOy-00044X-Nt for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 07 Jun 2022 20:18:24 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47952) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyjOZ-00044N-Lg for help-gnu-emacs@gnu.org; Tue, 07 Jun 2022 20:17:59 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:52418) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nyjOY-0008Tb-1B for help-gnu-emacs@gnu.org; Tue, 07 Jun 2022 20:17:59 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1nyjOW-0006No-Dc for help-gnu-emacs@gnu.org; Wed, 08 Jun 2022 02:17:56 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:137520 Archived-At: Yuri Khan wrote: > In general, with a multiset {X_1:n_1, ..., X_k:n_k}, if we > number each letter, we get (n_1 + ... + n_k)! permutations, > and then we have to adjust for duplicates for each > individual letter by dividing by (n_1)! ... (n_k)!. > > n_perm = (n_1 + ... + n_k)! / (n_1)! ... (n_k)! You mean like this? (require 'cl-lib) (defun cl-faculty (n) (cl-loop with prod = 1 for i from 2 to n do (setq prod (* i prod)) finally return prod) ) ;; (cl-faculty 5) ; 120 ;; (cl-faculty 10) ; 3 628 800 (defun count (e l) (seq-count (lambda (elem) (= elem e)) l) ) ;; (count ?o '(?d ?g ?o ?o)) ; 2 (defun product-string (str) (let*((str-list (string-to-list str)) (str-list-no-dups (cl-remove-duplicates str-list)) (prod 1) ) (dolist (e str-list-no-dups) (setq prod (* prod (cl-faculty (count e str-list)))) ) prod )) ;; (product-string "ogod") ; 2 (defun perms-string-num (str) (let ((n (cl-faculty (length str))) (r (product-string str)) ) (/ n r) )) ;; (perms-string-num "ogod") ; 12 ;; (perms-string-num "kudtce") ; 720 -- underground experts united https://dataswamp.org/~incal