2015年12月27日日曜日

株投資の勝ち負けを決する、[調査力]の磨き方

http://news.livedoor.com/article/detail/10999994/



株主や債権者に公開する義務がある決算書はホームページから閲覧できる。
◆費やす時間の9割は“調査”です

 小社Webサイトの日刊SPA!にて、連続投資小説「おかねのかみさま」を連載中の大川弘一氏。’97年、メルマガ配信サービス「まぐまぐ」を創立後、ビジネスの酸いも甘いも知り尽くした大川氏は、個別株のデイトレでも好成績をあげている。その手法は「一つの銘柄を徹底的に調べ尽くす」こと。「おかねのかみさま」も、調査力の重要さを知らない大学生・健太に対して、神様がお金の世界の法則と矛盾を説いていくという物語だ。

「僕が株式投資に費やす時間の9割は“調査”。上場企業にはとても大きな特徴があります。それは、決算説明やリリースを行う際に、業績が悪くなることを述べないというもの。業績が悪化する可能性について延々と株主に語ってしまうことはその間の無策を宣言するようなものなので当然ですが、それだけを鵜呑みにすると“外側の情報”しか入らないのです」(大川氏)

 企業の発表や経済ニュースだけでは見えてこない“企業の真の実力”を見極めることが、勝率を上げるための方策というわけだ。

 では、大川氏の考える調査力とはどういったものか。具体的に見ていこう。

◆決算書や財務諸表ってやはり理解できないとダメですか?

 どうお金を集めて、何に投資し、利益はどれくらいか―会社の基本活動を知ることのできる損益計算書(PL)、貸借対照表(BS)、キャッシュフロー計算書(CS)の財務3表にはヒントが溢れています。そこから調査を掘り下げたり視野を広げる必要があるわけですが、たとえば岩塚製菓(2221)という会社への投資を検討したとします。

 岩塚製菓の売上高は200億程度で、競合の亀田製菓と比べて5分の1程度。ところがBSを見ると、流動資産54億円、有形固定資産69億円に並ぶ「投資そのほかの資産」の項目で、投資有価証券835億円という数字が出てきます。岩塚製菓の時価総額は372億円(11月24日現在)ですが、実にその2.5倍の資産スケールとなるのです。

 続いて、2015年度第2四半期のPLを見ると、岩塚製菓が保有している835億円という有価証券は、1億3000万円の営業利益を遥かに上回る13億9000万円もの配当金を生み出していることがわかります。本業よりも出資した会社からの配当が収益のメインという会社であるわけです。

 さらに有価証券報告書を調べてみると、岩塚製菓が出資している会社は中国旺旺という会社であることが判明します。30年ほど前、台湾にある宜蘭食品工業の董事長(社長)から技術供与要請を受けた岩塚製菓がこれを受諾。台湾でトップクラスの菓子メーカーに成長した宜蘭が岩塚製菓と共同出資をしてつくった会社が中国旺旺で、岩塚製菓の出資金10億円が80倍になったということが判明しました。

「株主構成を見ると創業家一族の比率が高くて、台湾の株を持って配当でのほほんとしてそう。ただ、時価総額が低いから、『日本の製造技術のノウハウを輸出』『亀田に負けない商品を作る』みたいな強いアクションを実行できる経営者に買収、またはMBOになれば株価ははね上がるかも」

 そんな具合に、基礎調査から始めて、投資の判断材料、ストーリーを構築することができるのです。

『基礎は超大事。そこから視野を広げるのはもっと大事!』

― 勝率上げる投資の調査力 ―

小さい子には特に効果的! 「ダイニングで勉強する」と成績が伸びる理由

http://news.livedoor.com/article/detail/11000383/

        学生の窓口編集部
子供がいれば、「成績が良くなって、良い大学に行ってほしい」と思いますよね。そして最近流行りなのが、子供を「ダイニングで勉強させる」ことです。この「ダイニングで勉強」、一体なぜ成績が伸びると言われているのでしょうか。自分が育った環境と、子供を育てたい環境を比較して考えてみましょう。
■小さい子はダイニングで勉強させよう
ダイニングで勉強すると良いのは、特に小さい子です。小さい子は勉強する習慣がないため、勉強部屋を与えられれば自動的に勉強するというわけではないでしょう。ダイニングに勉強机があれば、親の気配を感じながら勉強することができるため、わからないことがあればすぐに質問できます。また、何か調べ物をしてまとめるという課題に取り組んでいるときにも、パソコンや本棚があれば便利ですよね。
親が本を読む習慣があれば、子供はそれを真似して本を読むようになるでしょう。知的好奇心を満たすような経験を親子で一緒にすれば、子供には「考える習慣」がつくでしょう。小さい子は、親と一緒にいることで勉強の仕方を学ぶことができます。そのため、ダイニングで勉強すると、今後の人生における「勉強の姿勢」が出来上がっていくことになります。
■理想は「大きなワンルーム」
「ダイニングで勉強」の効果を上げるには、リビングダイニングあたりが大きなワンルームになっていると良いかもしれません。コミュニケーションしながら勉強の姿勢を育んであげるためには、いつでも親の姿が確認できること、声が届くことが大切です。空間を家具で仕切る場合も、あまり高いものよりは腰までの高さくらいにしておくと良いでしょう。
親専用の書斎を別に持つよりも、リビングの一角に調べ物スペースを設置するのも良いものです。親が勉強している姿を直接見ることができると、子供も自然に勉強する習慣がつくでしょう。本を読んだりパソコンで調べ物をしたり、またミシンで服を作ったり、ちょっとしたDIYをしたり。親がチャレンジングなことをしていれば、子供もそれを見習うでしょう。
■その子に合った方法を見極めよう
いつまでもダイニングで勉強すれば良いというわけではありません。年齢が上がるにつれて、集中して暗記することも出てきます。そんな場合、ダイニングで勉強した方がはかどるタイプと、雑音が入らないところで一人で勉強したいタイプとに分かれます。子供がどちらのタイプなのか、よくコミュニケーションを取りながら、間取りを変更していきましょう。勉強の習慣がついた子供は、自分にはどんなやり方が合っているのかだんだんわかってくるものです。
ダイニングで勉強することの利点はたくさんあります。子供の成長に合わせて、どんな間取りにすると良いのかその都度考えていくことが大切ですね。

