強くてニューゲーム(ひょっとしてブレークスルーしたかも)

一昨日、久しぶりにwhitespaceという簡易言語を写経してたら
えたーなってたまんまのHSPへの移植が進みました
ひょっとして俺、ブレークスルーしたかもって調子こいてます
今回こそは上手くいくかもwww

なんか写経も一日100行くらいなのに
まあ昨日も100行くらいなんですがw
一昨日は300行くらいやったしw

なんか最近、カリスマブロガーマナブ様のYOUTUBEにはまってて
それ見てたら、なんだか、人生、上手くいくような気がしてきて
そっから派生したブレークスルー疑惑でしたw

whitespaceのHSPへの移植も、これこそ強くてニューゲームっすよw

強くてニューゲーム(VIMとかFFAとか)

自分の写経用のエディタはVIMなんですが

理由は分割時、別々のファイルを開けるし
移動が自由自在なとこです
画面を半画面づつ動かせるのと
一行づつ動かせるのが好きです
(カーソル行じゃないですよ)

そして、最近、チュートリアルをやってみたら
前よりしっくり来ました
コレがたぶんあれです
カリスマブロガー。マナブ様の言う
強くてニューゲームです

チュートリアルの学習は期間を開けて三回目くらいなんですが
そのたび、強くてニューゲームになってきますねw

そこのあなたも
以前、挑戦してみた事に挑戦してみてはどうですか?
強くてニューゲームになるかもしれませんよ

そして、今日、HSPのプロコンの放送を見てて
ずっと見るのも飽きるんでFFAをやってて
なんとはなしに、ソースコードをDLして覗いてみたんですよ
ほぼメインCGIに記述してて2000行くらいw
あんな有名ゲームが2000行くらいですって
という訳でFFAの写経がTODOに追加されました
これも強くてニューゲームっすなwww

昔はPerlとか全然読めなかったんですけど
今、読んだら昔より理解出来る気がする
強くてニューゲームw

HSP kaijou

hiroi様のとこのサイトの階乗の処理をHSPで書いてみました

http://www.nct9.ne.jp/m_hiroi/light/ruby01.html

#const INT_MAX 256*256*256*128-1

mes INT_MAX
mes INT_MAX+1

mes INT_MAX / (128*256)
mes "kaijou"
repeat 15,1
mes ""+cnt+":"+ kaijou(cnt)
loop
stop

// p4mul_A(例えば10000)*p4mul_B(例えば10000)が
// over flowしないかcheck
#defcfunc over_INT_MAX int p4mul_A,int p4mul_B
	if p4mul_B==0:return 1
	if p4mul_A<(INT_MAX / p4mul_B){
		return 1
	}else{
		return -1
	}

#defcfunc kaijou int p
	m = 1
	max=p+1
	for i,1,max,1
		if over_INT_MAX(m,i)==-1:return -1
		m*=i
	next
	return m

4blog_令和の数学エッセイ(小論文)006

今回は(xz + y)(azzzz + bzzz + czz + dz + e)
を別のやり方で計算してみます
①xz(azzzz + bzzz + czz + dz + e)
②y(azzzz + bzzz + czz + dz + e)
の二つの合計で計算してみます
今回はz=0.01ということで小数の計算ってかんじでw
①はxazzzzz + xbzzzz + xczzz + xdzz + xez
②はyazzzz + ybzzz + yczz + ydz + ye
になります
合計すると
③xazzzzz + (xb + ya)zzzz + (xc + yb)zzz + (xd + yc)zz + (xe + yd)z + ye
になります。こっちの方がやたら簡単なんですがw
小数なんでひっくり返して
④ye + (xe + yd)z + (xd + yc)zz + (xc + yb)zzz + (xb + ya)zzzz + xazzzzz になります
⑤a=11 b=22 c=33 d=44 e=55 x=23 y=45と代入してみましょうか
⑥2475 + 3245z + 2497zz + 1749zzz + 1001zzzz + 253zzzzz
になり合計して
2507.7014590353
になる予定w
計算ミス怖い

4blog_令和の数学エッセイ(小論文)005

