aboutsummaryrefslogtreecommitdiff
path: root/challenge-062/richard-park/apl/SortEmailAddresses.aplf
blob: 349ee5c2de11c19ffa71d3c1d3f9b4da1370b287 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 SortEmailAddresses{
⍝ Sort email addresses ⍵ first by domain, then by mailbox
⍝ ⍺: Optional unique flag
     0 ⍝: Default, return all addresses
⍝    ⍺←1  : Return unique email addresses (case-folded domains)
⍝ ⍵: Character vector with embedded new line characters
     admat(⎕UCS 10 13)((~∊)⊆⊢)      ⍝ Split by new line
     dnorm⎕C 2⊃↓⍉'@'(≠⊆⊢)1admat      ⍝ Normalise domains
     dgroupdnorm(admat⍳⊢)admat       ⍝ Indices grouped by domain
     dsortadmat{[0 99]}¨dgroup ⍝ Indices sorted within each domain
     seaadmat⊂∊dsort[⍋∪dnorm]        ⍝ Sorted Email Addresses
     ⍺:sea⌿⍨⎕C@(\'@'=)sea            ⍝ Unique only
     sea
 }