もう1つの「やっぱわかんないか~w」

ねとらぼ該当記事
40-32÷2=?
小学生「4!」
理系「よくわかってんじゃん」
文系「やっぱわかんないか~w」


このスーパー小学生は4ではなく、fact(4)を言った、というオチですね。
沸点の低いネットユーザーはこの程度の話題でも殴りあうらしいです。恐ろしい。


この記事が話題に上がった当時「ひょっとして、他にも作れるんじゃない?」と感じたのです。
(いつだったかは覚えてないけれど、2012年では無かった)

冷め切った今、もう1つ考えて見ますか。


次の条件を満たす数式を求める。
数式には括弧が無い。
数式を計算すると、%$x!$%になる(とする)。
乗除優先を無視し、左から順に計算すると%$x$%になる。
スーパー小学生なので、あらゆる演算子を理解できる。


流石に考える気が起きないので、ruby君に頑張ってもらいます。


まず、左から順に計算するeval「leval」を作る。

以降のプログラムは、例外入力は無いものとします。
def leval(eq)
return eval(eq) if eq=~/^\d+\W+\d+$/
l,r=eq.scan(/^(\d+\W+\d+)(.+)$/)[0]
return leval(eval(l).to_s+r)
end

eq=gets.chomp
p [eval(eq),leval(eq)]


例えば、標準入力に「40-32/2」を与えると、[24, 4]と返ってきます。
スーパー小学生なので「12+2**3」も「1&7+19」も理解できます。


数個見つかれば満足した気分になれるので、総当りでやることにします。

(自然数)(記号)(自然数)(記号)(自然数)に片っ端から当てはめていく。

自然数の上限を%$N$%、記号の種類を%$M$%とすると、%$N^3 \times M \times (M-1)$%です。

%$N=50,M=6$%で%$3750000$%。あっ

とりあえず答え5個出した。

def leval(eq)
begin
return eval(eq) if eq=~/^-??\d+\W+\d+$/
l,r=eq.scan(/^(\d+\W+\d+)(.+)$/)[0]
return leval(eval(l).to_s+r)
rescue
p [$!,eq];exit
end
end

fact=[nil,nil,nil,6,24,120,720,5040,40320,362880]

pval=(2..50).to_a.map!(&:to_s)
psgn=["+","-","*","/","%","**"]

count=0
pval.repeated_permutation(3){|aval|
psgn.permutation(2){|asgn|
e=sprintf("%s%s%s%s%s",aval[0],asgn[0],aval[1],asgn[1],aval[2])
a=eval(e)
next if !fact.include?(a)
f=leval(e)
if 0<f && fact[f]==a
puts e
count+=1
exit if count>=5
end
}
}


結果。

3+12/4
3+15/5
3+16/5
3+18/6
3+19/6

割り算切り捨ててますね。これはアカン。


というわけで、浮動小数点使って計算させた結果。

4.0+8.0/4.0
5.0+19.0%20.0
5.0+39.0%20.0
6.0+18.0%20.0
6.0+38.0%20.0

$$5+39 \% 20 = 24 = 4!$$
$$(5+39) \% 20 = 4$$
なるほど。
剰余ばっかり出てもらっても困るので、符号を+-*/の4つに抑える。

4.0+8.0/4.0
22.0+22.0/11.0
25.0-5.0/5.0
30.0-18.0/3.0
40.0-32.0/2.0

1から50の範囲ではこの5つですねー。
30-18÷3=?
小学生「4!」
理系「よくわかってんじゃん」
文系「やっぱわかんないか~w」

はい。



ブルートフォースなのでとても非効率でしたが、他の数式が見つかったので、少しだけ満足です。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1467位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
265位
アクセスランキングを見る>>