星田オステオパシー

プログラミング学習日記 2024/02/23〜

2024/03/03まで Dive into Pythonを読む
 とりあえずザッと読み通してみようということで最後まで読んでみました・・すいません嘘つきました
 このあたりはほとんどぶっ飛ばしました。実感が湧かないので(^_^;)
 XMLは興味あったのでちょっとはちゃんと読みましたが

 ここらへんまでは結構マジメに読みました。ローマ数字とアラビア数字の相互変換とか説明を聞いただけでウゲぇ・・となるんですけど、すかさず細かく分割した解説が入るのでなんとか・・。ユニットテストは非常に興味深いお話でしたね。なぜならいつもいきあたりばったりでコードを書き始めるから!まずはデータを作ってからって言うテスト駆動開発の話はプログラミングの基礎にもあったし、次からは意識するようにしよう。


 話は変わるんだけどPaizaで困るのが入力に関する部分。プログラム内で(read-line)などインタラクティブな?入力をするコードが動かない問題ってやつ。
 次に挑戦する予定のBrainfuckでも必要なのでリートン教授に聞いてみる。
 えっ!?標準入力のボックスにあらかじめ入力しておいてから実行するだと・・?

 こういうことか?


 ほんまや!そしてそんな馬鹿な!
 こんなん、その場その場で入力を求めるようなコードに使えへんがな


 というわけでIdolを入れてみた。最初は左の対話形式が出るのでFileから新規ファイルを選ぶとエディタが開いてコードが書けるようになる、と。
 Runすると元の対話形式フレームで結果が出たり、その都度求められる値を入力できたりする。エエやん!


 ついでなので見た目がオシャレなVisual Studio Codeも試してみる。拡張機能でPythonを入れてフォルダを決めて・・あれ?プロンプトモードみたいなのが無い?コードを書いて実行は出来る。実行した後、下のターミナル窓にて都度入力が出来るので大丈夫だけど・・

 うーん、Idolは白バックが嫌なんだよなぁ。使い勝手はエエけどなぁ〜

 というわけで、ちゃんと手を動かしつつのDive into Python2周目。並行してBrainfuckに対応してる部分が出たら、その都度書いていこうと思います。
 
追記 ダークモードありました!


2024/02/29 
話題その1 Dive into Pythonの続き「正規表現」
 昨日「正規表現やらないとな〜」と言ってたら、Dive into Pythonの次の単元が正規表現だった!ということで心置きなく読んでいく


 ま、とりあえず実際に必要にかられて使うまではモノにはならんけど、ザックリとどういうことが出来るかだけでも見ていくか・・


 うお〜何だこれは! コンパクトだけど難読な正規表現の可読性を上げる、学習者には最適な書式の工夫、素晴らしい・・あ、でも今なら正規表現部分をGpt4に読ませたらコメント部分を書いてくれそうだなぁ・・Gptはコードの解説はそこそこ信用出来るんで。


 実はこの時点ですでに第五章の正規表現は終わってて、第六章の「クロージャとジェネレータ」に入ってるんですが・・なんでしつこく正規表現やってんの?と思ったら!正規表現で英単語を複数形にするって取り組みなんですけど、ここでこうつなぐか!って感じ。
 このクロージャをペア(タプル)で入れといてForで多値返しからのIfで述語チェック、締めでApply・・・これは・・覚えておこう。

話題その2 Quoraで河合さんがコメント
 河合さんでも・・ちょっと安心した


話題その3 Brainfuckを振り返って
 個人的にBrainfuckに取り組んでる中で「ハッ!」としたのはこの部分でして・・今まで大きなコードの中では意識せずに同様の処理を「漠然と」してたと思うんですけど、内部の値を外のループから監視して処理を行う・・なんか「あ、コレか!」という感触がありました。



