<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How to solve the Stamp Combo Puzzle in SQL</title>
	<atom:link href="http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/</link>
	<description>Oracle Question and Answer</description>
	<lastBuildDate>Mon, 19 Dec 2011 14:21:07 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: newkid</title>
		<link>http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/comment-page-1/#comment-288</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Mon, 28 Jun 2010 19:53:48 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/#comment-288</guid>
		<description>&lt;pre&gt;
WITH c  AS (SELECT 3 cnt FROM DUAL UNION ALL SELECT 4 FROM DUAL)
,stamps AS (SELECT c1.cnt&#124;&#124;c2.cnt&#124;&#124;c3.cnt&#124;&#124;c5.cnt&#124;&#124;c10.cnt AS all_cnt
                  ,c1.cnt+2*c2.cnt+3*c3.cnt+5*c5.cnt+10*c10.cnt AS val
                  ,&#039;1*&#039;&#124;&#124;c1.cnt&#124;&#124;&#039;+2*&#039;&#124;&#124;c2.cnt&#124;&#124;&#039;+3*&#039;&#124;&#124;c3.cnt&#124;&#124;&#039;+5*&#039;&#124;&#124;c5.cnt&#124;&#124;&#039;+10*&#039;&#124;&#124;c10.cnt AS result
              FROM c c1,c c2,c c3,c c5,c c10
            )
