投稿

N88-BASICでカード

イメージ
2024/5/26(日) N88-BASICでカード   ■ 問題 1,2,3のいずれかが書かれたカード24枚をよく切って2枚取出す 取出したカードの和が3になる確率は20/69 取出したカードの積が6になる確率は5/23である 1と書かれたカードは何枚であったか [`03日本獣畜大(改)]   ■ 解法 https://ulprojectmail.blogspot.com/2024/05/card.html カード   ■ 解説 1,2,3の枚数をそれぞれx,y,z枚とする   和が3になるのは(1,2)又は(2,1)なので確率は (x/24)(y/23) + (y/24)(x/23) = xy/(24・23/2) = 20/69 より xy = (24・23/2)(20/69) > 0 (x > 0, y > 0)   積が6になるのは(2,3)又は(3,2)なので確率は (y/24)(z/23) + (z/24)(y/23) = yz/(24・23/2) = 5/23 より yz = (24・23/2)(5/23) > 0 (y > 0, z > 0)   よって 1 ≦ x ≦ 24 - 1 - 1 1 ≦ y ≦ 24 - x - 1 1 ≦ z ≦ 24 - x - y の範囲で n = 24, a/b = 20/69, c/d = 5/23と置いて xy = {n(n-1)/2}(a/b) yz = {n(n-1)/2}(c/d) を満たすx,y,zを探せば良い   VL,NL,XL-BASICとdlg~.zip(card001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

PAINTについて

2024/5/23(木)   N88-BASICのPAINTについて   ■ 概要 N88-BASICのPAINTはペイントの先端が 上下両方に広がります また塗る色は境界色に含まれない為 塗った後は境界を検索できなくなります (境界線色を含むタイルパターンを境界線と判断 してはいけない為)   これらの事を実現するため VL,NL,XL-BASICでは 塗った後の境界はストリーム(スタック)に格納した値を 検索しています   実機はもっと良い方法で実装しているかも知れませんが 分からないのでここでは触れません   ■ 説明 ストリーム(スタック) push:ストリーム(スタック)にデータを格納する pop :ストリーム(スタック)からデータを取り出す ストリームは一番初めに格納したデータを取り出す スタックは一番後に格納したデータを取り出す VL,NL,XL-BASICではストリームを使用しています   1. x0,x1(左右境界),y(ライン),d(上下方向)をpush 2. popする、pop出来なければ終了 3. popした境界のd方向に検索し新たな境界を得る 4. 新たな境界とストリーム中の境界を比較チェック 5. 対消滅処理と新たな境界をpushする 6. 2.に戻る   一応以上で実装し今の所正しく動いています (実装は結構複雑です)   ■ あとがき アセンブラはPUSH/POP(PULL)などスタックを実現する 命令はありますがストリームには対応していなかったと 思いますので N88-BASICが、あえてストリーム方式を採用した理由は 分かりませんが 見た目が良いので良かったと思います (ペイントの最前線が同時に動く塗り方が好きなので)   また、ペイント色が境界線にならない仕様も実装が大変で 速度も落ちると思うのですが、それで良かったと思います   N88-BASICは速度より仕様を優先して正解だったと思います   あえて言うなら この仕様のまま境界色を複数指定できれば良かったと 思います (VL-BASICでは境界色を複数指定できるようにしました)  

N88-BASICでFizzBuzz

イメージ
2024/5/20(月)   N88-BASICでFizzBuzz   ■ 有名な問題 i = 1,2,3, … ,100が 3の倍数ならFizz 5の倍数ならBuzz 3と5の倍数ならFizzBuzz と表示する   ■ VL-BASIC用(fizz001v.bas) 150 FOR I=1 TO 100 160   IF I MOD 15 = 0 THEN 170     PRINT       "FizzBuzz"; 180   ELSE IF I MOD 3 = 0 THEN 190     PRINT       "Fizz    "; 200   ELSE IF I MOD 5 = 0 THEN 210     PRINT       "Buzz    "; 220   ELSE 230     PRINT USING "###     "; I; 240   ENDIF 250 NEXT   ■ N88-BASIC(NL-BASIC,XL-BASIC)用(fizz001.bas) 150 FOR I=1 TO 100 160   IF I MOD 15 = 0 THEN         ELSE *ELSE1 170     PRINT       "FizzBuzz";   :GOTO *ENDIF 180   *ELSE1:IF I MOD 3 = 0 THEN   ELSE *ELSE2 190     PRINT       "Fizz    ";   :GOTO *ENDIF 200   *ELSE2:IF I MOD 5 = 0 THEN   ELSE *ELSE3 210     PRINT       "Buzz    ";   :GOTO *ENDIF 220   *ELSE3 230     PRINT USING "###     "; I; 240   *ENDIF 250 NEXT   ■ あとがき N88-BASICには ブロックIF分(IF / ELSE IF / ELSE / ENDIF) がないのが不便で、あるとき思いついたのが このような書き方です   VL,

カード

2024/5/17(金) カード   ■ 問題 1,2,3のいずれかが書かれたカード24枚をよく切って2枚取出す 取出したカードの和が3になる確率は20/69 取出したカードの積が6になる確率は5/23である 1と書かれたカードは何枚であったか [`03日本獣畜大(改)]   ■ 解答1 1,2,3の枚数をそれぞれx,y,z枚とする 24枚中2枚取出す組合せは 2 4 C 2  = 24!/{(24-2)!2!} = 24・23/2! = 12・23   和が3になるのは1と2なのでその組合せは xy通りあるので確率は xy/(12・23) = 20/69 となり xy = 20・12・23/69 = 240/3 = 80 > 0 よって x > 0, y > 0なので x = 80/y   積が6になるのは2と3なのでその組合せは yz通りあるので確率は yz/(12・23) = 5/23 となり yz = 5・12・23/23 = 60 > 0 よって y > 0, z > 0なので z = 60/y   x+y+z = 80/y + y + 60/y = 24 80 + y 2  + 60 = 24y y 2  - 24y + 140 = 0 (y - 10)(y - 14) = 0 y = 10, 14   y = 10のとき x = 80/y = 80/10 = 8 z = 60/y = 60/10 = 6   y = 14のとき x = 80/y = 80/14 = 40/7 z = 60/y = 60/14 = 30/7 x, zが整数ではないので不適   よって x = 8, y = 10, z = 6 答. 1は8枚   ■ 解答2(別解) 1,2,3の枚数をそれぞれx,y,z枚とする   和が3になるのは(1,2)又は(2,1)なので確率は (x/24)(y/23) + (y/24)(x/23) = xy/(12・23) = 20/69 より xy = 20・12・23/69 = 4・5・4 = 2 4 ・5   積が6になるのは(2,3)又は(3,2)なので確率は (y/24)(z/23) + (z/24)(y/23) = yz/(12・23) = 5/23 より yz = 5・12・23/23 = 5・3・