2024/02/28 Brainfuck、一応完成編
 [ ]部分を書く。[ で別Loopを作るようにして、その中でのコマンドをAccに貯めておいて ] で一気に適用するってのでどうだろう?あ、Reverseするの忘れてますが。


 一応、動くのだが・・。仕様を見ると、こういう事じゃないって感じ。えーと、起点となるアドレスの数値を予め増やしておいて、[]ループ内でその数値を減らす処理を書くことでプログラム内プログラム?みたいな事をさせるっぽい・・のでボツ

 というわけで再帰を使って書き直す。うーん、起点となるアドレスをPointで記憶しておいて、外側のLoopCで終了判定、内側のLoopBで貯まってるコマンド適用、その中に起点アドレスの数値を-するのが必要という仕組みだけど・・仕様的にこれで良いんだよな?


 デケた!これで終わりでも良いんだけど、+++パターンも[]内で実行できるようにしないと駄目だろうな・・ってので挑戦する事に


 +++などの複数文字列の判定、正規表現が使えるんじゃないか?ということで書き方をWRTNに尋ねる。


 ところがコレが動かない。上の場合-のも+のままにしてしまってるけど、それを除いてもちゃんと判定されてないようなのだ


 しょうがないので普通にAndで条件をつけてMake-listでクロージャのリストを作ってAccにAppendするって事にする


 こ、今度こそデケた!


 ちなみに正規表現版はこんな感じで・・要するにMatchしてねぇなコレって感じ。


 実は書き方こうなんじゃないか?と試したがコレも駄目。せっかくなので明日は正規表現で出来るように調べてみるか〜

 とにかく(一応)出来たんじゃないだろうか!?感想といたしましては・・いや〜楽しかったです。将来AIが勝手にプログラミングしてくれるようになるんだろうけど、正直下手なゲームよりもコードを考えてる方がよっぽど面白いので多分ずっと続けるだろうな〜と。
 パズルゲーム(テトリスでさえも)が大嫌いなのにプログラミングは面白いってのが興味深いッス



2024/02/27 Brainfuckの続き
 前回は安易な書き方で普通の条件分岐しかしなかったが、[ ]を使ってループ処理をするのにパーツ化出来ないといけないかな、と。

 +とかのシンボルにLambdaを突っ込んでみれば?と思うが

 , .がシンボルじゃないと判明。’つけても.は更に特別らしい。例のマクロ表記のせいやな?


 シンボルにする方法を調べて

 普通の+として使えなくなるというオチw


 考えてみたら入力は文字列なのでシンボルは適当で良いと気づいて@をつけることにした。パイプ使ってまでやることもなかったけど、まあ統一感ってことで。

 通常の動きは出来るようになった(多分)


 問題の[ ]の部分。こういう感じでどうだろうか?]で閉めた段階でそれまでAccに溜まっていたコマンドを順次実行していくという感じで・・書いてみる。まあ、下書きって感じで


 次に気分を変えて++++問題を考えてみる。入力のコマンドが1文字でなかった場合には+++とか----だと決めつけて個数をチェックして@+などをFoldすれば良かろう?と


 だがうまく行かぬ。いくら++++を重ねても一度に1しか増えない


 怪しいのはここなので考えると・・うーん、この中でBrain-evalまで戻してるからか。もっと小分けにする必要があった


 こっち側で渡すようにする、と


 Foldが効くようになった!そう言えば、これなら<<<<<とかも出来るじゃないか。やったぜ!


 で、問題はやっぱりこのループ部分。明日はここがちゃんと動くように挑戦しよう。これが出来たら一応出来上がり・・かな?入力ミスの補足とかは無視してますが(^_^;)
 一応出来上がったらCametanさんの過去記事で答え合わせの予定、楽しみナリ


