in reply to Collapsing a string to unique characters

26 chars
-nE'@;{/./g}=();%;=!say%;'

Replies are listed 'Best First'.
Re^2: Collapsing a string to unique characters
by BrowserUk (Patriarch) on Jan 10, 2009 at 11:21 UTC

    No good. Hash keys are unordered.

    C:\test>perl -ple$_=join'',sort/./g;y///cs test-strings +/034589BDFHKMNUXabcfghjlnqstuwxyz /1234589ACEGIKLMNPQRSTbdefhjklnopqstux /013589ABCIMNRTVYbcdefghjkloqtuwxy /03589BEFKLMNOPQTabcfghlmqrtuvwx +/1345689ACGKMNOQWbdghlmnoqrtuwx /234589ABDEFGHIMNORTabdfhilnqtuwxyz +/01345789ACEIMNPQTZabcefghlmqtuwx /234589ACGILMNOQUbehlmoqrstuwxyz C:\test>\Perl510\bin\perl5.10.0.exe -nE"@;{/./g}=();%;=!say%;" test-st +rings /aNKjyugtsBHcDqbzUwFxMh0fnX39+8l45 S/TNKd2Eju1ktesqbIGxQhMCfLAn3P98lp4Ro5 /TNdYjyu1kgteBcqbIwxVhM0CfA398lR5o /aTNKEugtvBcqbwFrxQhM0LfO3Pm98l5 /NKdu1gtWqbGwrxQhMCA6nO3m9+8l45o /TaNdE2yutBHDqbIGzFwxhMfiAnO398l4R5 /TaN7EZu1gtecqbIwxQMh0CfA3Pm9+8l45 /N2yutesqbIGzUwrxQMhCLAO3m98l45o

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      No good. Hash keys are unordered.
      So? The OP didn't make it a requirement the result was ordered:
      I have a number of strings, made up only of 64 characters: a-zA-Z0-9/+ . I need to collapse these down to just the unique characters in the string.

      Besides, Perlmonks has a long tradition of making small changes to the requirements for the sake of winning at golf. ;-)

Re^2: Collapsing a string to unique characters
by CountZero (Bishop) on Jan 10, 2009 at 11:24 UTC
    That is too nice, but you will have to explain how it works.

    CountZero

    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

      -nE'@;{/./g}=();%;=!say%;'

      /./g is in list context, so it's a shorthand for /(.)/g and will hence return a list of all characters (without the newline).

      @;{...} is a slice of the hash %;. @;{/./g} = () sets all values in the slice to undef. The keys are the characters of the line.

      say %; prints the hash; as key-value pairs. Since the values are undefined, the values are printed as empty strings. So, in effect, it prints all the characters of the line, without duplicates.

      %;=!say%; say will return true, so its negation will be the empty string. So it'll make %; have one element: the empty string as key, and the undefined value as value. This will be printed for the next line, but since they are both printed as empty strings, you won't actually see it.

        Thanks! The fact that you can call a variable ';' threw me off.

        CountZero

        A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James