今日は(azzzz + bzzz + czz + dz + e)(xz + y)
を計算してみようと思います
片方が変数少ないとどうなるのかな?的な
今日はz=100 100進数で
BIGNUMとか想定してみると
z=10じゃ小さすぎるし
大きいとデバッグしにくいでしょうし
z=100でいきます
zを2byte 4byteを想定するとz=100くらいが丁度いいと思います
z=10 zはbyte(-128~127)でもいいんでしょうけど
小さいと計算おそそうですからね
まずは
①A=bzzz + czz + dz + eとすると
②(azzzz + A)(xz + y)になります
すると
③axzzzzz + A(xz + y) + ayzzzzになります
④B = czz + dz + eとすると
⑤A(xz + y) = (bzzz + B)(xz + y)になります
すると
⑥ ⑤はbxzzzz + B(xz + y) + byzzzになります
すると③は
⑦ axzzzzz + (ay+bx)zzzz + B(xz + y) + byzzzになります
⑧C = dz + eとすると
⑨B(xz + y) = (czz + C)(xz + y)になります
すると
⑩ ⑨はcxzzz + C(xz + y) + cyzzになります
すると⑦は
⑪ axzzzzz + (ay + bx)zzzz + (by + cx)zzz + C(xz + y) + cyzz
になります
⑧C = dz + eなので
⑫C(xz + y) = (dz +e)(xz + y) = dxzz + (dy +xe)z +yeになります
すると⑪は
⑬ axzzzzz + (ay +bx)zzzz + (by +cx)zzz + (dx + cy)zz +
(dy + xe)z +yeになります
試しに a=12 b=34 c=56 d=78 e=90 x=22 y =33を代入してみましょうか
⑭ 264zzzzz+1144zzzz+2354zzz+3564zz+5148z+2970
100進数なので全部足すと
⑮2zzzzzz + 75zzzzz + 67zzzz + 90zzz + 15zz + 77z + 70
になります(合ってるかはわからないっすw 計算ミス怖いw)

吉里吉里 version White Space 002 heap class

RubyのWhiteSpaceでは連想配列を使っているので、
吉里吉里verも連想配列を使ってみました。
単純な翻訳ではないので、どっかで不具合でるかもw

[iscript]
// 変数なので何回も代入してもたぶんOK
var STACK_MEMBERS =  			1024;
var HEAP_MEMBERS  = 			1024;
var MAX_LABELS 	  = 		200;
var MAX_LABEL_LENGTH =		500;
var MAX_INSTRUCTIONS =		30;
var MAX_INSTRUCTION_LENGTH =    10;
var MAX_NESTED_SUBROUTINES =    20;
[endscript]
[iscript]
class Heap_Model {
  // 連想配列のメンバ
  var m_heap = %[];
  function Heap_Model(){
  }
  function heap_put(p_val,p_key){
    // 数値を文字列に変換
    var s_key=""+p_key;
    // 連想配列に代入
    m_heap[s_key]=p_val;
    return 1;
  }
  function heap_get(p_key){
    // 数値を文字列に変換
    var s_key=""+p_key;
    // 連想配列から取得
    return m_heap[s_key];
  }
}
[endscript]
[iscript]
var heap = new Heap_Model();
heap.heap_put(10,1);
heap.heap_put(20,2);
heap.heap_put(30,3);
heap.heap_put(40,4);
heap.heap_put(50,5);
heap.heap_put(100,10);
heap.heap_put(90,9);
heap.heap_put(80,8);
heap.heap_put(70,7);
heap.heap_put(60,6);
heap.heap_put(100,1);
heap.heap_put(200,2);
heap.heap_put(300,3);
var r1=heap.heap_get(1);
var r2=heap.heap_get(2);
var r3=heap.heap_get(3);
var r4=heap.heap_get(4);
var r5=heap.heap_get(5);
var r6=heap.heap_get(6);
var r7=heap.heap_get(7);
var r8=heap.heap_get(8);
var r9=heap.heap_get(9);
var r10=heap.heap_get(10);
[endscript]
[emb exp="r1"][r]
[emb exp="r2"][r]
[emb exp="r3"][r]
[emb exp="r4"][r]
[emb exp="r5"][r]
[emb exp="r6"][r]
[emb exp="r7"][r]
[emb exp="r8"][r]
[emb exp="r9"][r]
[emb exp="r10"][r]
[p][cm]
[iscript]
// 代入してないので何も表示されない
var r11=heap.heap_get(11);
var r12=heap.heap_get(12);
[endscript]
[emb exp="r11"][r]
[emb exp="r12"][r]

吉里吉里 version White Space 001 stack class