(ファナティック)

ゆるまないネジが開発。ネジの歴史2000年の革命

http://news.livedoor.com/article/detail/10999353/
12月21日放送、「ビートたけしのTVタックル」(テレビ朝日)では、ゆるまないネジが登場したニュース。
ゆるまないネジ「L/Rネジ」が開発されたという。ゆるまないネジはネジの歴史2000年の中でも、壁を超えたという。右らせん構造のナットと、左らせん構造のナットが同じボルトに入るため、お互いにストッパーになるためにゆるまないのだという。
「L/Rネジ」のボルトには、右回りで締めるナットと、左回りのナット、両方に対応した山が作りこまれている。2つのナットは別々の動きをして、互いにぶつかると相手をロックする。そうしてゆるみを封じることでゆるまない構造を用いているのだ。

これは、ネジの歴史2000年の中でも革命的なものだ。一本のボルトに、右回転のネジ山と、左回転のネジ山が一緒に設けられている。一本のボルトの同じ回転によって、ナットを右回りさせたり左回りさせたりできる。このため、振動が加わってもネットが回転しつつボルトの回転により、もう一つのナットが逆回転することによって、お互いに反対方向に進む動きをするため、お互いに締め付け合う。この原理によって、絶対にゆるまないネジが可能となった。

これまで、2000年のネジの歴史の中には、ゆるみにくいネジはあった。だがそのどれもが、らせん構造を緻密に作りこんで摩擦力を強くすることで実現されてきたもので、あくまで「ゆるまない」ではなく「ゆるみにくい」にとどまっていた。
そこで、開発者は、らせん構造そのものにメスを入れて、摩擦に依存しない開発を行ったのだ。
そもそも、ゆるむこととは何かという定義から始まり、63種類のゆるみ方があると見出した。そして最終的には最も過酷と言われるNASAでの耐久試験に合格し、ネジの機械が壊れるほどの耐久テストをクリアした。
ネジは、螺子と書くように、螺旋の構造が元になっている。ネジの2000年の歴史の中では、らせん構造は当たり前のものだった。だがこのらせん構造が2種類刻まれることで、通常回転と逆回転のナットが作用し、相互にゆるまない完璧な状態を創りだす。
この革命的なゆるまないネジに、今支援が殺到し、開発会社は巨額の資金調達を受けている。実用にはあと2年かかるといい、宇宙や橋などの巨大建造物などに実用として使われる可能性がでてきた。

2015年12月7日月曜日

サラリーマンで2億円稼いだ「イベント投資」必勝法

http://news.livedoor.com/article/detail/10890008/

■サラリーマンで2億を稼ぐ必勝法

ビジネスマンで株の運用をしている人は少なくないだろう。けれども、この本の著者であるJACKさんのように、サラリーマン稼業のかたわら、個人投資家としてIPO(新規公開株)を中心に2億円近い儲けを出したとなると話は別だ。そして現在も、株式市場を主戦場に不動産投資やFXでも勝ち続けているという。加えてJACKさんは、そのノウハウをブログや専門紙の連載コラムで惜しげもなく公開している。
今回取り上げる本は、そのコラムに加筆修正する形で“JACK流株式投資”における勝利の方程式を読者に伝授しようというものだ。私自身、株の取引はしないが、企業や経営者を取材していれば、日経平均が15年ぶりに2万円台を回復したことはテイクノートする。11月4日には日本郵政グループ3社の東証第1部への新規上場があり、売り出し価格を上回る初値を付けたという新聞記事は興味深く読む。
郵政株上場の日に、仕事で来年に予定されている参院選前後の株価を、真壁昭夫信州大学教授に聞くことができた。金融マーケットに詳しい真壁教授は「一大イベントを無事に切り抜けたことを、市場が好感する。それが株価をサポートし、しばらくは堅調さを維持する」と話した。JACKさんも「確かに今こそ投資のタイミングです」と書いており、門外漢ながら、しばらくは日経平均の動きが気になりそうだ。
とはいえ、日々刻々と変化する株式市場に闇雲に投資しても、素人が思惑通りのリターンを得ることはむずかしいだろう。そこで、この本では「イベント投資」と呼ばれる方法が紹介されている。その理由をJACKさんは「地合い(相場の値動き)の変化に強く、いつでも有効な手法だから」と説明。その代表的な物として「株主優待」「IPO」「会社四季報」「立会外分売」の4つを示す。

■四季報を読み込んで会社の変化を知る

おそらく、4つ目の立会外分売という専門用語以外は、誰でも1度ぐらいは見たり、聞いたりしたことがあるはずだ。だが、ここからビジネスマンが学ぶべきことは、イベント投資のノウハウではない。こうした手法を駆使して、ローリスクでコンスタントにリターンを確保していくJACKさんの戦略だ。まず、とにかく小まめに、多様な手段で可能な限りのネタを手に入れる情報武装力。次に、そのうえで個別の銘柄をチェックし、市況を読む分析力。最後に、リスクを果敢に取って決断する勇気である。
ただ、これら4つのなかで、再認識したのが『会社四季報』の読み方だ。さすがに、四季報は私の机の横にもある。企業取材や経営トップをインタビューする際、まず四季報のページを開く。わずか半ページながら、そこには当該会社の株価チャートをはじめ、特色や最近の動向が書かれた記事欄のほか株主構成、財務情報と業績が細かい字で載っている。JACKさんは、四季報を継続して読むことで、会社の変化を知るという基本の大切さを教えてくれている。
JACKさんの本を手にしたきっかけは、つい最近行った、彼へのインタビューである。そのときは、来年のリオデジャネイロと5年後の東京の五輪注目株を上げてもらったのだが、印象的だったのは、取材中もスマートフォンを手放さないことだ。指先をすばやく動かし、必要なキーワードを検索する姿に、本物のプロフェッショナルを感じた。
(ジャーナリスト 岡村繁雄=文)

