unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Search through the string's space for find the target string whose md5sum matches the required condition.
@ 2021-10-12  8:42 Hongyi Zhao
  2021-10-12  9:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-10-12 11:47 ` Hongyi Zhao
  0 siblings, 2 replies; 10+ messages in thread
From: Hongyi Zhao @ 2021-10-12  8:42 UTC (permalink / raw)
  To: help-gnu-emacs

Suppose we have a string represented as follows, where `?' represents
arbitrary uppercase letters:

TASC?O3RJMV?WDJKX?ZM

We also know that its md5sum has the following form:

E903???4DAB????08?????51?80??8A?

Based on the above information, find out the string and its
corresponding md5sum.

I've done the work with the following python code:

```python
import re
from hashlib import md5
from string import ascii_uppercase

alphabet_uppercase=ascii_uppercase
re_md5_str=re.compile(r'^E903[A-F0-9]{3}4DAB[A-F0-9]{4}08[A-F0-9]{5}51[A-F0-9]80[A-F0-9]{2}8A[A-F0-9]')

#result_str=[]
for i in alphabet_uppercase:
    i_str= 'TASC' + i
    for j in alphabet_uppercase:
        j_str = i_str + 'O3RJMV' + j
        for k in alphabet_uppercase:
            k_str = j_str + 'WDJKX' + k + 'ZM'
            #result_str.append(k_str)
            md5_str=md5(k_str.encode('utf-8')).hexdigest().upper()
            if re_md5_str.match(md5_str):
                md5_str = re_md5_str.match(md5_str)[0]
                print('The string: ' + k_str + '\n' + 'md5sum: ' + md5_str)
```

But I would like to know the ELISP implementation for the above
question. Any hints will be greatly appreciated.

Regards, HZ



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-12  8:42 Search through the string's space for find the target string whose md5sum matches the required condition Hongyi Zhao
@ 2021-10-12  9:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-10-12 11:45   ` Hongyi Zhao
  2021-10-12 11:47 ` Hongyi Zhao
  1 sibling, 1 reply; 10+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-10-12  9:39 UTC (permalink / raw)
  To: help-gnu-emacs

Hongyi Zhao wrote:

> alphabet_uppercase=ascii_uppercase
> re_md5_str=re.compile(r'^E903[A-F0-9]{3}4DAB[A-F0-9]{4}08[A-F0-9]{5}51[A-F0-9]80[A-F0-9]{2}8A[A-F0-9]')
>
> #result_str=[]
> for i in alphabet_uppercase:
>     i_str= 'TASC' + i
>     for j in alphabet_uppercase:
>         j_str = i_str + 'O3RJMV' + j
>         for k in alphabet_uppercase:
>             k_str = j_str + 'WDJKX' + k + 'ZM'
>             #result_str.append(k_str)
>             md5_str=md5(k_str.encode('utf-8')).hexdigest().upper()
>             if re_md5_str.match(md5_str):
>                 md5_str = re_md5_str.match(md5_str)[0]
>                 print('The string: ' + k_str + '\n' + 'md5sum: ' + md5_str)
> ```

Jean should answer this, he does it for a living ...

But, (require 'cl-lib) so you get the `cl-loop for' loop which
I dare say is better than the Python one at that. Then regexps
and `format' as you know ... no problem. One step at a time.

See example of `cl-loop' here:
  https://dataswamp.org/~incal/emacs-init/random-generic.el

"Elisp is my favorite E" BTW <3

