0votos

Kata Anagramas en SQL

por josejuan hace 6 años

En T-SQL.

En esta kata nos centraremos en construir un algoritmo que sea capaz de obtener los anagramas de cada palabra de un diccionario. El principal objetivo es pensar sobre los algoritmos, su legibilidad, velocidad de ejecución y extensibilidad.

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
-- Leemos las palabras del archivo 
DECLARE    @xml xml 
SELECT    @xml = N'<w>' + Replace(BulkColumn, @EOL, N'</w><w>') + N'</w>' 
FROM    OPENROWSET(BULK N'u:\...\words.txt', SINGLE_NCLOB) q 
 
-- Identificamos claves únicas 
DECLARE    @words TABLE (word nvarchar(200), _word varchar(200)) 
INSERT INTO @words(word, _word) 
SELECT    w, dbo.f_sortChars(Lower(w)) 
FROM    (SELECT    w = d.w.value('.', 'nvarchar(200)') 
     FROM    @xml.nodes('/w') as d(w)) q 
WHERE    NOT (w IS NULL OR LTrim(RTrim(w)) = '') 
 
-- Ya está. 
 
 
 
-- @word contiene las agrupaciones, por ejemplo: 
SELECT    _word, COUNT(*) 
FROM    @words 
GROUP 
BY    _word 
 
-- Helpers 
DECLARE    @EOL nvarchar(2) 
SET    @EOL = N' 
 
CREATE FUNCTION dbo.f_sortChars(@word nvarchar(200)) RETURNS varchar(200) 
AS 
BEGIN 
    DECLARE    @chars TABLE (c char) 
 
    DECLARE    @j int 
    DECLARE    @g varchar(200) 
    SET @j = Len(@word) 
    WHILE @j > 0 
    BEGIN 
        INSERT INTO @chars (c) SELECT Convert(char, Substring(@word, @j, 1)) COLLATE SQL_Latin1_General_CP1253_CI_AI 
        SET @j = @j - 1 
    END 
    SET @g = N'' 
    SELECT @g = @g + c FROM @chars ORDER BY c 
 
    RETURN @g 
END 
3 comentarios
0votos

Escrito por Raul GM hace 6 años

Cuando veo tus Katas me deprimo, ahora estoy haciendo en el curso Base de datos II y no consigo entender ni la mitad del código, es decir, las cosas sueltas si, pero no el conjunto...

Me ha gustado me voy a poner a hacer katas en SQL.

Por cierto veo que usas un intel atom xD. Hace poco me compré una tablet con el Intel Atom N2600, mi intención es hacer katas "everywhere". Problema que he tenido que quitar mil procesos al W7 para que me funcionara más o menos fluido. Ya que Linux no sé que movida hay que hacer para que lo soporte, grr estos de intel... y W8 tampoco tiene soporte para graphics 3600...

En fin... siguiendo los pasos al maestro.
0votos

Escrito por josejuan hace 6 años

"Cuando veo tus Katas"

No te preocupes, es normal, T-SQL y sobre todo con este tipo de soluciones (ej. xml) dista bastante del ANSI-SQL.

"Me ha gustado me voy a poner a hacer katas en SQL"

Ésta es mi tercera kata que hago usando SQL como "lenguaje de propósito general" XD XD

"usas un intel atom xD"

No realmente, es mi mini-server, lo tengo en casa como servidor para todo, lo que pasa es que suelo hacer las katas ahí porque así desde cualquier sitio que esté puedo hacerlas, revisarlas, etc...

"mi intención es hacer katas "everywhere""

Yo sin teclado no soy persona, no me hago a eso de escribir con el tablet... XD XD
0votos

Escrito por ebrasca hace 6 años

"Cuando veo tus Katas"
Te recomiendo no fijarse tanto en los demas.El aprendizaje es un proseso interior.

"Cada acto de aprendizaje consciente requiere la voluntad de sufrir una lesión en la propia autoestima. Es por ello que los niños pequeños, antes de ser conscientes de su autoestima, aprenden más fácilmente." Thomas Szasz

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.