練習問題。素数かcheck

練習問題です

# encoding: UTF-8
 print("素数かcheck\nPlease input NUM(int)\n")
 ch=gets
 _4check=100
 def prime?(num)
   _4check=num
   c=2
   while 1
     if c*c > _4check
       return 1
     end
     if ((_4check%c)==0)&&(_4check!=c)
       return 0
     end
     if c==2
       c+=1
     else
       c+=2
     end
   end
 end
 num=31
 result=prime? num
 if result==1
   print("#{num}は素数です\n")
 else
   print("#{num}は素数ではありません\n")
 end
 num=35
 result=prime? num
 if result==1
   print("#{num}は素数です\n")
 else
   print("#{num}は素数ではありません\n")
 end
 num=101
 result=prime? num
 if result==1
   print("#{num}は素数です\n")
 else
   print("#{num}は素数ではありません\n")
 end
 num=102
 result=prime? num
 if result==1
   print("#{num}は素数です\n")
 else
   print("#{num}は素数ではありません\n")
 end
 ch=gets

コインみたいな乱数

問題じゃないんですけど、なんか書きました

# encoding: UTF-8
 def rnd_coin
   r = Random.rand(2)
   if r==1
     r_s="表"
   elsif r==0
     r_s="裏"
   else
     r_s="nil"
   end
   return r_s
 end
 print ("coin rnd sample\n")
 ch=gets

コインを10回振ってその合計

# encoding: UTF-8
def rnd_coin_10
 sum=0
   for i in 1 .. 10
     r = Random.rand(2)
     if r==1
       r_s="表"
     elsif r==0
       r_s="裏"
     else
       r_s="nil"
     end
     sum+=r
     print ("#{i}:#{r_s}\n")
   end
   return sum
 end
 print ("coin rnd sample\n")
 ch=gets
 tmp_sum = rnd_coin_10
 print ("sum:#{tmp_sum}\n")
 ch=gets

練習問題。サイコロみたいなrnd

乱数でサイコロみたいな処理のメソッドを
記述しなさいみたいな問題でした

# encoding: UTF-8
 def dice
   r = Random.rand(6)
   r+=1
   return r
 end
 print ("rnd sample\n")
 ch=gets
 for i in 1 .. 8
   tmp_r = dice
   print ("#{i}:#{tmp_r}\n")
 end
 ch=gets

サイコロを10回振って合計を計算しなさいみたいな問題でした

# encoding: UTF-8
 def dice10
   sum=0
   for i in 1 .. 10
     r = Random.rand(6)
     r+=1
     sum+=r
     print ("#{i}:#{r}\n")
   end
   return sum
 end
 print ("rnd sample\n")
 ch=gets
 tmp_sum = dice10
 print ("sum:#{tmp_sum}\n")
 ch=gets

たのしいRubyの練習問題

せっかく解いたからUPしよーかなとw

# encoding: UTF-8
# 摂氏→華氏
 print("Please input 摂氏(int)\n")
 input=gets
 input=input.chomp!
 my=input.to_f
 you=(my*9)/5+32
 print ("result(華氏): #{you}")
 ch=gets
# encoding: UTF-8
#  華氏→摂氏
 print("Please input 華氏(int)\n")
 input=gets
 input=input.chomp!
 my=input.to_f
 you=((my-32)*5)/9
 print ("result(摂氏): #{you}")
 ch=gets

数字の組み合わせ

repeat版の組み合わせの方が変更楽っぽいっすね
数字の組み合わせも書いてみました

sdim _4note,10000
 notesel _4note
 sdim youso,5,8
 youso.0="1"
 youso.1="2"
 youso.2="3"
 youso.3="4"
 youso.4="5"
 repeat 5
   tmp1=youso.cnt
   repeat 5
     tmp2=youso.cnt
     repeat 5
       tmp3=youso.cnt
       repeat 5
         tmp4=youso.cnt
         repeat 5
           tmp5=youso.cnt
           tmp=""+tmp1+tmp2+tmp3+tmp4+tmp5
           noteadd tmp,-1,0
         loop
       loop
     loop
   loop
 loop
 notesave "stn5_c.txt"
 sdim ar_stn5,8,notemax
 repeat notemax
 tmp_get=""
 noteget tmp_get,cnt
 ar_stn5.cnt=tmp_get
 loop

文字の組み合わせ(repeat版)

