Decorate-sort-undecorate idiom: Difference between revisions

Content added Content deleted
(Added QBasic)
Line 155: Line 155:
=={{header|FreeBASIC}}==
=={{header|FreeBASIC}}==
FreeBASIC doesn't normally print string lists in "quoted" form though I've added the quotes here to be consistent with the other solutions.
FreeBASIC doesn't normally print string lists in "quoted" form though I've added the quotes here to be consistent with the other solutions.
<syntaxhighlight lang="vb">Type map
<syntaxhighlight lang="vb">' Rosetta Code problem: https://rosettacode.org/wiki/Decorate-sort-undecorate_idiom
' by Jjuanhdez, 07/2023

Type map
x As String
x As String
y As Integer
y As Integer
Line 333: Line 336:
{{out}}
{{out}}
<pre>['Rosetta', 'Code', 'is', 'a', 'programming', 'chrestomathy', 'site'] => ['a', 'is', 'Code', 'site', 'Rosetta', 'programming', 'chrestomathy']</pre>
<pre>['Rosetta', 'Code', 'is', 'a', 'programming', 'chrestomathy', 'site'] => ['a', 'is', 'Code', 'site', 'Rosetta', 'programming', 'chrestomathy']</pre>

=={{header|QBasic}}==
{{trans|FreeBASIC}}
{{works with|QBasic|1.1}}
{{works with|QuickBasic|4.5}}
<syntaxhighlight lang="qbasic">TYPE map
x AS STRING * 12
y AS INTEGER
END TYPE

SUB Schwartzian (a$())
DIM e(0 TO 6, 0 TO 6) AS map
' Decorate
FOR p = 0 TO 6
e(p, 1).x = a$(p)
e(1, p).y = LEN(a$(p))
NEXT p
' Sort
CALL Sort(e())
' Undecorate
FOR p = 0 TO 6
PRINT e(p, 1).x
NEXT p
END SUB

SUB Sort (array() AS map)
FOR i = 0 TO 6 - 1
min = i
FOR j = i + 1 TO 6
IF array(1, j).y <= array(1, min).y THEN min = j
NEXT j
SWAP array(min, 1).x, array(i, 1).x
SWAP array(1, min).y, array(1, i).y
NEXT i
END SUB

DIM words(6) AS STRING
DATA "Rosetta", "Code", "is", "a", "programming", "chrestomathy", "site"
FOR i = 0 TO 6
READ words(i)
NEXT i
CALL Schwartzian(words())
END</syntaxhighlight>
{{out}}
<pre>a
is
site
Code
Rosetta
programming
chrestomathy</pre>


=={{header|Raku}}==
=={{header|Raku}}==