Googleの入社試験です。次の覆面算を解きなさい

http://blog.livedoor.jp/itsoku/archives/47064212.html

441:デフォルトの名無しさん 2015/07/23(木) 23:21:58.40 ID:tM+kqpz/.net
覆面算です。各英字は異なる数字です。
デュードニーの覆面算

  SEND 9567
+ MORE 1085
-------
 MONEY 10652


「Googleの入社試験」より。ただし、EとMは交換可能です

WWWDOT - GOOGLE = DOTCOM
補足:上の SEND+MORE=MONEYのように各英字に置き換えられた数字を解く問題。

スポンサードリンク
 
444:デフォルトの名無しさん 2015/07/24(金) 02:33:15.17 ID:i7tlJ0x5.net
数字のマップ方法が思い浮かばないなー。

445:440 2015/07/24(金) 02:44:51.78 ID:orlgr+Lf.net
さあ? 総当たりはどうかね?

446:デフォルトの名無しさん 2015/07/24(金) 03:00:39.65 ID:i7tlJ0x5.net
辞書ないとだめじゃね?

447:440 2015/07/24(金) 03:45:43.16 ID:orlgr+Lf.net
数独(ナンプレ)よりは、簡単そうだけど

449:デフォルトの名無しさん 2015/07/24(金) 07:30:49.96 ID:i7tlJ0x5.net
>>441
C++。一応解いたが誤答も入ってる気がする。大いにする。
VCのリリースで10秒ほどかかる。@N3700
これでググる入社だ!

辞書云々は勘違いしてた。
#include <iostream>
#include <algorithm>
#include <stdint.h>
#include <string>
#include <tuple>
#include <map>
#include <vector>
#include <functional>
//var 0.03a
enum class Op {
 None,
 Add,
 Sub,
};

typedef std::map<char, std::uint32_t> Dic;
typedef std::tuple<std::string, std::string, std::string, Op> Data;
typedef std::vector<std::uint32_t> iVec;
typedef std::vector<std::tuple<std::uint32_t, std::uint32_t, std::uint32_t,Op,Dic>> RType;

std::int32_t MakeNumber(std::string S, Dic& D) {
 std::int32_t R = 0;

 for (auto& o : S) {
  R *= 10;
  R += D[o];
 }

 return R;
}

std::uint32_t CountDigit(std::uint32_t N) {
 std::uint32_t c = 0;

 while (N != 0) {
  N /= 10;
  c++;
 }
 return c;
}

RType MakeHoge(const Data& D){
 std::string A;
 std::string B;
 std::string C;
 Op op = Op::None;
 Dic Di;
 iVec v{ 0,1,2,3,4,5,6,7,8,9 };
 std::size_t i = 0;
 bool F=false;
 RType R;

 std::int32_t a = 0;
 std::int32_t b = 0;
 std::int32_t c = 0;

 std::tie(A, B, C, op) = D;
 for (auto& o : A) {
  Di[o] = 0;
 }
 for (auto& o : B) {
  Di[o] = 0;
 }
 for (auto& o : C) {
  Di[o] = 0;
 }
 do {
 for (auto& o : Di) {
  o.second = v[i];
  i++;
 }
 i = 0;
 a = MakeNumber(A, Di);
 b = MakeNumber(B, Di);
 c = MakeNumber(C, Di);

 switch (op)
 {
  case Op::Add:
   F = (a + b == c);
   break;
  case Op::Sub:
   F = (a - b == c);
   break;

  default:
   std::cout << "unknown op prametor" << std::endl;
   return{};
   break;
 }
 if (F == true) {
  R.push_back(std::make_tuple(a, b, c, op,Di));
 }
 } while (std::next_permutation(v.begin(), v.end()));

 return R;
}

bool Show(std::string A, std::string B, std::string C, RType& R) {
 std::int32_t a;
 std::int32_t b; 
 std::int32_t c;
 Op op = Op::None;
 Dic D;

 R.erase(std::unique(R.begin(), R.end()),R.end());

 for (auto& o : R) {
  std::tie(a, b, c, op,D) = o;

  if (A.size() != CountDigit(a)) continue;
  if (B.size() != CountDigit(b)) continue;
  if (C.size() != CountDigit(c)) continue;


  std::cout << A;
  switch (op)
  {
   case Op::Add:
   std::cout << " + ";
   break;
   case Op::Sub:
   std::cout << " - ";
   break;
  default:
   std::cout << " ? ";
   break;
  }

  std::cout << B;

  std::cout <<" = "<< C << std::endl;
  std::cout << a;
  switch (op)
  {
   case Op::Add:
   std::cout << " + ";
   break;
   case Op::Sub:
   std::cout << " - ";
   break;
  default:
   std::cout << " ? ";
   break;
  }

  std::cout << b;

  std::cout <<" = "<< c << std::endl;
  for (auto&o : D) {
   std::cout << o.first << '[' << static_cast<int>(o.second) << ']';
  }
  std::cout << std::endl<< std::endl;
 }

 return true;
}

int main() {

 std::string A;
 std::string B;
 std::string C;
 Op op = Op::None;
 RType R;

 A = "SEND";
 B = "MORE";
 C = "MONEY";

 R = MakeHoge(std::make_tuple(A, B, C, Op::Add));
 Show(A, B, C, R);

 A = "WWWDOT";
 B = "GOOGLE";
 C = "DOTCOM";

 R = MakeHoge(std::make_tuple(A, B, C, Op::Sub));
 Show(A, B, C, R);
 return 0;

}

