Subject: Re: A small programming challenge
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Wed, 22 Jun 2005 03:16:07 -0700 (PDT)
|
Hi Jim,
Does the stylesheet which you have posted (written
by Oliver Becker) solves the same problem? Sorry I
have'nt studied it deeply. But if yes, what input you
gave it? And what output it produced..? Or does the
stylesheet takes the input from within?
Regards,
Mukul
--- James Fuller <jim.fuller@xxxxxxxxxxxxxx> wrote:
> u are aware of OliverB old stylesheet....
>
>
> <!--
> The Sieve of Eratosthenes
> GPL (c) Oliver Becker, 2000-06-13
> obecker@xxxxxxxxxxxxxxxxxxxxxxx
> -->
> <xslt:transform
> xmlns:xslt="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
>
> <xslt:output method="text" />
>
> <xslt:param name="bound" select="1000" />
>
> <xslt:template match="/">
> <xslt:call-template name="eratosthenes">
> <xslt:with-param name="pos" select="2" />
> <xslt:with-param name="array">
> <xslt:call-template name="init-array">
> <xslt:with-param name="length"
> select="$bound" />
> </xslt:call-template>
> </xslt:with-param>
> </xslt:call-template>
> <xslt:text>
> </xslt:text>
> </xslt:template>
>
>
> <!-- Initialize the array (string) with length
> $length -->
> <xslt:template name="init-array">
> <xslt:param name="length" />
> <xslt:if test="$length > 0">
> <xslt:text>-</xslt:text>
> <xslt:call-template name="init-array">
> <xslt:with-param name="length"
> select="$length - 1" />
> </xslt:call-template>
> </xslt:if>
> </xslt:template>
>
>
> <!-- Sieve of Eratosthenes: If the number at
> position $pos isn't
> marked then it's a prime (and printed). If the
> position of the
> prime is lower or equal then the square root of
> $bound then the
> new array will be computed by marking all
> multiples of $pos. -->
> <xslt:template name="eratosthenes">
> <xslt:param name="array" />
> <xslt:param name="pos" />
> <xslt:if test="$pos < $bound">
> <xslt:variable name="is-prime"
> select="substring($array,$pos,1) =
> '-'" />
> <xslt:if test="$is-prime">
> <xslt:value-of select="$pos" />, <xslt:text
> />
> </xslt:if>
> <xslt:variable name="new-array">
> <xslt:choose>
> <xslt:when test="$is-prime and $pos*$pos
> <= $bound">
> <xslt:call-template name="mark">
> <xslt:with-param name="array"
> select="$array" />
> <xslt:with-param name="number"
> select="$pos" />
> </xslt:call-template>
> </xslt:when>
> <xslt:otherwise>
> <xslt:value-of select="$array" />
> </xslt:otherwise>
> </xslt:choose>
> </xslt:variable>
> <xslt:call-template name="eratosthenes">
> <xslt:with-param name="array"
> select="$new-array" />
> <xslt:with-param name="pos" select="$pos +
> 1" />
> </xslt:call-template>
> </xslt:if>
> </xslt:template>
>
>
> <!-- Mark all multiples of $number in $array with
> '*' -->
> <xslt:template name="mark">
> <xslt:param name="array" />
> <xslt:param name="number" />
> <xslt:choose>
> <xslt:when test="string-length($array) >
> $number">
> <xslt:value-of select="substring ($array,
> 1, $number - 1)" />
> <xslt:text>*</xslt:text>
> <xslt:call-template name="mark">
> <xslt:with-param name="array"
> select="substring ($array,
> $number + 1)" />
> <xslt:with-param name="number"
> select="$number" />
> </xslt:call-template>
> </xslt:when>
> <xslt:otherwise>
> <xslt:value-of select="$array" />
> </xslt:otherwise>
> </xslt:choose>
> </xslt:template>
>
> </xslt:transform>
>
>
> this will take quite a long time...though uses no
> extension functions, I
> would utilize other approaches to search the problem
> domain if simply
> contrained by the requirement of being prime and 10
> digit length.
>
> wish I had the time, though will process in the
> background on a solution
> to this.
>
> cheers, Jim Fuller
>
>
____________________________________________________
Yahoo! Sports
Rekindle the Rivalries. Sign up for Fantasy Football
http://football.fantasysports.yahoo.com
|