メモ (8回目)

2024/5/14(火) メモ (8回目)   思うこと   理系は嘘のような本当が好きな人が多い 文系は本当のような嘘が好きな人が多い   理論的に正しいとか正しくないとか関係なく 事実を大事にするのが理系 本当らしさを大事にするのが文系   事実の追究と想像 の追究の違いで どちらも大事です     (注) 事実:誰から見ても変わらないただ1つの現実   真実:人によって見方が異なる現実 らしいのでここでは事実という言葉を使いました (個人的に真実と事実は逆のイメージでしたが)   真理:理論的に正しい事 (事実現実とは限らない、形而上学、机上の空論を含む)

メモ (7回目)

2024/5/11(土) メモ (7回目)   ■ 科学 (science ) 事実の追究(たった1つの現実)   ■ 哲学 ( philosophy ) 思考の追究 (人の数だけ考えがある)   トロッコ問題 暴走列車が走る線路の先にポイント( 転てつ器 )があり そのままだと5人、ポイントを切替えると1人が引かれます そのまま見ていて5人を犠牲にし1人を救う ポイントを切替えて1人を犠牲にし5人を救う どちらが正義か?   より多くを助けるのは正義か問題 5人のそれぞれ違う臓器移植待ちの患者がいます そこにやってきた健康な若者の臓器をそれぞれ5人に 移植し1人を犠牲にし5人を救った これは正義か?   カンニング問題 友人がカンニングするところを目撃した 報告するか、かばうか、どちらが正義か?   これらの問題に答えはなく考え議論する事が目的です 一方の考えを信仰すると宗教です   答えがないなら思考や議論は無意味と考える事を 思考停止といいます   表現を追究することを芸術という 論理を 追究すること を数学という   ■ おまけ 事実:誰から見ても変わらないただ1つの現実 真実:人によって見方が異なる現実 (事実と真実が逆に使われることがよくある) 真理:理論的に正しい事 (事実現実とは限らない、形而上学、机上の空論を含む)  

オイラー

2024/5/8(水)   オイラー   問題 |e iπ | = |i eπ | = |π ie | = 1 を示す   ■ 前提 ▼ オイラーの公式(Euler's formula) https://ulprojectmail.blogspot.com/2023/10/4.html 三角関数 (4回目) より   e iθ  = cosθ + isinθ   ▼ オイラーの等式(Euler's identity) e iθ  = cosθ + isinθ より e iπ  = cosπ + isinπ = -1 e iπ  + 1 = 0   ▼ 記号 Z :整数 の集合 C :複素数の集合   ▼ 複素数の大きさと偏角 z = a + bi (z ∈ C ) z ( _ )  = a - bi (zの共役:虚部の符号を逆にしたもの) 大きさ |z| = √(z z ( _ ) ) = √{(a + bi)(a - bi)} = √(a 2  + b 2 ) 偏角 arg z = tan -1 (b/a)   より e iθ  = cosθ + isinθ 大きさ |e iθ | = |cosθ + isinθ| = √(cos 2 θ + sin 2 θ) = 1 |e iθ | = 1 偏角 arg z = tan -1 (sinθ/cosθ) = tan -1 (tanθ) = θ arg z = θ     ■ 解答 ▼ |e iπ |を求める 偏角 θ = π と置くと 大きさ |e iπ | = |e iθ | = 1   ▼ |i eπ |を求める x = π/2 + 2kπ = π(2k + 1/2) (k ∈ Z) と置くと e ix  = cosx + isinx = 0 + i = i i = e ix  = exp(ix) i eπ  = exp(ix) eπ  = exp(ixeπ) = exp{iπ(2k + 1/2)eπ} = exp{ieπ 2 (2k + 1/2)}   偏角 θ = eπ 2 (2k + 1/2) と置くと i eπ  = exp{ieπ 2 (2k + 1/2)} = e iθ   大きさ |i eπ | = |e iθ | = 1   ▼ |π ie |を求める log e π = lnπ