you better believe it :) ...

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-12  9:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-10-12 11:45   ` Hongyi Zhao
  2021-10-12 13:01     ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 10+ messages in thread
From: Hongyi Zhao @ 2021-10-12 11:45 UTC (permalink / raw)
  To: Emanuel Berg, help-gnu-emacs

On Tue, Oct 12, 2021 at 5:41 PM Emanuel Berg via Users list for the
GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
>
> Hongyi Zhao wrote:
>
> > alphabet_uppercase=ascii_uppercase
> > re_md5_str=re.compile(r'^E903[A-F0-9]{3}4DAB[A-F0-9]{4}08[A-F0-9]{5}51[A-F0-9]80[A-F0-9]{2}8A[A-F0-9]')
> >
> > #result_str=[]
> > for i in alphabet_uppercase:
> >     i_str= 'TASC' + i
> >     for j in alphabet_uppercase:
> >         j_str = i_str + 'O3RJMV' + j
> >         for k in alphabet_uppercase:
> >             k_str = j_str + 'WDJKX' + k + 'ZM'
> >             #result_str.append(k_str)
> >             md5_str=md5(k_str.encode('utf-8')).hexdigest().upper()
> >             if re_md5_str.match(md5_str):
> >                 md5_str = re_md5_str.match(md5_str)[0]
> >                 print('The string: ' + k_str + '\n' + 'md5sum: ' + md5_str)
> > ```
>
> Jean should answer this, he does it for a living ...
>
> But, (require 'cl-lib) so you get the `cl-loop for' loop which
> I dare say is better than the Python one at that. Then regexps
> and `format' as you know ... no problem. One step at a time.
>
> See example of `cl-loop' here:
>   https://dataswamp.org/~incal/emacs-init/random-generic.el
>
> "Elisp is my favorite E" BTW <3

This is the most incomprehensible sentence.

> you better believe it :) ...

I believe.

> --
> underground experts united
> https://dataswamp.org/~incal



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-12  8:42 Search through the string's space for find the target string whose md5sum matches the required condition Hongyi Zhao
  2021-10-12  9:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-10-12 11:47 ` Hongyi Zhao
  2021-10-12 13:06   ` Emanuel Berg via Users list for the GNU Emacs text editor
  1 sibling, 1 reply; 10+ messages in thread
From: Hongyi Zhao @ 2021-10-12 11:47 UTC (permalink / raw)
  To: help-gnu-emacs

On Tue, Oct 12, 2021 at 4:42 PM Hongyi Zhao <hongyi.zhao@gmail.com> wrote:
>
> Suppose we have a string represented as follows, where `?' represents
> arbitrary uppercase letters:
>
> TASC?O3RJMV?WDJKX?ZM
>
> We also know that its md5sum has the following form:
>
> E903???4DAB????08?????51?80??8A?
>
> Based on the above information, find out the string and its
> corresponding md5sum.
>
> I've done the work with the following python code:
>
> ```python
> import re
> from hashlib import md5
> from string import ascii_uppercase
>
> alphabet_uppercase=ascii_uppercase
> re_md5_str=re.compile(r'^E903[A-F0-9]{3}4DAB[A-F0-9]{4}08[A-F0-9]{5}51[A-F0-9]80[A-F0-9]{2}8A[A-F0-9]')
>
> #result_str=[]
> for i in alphabet_uppercase:
>     i_str= 'TASC' + i
>     for j in alphabet_uppercase:
>         j_str = i_str + 'O3RJMV' + j
>         for k in alphabet_uppercase:
>             k_str = j_str + 'WDJKX' + k + 'ZM'
>             #result_str.append(k_str)
>             md5_str=md5(k_str.encode('utf-8')).hexdigest().upper()
>             if re_md5_str.match(md5_str):
>                 md5_str = re_md5_str.match(md5_str)[0]
>                 print('The string: ' + k_str + '\n' + 'md5sum: ' + md5_str)
> ```

The following is an improved version:

```python
import re
from hashlib import md5
from string import ascii_uppercase

alphabet_uppercase = ascii_uppercase
re_md5_str = re.compile(r"""^E903[A-F0-9]{3}
                4DAB[A-F0-9]{4}
                08[A-F0-9]{5}
                51[A-F0-9]
                80[A-F0-9]{2}
                8A[A-F0-9]""", re.X)

