読者です 読者をやめる 読者になる 読者になる

プログラミングする数学信者

数学信者が数学とプログラミングの話題を中心にして何か書きます

フリーダイヤルから選挙調査の電話がかかってきた

雑記

今日は携帯電話にある電話がかかってきました。発信元はフリーダイヤル、電話の主は自動音声。内容は来週7月10日(日)に行われる参議院選挙に関するアンケート調査で、プッシュボタンで回答する方式でした。以下はメモ。

アンケート内容

  • 自宅の郵便番号
  • 選挙に行く意思について
  • 小選挙区で誰に投票したいか
  • 比例代表で誰に投票したいか
  • 今回の選挙とは関係なしで、普段はどの政党を支持しているか
  • 性別
  • 年代

調査の主催者は?

よくわかりません。

なぜ自分の携帯電話にかかってきたのか?

ランダムに電話番号を生成して、手当たり次第に電話をかけてるんじゃないですかね。もちろん自動で。

なぜ郵便番号を聞かれる?

回答者がいる選挙区を特定するのに必要だと思われます。仮に何らかの方法で携帯電話の位置を特定できたとしても、回答者が外出をしていれば、その場所が選挙区と一致するとは限らないですからね。
あと、同選挙区で地区毎の統計をとるためにも必要だと思われます。

1からp-1までのn乗和、ただしpは素数

数学

今回は次の定理を示します。1995年に京都大学で出た入試問題(1995年 京都大学 後期 文系 第4問 自分の点数を自分で決められる? | 受験の月)の内容を一般化したものとなっています。

定理

p素数npより小さい正整数とする。このとき
p \nmid 1^n + 2^n + \dots + (p-1)^n
となるnn=p-1に限られる。ただし、a \nmid bは、abを割り切らないことを意味します。

続きを読む

ブログのタイトルを変えました

雑記

ブログのタイトルを「プログラミングする数学信者」に変えました。


タイトル選定にあたっては
ブログ名のつけ方はこの5タイプ!悩めるブログ初心者達へ - 梅吉日記
を参考にしました。タイトルのつけ方が5つのタイプに分類されているので、タイトル選定の指針が立てやすかったです。

今回自分がつけたタイトルは、リンク先の記事で言うと「属性説明系」ですね。自分のブログには内容にはっきりとしたテーマがないが、タイトルでどういう人がどういう内容を書いているのかを伝えたかったので、このタイプが一番しっくりときました。

それでは改めてブログ「プログラミングする数学信者」をよろしくお願い致します。

ブログのタイトル

雑記

ブログのタイトルを変えようと思っています。春から新しい環境に身を投じるので、気分的にタイトルを新しくしたくなりました。

そもそも現在の「これはブログですか?」というタイトルは、タイトルを考えるのが面倒で適当につけたものです。特に思い入れはありません。それに、タイトル名でWeb検索すると、ブログが一意に決定されないという問題があります。

ということで、いま新しいブログのタイトルを考えています。

Mac OS X El Capitanでgnuplotをソースからビルド・インストール

Mac

gnuplotMac OS X El Capitanにインストールするときの手順をメモとして記す。

前提条件

  • gnuplot version 5.0.3をインストール
  • MacportsやHomebrew等を使わず、公式で配布されているソースを使う
  • gnuplotターミナルでx11とaquaを使えるようにする

インストール手順

1. x11を使えるようにするためにXQuarzをインストール
2. aquaを使えるようにするためにAquaTermをインストール
3. gnuplot公式サイトからsourceForgeに行って、gnuplot-5.0.3.tar.gz をダウンロード
4. ターミナルでダウンロード先のフォルダに移動して次のコマンド群を順に実行する

tar xzf gnuplot-5.0.3.tar.gz
cd gnuplot-5.0.3
./configure --with-readline=bulitin --with-aquaterm
make
sudo make install


なお、インストール時に目的のgnuplotターミナルが入るかどうかを確かめるには、configure時に表示されるメッセージの中の

** Configuration summary for gnuplot 5.0.3:

gnuplot will be compiled with the following terminals:

以下の部分を見ればよい。例えばaquaが入るときは

aqua terminal (OSX): yes

入らないときは

aqua terminal (OSX): no

と書かれている。

Rubyでバイバイマンを数えてみた

CodeIQのバイバイマンを数えように挑戦しました。問題はこちらです。

バイバイマンのサイズを整数値で表します。
一番最初の大きさを「1」とし、1日経つと2倍の「2」、さらに1日後は「4」というように、1日毎に2倍になります。


また、バイバイマンは「1」→「2」→「4」→「8」→「16」と、大きさが10を超えたところで分裂します。
分裂後のサイズは、「16」なら「1」と「6」のように10の位の数と1の位の数になります。
分裂したバイバイマンは、再び大きくなります。


このようなルールで増えるバイバイマンの数を、1日ごとに調べて、100日目までを出力してください。

この問題ではコードゴルフが行われていて、できるだけ短いコードで書くことを競います。僕はRubyで挑戦したのですが、結果はRubyで25位でした。そんなによくない結果ですが、提出したコードを晒すと次のようになります。

a=[0,0,0,0,1];100.times{p a.inject(:+);a[4]+=a[0];a[0]+=a[1];a.rotate!()}

最後にこのコードについて説明してこの記事を締めくくります。

配列aの各要素には、サイズ6,8,4,2,1のバイバイマンの数を格納します。

バイバイマン分裂時に生じるサイズ1の個体を無視すると(例えばサイズ16の個体がサイズ1と6の個体に分裂するとき、サイズ6の方だけ考える)、1日経った後の各サイズのバイバイマンの個数は配列aの中身を左へ巡回させることで求められます。これがa.rotete!()の部分です。

そして先ほど無視したサイズ1の個体を加えます。これがa[4]+=a[0];a[0]+=a[1];に対応しています。

(2016.02.21 修正)
バイバイマンのサイズは1,2,4,8,6に限られます。各サイズのバイバイマンの数を配列aにするのですが、配列の操作がしやすいように、a[0]から順にサイズ6,8,4,2,1のバイバイマンの数を格納します。

バイバイマンの数が増えるのは、サイズが8→16になるか、6→12になるときです。ここで、サイズ16の個体から分裂してできた個体のうちサイズ1の方を無視し、サイズ12の個体からの分裂についてはサイズ2の方を無視します。このとき、1日経った後の各サイズのバイバイマンの個数は配列aの中身を左へ巡回させることで求められます。これがa.rotete!()の部分です。

そして先ほど無視した個体を勘定に入れます。これがa[4]+=a[0];a[0]+=a[1];に対応しています。

バイバイマンの総数はa.inject(:+) で求めます。

POH7「プログラミングで彼女をつくる」水着ゲットチャレンジ

Ruby プログラミング

paizaオンラインハッカソン vol.7 「プログラミングで彼女をつくる」というプログラミングで遊ぶイベントがありました。
paiza.jp

そこの水着ゲットチャレンジで正解した自分のコードを載せます。試行錯誤の末辿り着いたものなので、自分でもわからない部分がありますが…

続きを読む