プログラミングのお題スレ Part9 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
bool f(int n){return n==0 || n == 45;} sed -r -e "s/^(0|45)\$/True/" -e "s/[1-8][0-9]*/False/" 計算で有理数かどうか確認?
それは非常に難しいな
by 東大数学科卒 >>480
そう思うなら他者を批判するより行動で示せばいいと思うよ tan1°が無理数であることの証明すら面倒くせえのに一体どんな回答を求めているんだ >>483
面倒くさい?
てことは出来るの?
やってみて >>484
確か京大の過去問にあったでしょう
説明めんどいからは解法は自分で調べて いや、おれは出来るよ
>>483の実力で出来るのか?と疑問に思っただけ
実力じゃなくてカンニングね 問題が悪いな
与えられた有理数rに対し、
tan(πr)が有理数かどうか判別するプログラムを書け
ならテーブルは使えない また、多倍長精度演算のないC++にはきつい問題を・・・。 >>488
すいません
結果を知っていたらこれでも簡単でした そもそも出題者はどういう回答を期待してるんだ?
数学の知識無しでは作れないし、数学の知識を使えば>>478になる tan()の加法定理
tan(α+β)=(tanα+tanβ)/(1-tanαtanβ)
により
もしtan(α)が有理数なら
tan(nα) (n = 1,2,3,4・・・)
も全て有理数
このため
整数nにより
tan(n)が無理数なら
nの約数全てによるtan()が無理数
ここで
tan(60)=√3
が無理数なのは簡単に証明されるため、
tan(1)
も無理数
証明終わり >>476を解くにはあとtan(18度)が無理数であることを証明しないと >>493
tan(π/4)は有理数だけど
tan(π/2)は有理数じゃない >>492
WolframAlphaが
is tan(pi * 1 / 180) a rational number?
→ not a rational number
と返す仕組みを知りたかった xが有理数、tan(πx)が有理数 ====> xは1/4の倍数
って覚えてるだけかと >>493
は加法定理で(1-tanαtanβ)が0になってはまずいので
0度以上90未満の範囲内に限定しないといけないな。
tan()の加法定理
tan(α+β)=(tanα+tanβ)/(1-tanαtanβ)
により
もしtan(α)が有理数で、かつ 0 <= nα < 90なら
tan(nα) (n = 1,2,3,4・・・)
も全て有理数
このため
整数 n ( 0 <= n < 90 ) により
tan(n)が無理数なら
nの約数全てによるtan()が無理数
ここで
tan(60)=√3
が無理数なのは簡単に証明されるため、
tan(1)
も無理数 tan(1)だけじゃなくて
>>477 >>478 も証明できるかな???
つまり整数 n ( 0 <= n < 90 ) において
tan(n)が有理数になるのはn=0,45に限ることの証明
tan(90-n) = 1/tan(n) なので
n ( 0 <= n < 45 ) の範囲で証明されればOK
またtan(45)が有理数で加法定理で減算し
tan(45-n):有理数 ⇔ tan(n):有理数 ( 0 <= n < 45 )
も成立 60の約数 はtan(n)無理数
1,2,3,4,5,6,10,12,15,20,30
これの45-n もtan(n)無理数
44,43,42,41,40,39,35,33,25,15
この約数で、まだ含まれていないもの
11,22,21,8,13,7
45-nにより
34,23,24,37,32,38
この約数で、まだ含まれていないもの
17,16,19
45-nにより
28,29,26
この約数で、まだ含まれていないもの
14
45-nにより
31
ここまでの数を並べると
01,02,03,04,05,06,07,08,**,10,
11,12,13,14,15,16,17,**,19,20,
21,22,23,24,25,26,**,28,29,30,
31,32,33,34,35,**,37,38,39,40,
41,42,43,44
9度の倍数の証明のみが残された tan(1 rad)が超越数であることは誰も証明できないの [1] 授業単元名:FizzBuzzクイズ
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)特に問わない
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)特に問わない
[3.3] 言語: (C/C++/どちらでも可 のいずれか)特に問わない
http://kohada.2ch.net/test/read.cgi/prog/1209467166/401
FizzBuzzクイズ
1.fizz.buzz #=> 1
3.fizz.buzz #=> "Fizz"
5.fizz.buzz #=> "Buzz"
15.fizz.buzz #=> "FizzBuzz"
999.fizz.buzz #=> 999
となるようなメソッドfizz、buzzは定義可能か?
可能である場合、同様にgizzを追加定義し、
7.fizz.buzz.gizz #=> "Gizz"
21.fizz.buzz.gizz #=> "FizzGizz"
35.fizz.buzz.gizz #=> "BuzzGizz"
105.fizz.buzz.gizz #=> "FizzBuzzGizz"
105.fizz.gizz.buzz #=> "FizzGizzBuzz" と拡張・応用ができるか?
メソッドのコールに()が必須の言語では 3.fizz().buzz() 形式でも構わない。
オープンクラス機構やメソッドのない言語では関数(buzz(fizz(3)) #=> "Fizz" など)で。 >>509
修正
×999.fizz.buzz #=> 999
○997.fizz.buzz #=> 997 外部出力を伴う関数(あるいはメソッド)なら簡単
たぶん関数(あるいはメソッド)の返値がそうなるようにって意味かと
(じゃないと普通に書けてクイズにならない)
たしか数理学的にはこういう関数は書けないことになっていたはず >>509 や >>516 みたいなのとは絶対に一緒に仕事をしたくない C言語だとトリッキーな技を使わないと出来ない
同じ関数名で複数関数を作れないから
2段や3段重ねて、intを受けて文字列を返すのは普通には無理
C++だと簡単
大きく分けて2つの方法がある
C++でも数値によって戻り値の型を変えるのは無理
数値がconstexprで良いなら出来るだろうけど >>513
>int l_ = 3
これ、なんとかならないか? >>520
関数インターフェース的にはその値を与えることが出来ない
別の関数か何かで変えるかインターフェースを変えるしか >>516
戻り値を文字列にする方法
方法1
段階によって引数と戻り値の型を変える
S1 fizz(int n);
S2 fizz(S1 s);
std::string fizz(S2 s);
※テンプレートを使うと楽
方法2
戻り値をstd::string固定にしてなんとかする
方法2-1
戻り値は常に結果の文字列にし、パラメーター以外で情報を渡す
方法2-2
文字列に情報をエンコードして入れる
最終型段だけ結果を返すようにする
方法3
戻り値を結果文字列そのままではなく、文字列情報を含む情報とする
(これは反則かな?) 方法2-1であれば >>520の問題は解決する
ただし、そのままだとスレッドセーフじゃなくて気持ち悪い >>509
#=>
これって ruby の記法だったかな?評価値を変えたいようだ 例えばRubyだと文字列を含め組み込み型にインスタンス変数を仕込めるので
たぶんそれで次のメソッドに情報を渡せる >>522 の方法2-1
C++版
https://ideone.com/ZavKGg
外部情報は「n」のみ
複数スレッドや割り込みハンドラからコールする時はこのnが問題になるんで
なんとかしてstd::stringに埋め込めれば良いんだけど
>>525
問題を変えちゃダメだよね
> [3.3] 言語: (C/C++/どちらでも可 のいずれか)特に問わない 8行目、なんとなく文字列から判別してみたけど、
素直にnと同じように外部にフラグを持てば条件が減る
(文字列の最後が数字にならないとか文字コードが連続してるとか) 「(C/C++/どちらでも可 のいずれか)特に問わない」って日本語がまず謎
有限個の具体例しか与えられていないので仕様も謎 出題者の選択枝が [C/C++/どちらでも可] の3個あって、出題者がその「いずれか」を選ぶ
というフォーマットを使った出題
出題者は回答者に対し『その3個のどれでも良いよ』という意味で「特に問わない」と
と私は解釈した
つまり、回答者の選択枝はCかC++のどちらかだと
出力する文字列のルールはリンク先を見れば大体わかる
gizzが7の倍数かどうかは実際には不明で、実は14で割ると7余る数かもしれないが...
リンク先に「プリントする」とあるので
printfなどで標準出力に出せば良いのかと思ったが、
>>516の解釈は違うらしい
数値の場合だけ""でくくってないので、
文字列の場合は""をくっつける必要があるのか、
型を変えろと言っているのかはよくわからん
いずれにしろ、CやC++では値によって戻り値の型を変えるのは不可能 >>529
>回答者の選択枝はCかC++のどちらかだと
いや、そうじゃなくて、本当に「特に問わない」、どういったらいいかな、このテンプレはC宿題スレのものを、そのまま頂戴しただけじゃない? >>531
君は出題者なのか?違うのか?
立場をはっきりと >>529
なるほど
.gizzは、与えられた数字に対してfizzbuzzが数字になるなら"Gizz"、
それ以外の場合は所定の位置(説明省くけど)に"Gizz"を挿入するものなのかと思ってたわ 確かに
7の倍数じゃなくて1の倍数でも良いよな
たまたま >>509 の例がすべて7の倍数になってただけで
この場合、上にあげた3個のコードいずれも
7 を 1 に変えてくださいな え゛
0点の出題だしー模範解答の質も推して知るべし、なんじゃないでしょうか……:−) >>526
↓この但し書きがあるってことは、問題作成者(≠出題者)としてはC/C++限定とは考えてはいないだろう
> メソッドのコールに()が必須の言語では 3.fizz().buzz() 形式でも構わない。
> オープンクラス機構やメソッドのない言語では関数(buzz(fizz(3)) #=> "Fizz" など)で。
そもそもここで出題する時点で [3] の縛りは意味をなさないよ と思って私は回答しましたが、
他の人が他の解釈で回答することまで否定はしません >>509
@Mathematica
https://ideone.com/oC0nu7
入力値(n)をリストにして次の関数に渡さないとダメポ ネタバレになるけど
このクイズはグローバル変数を使えばそれで済んでしまうシンプルな話なんだけど、それをあえて
- 各言語の機能を熟知・駆使して、面白くしたりひと工夫したりする(たとえばスレッドセーフとか)
- 前者のしくみと、7の倍数のgizzの拡張に必要な追加を最小限にすることを両立させる
というポイントが楽しみどころなんじゃないかな >>509
https://ideone.com/4p67HE
C++。題意は満たしてないけど、自分が書くとこんな感じだな。
末尾判定難しい。 関数の入出力の型が同一である必要がある
Cならintをchar*と解釈するわけにいかないから構造体だろう >>509 Squeak Smalltalk だけどなんとか >>547 っぽい方法で
| FizzBuzzQuiz |
FizzBuzzQuiz := Trait named: #FizzBuzzQuiz uses: #() category: 'FizzBuzz-Quiz'.
FizzBuzzQuiz compile: 'isDivisibleBy: m
^(Processor activeProcess environmentAt: #fbValue) isDivisibleBy: m'.
FizzBuzzQuiz compile: ', str Processor activeProcess environmentAt: #fbValue put: self. ^str'.
FizzBuzzQuiz compile: 'fizz ^(self isDivisibleBy: 3) ifTrue: [self, ''Fizz''] ifFalse: [self]'.
FizzBuzzQuiz compile: 'buzz ^(self isDivisibleBy: 5) ifTrue: [self, ''Buzz''] ifFalse: [self]'.
{Number. String} do: [:each | each uses: FizzBuzzQuiz].
1 fizz buzz. "=> 1 "
3 fizz buzz. "=> 'Fizz' "
5 fizz buzz. "=> 'Buzz' "
15 fizz buzz. "=> 'FizzBuzz' "
14 fizz buzz. "=> 14 "
FizzBuzzQuiz compile: 'gizz ^(self isDivisibleBy: 7) ifTrue: [self, ''Gizz''] ifFalse: [self]'.
7 fizz buzz gizz. "=> 'Gizz' "
21 fizz buzz gizz. "=> 'FizzGizz' "
35 fizz buzz gizz. "=> 'BuzzGizz' "
105 fizz buzz gizz. "=> 'FizzBuzzGizz' "
105 fizz gizz buzz. "=> 'FizzGizzBuzz' " >>552
×>>547 っぽい方法で → ○>>542 っぽい方法で >>509 c
https://ideone.com/oAsiG2
・構造体つこうた
・gizzの「追加定義」については簡易解釈 過去問を眺めていたが、もっとお気楽な問題が多かったようですね
肩慣らし問題を一つ
問題
循環小数を有理数に直せ。
循環節は括弧をつかって表現する。
例
0.[555] = 5/9
0.3[33] = 1/3
12.[345] = 4111/333
1.2[34] = 611/495 0.[555] = 0.[5] = 5/9
0.3[33] = 0.[3] = 3/9
12.[345] = 12+345/999
1.2[34] = 1.2+34/990 >>560
おお。そういう法則で行けるのか。
きっと数学では大昔に証明されてるんだろうけど知らなかった。(または忘れたのかなあ?) ああ。なんとなくわかった。10の桁数乗の値で割るとそっくりそのまま小数点以下になるが
1足りないから循環するのか。ああ、しかし、数学的にどう表現したらいいかわからない。w お題:顔文字(^o^)があります。この(^o^)を左右に動かしながら出力します。(^o^)は左から右へ一文字ずつ動き、端に到達した瞬間だけ(^o^)から(>_<)に変化し、また(^o^)に戻って左端へ行き、同じように繰り返します。
端から端までは最初80文字分の幅がありますが、(^o^)が端に達した回数だけ1文字ずつ狭くなっていき、最終的に(^o^)の端まで狭くなり、(^o^)が動けなくなります。(^o^)が動けなくなったらプログラムを終了してください。 >>564 Bash (builtins)
https://ideone.com/KFko4s
幅80文字だと出力が長くなりすぎて途中で切られるので50文字にしました。 ウインドウズでエスケープシーケンス扱うのにおまじないいるからメンドクセー。 >>564
改行せずにカーソルを先頭に戻すのは CR (13) の出力で良いのか?
それとも curses ライブラリを使うべきか? >>567
好きな方をどうぞ
curses使うのはいいですね
こちらからは見れませんが じゃ、とりあえず CR 出力版。Perl プログラム。
但し、待ち時間入れないと速すぎて見えないので適当に usleep を入れた。
テストした環境は Linux で端末は Windows の TeraTerm。
TERM=xterm の状態。
但し、プログラムを貼り付けたサイト(paiza.io)での出力はおかしくなる。
何故なら端末として動いてないから。
試したい場合はプログラムをコピーして自分の環境のエディタ等にペーストして保存後に実行して。
https://paiza.io/projects/rQDCQizcsrydlcrkxylR1w お題:A〜Z、1〜9で出来たランダムな文字列がある(文字列はプログラム開始時に自動的に決めてよい)
キーを2つ決めて(←→キーが自然かも)例えば→キーを押すと、文字列のうち2〜9があるか
どうかを調べ、あればそのうち一つをランダムに選び、数字を一つ減らし(9なら8へ)、左右ランダムに
1を置く
つまり2以上の数字文字があればそこがゴムのような役目をして文字列が伸びる
全部の数字文字が1になったら何もしない
逆に例えば←キーを押すと、文字列のうち1〜8があるかどうかを調べ、そのうちランダムに一つを
選び、その左右どちらかに数字文字がないかを調べ、足した合計が9を超えないようなら足し合わせて
数字文字をその合計値にし、文字列を1つ縮める
足し合わせた合計が9を超えるようなら他の数字文字もランダムに同様に一つ選び、足し合わせて
9を超えない数字文字の部分が見つかったらそれを一つだけ足し合わせて縮める
全部の数字文字が9になるか、9に満たないが足し合わせると9を超えるようになったら何もしない >>571
https://ideone.com/pjZbOc
C++。デバッグ難しくてやる気がしないのでバグってるかも。
カーソルキー取るの面倒だからASキーにしておいた。
こんな感じでいいのか?
何のシミュレータかしらんけどめんどくせーな。 あ、それと、文字列で計算するのめんどくさかったから、数字でやった。
そっち事情なんか知ったこっちゃない。 %%%%1000%%%%
000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221%
001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7%
002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA,
003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end いろんなところでたまに見かけるけど、>>547 ってPGなの? ■ このスレッドは過去ログ倉庫に格納されています