for i in alphabet_uppercase:
    i_str = 'TASC' + i
    for j in alphabet_uppercase:
        j_str = i_str + 'O3RJMV' + j
        for k in alphabet_uppercase:
            _str = j_str + 'WDJKX' + k + 'ZM'
            md5_str = md5(_str.encode('utf-8')).hexdigest().upper()
            if re_md5_str.match(md5_str):
                print('string: ' + _str + '\n' + 'md5sum: ' + md5_str)
```
HZ



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-12 11:45   ` Hongyi Zhao
@ 2021-10-12 13:01     ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 0 replies; 10+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-10-12 13:01 UTC (permalink / raw)
  To: help-gnu-emacs

Hongyi Zhao wrote:

>> "Elisp is my favorite E" BTW <3
>
> This is the most incomprehensible sentence.

Here in the decadent and normless west we understand :)

Especially in the UK ... in terms of quantity per capita :)

But it's all over actually ...

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-12 11:47 ` Hongyi Zhao
@ 2021-10-12 13:06   ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-10-13  2:29     ` Hongyi Zhao
  0 siblings, 1 reply; 10+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-10-12 13:06 UTC (permalink / raw)
  To: help-gnu-emacs

Hongyi Zhao wrote:

> import re
> from hashlib import md5
> from string import ascii_uppercase
>
> alphabet_uppercase = ascii_uppercase
> re_md5_str = re.compile(r"""^E903[A-F0-9]{3}
>                 4DAB[A-F0-9]{4}
>                 08[A-F0-9]{5}
>                 51[A-F0-9]
>                 80[A-F0-9]{2}
>                 8A[A-F0-9]""", re.X)
>
> for i in alphabet_uppercase:
>     i_str = 'TASC' + i
>     for j in alphabet_uppercase:
>         j_str = i_str + 'O3RJMV' + j
>         for k in alphabet_uppercase:
>             _str = j_str + 'WDJKX' + k + 'ZM'
>             md5_str = md5(_str.encode('utf-8')).hexdigest().upper()
>             if re_md5_str.match(md5_str):
>                 print('string: ' + _str + '\n' + 'md5sum: ' + md5_str)

Python ... ugly but efficient.

Lisp ... wonderful but ... yeah, to some extent.

Now do it in Lisp and let's compare. But the biggest
difference (aside for beauty) will be the time spent writing
the code - an expert lisper and beginner/medium level Python
programmer should spend a comparable amount of time :) - not
time in execution.

Then I include googling solutions ...

