Unique characters in each string: Difference between revisions
(→{{header|REXX}}: added the computer programming language REXX.) |
|||
Line 68: | Line 68: | ||
{{out}} |
{{out}} |
||
<pre>1 2 3 a b c</pre> |
<pre>1 2 3 a b c</pre> |
||
=={{header|REXX}}== |
|||
<lang rexx>/*REXX pgm finds and shows characters that are unique in each string and once only. */ |
|||
parse arg $ /*obtain optional arguments from the CL*/ |
|||
if $='' | $="," then $= '1a3c52debeffd' "2b6178c97a938stf" '3ycxdb1fgxa2yz' |
|||
if $='' then do; say "***error*** no lists were specified."; exit 13; end |
|||
#= words($); $$= /*#: # words in $; $$: $ with no blanks*/ |
|||
do i=1 for #; !.i= word($, i) /*for speed, build a list of words in $*/ |
|||
$$= $$ || !.i /*build a list of all the strings. */ |
|||
end /*i*/ |
|||
@= /*will be a list of all unique chars. */ |
|||
do j=0 for 256; x= d2c(j) /*process all the possible characters. */ |
|||
if pos(x, $$)==0 then iterate /*Char not found in any string in $ ? */ |
|||
do k=1 for #; _= pos(x, !.k) /*examine each string in the $ list. */ |
|||
if _==0 then iterate j /*Character not found? Then skip it. */ |
|||
if pos(x, !.k, _+1)>0 then iterate j /* " is a dup? " " " */ |
|||
end /*k*/ |
|||
@= @ x /*append a character, append it to list*/ |
|||
end /*j*/ /*stick a fork in it, we're all done. */ |
|||
@@= space(@, 0); L= length(@@) /*elided superfluous blanks; get length*/ |
|||
if @@=='' then @= " (none)" /*if none were found, pretty up message*/ |
|||
if L==0 then L= "no" /*do the same thing for the # of chars.*/ |
|||
say 'unique characters are: ' @ /*display the unique characters found. */ |
|||
say |
|||
say 'Found ' L " unique characters." /*display the # of unique chars found. */</lang> |
|||
{{out|output|text= when using the default input:}} |
|||
<pre> |
|||
unique characters are: 1 2 3 a b c |
|||
Found 6 unique characters. |
|||
</pre> |
|||
=={{header|Ring}}== |
=={{header|Ring}}== |
Revision as of 20:35, 9 May 2021
- Task
Given a list of strings, find characters appearing in each string and once only.
The result should be given in alphabetical order: 1 2 3 a b c
Use the following list for this task:
["1a3c52debeffd", "2b6178c97a938stf", "3ycxdb1fgxa2yz"]
- Metrics
- Counting
- Word frequency
- Letter frequency
- Jewels and stones
- I before E except after C
- Bioinformatics/base count
- Count occurrences of a substring
- Count how many vowels and consonants occur in a string
- Remove/replace
- XXXX redacted
- Conjugate a Latin verb
- Remove vowels from a string
- String interpolation (included)
- Strip block comments
- Strip comments from a string
- Strip a set of characters from a string
- Strip whitespace from a string -- top and tail
- Strip control codes and extended characters from a string
- Anagrams/Derangements/shuffling
- Word wheel
- ABC problem
- Sattolo cycle
- Knuth shuffle
- Ordered words
- Superpermutation minimisation
- Textonyms (using a phone text pad)
- Anagrams
- Anagrams/Deranged anagrams
- Permutations/Derangements
- Find/Search/Determine
- ABC words
- Odd words
- Word ladder
- Semordnilap
- Word search
- Wordiff (game)
- String matching
- Tea cup rim text
- Alternade words
- Changeable words
- State name puzzle
- String comparison
- Unique characters
- Unique characters in each string
- Extract file extension
- Levenshtein distance
- Palindrome detection
- Common list elements
- Longest common suffix
- Longest common prefix
- Compare a list of strings
- Longest common substring
- Find common directory path
- Words from neighbour ones
- Change e letters to i in words
- Non-continuous subsequences
- Longest common subsequence
- Longest palindromic substrings
- Longest increasing subsequence
- Words containing "the" substring
- Sum of the digits of n is substring of n
- Determine if a string is numeric
- Determine if a string is collapsible
- Determine if a string is squeezable
- Determine if a string has all unique characters
- Determine if a string has all the same characters
- Longest substrings without repeating characters
- Find words which contains all the vowels
- Find words which contains most consonants
- Find words which contains more than 3 vowels
- Find words which first and last three letters are equals
- Find words which odd letters are consonants and even letters are vowels or vice_versa
- Formatting
- Substring
- Rep-string
- Word wrap
- String case
- Align columns
- Literals/String
- Repeat a string
- Brace expansion
- Brace expansion using ranges
- Reverse a string
- Phrase reversals
- Comma quibbling
- Special characters
- String concatenation
- Substring/Top and tail
- Commatizing numbers
- Reverse words in a string
- Suffixation of decimal numbers
- Long literals, with continuations
- Numerical and alphabetical suffixes
- Abbreviations, easy
- Abbreviations, simple
- Abbreviations, automatic
- Song lyrics/poems/Mad Libs/phrases
- Mad Libs
- Magic 8-ball
- 99 Bottles of Beer
- The Name Game (a song)
- The Old lady swallowed a fly
- The Twelve Days of Christmas
- Tokenize
- Text between
- Tokenize a string
- Word break problem
- Tokenize a string with escaping
- Split a character string based on change of character
- Sequences
Factor
<lang factor>USING: io kernel sequences.interleaved sets sorting ;
{ "1a3c52debeffd" "2b6178c97a938sf" "3ycxdb1fgxa2yz" } [ intersect-all ] [ [ duplicates ] gather without ] bi natural-sort CHAR: space <interleaved> print
! How it works: ! intersect-all obtain elements present in every string -> "1a3c2bf" ! [ duplicates ] gather obtain elements that repeat within a single string -> "efd798xy" ! without from the first string, remove elements that are in the second -> "1a3c2b"</lang>
- Output:
1 2 3 a b c
Julia
<lang julia>list = ["1a3c52debeffd", "2b6178c97a938stf", "3ycxdb1fgxa2yz"]
onceineachstring(list) = filter(c -> all(w -> count(x -> x == c, w) == 1, list), (sort ∘ unique ∘ prod)(list))
println(onceineachstring(list))
</lang>
- Output:
['1', '2', '3', 'a', 'b', 'c']
Phix
include builtins\sets.e function once(integer ch, i, string s) integer l = length(s) return (i=1 or ch!=s[i-1]) and (i=l or ch!=s[i+1]) end function sequence set = {"1a3c52debeffd", "2b6178c97a938stf", "3ycxdb1fgxa2yz"}, res = intersection(apply(true,filter,{apply(set,sort),once})) printf(1,"found %d unique common characters: %s\n",{length(res),res})
- Output:
found 6 unique common characters: 123abc
Raku
<lang perl6>my $strings = <1a3c52debeffd 2b6178c97a938stf 3ycxdb1fgxa2yz>;
put sort keys [∩] $strings.map: *.comb.Bag.grep: *.value == 1</lang>
- Output:
1 2 3 a b c
REXX
<lang rexx>/*REXX pgm finds and shows characters that are unique in each string and once only. */ parse arg $ /*obtain optional arguments from the CL*/ if $= | $="," then $= '1a3c52debeffd' "2b6178c97a938stf" '3ycxdb1fgxa2yz' if $= then do; say "***error*** no lists were specified."; exit 13; end
- = words($); $$= /*#: # words in $; $$: $ with no blanks*/
do i=1 for #; !.i= word($, i) /*for speed, build a list of words in $*/ $$= $$ || !.i /*build a list of all the strings. */ end /*i*/
@= /*will be a list of all unique chars. */
do j=0 for 256; x= d2c(j) /*process all the possible characters. */ if pos(x, $$)==0 then iterate /*Char not found in any string in $ ? */ do k=1 for #; _= pos(x, !.k) /*examine each string in the $ list. */ if _==0 then iterate j /*Character not found? Then skip it. */ if pos(x, !.k, _+1)>0 then iterate j /* " is a dup? " " " */ end /*k*/ @= @ x /*append a character, append it to list*/ end /*j*/ /*stick a fork in it, we're all done. */
@@= space(@, 0); L= length(@@) /*elided superfluous blanks; get length*/ if @@== then @= " (none)" /*if none were found, pretty up message*/ if L==0 then L= "no" /*do the same thing for the # of chars.*/ say 'unique characters are: ' @ /*display the unique characters found. */ say say 'Found ' L " unique characters." /*display the # of unique chars found. */</lang>
- output when using the default input:
unique characters are: 1 2 3 a b c Found 6 unique characters.
Ring
<lang ring> see "working..." + nl see "Unique characters in each string are:" + nl row = 0 str = "" cList = [] uniqueChars = ["1a3c52debeffd", "2b6178c97a938stf", "3ycxdb1fgxa2yz"] lenChars = len(uniqueChars)
for n = 1 to lenChars
str = str + uniqueChars[n]
next
for n = 1 to len(str)
flag = 1 for m = 1 to lenChars cnt = count(uniqueChars[m],str[n]) if cnt != 1 flag = 0 exit ok next if flag = 1 add(cList,str[n]) ok
next add(cList,"~") cList = sort(cList) for n = 1 to len(cList)-1
if cList[n] != cList[n+1] row = row + 1 see "" + cList[n] + " " ok
next see nl
see "Found " + row + " unique characters in each string" + nl see "done..." + nl
func count(cString,dString)
sum = 0 while substr(cString,dString) > 0 sum++ cString = substr(cString,substr(cString,dString)+len(string(sum))) end return sum
</lang>
- Output:
working... Unique characters in each string are: 1 2 3 a b c Found 6 unique characters in each string done...
Wren
<lang ecmascript>import "/seq" for Lst import "/sort" for Sort
var strings = ["1a3c52debeffd", "2b6178c97a938stf", "3ycxdb1fgxa2yz"] var uniqueChars = [] for (s in strings) {
var u = Lst.individuals(s.toList).where { |l| l[1] == 1 }.map { |l| l[0] } uniqueChars.addAll(u)
} var n = strings.count uniqueChars = Lst.individuals(uniqueChars).where { |l| l[1] == n }.map { |l| l[0] }.toList Sort.insertion(uniqueChars) System.print("Found %(uniqueChars.count) unique character(s) common to each string, namely:") System.print(uniqueChars.join(" "))</lang>
- Output:
Found 6 unique character(s) common to each string, namely: 1 2 3 a b c