先日訪れたルワンダから、「こども達とIchigoJam Campやってるよ」との一報!



ありがとうIldephonse!
アフリカ ルワンダ からも、頼もしいこども達が飛び立ちそう!
.
Viscuit原田さんが 次は魔法陣も面白いかも って言っていたので、4×4の魔法陣を生成してみようかと、でも安直に総当たりは 16!とおり(20兆ほど) !?
ひとまず「ランダムに当て込めばそのうちできるでしょ方式」がこちら、今回は実行速度重視ということでC/C++。
MagicArray magic;
魔法陣表を製造して、
while( !magic.isMagic() ) magic.shuffle();
魔法陣でない間、マス目を1回ランダムに入れ替える。
show( magic );
表示する、の3行でできあがり。
MagicArrayの設計図はこちら。
#include <stdio.h> #include <stdlib.h> #include <time.h> struct MagicArray{ int64_t a[4*4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16}; bool isMagic(){ int64_t i; i = 0; int64_t n0 = a[i+0]+a[i+1]+a[i+2]+a[i+3]; i=i+4; int64_t n1 = a[i+0]+a[i+1]+a[i+2]+a[i+3]; i=i+4; int64_t n2 = a[i+0]+a[i+1]+a[i+2]+a[i+3]; i=i+4; int64_t n3 = a[i+0]+a[i+1]+a[i+2]+a[i+3]; i=i+4; i = 0; int64_t m0 = a[i+0]+a[i+4]+a[i+8]+a[i+12]; i=i+1; int64_t m1 = a[i+0]+a[i+4]+a[i+8]+a[i+12]; i=i+1; int64_t m2 = a[i+0]+a[i+4]+a[i+8]+a[i+12]; i=i+1; int64_t m3 = a[i+0]+a[i+4]+a[i+8]+a[i+12]; i=i+1; int64_t x0 = a[0]+a[5]+a[10]+a[15]; int64_t x1 = a[3]+a[6]+a[ 9]+a[12]; return (n0==n1) && (n0==n2) && (n0==n3) && (n0==m0) && (n0==m1) && (n0==m2) && (n0==m3) && (n0==x0) && (n0==x1); } void shuffle(){ int64_t last = sizeof(a)/sizeof(a[0])-1; int64_t r = rand()%last; int64_t tmp = a[r]; a[r] = a[last]; a[last] = tmp; } }; void show(MagicArray& magic){ int64_t i = 0; while(i < sizeof(magic.a)/sizeof(magic.a[0])){ printf("%2lld%s", magic.a[i], ((i+1)%4)?" ":"\n"); ++i; } } int main(){ srand(time(NULL)); MagicArray magic; while( !magic.isMagic() ) magic.shuffle(); show( magic ); }
全体としてはこんな感じ、実行するにはmacのターミナルで、
$ g++ -std=c++14 -O3 magic.cpp
こうして、
$ ./a.out
こう。
16 2 9 7 11 5 14 4 6 12 3 13 1 15 8 10
数秒〜数十秒で1個出ますね、総当たりしたら何分かかる?
中高生にはこんなお題も楽しいですね、5×5や6×6はどうかな?
.
[P.S.]
なんどもお邪魔させていただいている鹿谷小学校、今回も5,6年生にプログラミング教室2コマ、まずは教室でこれまでの復習と今回のLチカの練習。
慣れたら体育館へ。
暗幕をひいてLEDロープの点滅、練習したLチカとプログラムは共通。
まずはツリーと、
ステージをLEDロープで飾りましょう。
絡まりやすいから要注意。
作ったプログラムを刺して完成!
さかなの形と星の形がGood!
スクールセットはどこでもプログラミングできて超便利!
体育館をLチカ、いいね!
今回の機材はこんな感じ。
IchigoDakeにLEDを2個接続、大きめのが可愛くていい。
長いLEDロープ(USB式 10m 100球 ¥880)を駆動するためにMapleSyrupを利用。
LED2個ついたまま刺しても大丈夫、どちらも点滅します。
プリントはこの2枚、ご自由にお使いください。(CC-BY PCN福井)
10 OUT1:WAIT20:OUT0:WAIT20 20 OUT1:WAIT20:OUT0:WAIT20 30 OUT1:WAIT20:OUT0:WAIT20 40 WAIT40 50 OUT16:WAIT20:OUT0:WAIT20 60 OUT16:WAIT20:OUT0:WAIT20 70 OUT16:WAIT20:OUT0:WAIT20 80 WAIT40 90 OUT1:WAIT20:OUT0:WAIT20 100 OUT16:WAIT20:OUT0:WAIT20 110 OUT1:WAIT20:OUT0:WAIT20 120 OUT16:WAIT20:OUT0:WAIT20 130 OUT1:WAIT20:OUT0:WAIT20 140 OUT16:WAIT20:OUT0:WAIT20 150 OUT17:WAIT20:OUT0:WAIT20 160 WAIT80 170 GOTO10
3,3,7拍子はこれ!
[ おまけ ]
3学期にはこの辺もやろう!
.
Viscuitの原田さんが ビンゴシステム をやっていて面白そうなので自作の新言語「OpenVBS」でやってみた。
dim machine = BingoMachine({})
BingoMachineを製造して、
machine.shuffle(1000)
ビンゴ機を1,000回シャッフル。
dim taker = BingoTaker({}, machine)
BingoTakerを製造して、
doeach(taker.take, function(v) wscript.echo(v): end function)
順に玉を取り出しながら表示というソースコード4行、でできあがり。
BingoMachineとBingoTakerの設計図はこんな感じ、Objective-Cチック?
option explicit: randomize: dim machine = BingoMachine({}) machine.shuffle(1000) dim taker = BingoTaker({}, machine) doeach(taker.take, function(v) wscript.echo(v): end function) function BingoMachine(self) self.balls = [ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60, 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75] self.shuffle = function(n) dim last = self.balls.length-1 do while n-- dim r = int(rnd()*last) dim tmp = self.balls(r) self.balls(r) = self.balls(last) self.balls(last) = tmp loop end function return self end function function BingoTaker(self, machine) self.machine = machine self.i = machine.balls.length self.take = function() return if self.i then self.machine.balls(--self.i) else empty end if end function return self end function function doeach(eachee, dofunc) 10 DIM E = EACHEE() 20 IF ISEMPTY(E) THEN EXIT FUNCTION: END IF 30 DOFUNC(E) 40 GOTO 10 end function
全体としてはこんな感じ。
最後の「doeach」を、あえてクラシカルなBASICにしてみましたが、
function doeach(eachee, dofunc) dim e do until isempty(e := eachee()) dofunc( e ) loop end function
こう描いた方が読みやすい人が多いかも、お好きな描き方でどうぞ。
今年で55歳の「BASIC」、JSONなどに加えてOptional Chaining: ” ?. “ や Nullish Coalescing: ” ?? “ も搭載してまだまだ進化中。最新版を make してお試しください (Windowsなら nmake)。
.
先日バージョンアップした OpenVBS、コアには「Jujubeエンジン」を搭載し、サーバーサイドBASIC「ISPページ」の機能も含まれています。
ちょっと使ってみましょう。まずはダウンロード、今回はmacで行いますがWindowsでもLinuxでもやることは同じです。
ダウンロードすると oscript.20191031.osx.tar.gz が手元に来ます。
ダブルクリックして解凍、フォルダ「oscript.20191031.osx」ができます。
中身はこんな具合、「wwwroot」というフォルダありますね。
さぁ、ターミナル(Windowsの場合は コマンドプロンプト)を開いてWebサーバーを起動しましょう。
ターミナルとはコンピュータにコマンドを送るための窓口、IchigoJamを起動した時の画面と同じです。
まずはダウンロードした OpenVBS のフォルダに移動、「cd」コマンドです。
フォルダを移動したら「oscript」コマンドを起動、Webサービスは「sample3.obs」に描かれているため、
$ ./oscript sample3.obs
として起動。
うまく起動するとこのようにWebサービスが開始。
さて、ISPページを作りましょう。ページ作りには「テキストエディタ」を使います。どんなものでも良いですが、ここではmicrosoft「Visual Studio Code」を利用しましょう。
起動するとこんな感じ、Cmd+N で新しいファイルの編集がはじまります。
まずは
PRINT "Hi ISP!"
と描いてみましょう。
Cmd+S やメニューから保存できます。保存名は「mypage.isp」、保存先は先ほどの「wwwroot」にしましょう。
ブラウザで「http://localhost:8000/mypage.isp」にアクセス、こんなページがでましたか?
ページに画像を出すには、wwwrootに好きな画像を保存して、
PRINT IMG("flower.jpg")
と描きます。
ブラウザをリロードすると画像が出ますね。
別のページにリンクしたい場合は
PRINT LINK("http://pcn.club/")("PCNはこちら")
です。
こんな具合。
FOR文も使えますから、
こんなことも可能。
ページができたら世界中に公開しましょう。いろんな方法がありますが、今回は比較的簡単な ngrok を用いる方法。
まずは ngrok をインストール。
インストールしたら
$ ngrok http 8000
で起動しておきます。
起動すると、グローバルなURLがもらえます。
あとはスマホなどからアクセスするだけ、君だけのWebサイトのできあがり!
? RED("あか色") ? GREEN("midori色") ? BLUE("Blue色") ? ? LARGE("でかい") ? SMALL("ちっさ") ? ? CENTER("まん中") ? RIGHT("みぎ")
文字色や文字サイズ、文字の位置もアレンジ可能ですよ!
10 ?"ピザって10回言ってみて" 15 ?"---------" 20 I=0 30 ?"ピザ": I=I+1 40 IF I<10 THEN GOTO 30 END IF 45 ?"---------" 50 ?"ここは?" 60 ?IMG("hiji.jpg") 65 ?"---------" 70 ?RED(LARGE("ひざ"))
「サーバーサイドBASIC」らしく、行番号なんかつけてみても楽しい?中高生なら「さくらインターネット」でサーバー借りちゃえば ngrok 使わなくても済みますね!
プログラミングで楽しい作品できたら、自分だけのWebサイトで公開してみよう!そのままPCNプロコンにも応募してね!
.
shushu inc. より販売開始された「IchigoKamuy」。
ラップトップのUSBに刺して通信アプリを使うとすぐにプログラミングできます。
今回は CoolTerm というアプリを使いました。
5 VIDEO0 10 N=0 20 OUT1:OUT0 30 N=N+1 40 IF IN(1) GOTO30 50 IF N<8 BEEP N:WAIT6 60 GOTO10
アプリ越しにこんなプログラムを打ち込みましょう。今回はBASICですが、JavaScriptやRubyも選択可能。
そして最後に「SAVE 0」。
HC-SR04 IchigoKamuy -------------------- GND - GND VCC - 5v Trig - OUT1 Echo - IN1
さぁ、ラップトップからIchigoKamuyを抜いて距離センサー HC-SR04 と圧電サウンダーを取り付けましょう。
100均のUSBチャージャーに刺せば、モバイル物体検知ソナーの完成!
物が近いほど高い音で知らせてくれます。約100円/個な格安センサーなので、量産しやすいのがいいですね。展示会などでどの展示品に人がどれくらい近づいて滞留しているのか、データ回収にもいいかも!
いつのまにか5回目となる こどもプログラミングサミット、今回は金沢市で開催。鯖江市長、金沢市長も登壇して学校現場でのプログラミングへの取り組み状況を生の声で聞けそうです。
金沢市では同日に「第1回 加能ガニロボコン」も開催、記念すべき第1回の優勝は誰の手に?
12/26は金沢で、加能ガニと一緒に待ってます、ぜひどうぞ!
.
早朝より集まるこども達。
まずは車検、25 x 25 x 25cm以内。
選手宣誓、スポーツマンシップに則り!
今回は予選のポイントで本戦トーナメントの位置決め。
固唾を呑んで見守る、本戦トーナメントの発表!
リトライ知らずの職人マシン!
決勝戦レベルの戦いを見せてくれたベスト8対決は同点によりじゃんけん!
写真がイマイチですいませんが、とにかく現場でないと伝わらないこの熱気。
こちらが高学年優勝マシン!なんと敦賀の公立小学校から担任の先生引率での参戦、ありがとう!
低学年の優勝マシンはこちら。今年はLEGOが強かった!
越前がにロボコンはロボット自由!LEGOもアーテックもタミヤも完全自作でもなんでもどうぞ。
次回は来月、金沢「第1回 加能ガニ ロボコン」12/26です!
2位でありながらとってもよかった「テオヤンセン蟹」こと「サターン」、なんとテオヤンセンさんのオープンソースな「ホーリーナンバー」をもとにアクリル板を切って自作したとのこと。ここにも ビースト菌 の感染者が!!
この滑らかな歩行は背中にコップを乗せてもきっとこぼれない!
準備いただいたみなさま、ありがとうございました!来年の 越前がにロボコン も、楽しみ!次回は中学生部門も!?みんな参加ありがとう!!
.