電卓に期待していなかったこと。 BCのソリティア

bashによる無邪気なエンターテイメントは、もはや特別なものではないように思えます。 実験の次の目標として、私はGNU bcを選択しました。コンソール計算機と1つのボックス内のスクリプト数学プログラミング言語です。 この記事は、bcにあまり精通していないすべてのLinuxoidおよびUnixoidに役立つでしょう。







ですから、bcプログラミングの簡単な紹介、純粋なbc と詩に関するkawaiiとnekiのソリティアです。



bcを初めて知ったときのことは覚えていませんが、長年、それだけを電卓として使用しています。 ほとんどのLinuxディストリビューションでデフォルトで使用できるシンプルで便利なコンソール計算機は、その便利さに魅了されます。



九九(白帯)



明らかなbcコマンドで計算機を実行できます。 その後、計算式を入力できます。 Enterキーを押すと、すぐに結果が生成されます。



c carrot@ubuntu:~$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. >2*2 4 >3*(6+1) 21 >5||(1&&0) 1 >5/2 2
      
      







式では、括弧、加算、減算、除算、乗算の記号、および&&(論理「and」)、||を使用できます。 (論理的な「または」)および! (論理的な「not」)。

シックスキュ(グリーンベルト)



変数は、bc計算機で使用でき、使用する必要があります。 変数を定義するには、名前を書き、等号を付けてから変数の値を書く必要があります。 すべてはどこにでもあります。

 >raw=3116 >raw+1 3117
      
      







最も注意深い人は、計算機がすべての数値を整数に丸めることを見つけました。 これは、計算の精度を決定する特別な変数スケールがデフォルトでゼロに等しいためです。 10文字の精度で結果を取得する場合は、変数に数値10を割り当てます。

 >5/2 2 >scale=10 >5/2 2.5000000000 >7/191 .0366492146
      
      







bcにはさらに3つの特別な変数があります。 Lastは、計算の最後の結果を保存します。obaseとibaseは、さまざまな数値システムでの作業に使用されます。

 >1 1 >last+10 11 >obase=16 >last B >255+1 100 >ibase=16 >FE+1 FF
      
      







フィフスキュ(ブルーベルト)



標準ライブラリを操作し、サードパーティの機能を接続する方法を学習します。 標準のbc言語ライブラリを使用するには、-lオプションを指定して実行する必要があります。

 carrot@ubuntu:~$ bc -l bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. >s(3) .14112000805986722210
      
      





次の関数は、標準ライブラリで定義されています。





サードパーティのライブラリを使用するには、たとえば、サイトphodd.net/gnu-bcおよびhttp://marcmmw.freeshell.org/esp/programacion/bc.htmlからそれらをダウンロードする必要があります。 配列、積分、微分、ロジック、乱数ジェネレーターなどを操作する手順があります。 私のお気に入りのライブラリは、ppm画像を扱うためのものです。 bashでは、少なくともbmp、少なくともjpegを生成することができますが、ここではすべてがより深刻です。 もちろんEGGOGologyではありませんが、それでもです。

次のように、サードパーティのライブラリでbcを実行します。



 carrot@ubuntu:~$ bc rand.bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. >rand(96) 21
      
      









マンデルブロフラクタルはbcで計算され、ppmで保存されます。



第4級(青帯)



bc構文はC構文に非常に似ています。 したがって、if、for、while、break、continue、returnコマンドを使用して、どこにでも中括弧を安全に配置できます。 コマンドの後にのみ、セミコロンを入力する必要はありません。printコマンドを使用して画面に表示し、読み取って入力します。 defineコマンドで関数を定義します。 参照:

 >define func () { >for (i=0;i<10;i++) { >a=a+i >print a, «\n» >} >return 1} >t=func () 0 1 3 6 10 15 21 28 36 45 >print t 1
      
      





サードキュ(茶色の帯)



bcでは、残念ながら、ファイルI / Oで作業することはできません。 読み取りによるすべての入力、印刷によるすべての出力。 bcでは、文字列変数を使用することはできません。 ただし、ちょっと待ってください! 36桁の10進数システムを使用するか、文字列のように数値の配列を操作できます。



さらに、bcでは、printコマンドはエスケープシーケンスの完全なセットをサポートしていません。

 The special characters recognized by bc are "a" (alert or bell), "b" (backspace), "f" (form feed), "n" (newline), "r" (carriage return), "q" (double quote), "t" (tab), and "\e" (backslash). Any other character following the backslash will be ignored.
      
      







この悲しい制限を知ったとき、私はピンクのオブロミンゴの鳥を待っていると思った。深刻なおもちゃには正確なカーソルの位置が必要であり、異なる色を使用することが望ましいからです。 ただし、16進エディタを手に取り、次のように制限を回避しました。印刷コマンドの引数としてコード1Bh(エスケープ)を使用して文字を挿入し、エスケープシーケンスのすべての喜びを使用しました。



ああ、はい、呼び出された関数が画面上に散らからないようにするため、前の例で行ったように、戻り値を変数に割り当てる必要があります。



そして最後に、最も退屈な事実:bcでは、キーストロークをキャッチする方法は1つしかありません-readです。 また、インタラクティブなゲームには絶対に適していません。 私のコンピューターでは、bcで起動されたraccastingアルゴリズムはbashの同じアルゴリズムよりも10倍速く動作し、1秒あたり約30〜40フレームを生成するため、残念です。



セカンドキュウ



これで、bcで簡単なソリティアを作成できます。 トルコショールソリティアを選びました。 ソースコードアーカイブをダウンロードして展開し、次のように実行します。

 bc rand.bc printcard.bc
      
      





開始後、シードを入力する必要があります-乱数ジェネレーターの初期値。 その後、シャッフルされたカードのデッキが10列にレイアウトされます。 列番号を入力します。最後の列カードに同じ写真がある場合(たとえば、2つのクラブと2つのタンバリン)、それらは削除されます。 すべてのカードが配られると、プログラムは勝利を祝福し、bcを完了します。 スカーフのほぐしを停止する必要があると判断した場合は、Ctrl + Cを2回押してからEnterキーを押します。



ファーストダン(黒帯)



そして、彼に関する情報はありません。 なんで? 私はまだマスターのように感じていないので...



PSすべてのファイルを常に最初にダウンロードしてから記事を読む人のために、特にソリティアへのリンク: narod.ru/disk/31656937001/platok.tar.html



All Articles