sdim _4note,10000
 notesel _4note
 sdim youso,5,5
 youso.0="s"
 youso.1="t"
 youso.2="n"
 repeat 3
   tmp1=youso.cnt
   repeat 3
     tmp2=youso.cnt
     repeat 3
       tmp3=youso.cnt
       repeat 3
         tmp4=youso.cnt
         repeat 3
           tmp5=youso.cnt
           tmp=""+tmp1+tmp2+tmp3+tmp4+tmp5
           noteadd tmp,-1,0
         loop
       loop
     loop
   loop
 loop
 notesave "stn5_b.txt"
 sdim ar_stn5,8,notemax
 repeat notemax
 tmp_get=""
 noteget tmp_get,cnt
 ar_stn5.cnt=tmp_get
 loop

文字の組み合わせ

高校一年くらいで習うのかな
数字の組み合わせだったような
いやいや
whitespaceの字句解析のデバッグ用に書きました
配列のサイズがあんま自由じゃないんで
追記:そういえばHSPは配列の大きさは大きくなりますなw
ノート命令に書き込んでから配列に代入してます

sdim _4note,10000
 notesel _4note
 s="s"
 t="t"
 n="n"
 tmp1=s
 gosub *sub_d
 tmp1=t
 gosub *sub_d
 tmp1=n
 gosub *sub_d
 notesave "stn5.txt"
 sdim ar_stn5,8,notemax
 repeat notemax
 tmp_get=""
 noteget tmp_get,cnt
 ar_stn5.cnt=tmp_get
 loop
 stop
 *sub
 tmps=tmp1+tmp2+tmp3+tmp4+s
 tmpt=tmp1+tmp2+tmp3+tmp4+t
 tmpn=tmp1+tmp2+tmp3+tmp4+n
 noteadd tmps,-1,0
 noteadd tmpt,-1,0
 noteadd tmpn,-1,0
 return
 *sub_b
 tmp4=s
 gosub *sub
 tmp4=t
 gosub *sub
 tmp4=n
 gosub *sub
 return
 *sub_c
 tmp3=s
 gosub *sub_b
 tmp3=t
 gosub *sub_b
 tmp3=n
 gosub *sub_b
 return
 *sub_d
 tmp2=s
 gosub *sub_c
 tmp2=t
 gosub *sub_c
 tmp2=n
 gosub *sub_c
 return

これは初稿でサブルーチンを利用して繰り返してます
逆にコレ書いた後なんで
繰り返しでも書けました

Ruby 簡単システム

ここらへんは
僕の黒歴史とも言える
こっそり載ってるとも言える
プロジェクトすぅぃった。という企画の
サンプルプログラムをRubyに移植するという企画です
プロジェクトすぅぃった。という企画は
GUI操作なんですが
CUIで似たようなことをするのを目指してます

# encoding: UTF-8
# 以下はサンプルプログラム
# Ruby動作2.6で確認
# ボタンが押された時にこれらの変数をselected_btnextに代入して
# メインルーチンにジャンプする
 $btnext_1 = ""
 $btnext_2 = ""
# ボタンにって選択される選択肢のID
 $selected_btnext = "a"
# これがtrueになると終了する
 $exit = false
 require 'io/console'
# ここからメインルーチン
 def bt_selected_gomain
   tmp_ch = "?"
   while 1
     if $exit == true then break end
     case $selected_btnext
     when "a" then
       $btnext_1 = "aa"
       $btnext_2 = "ab"
       print("zキーかxキーを押してください\n")
       print("終了:qキー")
       while 1
         tmp_ch = get_getc()
         if tmp_ch == "z"
           $selected_btnext = $btnext_1
           break
         elsif tmp_ch == "x"
           $selected_btnext = $btnext_2
           break
         elsif tmp_ch=="q"
           $exit = true
           print("QUIT")
           tmp_ch = get_getc()
           break
         end
       end # end of while B
     when "aa" then
       $btnext_1 = "a"
       print("あなたはzキーを押しましたね\n")
       print("NEXT:zキー")
       while 1
         tmp_ch = get_getc()
         if tmp_ch == "z"
           $selected_btnext = $btnext_1
           break
         end
       end # end of while C
     when "ab" then
       $btnext_1 = "a"
       print("あなたはxキーを押しましたね\n")
       print("NEXT:zキー")
       while 1
         tmp_ch = get_getc()
         if tmp_ch == "z"
           $selected_btnext = $btnext_1
           break
         end
       end # end of while D
     end # end of case
   end # end of while A
 end # end of method
 def get_getc
   $stdin.raw do |io|
     ch = io.getc
     print ch
     print "\n\n"
     return ch
   end
 end
 bt_selected_gomain

Ruby memo R020311

RubyはPATH通せば、FILEのダブルクリックで実行

PATH通すのにはインストール時に選択する

2.5インストールしたらそういう項目なかった

2.6インストールしたらあった