2024/02/26 BrainfuckとProlog
 Cametanさんの盛りだくさん記事を拝見してファイトが湧いてくる。

 どうもPrologとやらが気になったのでちょっと見てみる

 ???

 ???

 異質すぎるw リンク先の入門ページを見るのが楽しみナリ


 さて、Brainfuck。Cametanさんの記事を読んだら力試しにならないので仕様だけ見て独力で挑戦してみる(当時記事を読んだがいい感じに忘れている)

 仕様を見ると・・コマンドを入れてWORLDを変化させるだけって感じ?
 数値のリストが物理メモリをエミュレートしてる感じか?


 多分だけどListを使うよりもVectorを使うべきかと。ポインタ変数はVectorのケツにくっつけるようにしたら管理が楽な気がする。ListでLastに当たるものは・・と調べたらありそうで無いVector-last。とりあえず作る。


 ふーん・・聞いてる限りREPLで楽勝な気がするが?


 ひょっとしてAsciiの制御文字を出力することでプログラムを動かすのか?とも思ったので確認。本当に表示するだけなのか・・それでプログラム言語になるんか?



 とりあえずメモリの大きさを最初に設定するようにして、ケツにポインタの数値を設定して・・入力をシンボルに変換してCaseで場合分けするか。


 シンボルに変えると逆に面倒なので文字列でそのままやっちまうか・・と変更。その後は順番にコマンドを追加していって・・一応狙い通りの動きになってるかな?フォントの関係で表示できない文字があるが。
 ん?つぎの [  ] の動きが分からない。


 WRTNに実際の入力例を教えてもらう。ん~・・


 何ーッ!?]が打たれた時点で[から打ってたコマンドをポインタの数値がデクリメントで0になるまでループするってこと?それを最初に言ってよw 
 インクリメントやデクリメントを連続で入力して一気に増減出来るとかも仕様に無かったぞ!

 というわけで書き直します。や~おかしいと思ったんだ、簡単すぎて。次回、自力チャレンジ続きます





2024/02/25 Dive into Pythonを読み進めていく
 言われてみれば変更不可なんだからAppendとかは無いはずだ、たしかに!そしてスライスは新しく作るのでOK、と。むちゃ解りやすいな!

 これイイっすねぇ!


 セットって何に使えるの?と思ったのでWrtn君(中身はGPT4-Turbo)に聞いてみる。ほーん・・まあ実際何かを作るときに思い出せるようにしておこう。

 で、現在テキストデータのところ読んでます。Unicodeに至る道、先人の大変な苦労があったんですね。


2024/02/24
話題その1 Dive into Python3 日本語版
 ネットから消えたDive into Python 3ですが、キンドル版の値段を見たら99円だった。これなら買っても良いじゃないかw
 こちらKindleのサンプルをスマホのKindleアプリで表示したもの



 そしてこちらDive into Python を日本語訳してブログで公開してくださってる方のページをスマホのBrave-Browserで表示したもの・・・こっちの方が良くない?PCにも同じページを表示すればコードもすぐにコピペ出来るし。まえがきなどは書籍にしか無いけどパッと見たところ内容は同じと思われました。あと、ブログ版の方が日本語が自然。

 というわけで99円が惜しいわけじゃない!けど、ブログ版でやらせてもらいます。ありがたいありがたい


話題その2 Dive into Python 3をやってく
 リストのスライスも完全に忘れてるのでちゃんと読む。これ、ほ〜・・って感じ


 これ、クラスの説明を聞いた後だとスンナリ理解できますわ〜



 破壊的!便利そうですけどね


 真偽値に関しては言語ごとにちゃんとまとめておかないとな〜と。
 うーん、早く一通り終えてまたゲームのコードを書きたいぜ!


2024/02/23 プログラミング関係の文書を読む

Why Python?
 設計は分かりませんけど「全く存在しないドキュメント」ってのが面白かった


プログラミングを独習するには10年かかる
 ほ〜ん・・クラス抽象、関数抽象、構文抽象。とりあえずC++やれば網羅出来るか?いつかはやらないといけないな。


ハッカー界小史
 こういうの見ると嬉しい


伽藍とバザール
 これ!

Undergraduation
 僕にとってはコンピューターサイエンスが十分難しいですけどね(^o^)!
 まあでもひょっとしたら究極の楽しみは計算機を使って純粋数学って奴を楽しむ事なのかも知れませんね?ゲームとかいくらでも溢れてる世界だしなぁ。後は投資の聖杯探しか・・存在すればだけど


 つまり楽しい事を見つけるのが上手い人がプログラミングも上手になるって事かな?後は世界を救うとか誇大妄想癖のある人もそうかも


Great Hackers
 ゴミを拾って来て動いて喜ぶってのが親近感あったので

 究極のところ「世界の仕組みがどうなってんのか?」ってのには興味あるな。
 とするとコンピュータももっと根本のメモリとか機械語とかの仕組みを知っておいた方が良いのやろか・・って考えを持つのは邪道かな。


 「コードの1行を見たときにその行だけでなくプログラム全体を頭に入れる大量のコンテキストをロードできるのかも知れない」の部分は興味深いですね。うーん、ゼロポイントフィールド!前になんとかって言う日本人のスーパープログラマーが「考えずにただ無心でキーボードと向かい合う」事で勝手にプログラミング出来るみたいな話をされてたけど、ひょっとすると冗談ではなくてそういう人もいるのかも知れないのか・・まあ、僕には縁が無い話なので普通に学習しますけど


The Loginataka
 なんか普通に意味わからないけど読んでて面白かった。
 


 ガタガタ言っとらんとコーディングせい!と。ハハーッ(平伏)
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事