SELECT result&#124;&#124;&#039;=&#039;&#124;&#124;val from stamps
WHERE MOD(val,10)=0
      AND LENGTH(all_cnt)-LENGTH(REPLACE(all_cnt,&#039;4&#039;))=2
      AND LENGTH(all_cnt)-LENGTH(REPLACE(all_cnt,&#039;3&#039;))=3
      ;

RESULT&#124;&#124;&#039;=&#039;&#124;&#124;VAL
-------------------------------------
1*3+2*4+3*3+5*4+10*3=70
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<pre>
WITH c  AS (SELECT 3 cnt FROM DUAL UNION ALL SELECT 4 FROM DUAL)
,stamps AS (SELECT c1.cnt||c2.cnt||c3.cnt||c5.cnt||c10.cnt AS all_cnt
                  ,c1.cnt+2*c2.cnt+3*c3.cnt+5*c5.cnt+10*c10.cnt AS val
                  ,'1*'||c1.cnt||'+2*'||c2.cnt||'+3*'||c3.cnt||'+5*'||c5.cnt||'+10*'||c10.cnt AS result
              FROM c c1,c c2,c c3,c c5,c c10
            )
SELECT result||'='||val from stamps
WHERE MOD(val,10)=0
      AND LENGTH(all_cnt)-LENGTH(REPLACE(all_cnt,'4'))=2
      AND LENGTH(all_cnt)-LENGTH(REPLACE(all_cnt,'3'))=3
      ;

RESULT||'='||VAL
-------------------------------------
1*3+2*4+3*3+5*4+10*3=70
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: newkid</title>
		<link>http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/comment-page-1/#comment-286</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Mon, 28 Jun 2010 13:57:55 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/#comment-286</guid>
		<description>Recursive WITH in 11GR2:
&lt;pre&gt;
WITH t(lvl,val,left_4,left_3,result) AS (
  SELECT 0,0,2,3,&#039;&#039; FROM DUAL
  UNION ALL
  SELECT t.lvl+1
        ,t.val+s.price*cnt
        ,left_4 - DECODE(cnt,4,1,0)
        ,left_3 - DECODE(cnt,3,1,0)
        ,t.result&#124;&#124;&#039; &#039;&#124;&#124;s.price&#124;&#124;&#039;*&#039;&#124;&#124;cnt
    FROM t
        ,(SELECT ROWNUM price_id,DECODE(ROWNUM,4,5,5,10,ROWNUM) AS price FROM DUAL CONNECT BY ROWNUM&lt;=5) s
        ,(SELECT 4 as cnt FROM DUAL UNION ALL SELECT 3 FROM DUAL)
   WHERE t.lvl+1=s.price_id
         AND (cnt=4 AND left_4&gt;0 OR cnt=3 AND left_3&gt;0)
   )
SELECT result&#124;&#124;&#039;=&#039;&#124;&#124;val
FROM t 
WHERE lvl=5 AND MOD(val,10)=0;


RESULT&#124;&#124;&#039;=&#039;&#124;&#124;VAL
----------------------------------
1*3 2*4 3*3 5*4 10*3=70
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Recursive WITH in 11GR2:</p>
<pre>
WITH t(lvl,val,left_4,left_3,result) AS (
  SELECT 0,0,2,3,'' FROM DUAL
  UNION ALL
  SELECT t.lvl+1
        ,t.val+s.price*cnt
        ,left_4 - DECODE(cnt,4,1,0)
        ,left_3 - DECODE(cnt,3,1,0)
        ,t.result||' '||s.price||'*'||cnt
    FROM t
        ,(SELECT ROWNUM price_id,DECODE(ROWNUM,4,5,5,10,ROWNUM) AS price FROM DUAL CONNECT BY ROWNUM&lt;=5) s
        ,(SELECT 4 as cnt FROM DUAL UNION ALL SELECT 3 FROM DUAL)
   WHERE t.lvl+1=s.price_id
         AND (cnt=4 AND left_4&gt;0 OR cnt=3 AND left_3&gt;0)
   )
SELECT result||'='||val
FROM t
WHERE lvl=5 AND MOD(val,10)=0;

RESULT||'='||VAL
----------------------------------
1*3 2*4 3*3 5*4 10*3=70
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: newkid</title>
		<link>http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/comment-page-1/#comment-283</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Fri, 25 Jun 2010 19:18:06 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/2008/03/27/how-to-solve-the-stamp-combo-puzzle-in-sql/#comment-283</guid>
		<description>&lt;pre&gt;
WITH stamps AS (
SELECT ROWNUM n
      ,(CASE WHEN ROWNUM IN (1,2) THEN 4 ELSE 3 END) AS m 
      ,DECODE(ROWNUM,4,5,5,10,ROWNUM) val
  FROM DUAL 
 CONNECT BY ROWNUM&lt;=5
)
,t1 AS (
SELECT id,n,TO_NUMBER(SUBSTR(t.m,stamps.n,1)) m
  FROM (SELECT ROWNUM id, m
          FROM (SELECT DISTINCT REPLACE(SYS_CONNECT_BY_PATH(m,&#039;,&#039;),&#039;,&#039;) m
                  FROM stamps
                 WHERE LEVEL=5
                CONNECT BY NOCYCLE n&lt;&gt;PRIOR n AND LEVEL&lt;=5
                )
        ) t
      ,stamps
 )
SELECT * FROM (
SELECT t1.id,t1.m,s.val,SUM(t1.m*s.val) OVER(PARTITION BY t1.id) total
  FROM t1,stamps s
 WHERE t1.n = s.n
 )
WHERE MOD(total,10)=0
ORDER BY id,val;

        ID          M        VAL      TOTAL
---------- ---------- ---------- ----------
         3          3          1         70
         3          4          2         70
         3          3          3         70
         3          4          5         70
         3          3         10         70

&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<pre>
WITH stamps AS (
SELECT ROWNUM n
      ,(CASE WHEN ROWNUM IN (1,2) THEN 4 ELSE 3 END) AS m
      ,DECODE(ROWNUM,4,5,5,10,ROWNUM) val
  FROM DUAL
 CONNECT BY ROWNUM&lt;=5
)
,t1 AS (
SELECT id,n,TO_NUMBER(SUBSTR(t.m,stamps.n,1)) m
  FROM (SELECT ROWNUM id, m
          FROM (SELECT DISTINCT REPLACE(SYS_CONNECT_BY_PATH(m,','),',') m
                  FROM stamps
                 WHERE LEVEL=5
                CONNECT BY NOCYCLE n&lt;&gt;PRIOR n AND LEVEL&lt;=5
                )
        ) t
      ,stamps
 )
SELECT * FROM (
SELECT t1.id,t1.m,s.val,SUM(t1.m*s.val) OVER(PARTITION BY t1.id) total
  FROM t1,stamps s
 WHERE t1.n = s.n
 )
WHERE MOD(total,10)=0
ORDER BY id,val;

        ID          M        VAL      TOTAL
---------- ---------- ---------- ----------
         3          3          1         70
         3          4          2         70
         3          3          3         70
         3          4          5         70
         3          3         10         70
</pre>
]]></content:encoded>
	</item>
</channel>
</rss>