先日、HSPでstackのモジュールを書いたんですけど、
なんか吉里吉里にも翻訳出来そうだったので、
やってみたら出来ました。
吉里吉里出来そうで翻訳しか出来ない疑惑w
でもこういうことやってたら、
真っ白から書けるかもってかんじ。

[iscript]
var STACK_MEMBERS =  			1024;
var HEAP_MEMBERS  = 			1024;
var MAX_LABELS 	  = 		200;
var MAX_LABEL_LENGTH =		500;
var MAX_INSTRUCTIONS =		30;
var MAX_INSTRUCTION_LENGTH =    10;
var MAX_NESTED_SUBROUTINES =    20;
[endscript]
[iscript]
class Stack_Model {
  var m_size;
  var m_current;
  var m_contents = [];
  var m_big;
  function Stack_Model(p_size){
    m_size = p_size;
    m_current = p_size;
    // どこまで代入したか記録
    m_big=p_size;
  }
  function stack_push(p_val){
    if (m_current >= 1) {
      m_current--;
      m_contents[m_current] = p_val;
      if (m_big >= m_current){
        m_big=m_current;
      }
      return 1;
    }
    return -1;
  }
  function stack_pop(){
    if (m_current < m_size){
      m_current++;
      return m_contents[m_current-1];
    }
    return 0;
  }
  function stack_peak(p_depth){
    if ((m_current+p_depth) < m_size){
      return m_contents[m_current + p_depth];
    }
    return 0;
  }
  function stack_look(p_depth){
    if (m_big > p_depth){
      return 0;
    }else{
      return m_contents[p_depth];
    }
  }
}
[endscript]
[iscript]
var stack = new Stack_Model(STACK_MEMBERS);
stack.stack_push(100);
stack.stack_push(200);
stack.stack_push(300);
stack.stack_push(400);
stack.stack_push(500);
stack.stack_push(600);
stack.stack_push(700);
stack.stack_push(800);
var r1=stack.stack_look(1023);
var r2=stack.stack_look(1022);
var r3=stack.stack_look(1021);
var r4=stack.stack_look(1020);
var r5=stack.stack_look(1019);
var r6=stack.stack_look(1018);
var r7=stack.stack_look(1017);
var r8=stack.stack_look(1016);
[endscript]
[emb exp="r1"][r]
[emb exp="r2"][r]
[emb exp="r3"][r]
[emb exp="r4"][r]
[emb exp="r5"][r]
[emb exp="r6"][r]
[emb exp="r7"][r]
[emb exp="r8"][r]
[p][cm]
[iscript]
var r11=stack.stack_peak(2);
var r12=stack.stack_peak(3);
var r13=stack.stack_pop();
var r14=stack.stack_pop();
var r15=stack.stack_peak(2);
var r16=stack.stack_peak(3);
[endscript]
peak 2:[emb exp="r11"][r]
peak 3:[emb exp="r12"][r]
pop:[emb exp="r13"][r]
pop:[emb exp="r14"][r]
peak 2:[emb exp="r15"][r]
peak 3:[emb exp="r16"][r]

HSP version White Space 002 heap module

HSP ver WS 企画第二弾です
前回はStackモジュールでしたが、
今回はHeapモジュールです。
Ruby版とかはハッシュ使ってやってるのですが、
C版は配列で実装しててそれに倣ってます
配列もどきな構造なのですが
配列のindexともども登録した順に代入しています
それではよろしくお願いします

#ifndef HSPWS_DEFINE
#define HSPWS_DEFINE

#define STACK_MEMBERS 			1024
#define HEAP_MEMBERS 			500
#define MAX_LABELS 			200
#define MAX_LABEL_LENGTH 		500
#define MAX_INSTRUCTIONS 		30
#define MAX_INSTRUCTION_LENGTH 	        10
#define MAX_NESTED_SUBROUTINES	        20
#endif

#module heap_model m_address,m_value,m_elements
#modinit
	dim m_address,500
	dim m_value,500
	m_elements=0
	return
// heap領域に値をSET
#modcfunc heap_put int p_val,int p_addr
	// 最初にそのaddressが使われてるか調べる
	for i,0,m_elements,1
		if m_address.i == p_addr {
			m_value.i = p_val
			return 1
		}
	next
	
	// そうじゃなければ領域が余ってるか調べて加える
	if m_elements < HEAP_MEMBERS@ {
		i = m_elements
		m_address.i = p_addr
		m_value.i = p_val
		m_elements++
		return 1
	}
	return 0
