LoginSignup
1
0

More than 5 years have passed since last update.

SEND MORE MONEY

Last updated at Posted at 2017-12-08

せっかく「Hello,World!」書いたのに転職先が見つからない。

もう人生嫌になった。金くれー。

まず、数字のテーブル。

CREATE TABLE X as
WITH X(n) AS (
        SELECT 0
        UNION ALL SELECT n + 1 FROM X WHERE n < 9)
    SELECT * FROM X;

で、文字のテーブル。

CREATE TABLE C AS SELECT c FROM (SELECT DISTINCT SUBSTR('SENDMOREMONEY',1 + X.n + 10 * X1.n,1) AS c FROM X,X AS
X1) WHERE c <> '';

部品その1

SELECT CASE WHEN rowid=1 THEN '' ELSE ', ' END || 'X AS ' || c FROM C;

実行結果

X AS S
, X AS N
, X AS E
, X AS Y
, X AS D
, X AS M
, X AS O
, X AS R

部品その2

SELECT 'AND ' || C1.c || '.n <> ' || C2.c || '.n' FROM C as C1, C as C2 WHERE C1.c < C2.c;

実行結果

AND S.n <> Y.n
AND N.n <> S.n
AND N.n <> Y.n
AND N.n <> O.n
AND N.n <> R.n
AND E.n <> S.n
AND E.n <> N.n
AND E.n <> Y.n
AND E.n <> M.n
AND E.n <> O.n
AND E.n <> R.n
AND D.n <> S.n
AND D.n <> N.n
AND D.n <> E.n
AND D.n <> Y.n
AND D.n <> M.n
AND D.n <> O.n
AND D.n <> R.n
AND M.n <> S.n
AND M.n <> N.n
AND M.n <> Y.n
AND M.n <> O.n
AND M.n <> R.n
AND O.n <> S.n
AND O.n <> Y.n
AND O.n <> R.n
AND R.n <> S.n
AND R.n <> Y.n

あとはこつこつ

WITH X(n) AS (
        SELECT 0
        UNION ALL SELECT n + 1 FROM X WHERE n < 9)
SELECT
    ((S.n * 10 + E.n) * 10 + N.n) * 10 + D.n AS SEND
    , ' + ' AS OP
    , ((M.n * 10 + O.n) * 10 + R.n) * 10 + E.n AS MORE
    , ' = ' AS EQ
    , (((M.n * 10 + O.n) * 10 + N.n) * 10 + E.n) * 10 + Y.n AS MONEY
FROM
    X AS S
    , X AS N
    , X AS E
    , X AS Y
    , X AS D
    , X AS M
    , X AS O
    , X AS R
WHERE
    ((S.n * 10 + E.n) * 10 + N.n) * 10 + D.n
        + ((M.n * 10 + O.n) * 10 + R.n) * 10 + E.n
        = (((M.n * 10 + O.n) * 10 + N.n) * 10 + E.n) * 10 + Y.n
    AND S.n > 0
    AND M.n > 0
    AND S.n <> Y.n
    AND N.n <> S.n
    AND N.n <> Y.n
    AND N.n <> O.n
    AND N.n <> R.n
    AND E.n <> S.n
    AND E.n <> N.n
    AND E.n <> Y.n
    AND E.n <> M.n
    AND E.n <> O.n
    AND E.n <> R.n
    AND D.n <> S.n
    AND D.n <> N.n
    AND D.n <> E.n
    AND D.n <> Y.n
    AND D.n <> M.n
    AND D.n <> O.n
    AND D.n <> R.n
    AND M.n <> S.n
    AND M.n <> N.n
    AND M.n <> Y.n
    AND M.n <> O.n
    AND M.n <> R.n
    AND O.n <> S.n
    AND O.n <> Y.n
    AND O.n <> R.n
    AND R.n <> S.n
    AND R.n <> Y.n
;

実行結果

SEND    OP      MORE    EQ      MONEY
9567     +      1085     =      10652

え、Python でやれと?

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3


def main():
    try:
        conn = sqlite3.connect(':memory:')
        strSQL = '''
WITH X(n) AS (
        SELECT 0
        UNION ALL SELECT n + 1 FROM X WHERE n < 9)
SELECT
    ((S.n * 10 + E.n) * 10 + N.n) * 10 + D.n AS SEND
    , ' + ' AS OP
    , ((M.n * 10 + O.n) * 10 + R.n) * 10 + E.n AS MORE
    , ' = ' AS EQ
    , (((M.n * 10 + O.n) * 10 + N.n) * 10 + E.n) * 10 + Y.n AS MONEY
FROM
    X AS S
    , X AS N
    , X AS E
    , X AS Y
    , X AS D
    , X AS M
    , X AS O
    , X AS R
WHERE
    ((S.n * 10 + E.n) * 10 + N.n) * 10 + D.n
        + ((M.n * 10 + O.n) * 10 + R.n) * 10 + E.n
        = (((M.n * 10 + O.n) * 10 + N.n) * 10 + E.n) * 10 + Y.n
    AND S.n > 0
    AND M.n > 0
    AND S.n <> Y.n
    AND N.n <> S.n
    AND N.n <> Y.n
    AND N.n <> O.n
    AND N.n <> R.n
    AND E.n <> S.n
    AND E.n <> N.n
    AND E.n <> Y.n
    AND E.n <> M.n
    AND E.n <> O.n
    AND E.n <> R.n
    AND D.n <> S.n
    AND D.n <> N.n
    AND D.n <> E.n
    AND D.n <> Y.n
    AND D.n <> M.n
    AND D.n <> O.n
    AND D.n <> R.n
    AND M.n <> S.n
    AND M.n <> N.n
    AND M.n <> Y.n
    AND M.n <> O.n
    AND M.n <> R.n
    AND O.n <> S.n
    AND O.n <> Y.n
    AND O.n <> R.n
    AND R.n <> S.n
    AND R.n <> Y.n
;
'''
        lines = conn.execute(strSQL).fetchall()
        for line in lines:
            print(line)
    finally:
        conn.close()


if __name__ == '__main__':
    main()

実行結果

>>> SMM.main()
(9567, ' + ', 1085, ' = ', 10652)

汎用の覆面算でやれと?
・・・それはまた別の機会に ....((((^^;)

※ 2017/12/08 21:38 SQL文修正。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0