<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: permute code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 10 Oct 2008 13:19:54 GMT</pubDate>
    <description>DZone Snippets: permute code</description>
    <item>
      <title>Pyrex</title>
      <link>http://snippets.dzone.com/posts/show/2351</link>
      <description>// description of your code here&lt;br /&gt;Permute a list&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cdef class Permute2:&lt;br /&gt;&lt;br /&gt;    cdef int n, first&lt;br /&gt;    cdef object lst&lt;br /&gt;&lt;br /&gt;    def __init__(self, lst):&lt;br /&gt;        self.lst = lst&lt;br /&gt;        self.first = 0&lt;br /&gt;        self.n = len(lst) - 1&lt;br /&gt;&lt;br /&gt;    def __iter__(self):&lt;br /&gt;        return self&lt;br /&gt;&lt;br /&gt;    def __next__(self):&lt;br /&gt;        cdef int j, l, k, x, y, z&lt;br /&gt;        if self.first == 0:&lt;br /&gt;            self.first = 1&lt;br /&gt;            return self.lst&lt;br /&gt;        if self.n == 1:&lt;br /&gt;            return [self.lst[1], self.lst[0]]&lt;br /&gt;        while 1:&lt;br /&gt;            if self.lst[-2] &lt; self.lst[-1]:&lt;br /&gt;                self.lst[-2], self.lst[-1] = self.lst[-1], self.lst[-2]&lt;br /&gt;            elif self.lst[-3] &lt; self.lst[-2]:&lt;br /&gt;                if self.lst[-3] &lt; self.lst[-1]:&lt;br /&gt;                    self.lst[-3], self.lst[-2], self.lst[-1] = self.lst[-1], self.lst[-3], self.lst[-2]&lt;br /&gt;                else:&lt;br /&gt;                    self.lst[-3], self.lst[-2], self.lst[-1] = self.lst[-2], self.lst[-1], self.lst[-3]&lt;br /&gt;            else:&lt;br /&gt;                j = self.n - 3&lt;br /&gt;                if j &lt; 0: raise StopIteration&lt;br /&gt;                y = self.lst[j]&lt;br /&gt;                x = self.lst[-3]&lt;br /&gt;                z = self.lst[-1]&lt;br /&gt;                while y &gt;= x:&lt;br /&gt;                    j = j - 1&lt;br /&gt;                    if j &lt; 0: raise StopIteration&lt;br /&gt;                    x = y&lt;br /&gt;                    y = self.lst[j]&lt;br /&gt;                if y &lt; z:&lt;br /&gt;                    self.lst[j] = z&lt;br /&gt;                    self.lst[j+1] = y&lt;br /&gt;                    self.lst[self.n] = x&lt;br /&gt;                else:&lt;br /&gt;                    l = self.n - 1&lt;br /&gt;                    while y &gt;= self.lst[l]:&lt;br /&gt;                        l = l - 1&lt;br /&gt;                    self.lst[j], self.lst[l] = self.lst[l], y&lt;br /&gt;                    self.lst[self.n], self.lst[j+1] = self.lst[j+1], self.lst[self.n]&lt;br /&gt;                k = j + 2&lt;br /&gt;                l = self.n - 1&lt;br /&gt;                while k &lt; l:&lt;br /&gt;                    self.lst[k], self.lst[l] = self.lst[l], self.lst[k]&lt;br /&gt;                    k = k + 1&lt;br /&gt;                    l = l - 1&lt;br /&gt;            return self.lst&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 01 Aug 2006 23:11:36 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2351</guid>
      <author>llimllib (Bill Mill)</author>
    </item>
  </channel>
</rss>
