merkle reverse

Seb seb at wilzba.ch
Thu Apr 5 09:07:52 UTC 2018


On Thursday, 5 April 2018 at 08:57:11 UTC, SimonN wrote:
> On Thursday, 5 April 2018 at 08:12:38 UTC, aerto wrote:
>> This is the bitcoin genesis block merkle root 
>> 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b how i can get it at this format 3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a ??
>>
>> i try it using
>>
>> string merkle = 
>> "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b";
>>
>> writeln(merkle.retro.text); and it gives me
>>
>> b33adedfa7b7212ba77cc2e37667f816f78cb13c88a81523a3f98baab4e1e5a4
>
> Here's one solution with std.range.chunks. A small downside is 
> that it needs the array allocation in the middle because chunks 
> cannot offer the bi-directional range necessary for retro.
>
>     import std.range;
>     import std.algorithm;
>
>     void main()
>     {
>         string merkle =
>             
> "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b";
>         assert (merkle.retro.equal(
>             
> "b33adedfa7b7212ba77cc2e37667f816f78cb13c88a81523a3f98baab4e1e5a4"));
>         assert (merkle.chunks(2).array.retro.joiner.equal(
>             
> "3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"));
>     }
>
> -- Simon

FYI: The problem isn't chunks, but that strings aren't 
bi-directional ranges (hello ugly auto-decoding!).
Simply disable it with byCodeUnit:

---
import std.experimental.all;
void main()
{
     
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b".byCodeUnit.chunks(2).retro.joiner.writeln;
     
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b".byCodeUnit.slide(2, 2).retro.joiner.writeln;
}
---

Oh and the new slide is a generalization of chunks.

https://run.dlang.io/is/ggrh14


More information about the Digitalmars-d-learn mailing list