452:デフォルトの名無しさん 2015/07/24(金) 14:42:27.19 ID:EjPkrmXr.net
>>441
Java
酷いコードが出来たぜ
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Alphametic
{
    public static void main(String[] args)
    {
        try (Scanner in = new Scanner(System.in))
        {
            while (in.hasNextLine())
            {
                new Alphametic(in.nextLine()).print();
            }
        }
    }

    private static Pattern pat = Pattern.compile("([0-9A-Z]+)([+-\\\\*])([0-9A-Z]+)=([0-9A-Z]+)");
    private final String sa;
    private final String sb;
    private final String sc;
    private final String op;
    private final String[] st;
    private final Op operator;
    private final int e;

    private final int[] map = new int[256];
    private final boolean[] used = new boolean[10];
    private String[] result = new String[0];

    private Alphametic(String exp)
    {
        Matcher mat = pat.matcher(exp);
        if (!mat.matches()) throw new IllegalArgumentException();

        this.sa = mat.group(1);
        this.op = mat.group(2);
        this.sb = mat.group(3);
        this.sc = mat.group(4);
        this.st = new String[] { sa, sb, sc };
        switch(op)
        {
        case "+": operator = (a, b) -> a + b; break;
        case "-": operator = (a, b) -> a - b; break;
        case "*": operator = (a, b) -> a * b; break;
        default: throw new IllegalArgumentException();
        }

        for (int i = 0; i <= 9; i++) map['0' + i] = i;
        for (int i = 'A'; i <= 'Z'; i++) map[i] = i;
        e = Math.max(Math.max(sa.length(), sb.length()), sc.length()) * 3;
        solve(0, new long[3], 1);
    }

    private void solve(int p, long[] ls, long d)
    {
        if (p == e)
        {
            if (!operator.test(ls[0], ls[1], ls[2], Long.MAX_VALUE)) return;
            for (String s : st) if (map[s.charAt(0)] <= 0) return;
            result = Arrays.copyOf(result, result.length + 1);
            result[result.length - 1] = String.format("%d%s%d=%d", ls[0], op, ls[1], ls[2]);
            return;
        }

        int i = p / 3;
        int j = p % 3;
        if (p > 0 && j == 0)
        {
            d *= 10;
            if (!operator.test(ls[0], ls[1], ls[2], d)) return;
        }

        int n = ch(st[j], i);
        long l = ls[j];

        if (n >= 'A' && n <= 'Z')
        {
            for (int k = 0; k < 10; k++)
            {
                if (used[k]) continue;
                used[k] = true;
                map[n] = k;
                ls[j] = l + k * d;
                solve(p + 1, ls, d);
                used[k] = false;
            }
            map[n] = n;
        }
        else
        {
            ls[j] += n * d;
            solve(p + 1, ls, d);
        }
        ls[j] = l;
    }

    private int ch(String s, int i)
    {
        return s.length() <= i ? 0 : map[s.charAt(s.length() - i - 1)];
    }

    void print()
    {
        System.out.printf("%s%s%s=%s%n", sa, op, sb, sc);
        for (String s : result) System.out.println(s);
        System.out.println();
    }

    private interface Op
    {
        long op(long a, long b);

        default boolean test(long a, long b, long c, long d)
        {
            return Math.abs(op(a, b) - c) % d == 0;
        }
    }
}

453:デフォルトの名無しさん 2015/07/24(金) 16:21:16.16 ID:E+gh8pZi.net
>>452
すげー速いな
こういうのC++で書けないかな

456:デフォルトの名無しさん 2015/07/24(金) 19:23:23.71 ID:i7tlJ0x5.net
>>453
ポートする意外だとアイディアないな。
俺のはnext_parmitation使ってるからめちゃくちゃ遅い。o(N!)だし。
ぜひ改善してくれ。

455:デフォルトの名無しさん 2015/07/24(金) 18:23:05.71 ID:cSQMFcxl.net
>>441
Javaに勝てる気がしないけどProlog で
% fadder(A,B,C,D,E) :-  A + B + C = 10E + D  
:-dynamic(fadder/5).
fadder0(A,B,C,D,E) :- between(0,9,A),between(0,9,B),between(0,1,C),
 D is (A + B + C) mod 10, E is floor((A +B + C)/ 10), asserta(fadder(A,B,C,D,E)).