MSYSはTK入ってるぽいので、TKでGUIプログラムを
作成したかったらインストールした方がいい

2.5だとRuby25のbinのexeのショートカットを作成して
そこにD&Dするのがいいかも

SJISプログラミングをしたいなら
FILEの先頭に

# coding: Shift_JIS

グローバル変数は先頭に$
$hoge
配列もハッシュもグローバルに出来るぽい
RPGツク-ルはスクリプト書き場の変数は
使いたいのグローバルにしないと
イベントとかでRuby書いても参照できない

定数は基本、大文字と_
先頭だけ大文字でも大丈夫とか
モジュールの中に書いてもグローバルっぽい
module::constみたいに呼び出すっぽい
定数の整理にいいね

true/false/nilがある

ライブラリっぽいのを
(自分で作成したのも)呼び出す
require “library”
includeはモジュール読み込み

メソッド定義
def hoge(p)
引数がないなら()いらない
def hoge

endに色々と用途があって逆にわかんなくなる
(慣れてないのもある)
LISPっぽいのはこういうとこかも
end # end of def
とか
end # end of while
とか書くのもあり

僕がIOでゲーム作りたい時
while 1 が妙に役にたつ

require ‘io/console’
して
$stdin.raw do |io|
ch = io.getc
print ch
print “\n\n”
end
で、一文字入力
CUIでゲーム作りたいなら便利っぽい

なんか言語のエラー吐きがRubyはHSPより厳しい気がする

なんか言語のエラー吐きがRubyはHSPより厳しい気がする
その辺がなかなか僕が移行出来ない原因かも

エラーにならなくて、すぐ落ちて、謎なバグがあったんですけど
よく見たらprntfのダブルクォートを閉じてなかったっていうね

whenみたいとこで、なかなか動かなくて悪戦苦闘したんですけど
途中のwhenはendで閉じなくて良くて
最後のwhenはendで閉じなきゃダメっていうね

なぜかRubyはやってると時間が過ぎちゃいますね
これがRubyの楽しさの効果なんかな

WhiteSpace/my_WhiteSpace用命令(HSP)

WhiteSpaceをHSPに翻訳するにあたり、いらない文字を削除する命令と、数値表現(1と2と3)文字表現(sとtとn)デフォルト表現(スペースとタブと改行(0A))を置き換えて(sとtとn)の表現に統一する用の命令を書きました

#module
//いらない文字を削除する命令(返り値あり)
#defcfunc trim_ws var p_src,int p4trim_a,int p4trim_b,int p4trim_c
	//半角英数字っぽく繰り返し。2byte文字非対応
	repeat 256
		//指定した文字は削除しない
		if cnt==p4trim_a||cnt==p4trim_b||cnt==p4trim_c{
			continue
		}
		//cntの文字削除
		p_src=strtrim(p_src,3,cnt)
	loop
	return p_src
#global
#if 1
//適当な文字列
_123="123456789  \nabc\t12456"
//'1''2''3'以外削除
_123=trim_ws(_123,'1','2','3')
//結果表示
mes ""+_123
//適当な文字列
stn="1234st56n789  \nasbc\t12t456n"
//'s''t''n'以外削除
stn=trim_ws(stn,'s','t','n')
//結果表示
mes ""+stn
//適当な文字列
ws_char="1234  56\t789  \nabc\t12456"
//' ''\t'0A(改行もどき)以外削除
ws_char=trim_ws(ws_char,' ','\t',$0A)
//結果表示
mes ""+ws_char
#endif
#module
//"1"を"s"に、"2"を"t"に、"3"を"n"に置き換える
//マイwhite_spaseの文字は"s""t""n"が本命
#deffunc ws_char_rep_123tostn var p4rep
	strrep p4rep,"1","s"
	strrep p4rep,"2","t"
	strrep p4rep,"3","n"
	return
//" "を"s"に、"\t"を"t"に、0A(改行もどき)を"n"に置き換える
#deffunc ws_char_rep_wschar_tostn var p4rep
	strrep p4rep," ","s"
	strrep p4rep,"\t","t"
	sdim tmp_0A,4
	poke tmp_0A,0,$0A
	strrep p4rep,tmp_0A,"n"
	return
#global
#if 1
//  さっき使った文字列"1""2""3"とか、を"s""t""n"に置き換える
	ws_char_rep_123tostn _123
// 結果表示
	mes _123
	ws_char_b=ws_char
//  さっき使った文字列" ""n"0A(改行もどき)とか、を"s""t""n"に置き換える
	ws_char_rep_wschar_tostn ws_char_b
// 結果表示
	mes ws_char_b
#endif