* count char in string [The Emacs Challenge Competition - round 2, with fallout]
@ 2020-10-28 0:42 Emanuel Berg via Users list for the GNU Emacs text editor
2020-10-28 8:04 ` Corwin Brust
` (3 more replies)
0 siblings, 4 replies; 16+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-10-28 0:42 UTC (permalink / raw)
To: help-gnu-emacs
round 1:
https://lists.gnu.org/archive/html/help-gnu-emacs/2020-10/msg00524.html
fallout:
1. Daniel Martín (1 point)
2. Emanuel Berg (-2)
Yes, your read it right, incorrect answers are "awarded" -2 points.
This is like the Russian or Cuban Olympic/Amateur boxing program -
only gold counts!
But: doesn't that mean that people will be afraid to post? Again, in
the Russian and Cuban Olympic/Amateur boxing programs, we are not
concerned with people who are afraid...
round 2:
Very simple: we are looking for a function that returns the number of
occurrences of a char in a string.
Emanuel Berg's solution:
(require 'cl-lib)
(defun count-char-in-string (the-char str)
(let ((c (if (characterp the-char) the-char (string-to-char the-char)))
(cs (string-to-list str)) )
(cl-count c cs) ))
;; (count-char-in-string ?a "Emacs skills kills") ; 1
--
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-28 0:42 count char in string [The Emacs Challenge Competition - round 2, with fallout] Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-10-28 8:04 ` Corwin Brust
2020-10-28 17:19 ` Noam Postavsky
2020-11-28 1:26 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-10-29 1:46 ` Benjamín Buccianti
` (2 subsequent siblings)
3 siblings, 2 replies; 16+ messages in thread
From: Corwin Brust @ 2020-10-28 8:04 UTC (permalink / raw)
To: Emanuel Berg, help-gnu-emacs
We who are about to be educated salute you ;)
On Tue, Oct 27, 2020 at 7:42 PM Emanuel Berg via Users list for the
GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
>
> round 2:
>
> Very simple: we are looking for a function that returns the number of
> occurrences of a char in a string.
(defun count-char-in-string (string char)
"Return the number of occurances of CHAR in STRING."
(seq-count (apply-partially 'eq char)
(seq-into string 'list)))
(count-char-in-string "hii" ?I) ;; ⇒ 2
Cheers!
Corwin
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-28 8:04 ` Corwin Brust
@ 2020-10-28 17:19 ` Noam Postavsky
2020-10-29 1:15 ` Corwin Brust
2020-11-28 1:26 ` Emanuel Berg via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 16+ messages in thread
From: Noam Postavsky @ 2020-10-28 17:19 UTC (permalink / raw)
To: Corwin Brust; +Cc: Help Gnu Emacs mailing list, Emanuel Berg
On Wed, 28 Oct 2020 at 04:04, Corwin Brust <corwin@bru.st> wrote:
> (seq-count (apply-partially 'eq char)
> (seq-into string 'list)))
You don't need the seq-into, just pass string directly to seq-count.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-28 17:19 ` Noam Postavsky
@ 2020-10-29 1:15 ` Corwin Brust
2020-11-29 3:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 16+ messages in thread
From: Corwin Brust @ 2020-10-29 1:15 UTC (permalink / raw)
To: Noam Postavsky; +Cc: Help Gnu Emacs mailing list, Emanuel Berg
On Wed, Oct 28, 2020, 12:19 PM Noam Postavsky <npostavs@gmail.com> wrote:
> You don't need the seq-into, just pass string directly to seq-count.
Oh -- nice, thanks Noam!
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-28 0:42 count char in string [The Emacs Challenge Competition - round 2, with fallout] Emanuel Berg via Users list for the GNU Emacs text editor
2020-10-28 8:04 ` Corwin Brust
@ 2020-10-29 1:46 ` Benjamín Buccianti
2020-10-29 10:38 ` Stephen Berman
2020-10-29 13:53 ` Patrick McAllister
3 siblings, 0 replies; 16+ messages in thread
From: Benjamín Buccianti @ 2020-10-29 1:46 UTC (permalink / raw)
To: help-gnu-emacs
> round 2:
>
> Very simple: we are looking for a function that returns the number of
> occurrences of a char in a string.
>
My solution!
(defun count-char-in-string (the-char str)
(seq-reduce (lambda (counter next)
(+ counter (if (eq the-char next) 1 0)))
str
0))
I really like this kind of things! Keep doing it! I learn a lot from other's answers.
Cheers!
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-28 0:42 count char in string [The Emacs Challenge Competition - round 2, with fallout] Emanuel Berg via Users list for the GNU Emacs text editor
2020-10-28 8:04 ` Corwin Brust
2020-10-29 1:46 ` Benjamín Buccianti
@ 2020-10-29 10:38 ` Stephen Berman
2020-10-29 16:13 ` Drew Adams
2020-10-29 13:53 ` Patrick McAllister
3 siblings, 1 reply; 16+ messages in thread
From: Stephen Berman @ 2020-10-29 10:38 UTC (permalink / raw)
To: help-gnu-emacs
On Wed, 28 Oct 2020 01:42:13 +0100 Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
> round 2:
>
> Very simple: we are looking for a function that returns the number of
> occurrences of a char in a string.
cl-count? seq-count? seq-reduce? KISS!
(defun count-char-in-string (char str)
"Return number of occurrences of character CHAR in string STR."
(let ((count 0))
(dotimes (i (length str) count)
(when (eq char (aref str i))
(setq count (1+ count))))))
Steve Berman
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-28 0:42 count char in string [The Emacs Challenge Competition - round 2, with fallout] Emanuel Berg via Users list for the GNU Emacs text editor
` (2 preceding siblings ...)
2020-10-29 10:38 ` Stephen Berman
@ 2020-10-29 13:53 ` Patrick McAllister
2020-10-29 17:52 ` Leo Butler
3 siblings, 1 reply; 16+ messages in thread
From: Patrick McAllister @ 2020-10-29 13:53 UTC (permalink / raw)
To: help-gnu-emacs
On Wed, Oct 28 2020, Emanuel Berg via Users list for the GNU Emacs text editor wrote:
> round 2:
>
> Very simple: we are looking for a function that returns the number of
> occurrences of a char in a string.
>
> Emanuel Berg's solution:
>
> (require 'cl-lib)
> (defun count-char-in-string (the-char str)
> (let ((c (if (characterp the-char) the-char (string-to-char the-char)))
> (cs (string-to-list str)) )
> (cl-count c cs) ))
> ;; (count-char-in-string ?a "Emacs skills kills") ; 1
I had this lying around:
(defun count-char-in-string (char string)
"Count CHARS in STRING (after normalizing it)."
(length
(cl-remove-if-not
(lambda (x) (= char x))
(append (ucs-normalize-NFKC-string string) nil))))
--
Patrick
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-29 10:38 ` Stephen Berman
@ 2020-10-29 16:13 ` Drew Adams
0 siblings, 0 replies; 16+ messages in thread
From: Drew Adams @ 2020-10-29 16:13 UTC (permalink / raw)
To: Stephen Berman, help-gnu-emacs
> cl-count? seq-count? seq-reduce? KISS!
>
> (defun count-char-in-string (char str)
> "Return number of occurrences of character CHAR in string STR."
> (let ((count 0))
> (dotimes (i (length str) count)
> (when (eq char (aref str i))
> (setq count (1+ count))))))
+1.
Or just (cl-incf count) at the end, if you're
loading `cl-lib.el' anyway, for other reasons.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-29 13:53 ` Patrick McAllister
@ 2020-10-29 17:52 ` Leo Butler
2020-10-29 22:44 ` Jean Louis
0 siblings, 1 reply; 16+ messages in thread
From: Leo Butler @ 2020-10-29 17:52 UTC (permalink / raw)
To: help-gnu-emacs
Patrick McAllister <pma@rdorte.org> writes:
> ********************************************************
> Caution: This message was sent from outside the University of Manitoba.
> ********************************************************
>
> On Wed, Oct 28 2020, Emanuel Berg via Users list for the GNU Emacs text editor wrote:
>
>> round 2:
>>
>> Very simple: we are looking for a function that returns the number of
>> occurrences of a char in a string.
>>
>> Emanuel Berg's solution:
>>
>> (require 'cl-lib)
>> (defun count-char-in-string (the-char str)
>> (let ((c (if (characterp the-char) the-char (string-to-char the-char)))
>> (cs (string-to-list str)) )
>> (cl-count c cs) ))
>> ;; (count-char-in-string ?a "Emacs skills kills") ; 1
Here is a solution for interactive use that is far more flexible than
just counting characters.
I use the following a lot when editing documents with a maximum
character count:
M-< M-x replace-regexp [^[:space:]] \& RET
Or, since I bind replace-regexp to C-x a r,
M-< C-x a r [^[:space:]] \& RET
I just did that and the mini-buffer informed me there were 1232
non-space characters in the buffer.
Leo
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-29 17:52 ` Leo Butler
@ 2020-10-29 22:44 ` Jean Louis
2020-10-30 11:09 ` Leo Butler
0 siblings, 1 reply; 16+ messages in thread
From: Jean Louis @ 2020-10-29 22:44 UTC (permalink / raw)
To: Leo Butler; +Cc: help-gnu-emacs
* Leo Butler <leo.butler@umanitoba.ca> [2020-10-29 21:08]:
> Patrick McAllister <pma@rdorte.org> writes:
>
> > ********************************************************
> > Caution: This message was sent from outside the University of Manitoba.
> > ********************************************************
> >
> > On Wed, Oct 28 2020, Emanuel Berg via Users list for the GNU Emacs text editor wrote:
> >
> >> round 2:
> >>
> >> Very simple: we are looking for a function that returns the number of
> >> occurrences of a char in a string.
> >>
> >> Emanuel Berg's solution:
> >>
> >> (require 'cl-lib)
> >> (defun count-char-in-string (the-char str)
> >> (let ((c (if (characterp the-char) the-char (string-to-char the-char)))
> >> (cs (string-to-list str)) )
> >> (cl-count c cs) ))
> >> ;; (count-char-in-string ?a "Emacs skills kills") ; 1
>
> Here is a solution for interactive use that is far more flexible than
> just counting characters.
>
> I use the following a lot when editing documents with a maximum
> character count:
>
> M-< M-x replace-regexp [^[:space:]] \& RET
>
> Or, since I bind replace-regexp to C-x a r,
>
> M-< C-x a r [^[:space:]] \& RET
>
> I just did that and the mini-buffer informed me there were 1232
> non-space characters in the buffer.
>
> Leo
>
M-x how-many
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-29 22:44 ` Jean Louis
@ 2020-10-30 11:09 ` Leo Butler
2020-10-30 11:36 ` Joost Kremers
2020-10-30 11:53 ` Jean Louis
0 siblings, 2 replies; 16+ messages in thread
From: Leo Butler @ 2020-10-30 11:09 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis <bugs@gnu.support> writes:
> M-x how-many
Nice. Thank you. That beats all the solutions offered, imo.
Leo
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-30 11:09 ` Leo Butler
@ 2020-10-30 11:36 ` Joost Kremers
2020-10-30 11:53 ` Jean Louis
1 sibling, 0 replies; 16+ messages in thread
From: Joost Kremers @ 2020-10-30 11:36 UTC (permalink / raw)
To: Leo Butler; +Cc: help-gnu-emacs
On Fri, Oct 30 2020, Leo Butler wrote:
> Jean Louis <bugs@gnu.support> writes:
>
>> M-x how-many
>
> Nice. Thank you. That beats all the solutions offered, imo.
Except that the original challenge was to count characters in a string, but
`how-many` counts occurrences in the current buffer. ;-)
--
Joost Kremers
Life has its moments
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-30 11:09 ` Leo Butler
2020-10-30 11:36 ` Joost Kremers
@ 2020-10-30 11:53 ` Jean Louis
1 sibling, 0 replies; 16+ messages in thread
From: Jean Louis @ 2020-10-30 11:53 UTC (permalink / raw)
To: Leo Butler; +Cc: help-gnu-emacs
* Leo Butler <leo.butler@umanitoba.ca> [2020-10-30 14:10]:
> Jean Louis <bugs@gnu.support> writes:
>
> > M-x how-many
>
> Nice. Thank you. That beats all the solutions offered, imo.
It may look handy but in background it is very complex, so it does not
beat.
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-28 8:04 ` Corwin Brust
2020-10-28 17:19 ` Noam Postavsky
@ 2020-11-28 1:26 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-11-28 17:40 ` Benjamín Buccianti
1 sibling, 1 reply; 16+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-11-28 1:26 UTC (permalink / raw)
To: help-gnu-emacs
Corwin Brust wrote:
> (defun count-char-in-string (string char)
> "Return the number of occurances of CHAR in STRING."
> (seq-count (apply-partially 'eq char)
> (seq-into string 'list)))
OK, that looks better than mine so I take it. But you have to
require seq or the byte compiler will complain.
(require 'seq)
(defun count-char-in-string (string char)
(seq-count (apply-partially 'eq char) (seq-into string 'list)) )
;; (count-char-in-string "Emacs skills kills" ?a) ; 1
> (count-char-in-string "hii" ?I) ;; ⇒ 2
That's 0 :) because it is case sensitive (as it should)
--
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-11-28 1:26 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-11-28 17:40 ` Benjamín Buccianti
0 siblings, 0 replies; 16+ messages in thread
From: Benjamín Buccianti @ 2020-11-28 17:40 UTC (permalink / raw)
To: help-gnu-emacs
Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> writes:
>
>> (count-char-in-string "hii" ?I) ;; ⇒ 2
>
> That's 0 :) because it is case sensitive (as it should)
Would be awesome to provide a few simple tests?
We can make this as a web similar to vim-golf?
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: count char in string [The Emacs Challenge Competition - round 2, with fallout]
2020-10-29 1:15 ` Corwin Brust
@ 2020-11-29 3:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
0 siblings, 0 replies; 16+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-11-29 3:44 UTC (permalink / raw)
To: help-gnu-emacs
Corwin Brust wrote:
>> You don't need the seq-into, just pass string directly to
>> seq-count.
>
> Oh -- nice, thanks Noam!
So this is the best solution, right?
(require 'seq)
(defun count-char-in-string (str char)
(seq-count (lambda (c) (= c char)) str) )
;; (count-char-in-string "Emacs skills kills" ?a) ; 1
;; (count-char-in-string "Emacs skills kills" ?A) ; 0
;; (count-char-in-string "Emacs skills kills" ?l) ; 4
https://dataswamp.org/~incal/emacs-init/count.el
--
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2020-11-29 3:44 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-28 0:42 count char in string [The Emacs Challenge Competition - round 2, with fallout] Emanuel Berg via Users list for the GNU Emacs text editor
2020-10-28 8:04 ` Corwin Brust
2020-10-28 17:19 ` Noam Postavsky
2020-10-29 1:15 ` Corwin Brust
2020-11-29 3:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-11-28 1:26 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-11-28 17:40 ` Benjamín Buccianti
2020-10-29 1:46 ` Benjamín Buccianti
2020-10-29 10:38 ` Stephen Berman
2020-10-29 16:13 ` Drew Adams
2020-10-29 13:53 ` Patrick McAllister
2020-10-29 17:52 ` Leo Butler
2020-10-29 22:44 ` Jean Louis
2020-10-30 11:09 ` Leo Butler
2020-10-30 11:36 ` Joost Kremers
2020-10-30 11:53 ` Jean Louis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).