はてなキーワード: 整数とは
実際のプログラムって「現実世界は真・偽だけじゃない、不明もある、だから3値論理でモデリングすれば解決」なんてものじゃないぞ。
不明があるなら「不明の扱いはどうするのか」を決めなくちゃならない。
「不明なら真or偽として扱う」ならやはり真偽の2値でいいしそうするべき。(世の中のプログラムはほとんどこのパターン。だからなるべくnullableにするなと言われる)
真・偽・不明の3パターンで扱いが変わるなら、true/false/nullを入れることも考えられるが、ほとんどの場合は、パターンが更に増えることを考えて、整数型でパターン1、パターン2、パターン3のように扱うべきだと思う。
その概念の具体例だけでなく、「それには当てはまらない例」(反例)があって初めて理解が進むじゃないですか
たとえば「有理数」っていうのは整数の比で表される数ですよってだけでは初学者には理解ができない
1/2とか-4/7とか0とか1とかのことですよって言われただけでは不十分
円周率とかルート2とかは当てはまらないですよ、整数の割り算で表現できないからねって言うとようやくイメージが掴める
境界線の内側と外側を言ってもらえて初めて境界線が目に見えると言いますか
ところが法律、とくに刑法の解説では「こういう行為が刑罰になるんです!」ばっかり言うけど
なかなか「こういう事例はギリギリ大丈夫です、何故ならこういう理由で要件にあたらないから」って言ってくれないですよね
私が知らないだけで、市販の判例集とか見たら反例も載ってるのかな
少なくともそういう情報をネットで気軽に見れる解説ページとかで見たことないんですが、
まず、コンピュータとは何か、プログラムとは何かと説明しなければならない。
端的に言えば、コンピュータとは魔導具の一種であり、プログラムとは魔法陣を代替したものである
(コンピュータにプログラムを内蔵することで、誰でも魔術を行使できるようなったことは革命と言える)。
この魔術はピタゴラス数秘術を源流としたものであり、運命の解読(未来の予測)程度にしか使えないからである。
魔道具であるコンピュータの発達により、我々は精緻な魔術の行使ができるようになった。
ピタゴラス数秘術では、名前をアルファベットに直し、それを数値化、演算を行うという単純なものであったが、
現代では、もっと細やかに、様々な事象を数値化し、高い次元を演算する。
それゆえに、行列、ベクトルと言った線形代数と呼ばれる分野の数学知識が必要になった。
また、プログラムは魔法陣の代替であるため、論理的に破たんの無いものでなければならない。
数秘術は基本的に整数を扱うため、数論の基礎も外せないであろう。
セフィロトの樹を低いレベルで一般化し、学問としたものがグラフ理論である。
まとめると
注意されたし。
手をかざせば水が出る自動水栓ってあるじゃない。
あれってたまになかなか反応しなくて困るときがあるんだけど、
なかなか水出してくれないのよ!
気付いてー!って感じ。
あと自動ドアが空かなくて
あれって圧感式じゃ無いと思うんだな、
だから下で足踏みするより、
上向いて手を振ったら良いわよ!
あとそれと、
あれもたまにICカード叩きつけてる人いるけど、
それも圧感式じゃないわよね!
だまにバチーンってスゴい人いるけど、
自動改札には優しくしてあげたいわね!
日本ほど○○の日の多さはないわよね!
うふふ。
ほかのサンドイッチのラインナップも楽しみにしてたんだけどなぁ。
朝早く行き過ぎたのかしら?
ピザトーストはまだ出来てませんって。
ちょっと残念なお知らせでした。
水出しのスッキリした感じと
煮出したコクのある感じと
作り方によって微妙に味変よ!
もうでもここで何百回と言ってるけど、
あれは美味しいわよね。
すいすいすいようび~
今日も頑張りましょう!
Gamewithが憎い。
私は昨年リリースされた某人気ソーシャルゲームの攻略ブログを運営している。
そのアプリの元作品が大好きなことから、自意識過剰かもしれないが熱量と知識量では日本でもトップクラスだと思っている。
Gamewithは、昨年上場を果たしたゲーム攻略サイトの大手だ。
おそらくソーシャルゲームアプリで検索したら、アプリによっては公式を超えてトップに表示されるレベルで、Googleからの評価が高い。
攻略ブログを運営している私にとってGamewithはもちろんライバルになる。
私のブログはGamewithにとっては吹けば飛ぶような規模だが、それでも人によっては私のブログの情報を優先してくれることが多いレベルになってきた。
そして、日々アプリの勉強をすればするほど、Gamewithの情報の杜撰さに腹が立っている。
負け犬の遠吠えかもしれないが、ここで吐き出させて欲しい。
Gamewithが憎い。
明らかにゲームをプレイしていないようなライターが書いた情報が憎い。
絶っっっっ対に○○○○では攻略不可能なキャラクターを「○○○○を使えば可能性が見えてくる」などと偉そうな文体で公開している。
私は実際に検証を行い、実際に攻略可能なキャラクターをピックアップし掲載しているが、これに負けているかと思うと頭を抱えたくなる。
どうやらゲーム攻略サイト業界は、いい加減でも攻略記事を書いたもの勝ちで、攻略情報が事実がそうでないかはさほど重要ではないらしい。
Gamewithが憎い。
私がある攻略情報を発見し、これは喜んでもらえるだろうと思い書いた記事が、その後に速攻でGamewithにパクられた。
Gamewithも発見したのなら何も文句はないが、それを引き起こすための条件やら何やらがすべて私の記事と一緒だった。
(別の条件だと再現できるか分からないからすべて真似たものだと思われる。普通は被らない。)
しかもGamewithの管理画面らしきものから、私の攻略ブログのその記事に対するアクセスが確認されたことから、私の記事を意識してパクったことは99%確実だと思われる。
しかし誰もパクリ情報など疑うことなく、むしろGamewithを称賛する声が多かった。
Gamewithの圧倒的知名度の前では、最先端の情報を公開してもそれをGamewithが取り扱えば、むしろこちらがパクった側になるらしい。
Gamewithが憎い。
Googleの評価を盾に、UIの糞さを誤魔化している行為が憎い。
あるツールで、絶対整数しか入力し得ないフォームで、普通に[input type="text"]などを使用している。
それiOSとかで入力すると数値入力モードにならないけど、ツールの開発者は実際に自分でツールを活用しようと思ったことがあるのか。
それとも[input type="number"]も知らないのか。
私の開発したツールは、少なくともGamewithと比較したら絶対に使い勝手が良いと自負しているか、もちろん検索順位は負けている。
Gamewithの圧倒的知名度の前では、UIの快適さなど、さほど重要ではないらしい。
Gamewithが憎い。
そんなGamewithを過大評価しているGoogleも憎い。
「アプリ名 攻略」などで1位はまだしも、アプリ単体名で公式よりもGamewithが上に来るのは正しい評価なのか。
関係のない話だが、私は戦国時代が好きで、織田信長について調べようと「信長」と入力したら、Gamewithのモンスト(信長)が2位に来た時はブチ切れそうになった。
以上、負け犬の遠吠えでした。
3日になったので解答を投下します。
最も小さい数をxとして、
x+(x+1)+(x+2)+(x+3)=2018
4x+6=2018
4x=2012
x=503
なので、503,504,505,506。
はじめの数をaとする。等差数列の和の公式を使って、
n(2a+n-1)/2=2018
n(2a+n-1)=4036
nと2a+n-1の一方が偶数、他方が奇数であることと、1009が素数であることより
(n,2a+n-1)=(1,4036),(4,1009),(1009,4),(4036,1)
(n,a)=(1,2018),(4,503),(1009,-502),(4036,-2017)
n=1009のときは (-502)+(-501)+…+506=2018
n=4036のときは (-2017)+(-2016)+…2018=2018
である。
この問題
> 連続するn個の整数の二乗の和が2018のとき、これらの整数を求めよ。
に解が実際に存在するのはかなり驚き。
以下ネタバレにつき改行。
2乗の和の公式を使ってしらみつぶしに調べた結果、
1^2+2^2+…6^2=6*7*13/6=91
1^2+2^2+…18^2=18*19*37/6=2109
より7^2+8^2+…18^2=2018となる。
[レベル1]
連続する4つの整数をそれぞれ、m,(m+1),(m+2),(m+3)と置く。
和が2018になるので、
m + (m + 1) + (m + 2) + (m + 3) = 2018
4m + 6 = 2018
4m = 2012
m = 503
よって、連続する4つの整数は、503,504,505,506
[レベル2]
具体的に考える
m + (m + 1) + (m + 2) + (m + 3) = 2018
4m + 1 + 2 + 3 = 2018
m + (m + 1) + (m + 2) + (m + 3) + (m + 4) = 2018
5m + 1 + 2 + 3 + 4 = 2018
m + (m + 1) + (m + 2) + (m + 3) + (m + 4) + (m + 5) = 2018
6m + 1 + 2 + 3 + 4 + 5 = 2018
m + (m + 1) + (m + 2) + (m + 3) + ... + (m + n - 1) = 2018
nm + 1 + 2 + 3 + ... + (n - 1) = 2018 (n > 4,nは整数,mは整数)
つまり、
nm + (1からn-1までの和) = 2018
(1からn-1までの和)を求めてみる。 1から(n-1)まで1ずつ増える数と(n-1)から1まで1ずつ減っていく数を 足し合わせて2で割ることで求めることにする。 1 + 2 + ... + (n - 2) + (n - 1) +) (n - 1) + (n - 2) + ... + 2 + 1 ---------------------------------------------- n + n + ... + n + n nの数は(n-1)個あるので、 (1からn-1までの和) = n × (n - 1) / 2
nm + n(n - 1) / 2 = 2018
両辺を2倍
2nm + n(n - 1) = 4036
nでくくって
n(2m + n - 1) = 4036
ここで、nと(2m + n - 1)は、それぞれ4036の約数である。
4036の約数を求める。
4036 = 2 × 2 × 1009
よって、4036の約数は(-4036,-2018,-1009,-4,-2,-1,1,2,4,1009,2018,4036)
nを場合分けして考えることにする。
条件(n > 4)より、(1009,2018,4036)を考える。
i) n = 1009のとき
1009 × (2m + 1009 - 1) = 4036
2m + 1008 = 4
2m = -1004
m = -502
ii) n = 2018のとき
2018 × (2m + 2018 - 1) = 4036
2m + 2017 = 2
2m = -2015
m = -2015 / 2
mが整数にならないので不適
iii) n = 4036のとき
4036 × (2m + 4036 - 1) = 4036
2m + 4035 = 1
2m = -4034
m = -2017
i,iiiより、
n = (1009, 4036)
プログラミングの問題だけど高校一年生までの数学の考え方で解決できる。嬉しい。
1 から順に数を数えていく。但し、その数が 3 で割り切れるならば数字の代わりに Fizz と、5 で割り切れるなら Buzz と言うゲーム。3 でも 5 でも割り切れる場合は、FizzBuzz の順に言う。
これをプログラミングするのがFizzBuzz問題です。
1から15までの例を考えてみる。
入力 | 出力 |
---|---|
1 | 1 |
2 | 2 |
3 | Fizz |
4 | 4 |
5 | Buzz |
6 | Fizz |
7 | 7 |
8 | 8 |
9 | Fizz |
10 | Buzz |
11 | 11 |
12 | Fizz |
13 | 13 |
14 | 14 |
15 | FizzBuzz |
入力と出力の関係を考えると、入力が定まれば、出力も一意に定まることが分かる。つまり、入力と出力の関係を関数にすることができる。この関数をf(x)とする。
関数f(x)は、入力が3の倍数なら"Fizz"、5の倍数なら"Buzz"、3と5の公倍数なら"FizzBuzz"、その他は入力値を返す。
公倍数は最小公倍数を整数倍した値なので、ある値が公倍数であるかどうか判断するには、最小公倍数で割ってみて、割り切れるかを調べることにする。
3と5の最小公倍数は15なので、15で試しに割ってみて、割り切れるかどうかを見る。
3と5の倍数の判定も、それぞれ、3と5で割り切れるかどうかを見る。
Perlは、上から順に命令を実行する命令型言語なので、3や5の倍数の判定の前に、15の倍数の判定を持ってくる。
逆にすると、15の倍数は3の倍数であり、5の倍数でもあるため、"FizzBuzz"が必要な所が"Fizz"や"Buzz"だけになってしまう。
use 5.024; use warnings; sub f { my ($x) = @_; if (($x % 15) == 0) { return "FizzBuzz"; } if (($x % 5) == 0) { return "Buzz"; } if (($x % 3) == 0) { return "Fizz"; } return $x; } foreach my $i (1..100) { say f($i); }