1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
WITH RECURSIVE
letters( l ) AS (
SELECT *
FROM regexp_split_to_table( 'PERL', '' )
)
, permutations AS
(
SELECT l, l AS perm, 1 AS level
FROM letters
UNION ALL
SELECT l.l, p.perm || l.l AS perm, level + 1
FROM letters l, permutations p
WHERE level <= 100
AND position( l.l IN p.perm ) = 0
)
SELECT perm
FROM permutations
WHERE length( perm ) = 4
AND perm NOT IN (
'PELR',
'PREL',
'PERL',
'PRLE',
'PLER',
'PLRE',
'EPRL',
'EPLR',
'ERPL',
'ERLP',
'ELPR',
'ELRP',
'RPEL',
'RPLE',
'REPL',
'RELP',
'RLPE',
'RLEP',
'LPER',
'LPRE',
'LEPR',
'LRPE',
'LREP'
)
;
|