I'm working on modernizing Rosetta Code's infrastructure. Starting with communications. Please accept this time-limited open invite to RC's Slack.. --Michael Mol (talk) 20:59, 30 May 2020 (UTC)

Talk:Sort the letters of string in alphabetical order

From Rosetta Code

how is this sorting different?[edit]

How is sorting letter s different from all the other sort tasks?--Nigel Galloway (talk) 16:45, 24 July 2021 (UTC)

Almost all of the other sort tasks are dealing with multiple records (or multiple strings),   or an array   (whose elements are either strings or numbers).   This Rosetta Code task is restricted to sorting one string (of characters, which could include duplicates, blanks, and upper- and lower-cased letters).   I would've preferred a particular string that would be used (in common) for all computer programming languages for this task to make comparison a little easier.     -- Gerard Schildberger (talk) 17:22, 24 July 2021 (UTC)


rename this task ?[edit]

Perhaps this (draft) task should be renamed to:     Sort a string of characters
which would   "fit in"   with the nomenclature with other Rosetta Code sorting tasks.     -- Gerard Schildberger (talk) 17:43, 24 July 2021 (UTC)

It certainly needs renaming, or the difference between alphabetical ordering and alphabitical ordering needs explaining!--Nigel Galloway (talk) 19:06, 24 July 2021 (UTC)
Yes, indeed.   I had to re-read your sentence twice:   (alphabetical vs. alphabitical).     -- Gerard Schildberger (talk) 20:07, 24 July 2021 (UTC)
"Sort a string of characters in lexicographical order" with an included link to the wikipedia entry for lexicographical - given the current task description? --Paddy3118 (talk) 08:11, 25 July 2021 (UTC)

task requirements[edit]

I suggest that a specified (character) string be used to make computer programming language comparisons easier.     -- Gerard Schildberger (talk) 17:53, 24 July 2021 (UTC)

Charles E. Weller's typing drill   (circa 1912,   used in the REXX entry)   would be a good example.     -- Gerard Schildberger (talk) 18:02, 24 July 2021 (UTC)

The requirement to write a sort routine, even if one comes with your language muddles the language comparisons though unless those languages with the in-built ability show that too. --Paddy3118 (talk) 08:15, 25 July 2021 (UTC)

task usage of   alphabetical order[edit]

I suggest that some wording be added to the (draft) task that explains that the phrase   alphabetical order   depends on the hardware system being used.

The   ASCII   order is   (essentially):

                digits, uppercase Latin letters, lowercase Latin letters, with other special characters strewn about. 

The   EBCDIC   order is   (essentially):

                lowercase Latin letters, uppercase Latin letters, digits, with other special characters strewn about.

-- Gerard Schildberger (talk) 17:53, 24 July 2021 (UTC)

ASCII or EBCDIC are both completely immaterial. The task SPECIFICALLY states alphabetical (used to be alphabitical but whatever). In the alphabet, 'N' does not come before 'a' (as most of these example wrongly demonstrate). The task is stupid and should be removed. But if we insist on keeping it, the examples should at least follow the actual task title / description. Or, the title / description should be changed to what the task is actually demonstrating. --Thundergnat (talk) 13:13, 26 July 2021 (UTC)
Not completely immaterial. An alphabet is an ordered set of symbols, which children learn during early learning. The task should specify the alphabet and its ordering. perhaps using a non-English alphabet such that not only the order of N n and a n have to be considered but also à á â ä æ ã å and there capitalized partners. I suggest 3 ways of ordering the symbols on a computer: 1) Form a bijection between the symbols and a subset of the set of integers, and sort the integers. ASCII and EBCDIC are such bijections, but may not produce the required result. 2) Write the alphabet as a list, given 2 symbols search through the list and return the one found first as the smaller. 3) Build the alphabet as a binary tree.--Nigel Galloway (talk) 14:44, 26 July 2021 (UTC)
<pedantic-mode: on;> COMPLETELY immaterial. Neither is an alphabet. True, the task doesn't specify which alphabet to use, but neither of those are one. As for not using a sort, the task specifically requires writing a routine to sort. In what way could you interpret that to mean you don't need to sort? Yes, yes, I agree, you don't need to sort to get the end result required by the task, but it is pretty clear "Write a sort function, don't just use a built-in" requires there to be some kind of sort involved. <pedantic-mode: off;> --Thundergnat (talk) 14:59, 26 July 2021 (UTC)
I'll see your pedantic and raise you one. Like most I misread it. The task states you must create a routine, but does not stipulate that cannot be a one-liner to some builtin or other. Or even what the output should be. Not that I much care ;-) --Pete Lomax (talk) 17:18, 26 July 2021 (UTC)
It says : "Write the function even if your language has a built-in function for it." and that's something CalmoSoft wrote (not me) and demonstrated he meant it in his Ring solution. --PureFox (talk) 18:15, 26 July 2021 (UTC)
I think you meant to say utterly failed to demonstrate. I see no function there, then or now. Otherwise I assume you are agreeing with me, or is there an interpretation of "Write the function" that specifically means "not a one-liner" that I don't know about, or for that matter is there an interpretation of "Write the function" that specifically means "or not, top level code will do just fine too"? --Pete Lomax (talk)
What I meant is that he's coded the sort routine rather than using Ring's built-in Sort() function, though admittedly he hasn't put his own code in a function. --PureFox (talk) 18:46, 26 July 2021 (UTC)
Yeah, and my pedantic point is that if he had written an actual function that just simply used Ring's built-in Sort(), it would not actually disagree with the task description, and of course this is all a bit "Call me a taxi." "You are a taxi.", but no task entry, even if it is the first, can override the task description. ☺ --Pete Lomax (talk)
Well, we can argue till the cows come home about what words mean or allow us to do and, if someone set their mind to it, they could probably drive a coach and horses through many of the task descriptions on RC. However, there is such a thing as the spirit of a task and, for a non-pedant such as me, that at least is clear and is not to use built-in sort functionality at all for this particular task. Simply hiding it behind the facade of your own function would go against that spirit. --PureFox (talk) 08:50, 27 July 2021 (UTC)
A non-pedant?! /me: hisses. makes a little crucifix with his fingers. Of course you are quite right about the spirit --Pete Lomax (talk)
The task title and description are currently at odds with each other. The former says sort in alphabetical order and the latter in lexicographical order. Given that we have example strings containing both upper and lower case letters and non-letters, lexicographical order seems the most appropriate to me and I therefore agree with Paddy3118's suggested title change above. --PureFox (talk) 15:48, 26 July 2021 (UTC)
Oh what brittle minds we have. It wuz you wot introduced that discrepancy... ;-) --Pete Lomax (talk) 17:18, 26 July 2021 (UTC)
Yes, it was me who changed 'alphabetical' to 'lexicographical' shortly after the task was introduced because I thought it was more appropriate and I knew that the task would have to be renamed anyway because 'alphabitical' was mis-spelled. Unfortunately, CalmoSoft went ahead and corrected the spelling but ignored the lexicographical aspect. --PureFox (talk) 18:03, 26 July 2021 (UTC)
COMPLETELY Shouty and Bold my favourite mode of discussion (when the pedant is wrong). "Neither is an alphabet. True," I did not write that ASCII or EBDIC are alphabets I wrote that they are examples of bijections of the characters comprising the alphabet and a subset of the set of integers. In F# "int 'a' binds 97 and "char 97" binds 'a'. Probably utf8 another example of a bijection of the characters comprising the alphabet and a subset of the set of integers. 'a' < 'b' binds true because 97 is less than 98. Using the first method I identified is really sorting integers not "the characters of a string".--Nigel Galloway (talk) 14:00, 27 July 2021 (UTC)

For this task it is not necessary to perform a sort![edit]

Given the alphabet as an ordered list of characters. Pass through the string once counting the number of occurrences of each character. Pass through the alphabet once outputting the corresponding character the appropriate number of times.--Nigel Galloway (talk) 14:44, 26 July 2021 (UTC)

Fair point but (not that this task merits such attention to detail) I wonder what the output of "baNAnaBAnaNA" should be...
Just to be awkward, I'm going with "aAaAaAbBNnnN". --Pete Lomax (talk) 16:26, 26 July 2021 (UTC)

Slacksort[edit]

Would anyone be interested to see the Slacksort method developed further and added to the existing sort block of tasks? It may be too trivial, but it does offer some versatility. Asking ahead of time, in case it is undesirable to clutter up the site. Perhaps the algorithm goes by another name and is already there. --Enter your username (talk) 16:19, 25 July 2021 (UTC)

I might suggest your Slacksort is a variant of Sorting_algorithms/Selection_sort except that one inefficiency of the latter is it can make multiple passes down the rest of the array in order to obtain the same minimum value, whereas one inefficiency of the former is it can will make multiple passes down the entire array that achieve nothing.
Plus as written it does not appear it can actually be used as a sort method, as in s := Slacksort(s), and is integer/char-only. --Pete Lomax (talk) 20:15, 25 July 2021 (UTC)