Burrows–Wheeler transform: Difference between revisions
Content added Content deleted
m (→{{header|BQN}}: Minor style simplifications) |
|||
Line 1,017: | Line 1,017: | ||
--> ERROR: String cannot contain STX or ETX |
--> ERROR: String cannot contain STX or ETX |
||
--> </pre> |
--> </pre> |
||
=={{header|jq}}== |
|||
{{trans|Wren}} |
|||
{{works with|jq}} |
|||
'''Works with gojq, the Go implementation of jq''' |
|||
<lang jq># substitute ^ for STX and | for ETX |
|||
def makePrintable: |
|||
if . == null then null |
|||
else sub("\u0002"; "^") | sub("\u0003"; "|") |
|||
end; |
|||
def bwt: |
|||
{stx: "\u0002", etx: "\u0003"} as $x |
|||
| if index($x.stx) >= 0 or index($x.etx) >= 0 then null |
|||
else $x.stx + . + $x.etx |
|||
| . as $s |
|||
| (reduce range(0; length) as $i ([]; .[$i] = $s[$i:] + $s[:$i]) | sort) as $table |
|||
| reduce range(0; length) as $i (""; . + $table[$i][-1:]) |
|||
end; |
|||
def ibwt: |
|||
. as $r |
|||
| length as $len |
|||
| reduce range(0;$len) as $i ([]; |
|||
reduce range(0; $len) as $j (.; |
|||
.[$j] = $r[$j:$j+1] + .[$j]) | sort) |
|||
| first( .[] | select(endswith("\u0003"))) |
|||
| .[1:-1] ; |
|||
</lang> |
|||
'''Tests''' |
|||
<lang jq> |
|||
def tests: |
|||
( |
|||
"banana", |
|||
"appellee", |
|||
"dogwood", |
|||
"TO BE OR NOT TO BE OR WANT TO BE OR NOT?", |
|||
"SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES", |
|||
"\u0002ABC\u0003" |
|||
) |
|||
| . as $test |
|||
| bwt as $t |
|||
| "\(makePrintable)\n --> \($t | makePrintable // "ERROR: String can't contain STX or ETX" )" |
|||
, |
|||
(if $t then " --> \($t | ibwt)\n" else "" end) ; |
|||
tests</lang> |
|||
{{out}} |
|||
<pre> |
|||
banana |
|||
--> |annb^aa |
|||
--> banana |
|||
appellee |
|||
--> |e^elplepa |
|||
--> appellee |
|||
dogwood |
|||
--> |do^oodwg |
|||
--> dogwood |
|||
TO BE OR NOT TO BE OR WANT TO BE OR NOT? |
|||
--> |?OOORREEETTRTW BBB ATTT NNOOONOO^ |
|||
--> TO BE OR NOT TO BE OR WANT TO BE OR NOT? |
|||
SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES |
|||
--> |STEXYDST.E.IXXIIXXSSMPPS.B..EE.^.USFXDIIOIIIT |
|||
--> SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES |
|||
^ABC| |
|||
--> ERROR: String can't contain STX or ETX |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |