unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* 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).