awk

awkでライフゲーム(リアルタイム処理)

awk

以前のブログの記事で、ライフゲームのアルゴリズムを紹介しました。 utthi-fumi.hatenablog.com utthi-fumi.hatenablog.com 今回はawkでライフゲームをリアルタイムで動くプログラムを作りたいと思います。 BEGIN{ # [2]定数を定義 FIELD_WIDTH = 12; # [2-…

awkでRPGゲーム

awk

ゲームでプログラミングとなると、大抵はjavascriptで作ることが多いと思います。 キーボード操作やマウス操作が絡んできますからね。 awkでも、リアルタイムでキーボード操作ができれば、ゲームを作ることができます。 キーボード操作そのものはシェルスク…

アルゴリズム入門(フィボナッチ数列)

awk

フィボナッチ数列とは「直前の2つの項を足し合わせてできる数列のことで 【1,1,2,3,5,8,13,21・・・】 と無限に続きます。(1+1=2、1+2=3,2+3=5,3+5=8,・・・) このフィボナッチ数列をプラグラムで求めてみましょ…

アルゴリズム入門(素数)

awk

素数は、1とその数以外に約数を持たない数のことです。 ある数が素数かどうかを判定するには、約数の個数を調べます。 約数は、その数以下の自然数で割って、割り切れるか調べると求められます。 「10」の約数を見つけるには、1から順に10まで割ってみればい…

アルゴリズム入門(基数変換)

awk

私達人間は0〜9の10個の数字を使った10進数を使うことが一般的です。 それに対し、コンピュータは2進数で動いています。 2進数は0と1の2つの数字だけを使った表現する方法です。 つまり、0,1,10,11,100,101,110,111,1000,・・・のように桁が増えていきます。…

アルゴリズム入門(自動販売機でお釣りを計算)

awk

今回は、単純な自動販売機を考えてみます。 自動販売機は、投入した金額と購入したい商品の金額を比較して、投入した金額が商品の金額と同じ、または投入した金額のほうが多ければ商品を購入出来ます。 そして、投入した金額のほうが多かった場合はお釣りを…

アルゴリズム入門(FizzBuzz)

awk

企業がプログラマを採用する場面で「プログラムを書けるプログラマ」を見分けるためのテストとして知られる問題にFizzBuzzがあります。 これは、次のようなプログラムを作成する問題です。 1から100までの数を順に出力するプログラムを作成しなさい。 ただし…

ライフゲーム

awk

ライフゲームです。 ルールは下記のウィキペディアをご参照下さい。 ja.wikipedia.org #!/usr/bin/awk -f BEGIN{ N = 22; # 縦方向 M = 78; # 横方向 a[N / 2][M / 2] = a[N / 2 - 1][M / 2] = a[N / 2 + 1][M / 2]\ = a[N / 2][M / 2 - 1] = a[N / 2 - 1][m…

円周率を近似できる分数

awk

小学校で学ぶ円周率。 無限に続く循環しない小数で、既約分数で表せないということはよく知られています。 一方で、ゆとり教育において「円周率を3として計算する?」といった事が話題になりました。 実際には「3.14」が多く使われていますが、古くから分数…

ハノイの塔

awk

ハノイの塔でプログラミングするというのは、比較的よく見られますね。 最近ですと、FIzzBuzzでしょうか。 再帰の勉強になるということで、awk版を作成してみました。 #!/usr/bin/awk -f # ハノイの等 BEGIN{ ARGC == 2 ? n = ARGV[1] : n = 3; printf("円盤…

一発で決まる多数決

awk

久しぶりのawkネタ じゃんけんで出す手を使った多数決を考えます。 それぞれ出せる手は「グー」「チョキ」「パー」のいずれかです。 このとき、一番多くの人が出した手が勝つことになります。 例えば、6人で行うときは表1のように1回で勝者が決まる場合もあ…

awkでテトリス

awk

awkネタ 以前どっかのサイトに載せられていたawkで作ったテトリス。 これでテトリスが出来るのだからすげー。 ぜひ遊んでみてください。 # $Id: awktris.awk,v 1.4 2006/01/31 23:14:42 tnn Exp $ # awktris - tetris in 19 lines of code, or 1516 bytes. #…

ドラゴンカーブ

awk

awkネタ ドラゴンカーブ 同じ向きに何回も折り曲げ、折り目が直角になるように開いて出来る曲線 この曲線は自分自身と接することはあっても交わりはしない。 描き始めた点を中心として90度、180度、270度開園して出来る曲線は元の曲線と交わらない 位数order…

石取りゲーム2

awk

awkネタ 前回と同様に、一山の石から交互に石を取る。 取る石の数は、相手が直前に取った石の数の2倍を超えてはならない。 最後に石を取ったものの勝ち。 ただし、最初に全部の石を取ってはならならい。 パスは出来ない。 #!/usr/bin/awk -f BEGIN{ f[1] = …

石取りゲーム1

awk

awkネタ 一山の石から交互に石を取る。最後に石を取ったものが負け。 1回に取れる最大数は予め決めておく。パスは出来ない。 コンピュータは次のように考える。例えば1回に取れる最大数を3個とする。 相手が1,2,3個取ればそれぞれ3,2,1個取るこ…

ブラックジャックで大儲け?

perlとawkネタ カジノの定番、ブラックジャック。 ゲームを1回行うには、最低1枚コインが必要です。 勝てば2枚のコインを得られますが、負けると掛けたコインが没収されます。 最初に1枚だけコインを持っており、1枚ずつ掛けていったとき、ゲームを4回…

排他的論理和で作る三角形

awk

awkネタ 有名な「パスカルの三角形」は「右上の数と左上の数の和」を配置していきますが、今回は「排他的論理和」を使います。 01段目:1 02段目:11 03段目:101 04段目:1111 05段目:10001 06段目:110011 07段目:1010101 08段目:11111111 09段目:1000…

人生を変えた言語

「シェル芸」に効く!AWK処方箋 「シェル芸」に効く!AWK処方箋 読了 目次 第1章 簡単で、奥深くて、超便利! LLの元祖「AWK」にさわってみよう 第2章 シェルコマンドを使った処理の効率化はAWKの行(レコード)走査がカギをにぎる 第3章 AWKプログラミング…

30人31脚に挑戦!

awk

awkネタ 「30人31脚」を有利に戦うための並べ方を考えます。 女の子が続いて並ぶと体力的に不利なので、女の子は隣り合わないようにします。 (男の子は何人並んでもよいものとします) 30人を1列に並べる時、その並べ方が何通りあるかを求めてください。 男女…

3本のひもで作る四角形

awk

awkネタ 同じ長さの3本のひもを折り曲げて3つの四角形を作ります。 そのうち2本でそれぞれ長方形を作り、残りの1本は正方形を作ります。 このとき、作った2つの長方形の面積の和が、正方形の面積と同じになることがあります。 (ただし、いずれの長方形、正…

階段で立ち話

awk

awkネタ ある階段を下からAさんが上がっていくと同時に、上からBさんが降りてきます。 階段は1段ずつ上がる(降りる)必要はなく、最大で3段まで飛ばして進む(一気に 4段進む)ことが出来ます。 ただし、何段飛ばすときも、1回の移動にかかる時間は同じとします…

W杯出場国しりとり

awk

awkネタ 2014年の大会の出場国でしりとりしましょう。 2014年大会の出場国は32か国です。 2014年FIFAワールドカップ出場国 国名 国名 国名 Brazil Croatia Mexico Cameroon Spain Netherlands Chile Australia Colombia Greece Cote d'lvoire Japan Uruguay …

フィボナッチ数列(awk版)

awk

さて、以前の問題をperlで解いていましたが、awkで解き直してみました。 まずは、これ。 utthi-fumi.hatenablog.com #!/usr/bin/gawk -f BEGIN{ PREC = 100; before = 0; cnt = 0; n = 1; while(1){ fibona = fibo(n); fibo_div = fibona / sp(fibona); if(f…

覆面算を満たすのは何通り?

awk

awkネタ 覆面算とは、文字列で表された計算式で、同じ文字には同じ数字がはいり、違う文字には違う数字が入ります。 また、最上位の文字には0は入りません。 例えば、 We × love = CodeIQ という式が与えられた時、以下のように当てはめることができます。 W…

平方根の数字

awk

awkネタ 平方根を小数で表したときに、0~9までの数字が最も早くすべて現れる最小の整数を求めて下さい。 ただし、ここでは正の平方根のみを対象とします。 整数部分を含む場合と、小数部分のみの場合のそれぞれについて求めて下さい。 例)2の平方根:1.414…

つりあわない男女

awk

さて、今回もawkでパズルを解いてみます。 perlでやろうと思ったのですが、出来なかったので、awkに戻ってきてしまいました。(^^)/ あるイベント会場に男女が集まてきました。 到着した順番に1列に並んで、入場を待っています。 イベントの主催者であるあな…

日付の2進数変換

awk

awkは必要最小限の関数しか用意されていません。 perlのreverseとか2進数に変換するのもないので、全て自前で作る必要があります。 これは、逆にアルゴリズムを勉強するチャンスです。 では、問題です。 年月をYYYYMMDDの8桁の整数で表したとき、これを2進…

(改造版)コラッツの予想

awk

さて、今回もawkでパズルを解いてみます。 コラッツの予想 自然数nについて、 ・nが偶数の場合、nを2で割る ・nが奇数の場合、nに3をかけて1を足す という操作を繰り返すとき、初期値がどんな数であっても必ず1に到達する (1→4→2→1のように繰り返す) この予…

いまだに現金払い?

awk

さて、今回もawkでパズルを解いてみることにする。 10円玉、50円玉、100円玉、500円玉の組み合わせに両替できる機械がある。 最大で15枚になるように両替します。 1000円札を入れたときに出てくる硬貨の組み合わせは何通りあるかを求めよ。 なお、硬貨の順番…

カードを裏返せ

awk

awkでパズルを解いてみる。 Q.1〜100までの番号が書かれた100枚のカードが順番に並べてあります。 最初、すべてのカードは裏返しの状態でおかれています。 ある人が2番のカードから、1枚おきにカードを裏返していきます。 すると、2,4,6・・・,100番のカードが…