<?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 123456789 Equation Puzzle in SQL</title>
	<atom:link href="http://oraqa.com/2008/05/30/how-to-solve-the-123456789-equation-puzzle-in-sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://oraqa.com/2008/05/30/how-to-solve-the-123456789-equation-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/05/30/how-to-solve-the-123456789-equation-puzzle-in-sql/comment-page-1/#comment-284</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Fri, 25 Jun 2010 19:20:21 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/?p=257#comment-284</guid>
		<description>&lt;pre&gt;
11GR2:
WITH n AS (SELECT ROWNUM-1 rn FROM DUAL CONNECT BY ROWNUM&lt;=10)
,o AS (SELECT &#039;+&#039; op FROM DUAL UNION ALL SELECT &#039;-&#039; op FROM DUAL UNION ALL SELECT NULL FROM DUAL)
,t(num,tot,expr,op) AS (
  SELECT 0 as num, 0 as tot, &#039;&#039; AS expr, &#039;&#039; AS op FROM DUAL
  UNION ALL
  SELECT n.rn
        ,DECODE(o.op,&#039;+&#039;,t.tot+n.rn,&#039;-&#039;,t.tot-n.rn,DECODE(t.op,&#039;+&#039;,t.tot-t.num+t.num*10+n.rn,t.tot+t.num-t.num*10-n.rn))
        ,t.expr&#124;&#124;o.op&#124;&#124;n.rn
        ,o.op
    FROM n,t,o
   WHERE t.num = n.rn-1 AND (o.op IS NOT NULL OR t.op IS NOT NULL)
   )
SELECT expr&#124;&#124;&#039;=&#039;&#124;&#124;tot AS OUTPUT 
FROM t
WHERE num=9 AND tot=1;

other solutions wihtout recursive WITH:

WITH t AS(
SELECT &#039;+&#039; X FROM DUAL UNION ALL
SELECT &#039;-&#039; X FROM DUAL UNION ALL
SELECT &#039;&#039;  X FROM DUAL)
,t2 AS (
SELECT * 
  FROM (SELECT ROWNUM id,t.x&#124;&#124;
                         1&#124;&#124;t1.x&#124;&#124;
                         2&#124;&#124;t2.x&#124;&#124;
                         3&#124;&#124;t3.x&#124;&#124;
                         4&#124;&#124;t4.x&#124;&#124;
                         5&#124;&#124;t5.x&#124;&#124;
                         6&#124;&#124;t6.x&#124;&#124;
                         7&#124;&#124;t7.x&#124;&#124;
                         8&#124;&#124;t8.x&#124;&#124;
                         9 y
       FROM t,t t1,t t2,t t3,t t4,t t5,t t6,t t7,t t8
      WHERE t.x IN (&#039;-&#039;,&#039;+&#039;)
      )
WHERE REPLACE(y,123)=y AND
      REPLACE(y,234)=y AND
      REPLACE(y,345)=y AND
      REPLACE(y,456)=y AND
      REPLACE(y,567)=y AND
      REPLACE(y,678)=y AND
      REPLACE(y,789)=y
)
SELECT LTRIM(y,&#039;+&#039;)
  FROM (SELECT id,y,REGEXP_SUBSTR(y,&#039;[+-]&#039;,1,rn) op,REGEXP_SUBSTR(y,&#039;[^+-]+&#039;,1,rn) num
         FROM t2,(SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM&lt;=9)
        )
GROUP BY id,y 
HAVING SUM(DECODE(op,&#039;+&#039;,num,-num))=1
;


WITH t AS(
SELECT n,op
  FROM (SELECT &#039;+&#039; op FROM DUAL UNION ALL
        SELECT &#039;-&#039; op FROM DUAL UNION ALL
        SELECT &#039;&#039;  op FROM DUAL)
       ,(SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM&lt;=9)
WHERE n&gt;1 OR op IN (&#039;+&#039;,&#039;-&#039;)
)
,t2 AS (
SELECT ROWNUM id, REPLACE(SYS_CONNECT_BY_PATH(op&#124;&#124;n,&#039;@&#039;),&#039;@&#039;) y
  FROM t
WHERE n=9
START WITH n=1 
CONNECT BY n= PRIOR n+1 AND (op IS NOT NULL OR PRIOR op IS NOT NULL)
)
SELECT LTRIM(y,&#039;+&#039;)
  FROM (SELECT id,y,REGEXP_SUBSTR(y,&#039;[+-]&#039;,1,rn) op,REGEXP_SUBSTR(y,&#039;[^+-]+&#039;,1,rn) num
          FROM t2,(SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM&lt;=9)
        )
GROUP BY id,y 
HAVING SUM(DECODE(op,&#039;+&#039;,num,-num))=1
;


WITH t AS(
SELECT n,op
  FROM (SELECT &#039;+&#039; op FROM DUAL UNION ALL
        SELECT &#039;-&#039; op FROM DUAL UNION ALL
        SELECT &#039;~&#039;  op FROM DUAL)
       ,(SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM&lt;=9)
WHERE n&gt;1 OR op IN (&#039;+&#039;,&#039;-&#039;)
)
,t2 AS (
SELECT ROWNUM id, REPLACE(SYS_CONNECT_BY_PATH(op&#124;&#124;n,&#039;@&#039;),&#039;@&#039;) y
      ,DECODE(op,&#039;+&#039;,n,&#039;-&#039;,-n,DECODE(PRIOR op,&#039;+&#039;,- (PRIOR n)+ (PRIOR n)*10 +n, (PRIOR n)- (PRIOR n)*10 -n)) val
  FROM t
WHERE n=9
START WITH n=1 
CONNECT BY n= PRIOR n+1 AND (op &lt;&gt;&#039;~&#039; OR PRIOR op &lt;&gt;&#039;~&#039;)
)
SELECT LTRIM(REPLACE(t2.y,&#039;~&#039;),&#039;+&#039;)
  FROM t2,(SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM&lt;=9)
GROUP BY t2.y
HAVING SUM(DECODE(SUBSTR(y,(n-1)*2+1,1),&#039;+&#039;,n,&#039;-&#039;,-n,DECODE(SUBSTR(y,(n-2)*2+1,1),&#039;+&#039;,-(n-1)+(n-1)*10+n,(n-1)-(n-1)*10-n )))=1;
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<pre>
11GR2:
WITH n AS (SELECT ROWNUM-1 rn FROM DUAL CONNECT BY ROWNUM&lt;=10)
,o AS (SELECT '+' op FROM DUAL UNION ALL SELECT '-' op FROM DUAL UNION ALL SELECT NULL FROM DUAL)
,t(num,tot,expr,op) AS (
  SELECT 0 as num, 0 as tot, '' AS expr, '' AS op FROM DUAL
  UNION ALL
  SELECT n.rn
        ,DECODE(o.op,'+',t.tot+n.rn,'-',t.tot-n.rn,DECODE(t.op,'+',t.tot-t.num+t.num*10+n.rn,t.tot+t.num-t.num*10-n.rn))
        ,t.expr||o.op||n.rn
        ,o.op
    FROM n,t,o
   WHERE t.num = n.rn-1 AND (o.op IS NOT NULL OR t.op IS NOT NULL)
   )
SELECT expr||'='||tot AS OUTPUT
FROM t
WHERE num=9 AND tot=1;

other solutions wihtout recursive WITH:

WITH t AS(
SELECT '+' X FROM DUAL UNION ALL
SELECT '-' X FROM DUAL UNION ALL
SELECT ''  X FROM DUAL)
,t2 AS (
SELECT *
  FROM (SELECT ROWNUM id,t.x||
                         1||t1.x||
                         2||t2.x||
                         3||t3.x||
                         4||t4.x||
                         5||t5.x||
                         6||t6.x||
                         7||t7.x||
                         8||t8.x||
                         9 y
       FROM t,t t1,t t2,t t3,t t4,t t5,t t6,t t7,t t8
      WHERE t.x IN ('-','+')
      )
WHERE REPLACE(y,123)=y AND
      REPLACE(y,234)=y AND
      REPLACE(y,345)=y AND
      REPLACE(y,456)=y AND
      REPLACE(y,567)=y AND
      REPLACE(y,678)=y AND
      REPLACE(y,789)=y
)
SELECT LTRIM(y,'+')
  FROM (SELECT id,y,REGEXP_SUBSTR(y,'[+-]',1,rn) op,REGEXP_SUBSTR(y,'[^+-]+',1,rn) num
         FROM t2,(SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM&lt;=9)
        )
GROUP BY id,y
HAVING SUM(DECODE(op,'+',num,-num))=1
;

WITH t AS(
SELECT n,op
  FROM (SELECT '+' op FROM DUAL UNION ALL
        SELECT '-' op FROM DUAL UNION ALL
        SELECT ''  op FROM DUAL)
       ,(SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM&lt;=9)
WHERE n&gt;1 OR op IN ('+','-')
)
,t2 AS (
SELECT ROWNUM id, REPLACE(SYS_CONNECT_BY_PATH(op||n,'@'),'@') y
  FROM t
WHERE n=9
START WITH n=1
CONNECT BY n= PRIOR n+1 AND (op IS NOT NULL OR PRIOR op IS NOT NULL)
)
SELECT LTRIM(y,'+')
  FROM (SELECT id,y,REGEXP_SUBSTR(y,'[+-]',1,rn) op,REGEXP_SUBSTR(y,'[^+-]+',1,rn) num
          FROM t2,(SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM&lt;=9)
        )
GROUP BY id,y
HAVING SUM(DECODE(op,'+',num,-num))=1
;

WITH t AS(
SELECT n,op
  FROM (SELECT '+' op FROM DUAL UNION ALL
        SELECT '-' op FROM DUAL UNION ALL
        SELECT '~'  op FROM DUAL)
       ,(SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM&lt;=9)
WHERE n&gt;1 OR op IN ('+','-')
)
,t2 AS (
SELECT ROWNUM id, REPLACE(SYS_CONNECT_BY_PATH(op||n,'@'),'@') y
      ,DECODE(op,'+',n,'-',-n,DECODE(PRIOR op,'+',- (PRIOR n)+ (PRIOR n)*10 +n, (PRIOR n)- (PRIOR n)*10 -n)) val
  FROM t
WHERE n=9
START WITH n=1
CONNECT BY n= PRIOR n+1 AND (op &lt;&gt;'~' OR PRIOR op &lt;&gt;'~')
)
SELECT LTRIM(REPLACE(t2.y,'~'),'+')
  FROM t2,(SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM&lt;=9)
GROUP BY t2.y
HAVING SUM(DECODE(SUBSTR(y,(n-1)*2+1,1),'+',n,'-',-n,DECODE(SUBSTR(y,(n-2)*2+1,1),'+',-(n-1)+(n-1)*10+n,(n-1)-(n-1)*10-n )))=1;
</pre>
]]></content:encoded>
	</item>
</channel>
</rss>