The true expert does everything very rapidly. But who is
a Lisp expert? I can think of one person on this list and it
sure ain't me :)

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-12 13:06   ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-10-13  2:29     ` Hongyi Zhao
  2021-10-13 23:14       ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 10+ messages in thread
From: Hongyi Zhao @ 2021-10-13  2:29 UTC (permalink / raw)
  To: Emanuel Berg, help-gnu-emacs

On Tue, Oct 12, 2021 at 9:13 PM Emanuel Berg via Users list for the
GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
>
> Hongyi Zhao wrote:
>
> > import re
> > from hashlib import md5
> > from string import ascii_uppercase
> >
> > alphabet_uppercase = ascii_uppercase
> > re_md5_str = re.compile(r"""^E903[A-F0-9]{3}
> >                 4DAB[A-F0-9]{4}
> >                 08[A-F0-9]{5}
> >                 51[A-F0-9]
> >                 80[A-F0-9]{2}
> >                 8A[A-F0-9]""", re.X)
> >
> > for i in alphabet_uppercase:
> >     i_str = 'TASC' + i
> >     for j in alphabet_uppercase:
> >         j_str = i_str + 'O3RJMV' + j
> >         for k in alphabet_uppercase:
> >             _str = j_str + 'WDJKX' + k + 'ZM'
> >             md5_str = md5(_str.encode('utf-8')).hexdigest().upper()
> >             if re_md5_str.match(md5_str):
> >                 print('string: ' + _str + '\n' + 'md5sum: ' + md5_str)
>
> Python ... ugly but efficient.
>
> Lisp ... wonderful but ... yeah, to some extent.

Bash based UNIX tool one line solution:

$ for i in TASC{A..Z}O3RJMV{A..Z}WDJKX{A..Z}ZM;
do
echo $i; echo -n $i | md5sum | cut -d ' ' -f1;
done | tr '[a-z]' '[A-Z]' |
egrep -m1 -B1 'E903[A-Z0-9]{3}4DAB[A-Z0-9]{4}08[A-Z0-9]{5}51[A-Z0-9]80[A-Z0-9]{2}8A[A-Z0-9]'
TASCJO3RJMVKWDJKXLZM
E9032994DABAC08080091151380478A2


> Now do it in Lisp and let's compare. But the biggest
> difference (aside for beauty) will be the time spent writing
> the code - an expert lisper and beginner/medium level Python
> programmer should spend a comparable amount of time :) - not
> time in execution.
>
> Then I include googling solutions ...
>
> The true expert does everything very rapidly. But who is
> a Lisp expert? I can think of one person on this list and it
> sure ain't me :)
>
> --
> underground experts united
> https://dataswamp.org/~incal



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-13  2:29     ` Hongyi Zhao
@ 2021-10-13 23:14       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-10-15  4:36         ` Hongyi Zhao
  0 siblings, 1 reply; 10+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-10-13 23:14 UTC (permalink / raw)
  To: help-gnu-emacs

Hongyi Zhao wrote:

> Bash based UNIX tool one line solution:
>
> $ for i in TASC{A..Z}O3RJMV{A..Z}WDJKX{A..Z}ZM;
> do
> echo $i; echo -n $i | md5sum | cut -d ' ' -f1;
> done | tr '[a-z]' '[A-Z]' |
> egrep -m1 -B1

I think you can use [:lower:] and [:upper:] with tr(1) ...

  tr '[:lower:]' '[:upper:]'

Otherwise looks good ...

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-13 23:14       ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-10-15  4:36         ` Hongyi Zhao
  2021-10-15  7:19           ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 10+ messages in thread
From: Hongyi Zhao @ 2021-10-15  4:36 UTC (permalink / raw)
  To: Emanuel Berg, help-gnu-emacs

On Thu, Oct 14, 2021 at 7:14 AM Emanuel Berg via Users list for the
GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
>
> Hongyi Zhao wrote:
>
> > Bash based UNIX tool one line solution:
> >
> > $ for i in TASC{A..Z}O3RJMV{A..Z}WDJKX{A..Z}ZM;
> > do
> > echo $i; echo -n $i | md5sum | cut -d ' ' -f1;
> > done | tr '[a-z]' '[A-Z]' |
> > egrep -m1 -B1
>
> I think you can use [:lower:] and [:upper:] with tr(1) ...
>
>   tr '[:lower:]' '[:upper:]'

I don't see any benefit of this usage for the problem under discussion.


> Otherwise looks good ...
>
> --
> underground experts united
> https://dataswamp.org/~incal



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Search through the string's space for find the target string whose md5sum matches the required condition.
  2021-10-15  4:36         ` Hongyi Zhao
@ 2021-10-15  7:19           ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 0 replies; 10+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-10-15  7:19 UTC (permalink / raw)
  To: help-gnu-emacs

Hongyi Zhao wrote:

>> I think you can use [:lower:] and [:upper:] with tr(1) ...
>>
>>   tr '[:lower:]' '[:upper:]'
>
> I don't see any benefit of this usage for the problem
> under discussion.

Nonetheless ...

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-10-15  7:19 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-12  8:42 Search through the string's space for find the target string whose md5sum matches the required condition Hongyi Zhao
2021-10-12  9:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-10-12 11:45   ` Hongyi Zhao
2021-10-12 13:01     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-10-12 11:47 ` Hongyi Zhao
2021-10-12 13:06   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-10-13  2:29     ` Hongyi Zhao
2021-10-13 23:14       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-10-15  4:36         ` Hongyi Zhao
2021-10-15  7:19           ` Emanuel Berg via Users list for the GNU Emacs text editor

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).