:- setof(fadder(A,B,C,D,E),fadder0(A,B,C,D,E),L), member(X,L),asserta(X),fail;true.
:- compile_predicates([fadder/5]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fukumen(A,B,C) :-
 setof(V,varof([A,B,C],V),Vars),
 setof([A,B,C],(fukumen0(A,B,C,0),alldifferent(Vars)),L),member([A,B,C],L). 

fukumen0([A|X],[B|Y],[D|Z],E) :- fadder(A,B,C,D,E), D \= 0, fukumen1(X,Y,Z,C).
fukumen1([],[],[],0) :- !. 
fukumen1([A|X],[B|Y],[D|Z],E) :- fadder(A,B,C,D,E), fukumen1(X,Y,Z,C).

varof(T,T) :- var(T),!.
varof(T,_) :- ground(T),!,fail.
varof(T,V) :- arg(_,T,A),varof(A,V). 

alldifferent(X) :- nth0(I,X,A),nth0(J,X,B),A==B, I \= J,!,fail.
alldifferent(_).
%% ----------------------------------------------
:- write('SEND + MORE = MONEY'), nl,fukumen([0,S,E,N,D],[0,M,O,R,E],[M,O,N,E,Y]) ,
 write([S,E,N,D]+[M,O,R,E]=[M,O,N,E,Y]),nl,fail;nl.
:- write('WWWDOT - GOOGLE = DOTCOM'),nl,fukumen([D,O,T,C,O,M],[G,O,O,G,L,E],[W,W,W,D,O,T]),
 write([W,W,W,D,O,T]-[G,O,O,G,L,E]=[D,O,T,C,O,M]),nl,fail;true.


457:デフォルトの名無しさん 2015/07/24(金) 23:56:32.13 ID:VNZ6dmGo.net
>>441
C
遅い
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int used = 0;
char str[32];
void eval()
{
 char *p, *q;
 int a,b,c;
 a = strtol(str, 0, 10);
 q = strchr(str, '='); c = strtol(q + 1, 0, 10);
 p = strchr(str, '+');
 if(p) {
  b = strtol(p + 1, 0, 10);
  if(p[1] == '0' || q[1] == '0') return;
  if((a + b) == c){
   printf("  %s\n", str);
  }
 }

 p = strchr(str, '-');
 if(p) {
  b = strtol(p + 1, 0, 10);
  if(p[1] == '0' || q[1] == '0') return;
  if((a - b) == c){
   printf("  %s\n", str);
  }
 }
}

void recur(int offs)
{
 int c,n,i,old_used=used;
 char old_str[32];
 if((c = str[offs]) == 0) {
  eval();
  return;
 }
 if(! isalpha(c)) {
  recur(offs + 1);
  return;
 }

 strcpy(old_str, str);
 for(n=((offs == 0)?1:0); n<10; n++) {
  if(!(used & (1 << n))) {
   used |= (1 << n);
   for(i=0; str[i]; i++) {
    if(str[i] == c) str[i] = '0' + n;
   }
   recur(offs + 1);
   used = old_used;
   strcpy(str, old_str);
  }
 }
}

main()
{
 strcpy(str, "SEND+MORE=MONEY");
 printf("\n%s\n", str);
 recur(0);

 strcpy(str, "WWWDOT-GOOGLE=DOTCOM");
 printf("\n%s\n", str);
 recur(0);
 return 0;
}

459:デフォルトの名無しさん 2015/07/25(土) 02:34:01.78 ID:tp+9eo6i.net
>>441
Python
足し算と引き算のみ
いろいろと改良の余地が非常に多そうなので、また修正すると思う
from __future__ import unicode_literals, division, print_function
import re

def do_it(expr):
    elems = parse_input(expr)
    if elems is None: raise Exception()
    val1, op_chr, val2, val3 = elems
    
    op_fn, test_fn = get_operator_fn(op_chr)
    precheck_fn = get_precheck_fn(val1, test_fn, val2, val3)
    valid_fn = get_valid_fn(val1, op_fn, val2, val3)

    def assignNum(chars, nums=range(10), a_dic={}):
        if len(chars) <= 0:
            if valid_fn(a_dic):
                print(format_result(val1, op_chr, val2, val3, a_dic))
                return True
            return False

        for i in range(len(nums)):
            a_dic[chars[0]] = nums[i]
            
            if not precheck_fn(a_dic):
                continue
            
            if assignNum(chars[1:], nums[0:i] + nums[i + 1:]):
                return True
            
        del a_dic[chars[0]]
        return False

    print(expr)
    assignNum(list(set([ch for ch in val1 + val2 + val3])))

def to_num(val, a_dic):
    l_val = [ch for ch in val]
    l_pow = [pow(10, i) for i in reversed(range(len(l_val)))]
    return sum([a_dic[ch] * i for ch, i in zip(l_val, l_pow)])

def get_precheck_fn(val1, test_fn, val2, val3):
    def precheck_fn(a_dic):
        try:
            if any([a_dic[val[0]] == 0 for val in [val1, val2, val3]]):
                return False
        except KeyError:
            pass
        
        for i in range(min(len(val1), len(val2), len(val3))):
            try:
                if not test_fn(a_dic[val1[-i - 1]], a_dic[val2[-i - 1]], a_dic[val3[-i - 1]]):
                    return False
            except KeyError:
                pass
                
        return True

    return precheck_fn

def get_valid_fn(val1, op_fn, val2, val3):
    def valid_fn(a_dic):
        return op_fn(to_num(val1, a_dic), to_num(val2, a_dic)) == to_num(val3, a_dic)
    return valid_fn

def get_operator_fn(op_chr):
    if op_chr == '+': return lambda x, y: x + y, lambda x, y, z: z in ((x + y) % 10, (x + y + 1) % 10)
    if op_chr == '-': return lambda x, y: x - y, lambda x, y, z: z in ((10 + x - y) % 10, (9 + x - y) % 10)

def parse_input(expr):
    m = re.match(r'^([A-Z]+)\s*([\+\-\*/])\s*([A-Z]+)\s*=\s*([A-Z]+)', expr)
    if m is not None:
        return m.group(1), m.group(2), m.group(3), m.group(4)
    return None

def format_result(val1, op, val2, val3, a_dic):
    vals = [''.join([str(a_dic[ch]) for ch in val]) for val in [val1, val2, val3]]
    return '{} {} {} = {}'.format(vals[0], op, vals[1], vals[2]) 

do_it('SEND + MORE = MONEY')
print()
do_it('WWWDOT - GOOGLE = DOTCOM')

460:デフォルトの名無しさん 2015/07/25(土) 04:16:19.74 ID:BtkcRlE5.net
>>441
遅ればせながらC++
#include <iostream>
#include <string>
#include <map>
#include <sstream>
#include <algorithm>
#include <functional>
#include <chrono>

template <typename unit, typename Clock = std::chrono::high_resolution_clock>
struct StopWatch {
    typename Clock::time_point start;
    StopWatch() : start(Clock::now()) {}

 unsigned getDifference(){
   return std::chrono::duration_cast<unit>(Clock::now() - start).count();
 }
};

template <typename Integer>
struct Resolver {
 using Calculator = std::function<Integer(Integer,Integer)>;
 
 std::string line;
 std::string word1;
 std::string word2;
 std::string ope;
 std::string word3;

    std::map<char,Integer> charCombinationMap;
 Calculator calcurator;

 static Calculator getBinaryCalculator(std::string& operatorString){
  if( operatorString.size() == 1 ) switch(operatorString[0]){
   case '+': return std::plus<Integer>();
   case '-': return std::minus<Integer>();
   case '*': return std::multiplies<Integer>();
   case '/': return std::divides<Integer>();
  }
  return std::plus<Integer>();
 }

 Resolver(std::string& aLine) : line(aLine) {
  std::string eq;
  std::stringstream(line) >> word1 >> ope >>  word2 >> eq >> word3;
  calcurator = getBinaryCalculator(ope);
 }
 
 std::string getResultString(){
  std::string result;
  std::string integerMap = "0123456789";
  for( auto ch :line )
   result.push_back( (charCombinationMap.count(ch) > 0) ?
     integerMap[ charCombinationMap[ch] ] : ch );

  return result;
 }

 bool validate(){
  for( auto word: std::vector<std::string>{word1,word2,word3} )
   if( charCombinationMap[ word[0] ] == 0 )
    return false;
    
  return calcurator( toInteger(word1), toInteger(word2) ) == toInteger(word3);
 } 

 Integer toInteger(std::string& word){
  return std::accumulate( word.begin(), word.end(),0, [&](Integer prev, char ch){
   return (prev * 10) + charCombinationMap[ch];
  });
 }

 std::string getCharList(){
  std::string charList;
  {
   std::map<char,bool> exists;
   for( auto word: std::vector<std::string>{word1,word2,word3} )
    for( auto ch: word )
     exists[ch] = true;
 
   for( auto entry: exists )
    charList.push_back(entry.first);
  }
  return charList;
 }

 std::string resolve(){
  std::string charList = getCharList();
     std::vector<bool> taken(10);
     std::fill(taken.end() - charList.size(), taken.end() , true);
    
     do {
      std::vector<Integer> combination;
            for (int i = 0; i < 10; ++i){
             if ( taken[i] )
              combination.push_back(i);
            }

   do {
       auto it = charList.begin();
    for( auto value :combination ){
           charCombinationMap[*it] = value;
           ++it;
    }
    
    if( validate() )
        return getResultString();
   }
      while (std::next_permutation(combination.begin(), combination.end()));

     }
     while (std::next_permutation(taken.begin(), taken.end()));
     
     return "not found";
 }
};

int main() {
 for( std::string line; std::getline(std::cin,line); ){
  StopWatch<std::chrono::milliseconds> stopWatch;
  std::string result = Resolver<int>(line).resolve();

  std::cout << result
            << " (in " << stopWatch.getDifference() << "ms)"
            << std::endl;
 }

 return 0;
}

463:デフォルトの名無しさん 2015/07/25(土) 06:53:11.73 ID:BtkcRlE5.net
>>460
チューンでまあまあ速くなった
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <sstream>
#include <algorithm>
#include <functional>
#include <chrono>

// 修正

template <typename unit, typename Clock = std::chrono::high_resolution_clock>
struct StopWatch {
    typename Clock::time_point start;
    StopWatch() : start(Clock::now()) {}

 unsigned getDifference(){
   return std::chrono::duration_cast<unit>(Clock::now() - start).count();
 }
};

template <typename Integer>
struct Resolver {
 using WordType = std::vector<Integer>;
 
 std::string line;
 std::array<WordType,3> words;
 std::string operatorSymbol;

    std::vector<Integer> combinationMap;
 std::map<char,Integer> charMap;

 Resolver(std::string& aLine) : line(aLine) {
  std::array<std::string, 3> rawWords;
  std::string eq;
  std::stringstream(line) >> rawWords[0] >> operatorSymbol >>  rawWords[1] >> eq >> rawWords[2];
  
  {
   int i = 0;
   for( auto rawWord: rawWords )
    for( auto ch: rawWord )
     if(charMap.count(ch) <= 0)
      charMap[ch] = i++;
  }

  for( int i = 0; i < rawWords.size(); i++ ){
   std::vector<Integer> word;
   for( auto ch: rawWords[i] )
    word.push_back( charMap[ch] );

   words[i] = word;
  }
 }
 
 std::string getResultString(){
  std::string buffer;
  std::stringstream stream(buffer);
  stream << toInteger(words[0]) << " " << operatorSymbol << " " << toInteger(words[1])
         << " = " << toInteger(words[2]);

  return stream.str();
 }


 bool validate(){
  bool found;
  Integer n1 = toInteger(words[0]);
  Integer n2 = toInteger(words[1]);
  Integer n3 = toInteger(words[2]);
  
  switch(operatorSymbol[0]){
   default:
   case '+': found = (n1 + n2) == n3; break;
   case '-': found = (n1 - n2) == n3; break;
   case '*': found = (n1 * n2) == n3; break;
   case '/': found = (n1 / n2) == n3; break;
  }
  if( !found )
   return false;

  for( auto word: words )
   if( combinationMap[ word[0] ] == 0 )
    return false;
   
  return true;
    
 }

 Integer toInteger(std::vector<Integer>& word){
  return std::accumulate( word.begin(), word.end(), 0, [&](Integer prev, Integer ch){
   return (prev * 10) + combinationMap[ch];
  });
 }
 
 StopWatch<std::chrono::milliseconds> stopWatch;
 void print(){
  std::cout << line << " -> " << getResultString()
            << " (in " << stopWatch.getDifference() << "ms)"
            << std::endl;
 }

 void resolve(){
     std::vector<bool> taken(10);
     std::fill(taken.end() - charMap.size(), taken.end() , true);

     combinationMap = std::vector<Integer>( charMap.size() );

     do {
      int n = 0;
            for (int i = 0; i < 10; ++i)
             if ( taken[i] )
              combinationMap[n++] = i;
   
   do if( validate() )
    print();
      while (std::next_permutation(combinationMap.begin(),combinationMap.end()));

     }
     while (std::next_permutation(taken.begin(), taken.end()));
 }
};

int main() {
 for( std::string line; std::getline(std::cin,line); )
  Resolver<int>(line).resolve();
  
 return 0;
}

答え:
WWWDOT 777589 - GOOGLE 18810(3)= DOTCOM 58948(6)

WWWDOT 777589 - GOOGLE 18810(6)= DOTCOM 58948(3)

これからの時代のリーダーシップに欠かせない10の考え方

http://news.livedoor.com/article/detail/10919815/


Inc.:ほかの分野と同じように、リーダーシップにも流行や変化はあります。成功したいのであれば、その流れに乗っていなければなりません。昔ながらのリーダーシップの流儀にしたがっていても、現代のビジネスや経営の変化にはついていけないでしょう。リーダーシップについて理解するには、歴史的な思考と現在の実務を、切り離さなければなりません。
これからのリーダーシップへと進化させるのに役に立つ10の考え方を紹介しましょう。

1. 信ぴょう性と透明性が大事


ソーシャルメディアの時代では、うそをついたり、隠したりして得られるものは何もありません。あなた自身や、あなたの会社がうそをついたり、だましたり、ごまかしたりしていたら、それを暴かれる確率はかつてないほどに高くなっています。

2. ブランドが評価になる


以前は、表向きの顔やこれまでの功績で人は評価されていました。最近は、個人のブランドがそのまま評価につながります。つまり、あなたの発言や行動が、相手の行動を決めるのです。自分のブランドが自分のことを十分に表すように心がけましょう。

3. SNSを使わなければチャンスを逃す


リーダーは、コミュニケーションができて、表に出なければなりません。現代においては、ソーシャルメディアをただ使うだけでなく、うまく活用し、何かを発信しなければならないという意味でもあります。もはや、社長室の奥に引きこもるという選択肢はありません。

4. コラボレーションは新しい通貨


共有することも、人と組むことも、コラボレーションもしないのなら、新しいビジネスの通貨を使い損ねます。その価格はとても大切で、リーダーシップや組織から支払われることになります。

5. キャリアの新しい選択肢


現在の労働人口の約35%は自営業者で、その数はどんどん増えています。社会人としてキャリアを積み重ねると、働き方を変えたり、経営者的な考え方をしたりするようになります。まだ、9~5時の会社勤めをしている人の中では少ないかもしれませんが、上司を喜ばせなければ出世できない時代は終わった、ということは知っておきましょう。

6. 人とつながることでイニシアチブを取る


かつては、リーダーシップを持っている人が会話を支配していました。今は、メールやインターネット、ソーシャルメディアは、ほとんどの人にとって身近なものです。人とつながることに関してリーダーシップを取れる人が、リーダーシップを握るようになりました。

8. 1人1人の発言力が増える


これからの時代、ヒエラルキーのトップに立つのは、かなり大変になると思われます。おそらく、うまくいかないでしょう。権力を求め、階級を重んじる人は、フラット化する社会や組織では生き残れなくなります。社員に、さらにはクライアントにも、説明責任が増えていきます。

7. コミュニティが非常に重要


組織は、孤立して存在することはできません。現代のリーダーシップに独裁はあり得ません。コミュニティを育てるには、人々が共通のビジョンや目標に向けて働けるよう促せるリーダーシップが求められます。

8. あらゆる人に頼る


頼るのが上手な人の話を聞き、以前は発言力がなかったような人に、積極的にリーダーとしての役割を果たしてもらいましょう。そういう人たちに、職場で自己主張してもらうために、先入観を持たないようにしましょう。

9. 情報を共有することが影響力となる


情報化社会では、多くの情報を共有している人が情報に強いと見なされます。自分をリーダーとして見せなければならない場合は、情報を共有することで、自分の影響力の大きさを証明することができます。

10. 肩書は要らない


誰もがリーダーになることができます。肩書や役職で能力がはかられるような時代ではありません。影響力があることがリーダーシップには非常に重要で、それは誰でも手に入れられるものです。

これからの数年で、リーダーシップ像はまったく変わるかもしれません。また、次の時代を担う人がすぐそこまで来ているかもしれません。私たちが今やっていることで、将来どのように世界が変わるのかが決まります。

10 New Truths Great Leaders Know That Most People Don't|Inc.
Lolly Daskal(訳:的野裕子)
Photo by Shutterstock.

2015年12月4日金曜日

【コラム】気付けば水木しげる先生の「幸福の7カ条」に影響されていた話

http://news.biglobe.ne.jp/entertainment/1130/rct_151130_3790769448.html

2015年11月30日、93歳で急逝された漫画家の水木しげるさん。ゲゲゲの鬼太郎を始めとする妖怪漫画の第一人者であることは言うまでもなく、その功績は計り知れない。水木さんのご冥福を心よりお祈りいたします。

私事で大変恐縮だが、水木さんの訃報を聞き真っ先に思い出したのが、同氏の著書にあった「幸福の7カ条」である。大きな話題を集めた、連続テレビ小説『ゲゲゲの女房』の頃に読んだ1冊の本。今思うとそこに刻まれた水木先生のメッセージに、私の人生は大きく影響されていたのかもしれない。

・著書『水木サンの幸福論』より
それは、日本経済新聞社から刊行された『水木サンの幸福論』という書籍の中で披露されていたものである。水木先生の半生を振り返る自伝の要素が強い書籍だが、水木先生が幸福に生きるために実践している7カ条がとても印象的だったのだ。以下に抜粋しよう。

第1条:「成功や栄誉や勝ち負けを目的に、ことを行ってはならない」
第2条:「しないでいられないことをし続けなさい」
第3条:「他人との比較ではない、あくまで自分の楽しさを追及すべし」
第4条:「好きの力を信じる」
第5条:「才能と収入は別、努力は人を裏切ると心得よ」
第6条:「怠け者になりなさい」
第7条:「目に見えない世界を信じる」

1つ1つの内容については割愛するが、戦争に参加し40歳を超えてからようやく漫画家として食えるようになり、しかも「自分を少しも成功者だと思っていない」水木先生が語る7カ条には、不思議な説得力が宿っていた。

・きれいごとだけではない
単に耳触りの良い言葉の寄せ集めではなく、第5条では「努力は人を裏切る」と語り、第6条では「何かを続けるためには怠け者になることも必要」と語っているのは、水木先生の正直な人柄から来ているに違いない。

ちょうど『ゲゲゲの女房』が放送していた時期にこの本を読んだ筆者は、当時「想像している通りの人だな」とは思ったが、正直に言うと、幸福の7カ条にもそこまで感動を覚えなかった。だがしかし……それから約5年の時が経ち、大いにこの7カ条に影響されていたことに気付いたのだ

・気付けば影響されていた
それは、ある程度の収入や将来が約束されていたエリートサラリーマンから、ライターへ転職するときのこと。30代後半にして大きな決断を迫られた筆者は、大げさではなく吐くほど悩み抜いた。簡単にいえば「義理のある職場で安定的な未来」を選ぶか、「楽しくて仕方ないけど未知の世界」を選ぶかの選択を迫られたのだ。

結果としてライターの道を選んだ筆者。それが成功だったかどうかはもう少し時間が経ってみないとわからないが、幸福の7カ条にのっとれば、「勝ち負けではなく・書くことをやめられず・自分が超楽しく・この仕事が好きだった」からその選択をしたのだろう。

このとき特にこの7カ条を思い出したわけではないが、かつて読んだ記憶がどこかに残っていたのかもしれない。結果として筆者は、幸福の7カ条にのっとった選択をしていたのだ。もちろん「努力は人を裏切る」かもしれないことを肝に銘じながら、今後もライターとして精進していく次第だ。名著なので『水木サンの幸福論』は、多くの人にご一読いただきたい。

参考リンク:Amazon『水木サンの幸福論』
執筆:P.K.サンジュン
イラスト:稲葉翔子

2015年12月2日水曜日

元FBI諜報員が伝授する「嘘を見抜く8つの方法」

http://news.livedoor.com/article/detail/10895646/

23年間FBIで諜報員として活躍したというLaRae Quy氏。彼女が、現場での豊富な経験を元に、嘘を見破る方法をライターJustin Bariso氏に伝授しました。
Inc.com」に紹介された、元FBI捜査官による鋭い考察。実生活、とくに恋愛においては役立ちそうです。

01.
まずは、打ち解けて
話ができる関係を築く

12312302093531
こんなことが言えます。人当たりの良い“いい警官”ほど、おおむね成果を挙げるもの。冷徹に接したり、何でも非難する警官の印象が強いのは、言うまでもありませんね。
でも、心を開いて会話の中で感情移入できる部分がある方が、結果として相手の心を開かせることができます。まずは、相手の懐に入り込む。これが大切です。

02.
嘘をつく相手が
予想していない
質問を投げかける

266059823
人を騙すような人間は、だいたい相手からの質問を先読みし、予想を立てていることがあります。それができるから、彼らの回答はどこか本能的で、的を得ているように感じてしまうのです。でも、これは錯覚。彼らは、事前に質問に答える用意を周到にしているだけ。
ならば、彼らが予想もしていないような内容をわざと言ってみましょう。きっとすぐにボロを出し、つまづくはずだから。

03.
自分が話すより
“聞き役”に回る

16417482544330214046
得てして、嘘が多い人ほど誠実な人よりも“話す”傾向にあり、自分の正当性を主張しようとするものです。さらに、彼らは真実をうやむやにするため、わざと複雑で理解しにくい表現を使うことも。以下のような点には特に注意が必要です。
①嘘をつくことによるストレスは、人を早口に変える
②ストレスを感じている人は、得てして大声でしゃべる
③嘘をつくタイミングで、自然な口調からがらりと一変する
④咳をしたり、繰り返し喉を潤すような行為が続くのは、緊張している証
ただし、当てはまるからといって必ずしも相手が嘘をついているかと言えば、そうではありません。でも、これらのサインを感じたら、何がしか注意が必要だと思ってください。

04.
相手が何に対して
「NO」を言っているかに
注意を払う

56317591
誰かがあなたを欺こうとしているとき、「NO」はひとつのキーワードとして見落としてはいけない言葉。多くの場合、人が嘘をつく瞬間というのは、こういう感じからではないでしょうか?
①否定する時は目を合わせようとしない
②否定する時に限って目をつむる
③躊躇したあとに否定する
④「違うってば!」否定を繰り返す
⑤あえて、抑揚なく否定する

05.
態度が変わった瞬間を
見逃すな!

82415047
立ち居振るまいに微妙な変化が現れるような時は、嘘の始まりかもしれません。以下のような態度の人には十分に注意を!
①会話の最初は用心深かったのに、肝心な時に逸脱する
②質問に対して、詳細を説明したがらず、極端に回答が短い
③話し方がやたらと形式的(何かプレッシャーを感じているサイン)
④「いいね」と言えばいいところで、「素晴らしい」「素敵だ」など、あえて誇張した表現に変わる

06.
話の辻褄あってる?
詳細を説明させる

146190377
誠実な人の会話の組み立て方は、詳細を追加したり、場面を思いながら内容を進めていきます。これに対して嘘をつく人たちは、ストーリーを暗記するかのように記憶し、そのまま伝えようと試みます。なぜなら、もしも余計な追加情報が加わると、辻褄が合わなくなってしまうから。
もしも、話している内容が「疑わしい」と感じた時は、その人に詳細を説明できるか試してみれば、一目瞭然でしょう。嘘のない人であれば何てことないことでも、彼らには矛盾が生まれる要素となります。だから、必死で話を簡略化しようとする訳です。

07.
お世辞や褒め言葉に
乗ったらOUT

Discussing project
確かに、この世の中には純粋でいい人たちが大勢います。でも、誤解しないでほしいのは、やたらと印象が良かったり、どこか押し告げがましさを感じるような時は、注意が必要だと言うこと。
あなたの意見に全面的に賛成したり、いつも褒めてばっかりで、あなたの冗談に過剰なほど笑ってみせる。これらは、逆に信頼性や誠実さを欠くものだと理解することが懸命です。

08.
疑わしきは…質問攻め!

_216120376
もちろん、誰だって嘘をつかれるなんて嫌。しかし、嘘は時として会話の結果に依存していたり、プライベートな質問への恥ずかしさや、特定の質問への不安感などが大きく影響していることは、覚えておくべき重要なことです。
たとえば、面接時に前の会社を辞めた理由を隠したがる人も多いはず。でも、もしあなたが個性的でその会社に相応しい人材だと信じるならば、退職の理由を隠す必要なんてありますか?
返答に困るようならば、質問をどんどんと深掘りしていくこと。疑わしい場合は、洞察力ある質問をどんどん続けることです。それさえできれば、あなたもプロのように嘘を見抜く千里眼が身につくはずです。
Licensed material used with permission by Justin Bariso