// heap領域から値をGET
// addressからデータを取得出来るか調べて
// 存在したら値を返し
// 存在しなければ0を返す
#modcfunc heap_get int p_addr
	for i,0,HEAP_MEMBERS@,1
		if m_address.i == p_addr:return m_value.i
	next
	return 0
#global

#if 1
newmod heap,heap_model
#endif

#if 1
er=heap_put(heap,10,1)
mes er
er=heap_put(heap,20,2)
mes er
er=heap_put(heap,30,3)
mes er
er=heap_put(heap,40,4)
er=heap_put(heap,50,5)
er=heap_put(heap,100,10)
er=heap_put(heap,90,9)
er=heap_put(heap,80,8)
er=heap_put(heap,70,7)
er=heap_put(heap,60,6)
er=heap_put(heap,100,1)
er=heap_put(heap,200,2)
er=heap_put(heap,300,3)
mes heap_get(heap,1)
mes heap_get(heap,2)
mes heap_get(heap,3)
mes heap_get(heap,4)
mes heap_get(heap,5)
mes heap_get(heap,6)
mes heap_get(heap,7)
mes heap_get(heap,8)
mes heap_get(heap,9)
mes heap_get(heap,10)
mes heap_get(heap,11)
mes heap_get(heap,12)
#endif

HSP version White Space 001 stack module

自分は以前、WhiteSpaceをHSPに移植しようとして挫折したんですけどw
それからしばらくして上手く行きそうな気がしてきまして
再挑戦企画です
とりあえず、以前は型の違うデータを格納するstackとか作ろうとして
理解しにくい形になったんですが
本家WhiteSpaceもstackに入れれるのは数値だけで
簡単な配列で表現してるし
今回はちょこっと数値配列表現の(moduleですがw)
stackを書いてみまして
本家の仕様に近い形でやれば、なんかやれそうな気がしてきた
今日なのです

#ifndef HSPWS_DEFINE
#define HSPWS_DEFINE

#define STACK_MEMBERS 			1024
#define HEAP_MEMBERS 			1024
#define MAX_LABELS 			200
#define MAX_LABEL_LENGTH 		500
#define MAX_INSTRUCTIONS 		30
#define MAX_INSTRUCTION_LENGTH 	        10
#define MAX_NESTED_SUBROUTINES	        20
#endif

#module stack_model m_size,m_current,m_contents
#modinit int p_size
	m_size=p_size
	m_current=p_size
	dim m_contents,p_size
	return
#modcfunc stack_push int p_val
	if m_current >= 1 {
		m_current--
		m_contents.m_current = p_val
		return 1
	}
	return -1
#modcfunc stack_pop
	if m_current < m_size
		m_current++
		return m_contents(m_current-1)
	return 0
#modcfunc stack_peak int p_depth
	if (m_current+p_depth) < m_size{
		return m_contents(m_current + p_depth)
	}
	return 0
#global
#if 1
newmod stack,stack_model,STACK_MEMBERS
#endif

#if 1
er=stack_push(stack,100)
er=stack_push(stack,200)
er=stack_push(stack,300)
er=stack_push(stack,400)
er=stack_push(stack,500)
er=stack_push(stack,600)
er=stack_push(stack,700)
er=stack_push(stack,800)
mes "peak 2:"+stack_peak(stack,2)
mes "peak 3:"+stack_peak(stack,3)
mes "pop:"+stack_pop(stack)
mes "pop:"+stack_pop(stack)
mes "peak 2:"+stack_peak(stack,2)
mes "peak 3:"+stack_peak(stack,3)
#endif

アメリカ中国貿易戦争

アメリカと中国は貿易戦争の真っ最中ですが、
いつか何かが起きる、種はあったと思います。

中国はアメリカに対して、多額の貿易黒字ですが、
アメリカに対しての貿易黒字国は、
日本、韓国等ですが、日本も韓国も親米国家なんですよね。
アメリカという大国に親米国としてワガママいうみたいに、
親米国なので許されてたのかもしれません。
しかし、中国は親米国ではありません。
親米国ではない国が、
貿易で多額に儲けたら、そりゃあ、関係は険悪になりますよね。
アメリカが中国に制裁する度に中国もアメリカに制裁措置を取ってますが、
元々多額の貿易黒字なので、中国に分が悪いっすね。
前にブログにも書きましたが、情報産業に関しては、
中国も発展して、資本が中国にも分散として流入することは、
アメリカにとってもいいことだ。とは思いますが。