diff --git a/csquiz.rb b/csquiz.rb deleted file mode 100755 index c9d1d61..0000000 --- a/csquiz.rb +++ /dev/null @@ -1,210 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 通常バージョンです -# 改良しようとしたけどやばいことになったのでやばい方は避難させといた - - -require 'csv' -require 'roo' - -ods = Roo::Spreadsheet.open("quizod.ods") #odsをもってくる -neta = CSV.parse(ods.to_csv, :headers => true) #odsをcsvにする - -fuseikai = 0 -def wrong() - puts"不正解!" - sleep(0.5) - -end - - # ans = answer,opt = row["オプション"],san = santaku,seikai = row["答え"],fu = fuseikaiと書きたいけど無理だった -def isRightAns(ans,opt,san,seikai,fu) - - ansIsA = (ans == san[0]) # この変数群 - ansIsB = (ans == san[1]) # カッコ付きはTF、カッコ無しはその他の値 - ansIsC = (ans == san[2]) # A,B,Cは選択肢の文字を仮で表している - - alreadySantaku = (fu >= 3) - ansIs1 = (ans == "1") - ansIs2 = (ans == "2") - ansIs3 = (ans == "3") - - ansAry = ans.chars - ansIsEmpty = (ansAry.empty?) - ansLength = ans.length - santakuNumbers = ["1","2","3"] - santakuTotalLength = san.join.length - - ansHasA = (ans.include?(san[0]))if san[0] # sanにnilがあるとinclude?で - ansHasB = (ans.include?(san[1]))if san[1] # エラーになるのでこうなった - ansHasC = (ans.include?(san[2]))if san[2] - - # ansIs123わかりにくくてすいません。回答に123が1個ずつあればOKを表しています - ansIs123 = ((ansAry + santakuNumbers).tally == {"1" =>2,"2" =>2,"3" =>2}) - ansIsABC = (ansHasA && ansHasB && ansHasC && ansLength == santakuTotalLength) - #ansIs順不同 - - selectNumber = (ans.to_i)-1 - select = san[selectNumber] - - #文字で答えた場合 || 番号で答えた場合 - if opt =~/(すべて)/ - return (ansIsABC) || - (ansIs123 && alreadySantaku) - - elsif opt =~ /(どれかひとつ)/ - return ([ansIsA,ansIsB,ansIsC].one?) || - ([ansIs1,ansIs2,ansIs3].one?) - - else #通常の三択 - return false if ans == "" - return (ans == seikai) || (select == seikai && alreadySantaku) - - end - -end - - -def putAnswer(row,santaku) - if row["答え"] != nil # 正解表示(通常) - printf("正解は%sでした。\n",row["答え"]) - return - end - # 以下では row["答え"] = nil - if row["オプション"] =~ /(すべて)/ # 正解表示(すべて) - printf("正解は%s,%s,%sすべてでした。\n",santaku[0],santaku[1],santaku[2]) - return - - elsif row["オプション"] =~ /(どれかひとつ)/ # 正解表示(どれか) - printf("正解は%s,%s,%sの中からひとつでした。\n",santaku[0],santaku[1],santaku[2]) - return - end -end - - -setumei = ["カスタムクイズ", - " 説明", - "専用のodsを使うことで、自由にクイズを作ることができます。", - "odsでつくったクイズが出題されるクイズです。", - "選択肢を出す場合、今は出せる選択肢は3つのみとなっております。", - "odsでの操作はodsに書いているのでそちらを見てください。", - "enterを押すと始まります。" - ] - -for i in setumei - puts i -end -gets - -countAns = 0 -countRight = 0 - -count = 0 # 今何問目なのか -print("\e[2J") -print("\e[H") - -startTime = Time.now.to_i -neta.each{|row| - - if row["オプション"] == "表示物" - printf("%s\n",row["問題"]) - gets - print("--------------------------\n") - next - end - count += 1 - dasita = 0 - comeback = 0 - printf("第%d問\n",count) - printf("%s\n", row["問題"]) - santaku = [row["三択1"], row["三択2"], row["三択3"]] - fuseikai = 0 # fuseikai >= 3で三択表示 - kaitou = nil - - while true - - #入力と三択システム - if comeback == 1 - wrong - - end - if row["オプション"] =~ /(三択なし)/ # 意地悪問題がいい人へ - dasita = 1 - - elsif ( fuseikai == 3 || row["オプション"] =~ /(三択)/ ) && - dasita != 1 - if row["オプション"] =~ /(三択)/ - fuseikai = 3 - end - num = 1 # 選択肢の番号 - for i in santaku - printf("%d => %s\n",num,i) - num += 1 - end - dasita = 1 # dasitaが1 =「三択出した」 2回以上の三択表示を防ぐ - end - - print"答えを入力..." - kaitou = gets.chomp - countAns += 1 - - if row["オプション"] !~ /(判定なし)/ - if isRightAns(kaitou,row["オプション"],santaku,row["答え"],fuseikai) - puts"正解!!" - countRight += 1 - sleep(0.5) - break - else - fuseikai += 1 - wrong - if row["オプション"] !~ /(1回だけ)/ - print("\e[2A") # 2行上 - print("\e[J") # 下のやつを消す - end - end - end - if row["オプション"] =~ /(正解を出す)/ - putAnswer(row,santaku) - end - if row["オプション"] =~ /(1回だけ|判定なし)/ - break - end - - end - if row["解説"] - printf("%s\n",row["解説"]) - gets - print"\e[1A" - end - - print("--------------------------\n") #何個でもいい仕切りの機能 - } - -# 終了時演出の変数の準備 -finishTime = Time.now.to_i - -text = neta["変更テキスト"][0] -finish = neta["終了時演出"][0] - -seitouritu = (((countRight.to_f)/(countAns.to_f))*100).truncate(1) -keikajikan = (finishTime - startTime) -heikinjikan = ((keikajikan.to_f)/(count.to_f)).truncate(1) - - -# 終了時演出の表示 - printf("正解数: %d回/%d回中 ",countRight,countAns)if finish =~ /(結果表示)/ - - printf("正答率: #{seitouritu}%% ")if finish =~ /(正答率)/ -print"\n" if finish =~ /(正解表示|正答率)/ - printf("経過時間: %d秒 ",keikajikan)if finish =~ /(経過時間)/ - - printf("平均回答時間: #{heikinjikan}秒 ")if finish =~ /(平均時間)/ - -print"\n" -if text - printf("%s\n",text)if text != "なし" -else - puts"終了!!おつかれさまでした!" -end -# おつかれさまでした!! diff --git a/happyou/chinamini.rb b/happyou/chinamini.rb index 44ec953..0444602 100755 --- a/happyou/chinamini.rb +++ b/happyou/chinamini.rb @@ -13,7 +13,7 @@ about = CSV.read("typing-about.csv",:headers => true) sentence = CSV.read("typing-texts.csv" , :headers => true)#タイピング本文 sentence_utu= CSV.read("typing-texts-utu.csv",:headers => true) -menu_sentakusi ={1=>"play",2=>"option",3=>"practice", 4=>"about"} +menu_sentakusi ={1=>"play",2=>"option",3=>"practice", 4=>"about",5=>"exit"} play_sentakusi =sentence.headers type_list =[] #打つ内容を呼び出すための文字列を格納する @@ -35,11 +35,13 @@ def getAns() self.addstr("入力:") self.refresh - while true - a = getch + begin + a = getch return "q" if a == "q" return @@numbers[a].join.to_i #アルファベットを対応表@@numbersを利用し2桁の整数にする - end + rescue + retry + end end def addstr_sousyoku(nani,str) @@ -54,122 +56,137 @@ cbreak begin - win = Window.new(32,60,10,10) - win.addstr("タイピングです。\nメニュー\n番号を入れてください\n") - win.putSentakusi(menu_sentakusi.values) - choice = win.getAns - win.setpos(0,0) - if menu_sentakusi[choice] == "play" - win.addstr("ジャンルを決めてください(複数選択可能、qで入力終了\n") - win.addstr("もう一度選ぶと選択解除)\n")#refreshはquestionに - cursor_position =[win.cury,win.curx] - while true - win.setpos(*cursor_position) ##* s e t "p o" s *##setopsって書くとそのエラーすっごく見つけづらい - win.putSentakusi(play_sentakusi) - choice = win.getAns - break if choice == "q" && type_list != [] - redo if choice.class == String - play_choice = play_sentakusi[choice-1] - already_chosen = (type_list.include?(play_choice)) - if play_choice #- 選択、解除のトグル部分 -# - type_list << play_choice #打つ内容に紐付いた文字を格納 - type_list.delete(play_choice)if already_chosen + win = Window.new(32,60,7,10) + while true + win.addstr("タイピングです。\nメニュー\n番号を入れてください\n") + win.putSentakusi(menu_sentakusi.values) + choice = win.getAns + win.setpos(0,0) + if menu_sentakusi[choice] == "play" + win.addstr("ジャンルを決めてください(複数選択可能、qで入力終了\n") + win.addstr("もう一度選ぶと選択解除)\n")#refreshはquestionに + cursor_position =[win.cury,win.curx] + while true + win.setpos(*cursor_position) ##* s e t "p o" s *##setopsって書くとそのエラーすっごく見つけづらい + win.putSentakusi(play_sentakusi) + choice = win.getAns + break if choice == "q" && type_list != [] + redo if choice.class == String + play_choice = play_sentakusi[choice-1] + already_chosen = (type_list.include?(play_choice)) + if play_choice #- 選択、解除のトグル部分 -# + type_list << play_choice #打つ内容に紐付いた文字を格納 + type_list.delete(play_choice)if already_chosen + end + win.addstr(sprintf("\n選択済み:%s\n",type_list.join(",")) ) + win.refresh end - win.addstr(sprintf("\n選択済み:%s\n",type_list.join(",")) ) + odai_display_list = type_list.collect{|type|sentence[type]}.flatten.compact + odai_utu_list = type_list.collect do|type| + sentaku = type.sub(/\(.*\)/,"").to_s # カッコを外す + sentence_utu[sentaku] + end.flatten.compact + + odai_length = odai_display_list.length # 問題数を拾っている + win.clear + win.addstr(sprintf("何問やりますか(最大%d問)\n",[odai_length,20].min))#数字変換のCSVが20までのため + until kaisu != "q" && kaisu >= 1 && kaisu <= odai_length + kaisu = win.getAns + win.setpos(1,0) + end + win.addstr(kaisu.to_s) + win.addstr("\nなにか打つと開始!!\n") + win.getch + win.clear + refresh + #-=* タイピング本体 *=-# + number = 0 #お題の番号 #文字の様子 -> 入力前太字。入力後普通、ミス下線 + start_time = Time.now.to_i + kaisu.times do + number = rand(0..(odai_length-1) ) #この回のループで出すお題の番号 + odai = {display: odai_display_list[number],utu: odai_utu_list[number]}#この回のループで出すお題のハッシュ + ch_count = 0 #今カーソルのある文字の番号 + win.setpos(0,0) + win.addstr_sousyoku([A_BOLD],odai[:display]+"\n") + cursor_position =[win.cury,win.curx] + win.addstr_sousyoku([A_DIM,A_BOLD],odai[:utu]) + #-- 入力と反映 --# + while odai[:utu].length > ch_count + win.setpos(cursor_position[0],(cursor_position[1])+ch_count) + win.refresh + input = getch + if input == odai[:utu][ch_count] + win.addch(odai[:utu][ch_count])unless miss_now + win.addstr_sousyoku([A_UNDERLINE],odai[:utu][ch_count])if miss_now + win.setpos(win.cury+1,win.curx) + win.deleteln + ch_count += 1 ; miss_now = false + win.refresh + else + miss_all << odai[:utu][ch_count] + win.setpos(win.cury+1,win.curx) + print("\e[2m") + win.addstr(input) + win.setpos(win.cury,win.curx+1) + win.clrtoeol + win.refresh + print("\e[m") + miss_now = true + end + end + win.clear + odai_length -= 1 + odai_display_list.delete_at(number)#2回出題を防ぐ + odai_utta << odai_utu_list.delete_at(number)##for最終行## + end + #-=* 結果表示の準備 *=-# + finish_time = Time.now.to_i + keikajikan = finish_time - start_time + miss_result = miss_all.tally + miss = {syousai:{chars: miss_result.keys, kaisu: miss_result.values}, + kaisu: miss_all.length} + utu = {perfect: odai_utta.join.length, + seitou: (odai_utta.join.length) - miss[:kaisu], + kaisu: (odai_utta.join.length) + miss[:kaisu]} + seidaritu = (utu[:perfect].to_f/utu[:kaisu].to_f)*100 + point = [(60*(utu[:perfect]-miss[:kaisu])/keikajikan).to_i,0].max #trr参考です。 + win.resize((lines)+5,60) + win.clear + win.setpos(1,10) + #-- 結果表示 --# + win.addstr_sousyoku([A_BOLD],"結果\n") + win.addstr("かかった時間: #{keikajikan}秒(1問あたり: #{keikajikan/kaisu}秒,1打あたり: #{(keikajikan/(utu[:kaisu].to_f)).truncate(3)}秒),\nミス: #{miss[:kaisu]}回,正打率: #{seidaritu.truncate(2)}%(パーフェクト#{utu[:perfect]}字、打数#{utu[:kaisu]}打)\n得点: #{point}点\n") + miss_kaisu_with_unit = (miss[:syousai][:kaisu].join("回,").to_s)+"回"#String + win.addstr("ミスの詳細: ") + win.addstr_sousyoku([A_BOLD,A_UNDERLINE],"PERFECT!!\n")if miss[:kaisu] == 0 + unless miss[:kaisu] == 0 + win.addstr("\n") + win.putSentakusi(miss_kaisu_with_unit.split(","), miss[:syousai][:chars]) + end + win.refresh + + elsif menu_sentakusi[choice] == "about" + win.clear + for i in about["about"] + addstr(sprintf("%s\n",i)) + end + refresh + elsif menu_sentakusi[choice] == "exit" + break + else#`if menu_sentakusi[choice]'のelse + win.addstr("未実装か存在しない選択肢です。\n") win.refresh end - odai_display_list = type_list.collect{|type|sentence[type]}.flatten.compact - odai_utu_list = type_list.collect do|type| - sentaku = type.sub(/\(.*\)/,"").to_s # カッコを外す - sentence_utu[sentaku] - end.flatten.compact - - odai_length = odai_display_list.length # 問題数を拾っている + getch + clear win.clear - win.addstr(sprintf("何問やりますか(最大%d問)\n",[odai_length,20].min))#数字変換のCSVが20までのため - until kaisu != "q" && kaisu >= 1 && kaisu <= odai_length - kaisu = win.getAns - win.setpos(1,0) - end - win.addstr(kaisu.to_s) - win.addstr("\nなにか打つと開始!!\n") - win.getch refresh - #-=* タイピング本体 *=-# - number = 0 #お題の番号 #文字の様子 -> 入力前太字。入力後普通、ミス下線 - start_time = Time.now.to_i - kaisu.times do - number = rand(0..(odai_length-1) ) #この回のループで出すお題の番号 - odai = {display: odai_display_list[number],utu: odai_utu_list[number]}#この回のループで出すお題のハッシュ - ch_count = 0 #今カーソルのある文字の番号 - win.setpos(0,0) - win.addstr_sousyoku([A_BOLD],odai[:display]+"\n") - cursor_position =[win.cury,win.curx] - win.addstr_sousyoku([A_DIM,A_BOLD],odai[:utu]) - #-- 入力と反映 --# - while odai[:utu].length > ch_count - win.setpos(cursor_position[0],(cursor_position[1])+ch_count) - win.refresh - input = getch - if input == odai[:utu][ch_count] - win.addch(odai[:utu][ch_count])unless miss_now - win.addstr_sousyoku([A_UNDERLINE],odai[:utu][ch_count])if miss_now - win.setpos(win.cury+1,win.curx) - win.deleteln - ch_count += 1 ; miss_now = false - win.refresh - else - miss_all << odai[:utu][ch_count] - win.setpos(win.cury+1,win.curx) - print("\e[2m") - win.addstr(input) - win.setpos(win.cury,win.curx+1) - win.clrtoeol - win.refresh - print("\e[m") - miss_now = true - end - end - win.clear - odai_length -= 1 - odai_display_list.delete_at(number)#2回出題を防ぐ - odai_utta << odai_utu_list.delete_at(number)##for最終行## - end - #-=* 結果表示の準備 *=-# - finish_time = Time.now.to_i - keikajikan = finish_time - start_time - miss_result = miss_all.tally - miss = {syousai:{chars: miss_result.keys, kaisu: miss_result.values}, - kaisu: miss_all.length} - utu = {perfect: odai_utta.join.length, - seitou: (odai_utta.join.length) - miss[:kaisu], - kaisu: (odai_utta.join.length) + miss[:kaisu]} - seidaritu = (utu[:perfect].to_f/utu[:kaisu].to_f)*100 - point = [(60*(utu[:perfect]-miss[:kaisu])/keikajikan).to_i,0].max #trr参考です。 - win.resize((lines)+5,60) - win.clear - win.setpos(1,10) - #-- 結果表示 --# - win.addstr_sousyoku([A_BOLD],"結果\n") - win.addstr("かかった時間: #{keikajikan}秒(1問あたり: #{keikajikan/kaisu}秒,1打あたり: #{(keikajikan/(utu[:kaisu].to_f)).truncate(3)}秒),\nミス: #{miss[:kaisu]}回,正打率: #{seidaritu.truncate(2)}%(パーフェクト#{utu[:perfect]}字、打数#{utu[:kaisu]}打)\n得点: #{point}点\n") - miss_kaisu_with_unit = (miss[:syousai][:kaisu].join("回,").to_s)+"回"#String - win.addstr("ミスの詳細: ") - win.addstr_sousyoku([A_BOLD,A_UNDERLINE],"PERFECT!!\n")if miss[:kaisu] == 0 - unless miss[:kaisu] == 0 - win.addstr("\n") - win.putSentakusi(miss_kaisu_with_unit.split(","), miss[:syousai][:chars]) - end - win.refresh - - elsif menu_sentakusi[choice] == "about" - for i in about["about"] - addstr(sprintf("%s\n",i)) - end - refresh - else#`if menu_sentakusi[choice]'のelse - win.addstr("未実装か存在しない選択肢です。\n") win.refresh end + win.clear + clear + win.refresh + refresh ensure close_screen end diff --git a/happyou/csquiz.rb b/happyou/csquiz.rb new file mode 100755 index 0000000..c9d1d61 --- /dev/null +++ b/happyou/csquiz.rb @@ -0,0 +1,210 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +# 通常バージョンです +# 改良しようとしたけどやばいことになったのでやばい方は避難させといた + + +require 'csv' +require 'roo' + +ods = Roo::Spreadsheet.open("quizod.ods") #odsをもってくる +neta = CSV.parse(ods.to_csv, :headers => true) #odsをcsvにする + +fuseikai = 0 +def wrong() + puts"不正解!" + sleep(0.5) + +end + + # ans = answer,opt = row["オプション"],san = santaku,seikai = row["答え"],fu = fuseikaiと書きたいけど無理だった +def isRightAns(ans,opt,san,seikai,fu) + + ansIsA = (ans == san[0]) # この変数群 + ansIsB = (ans == san[1]) # カッコ付きはTF、カッコ無しはその他の値 + ansIsC = (ans == san[2]) # A,B,Cは選択肢の文字を仮で表している + + alreadySantaku = (fu >= 3) + ansIs1 = (ans == "1") + ansIs2 = (ans == "2") + ansIs3 = (ans == "3") + + ansAry = ans.chars + ansIsEmpty = (ansAry.empty?) + ansLength = ans.length + santakuNumbers = ["1","2","3"] + santakuTotalLength = san.join.length + + ansHasA = (ans.include?(san[0]))if san[0] # sanにnilがあるとinclude?で + ansHasB = (ans.include?(san[1]))if san[1] # エラーになるのでこうなった + ansHasC = (ans.include?(san[2]))if san[2] + + # ansIs123わかりにくくてすいません。回答に123が1個ずつあればOKを表しています + ansIs123 = ((ansAry + santakuNumbers).tally == {"1" =>2,"2" =>2,"3" =>2}) + ansIsABC = (ansHasA && ansHasB && ansHasC && ansLength == santakuTotalLength) + #ansIs順不同 + + selectNumber = (ans.to_i)-1 + select = san[selectNumber] + + #文字で答えた場合 || 番号で答えた場合 + if opt =~/(すべて)/ + return (ansIsABC) || + (ansIs123 && alreadySantaku) + + elsif opt =~ /(どれかひとつ)/ + return ([ansIsA,ansIsB,ansIsC].one?) || + ([ansIs1,ansIs2,ansIs3].one?) + + else #通常の三択 + return false if ans == "" + return (ans == seikai) || (select == seikai && alreadySantaku) + + end + +end + + +def putAnswer(row,santaku) + if row["答え"] != nil # 正解表示(通常) + printf("正解は%sでした。\n",row["答え"]) + return + end + # 以下では row["答え"] = nil + if row["オプション"] =~ /(すべて)/ # 正解表示(すべて) + printf("正解は%s,%s,%sすべてでした。\n",santaku[0],santaku[1],santaku[2]) + return + + elsif row["オプション"] =~ /(どれかひとつ)/ # 正解表示(どれか) + printf("正解は%s,%s,%sの中からひとつでした。\n",santaku[0],santaku[1],santaku[2]) + return + end +end + + +setumei = ["カスタムクイズ", + " 説明", + "専用のodsを使うことで、自由にクイズを作ることができます。", + "odsでつくったクイズが出題されるクイズです。", + "選択肢を出す場合、今は出せる選択肢は3つのみとなっております。", + "odsでの操作はodsに書いているのでそちらを見てください。", + "enterを押すと始まります。" + ] + +for i in setumei + puts i +end +gets + +countAns = 0 +countRight = 0 + +count = 0 # 今何問目なのか +print("\e[2J") +print("\e[H") + +startTime = Time.now.to_i +neta.each{|row| + + if row["オプション"] == "表示物" + printf("%s\n",row["問題"]) + gets + print("--------------------------\n") + next + end + count += 1 + dasita = 0 + comeback = 0 + printf("第%d問\n",count) + printf("%s\n", row["問題"]) + santaku = [row["三択1"], row["三択2"], row["三択3"]] + fuseikai = 0 # fuseikai >= 3で三択表示 + kaitou = nil + + while true + + #入力と三択システム + if comeback == 1 + wrong + + end + if row["オプション"] =~ /(三択なし)/ # 意地悪問題がいい人へ + dasita = 1 + + elsif ( fuseikai == 3 || row["オプション"] =~ /(三択)/ ) && + dasita != 1 + if row["オプション"] =~ /(三択)/ + fuseikai = 3 + end + num = 1 # 選択肢の番号 + for i in santaku + printf("%d => %s\n",num,i) + num += 1 + end + dasita = 1 # dasitaが1 =「三択出した」 2回以上の三択表示を防ぐ + end + + print"答えを入力..." + kaitou = gets.chomp + countAns += 1 + + if row["オプション"] !~ /(判定なし)/ + if isRightAns(kaitou,row["オプション"],santaku,row["答え"],fuseikai) + puts"正解!!" + countRight += 1 + sleep(0.5) + break + else + fuseikai += 1 + wrong + if row["オプション"] !~ /(1回だけ)/ + print("\e[2A") # 2行上 + print("\e[J") # 下のやつを消す + end + end + end + if row["オプション"] =~ /(正解を出す)/ + putAnswer(row,santaku) + end + if row["オプション"] =~ /(1回だけ|判定なし)/ + break + end + + end + if row["解説"] + printf("%s\n",row["解説"]) + gets + print"\e[1A" + end + + print("--------------------------\n") #何個でもいい仕切りの機能 + } + +# 終了時演出の変数の準備 +finishTime = Time.now.to_i + +text = neta["変更テキスト"][0] +finish = neta["終了時演出"][0] + +seitouritu = (((countRight.to_f)/(countAns.to_f))*100).truncate(1) +keikajikan = (finishTime - startTime) +heikinjikan = ((keikajikan.to_f)/(count.to_f)).truncate(1) + + +# 終了時演出の表示 + printf("正解数: %d回/%d回中 ",countRight,countAns)if finish =~ /(結果表示)/ + + printf("正答率: #{seitouritu}%% ")if finish =~ /(正答率)/ +print"\n" if finish =~ /(正解表示|正答率)/ + printf("経過時間: %d秒 ",keikajikan)if finish =~ /(経過時間)/ + + printf("平均回答時間: #{heikinjikan}秒 ")if finish =~ /(平均時間)/ + +print"\n" +if text + printf("%s\n",text)if text != "なし" +else + puts"終了!!おつかれさまでした!" +end +# おつかれさまでした!! diff --git a/happyou/science.ods b/happyou/science.ods new file mode 100644 index 0000000..3e8f10b --- /dev/null +++ b/happyou/science.ods Binary files differ diff --git a/happyou/social.ods b/happyou/social.ods new file mode 100644 index 0000000..4ecf9d2 --- /dev/null +++ b/happyou/social.ods Binary files differ diff --git a/happyou/ume_happyou.rb b/happyou/ume_happyou.rb index 85ad3c4..86a5478 100755 --- a/happyou/ume_happyou.rb +++ b/happyou/ume_happyou.rb @@ -45,7 +45,7 @@ end delete refresh - end + end end def cprint(cc,cy,cx,ct) @@ -59,7 +59,7 @@ x = cols / 2 + cn y = 4 sentaku = 1 - while 1 + while 1 #1 printf("\e[1;37m") setpos(y,x) addstr(">") @@ -90,7 +90,7 @@ sentaku = 0 init_screen begin - while 1 + while 1#2 delete curs_set(0) noecho @@ -100,14 +100,19 @@ cprint("\e[94m", 6,cols / 2 -2,"計算") cprint("\e[92m", 8,cols / 2 -5,"豆知識辞典") cprint("\e[95m",10,cols / 2 -2,"電卓") - cprint("\e[m" ,12,cols / 2 -2,"終了") - sentaku = choice(4,12,-7) - if sentaku == 5 + cprint("\e[96m",12,cols / 2 -5,"理科・社会") + cprint("\e[m" ,14,cols / 2 -2,"終了") + sentaku = choice(4,14,-7) + if sentaku == 6 # 終了 break end loding(1,2) - if sentaku == 1 - while 1 + if sentaku == 1 # タイピング + close_screen + system("ruby chinamini.rb") + init_screen +=begin + while 1#3 delete refresh cprint("\e[1;4;31m",1,cols / 2 -5,">-=未定=-<") @@ -129,8 +134,9 @@ end loding(1,2) redo - elsif sentaku == 2 - while 1 +=end + elsif sentaku == 2 # 計算 + while 1#4 delete cprint("\e[1;4;34m",1,cols / 2 -5,">-=計算=-<") cprint("\e[34m",4,cols / 2 -7,"足し算・引き算") @@ -138,9 +144,10 @@ cprint("\e[34m",8,cols / 2 -2,"設定") cprint("\e[m",10,cols / 2 -2,"戻る") sentaku = choice(4,10,-9) - if sentaku == 5 + addstr sentaku.to_s + if sentaku == 3 redo - elsif sentaku == 6 + elsif sentaku == 4 break end cprint("\e[1;37m",lines / 2,cols / 2 -14,"どれかのキーを押してスタート") @@ -188,8 +195,13 @@ end loding(1,2) redo - elsif sentaku == 3 - while 1 + elsif sentaku == 3 # 豆知識辞典 + close_screen + print"\e[m" + system("ruby j2114_last.rb") + init_screen +=begin + while 1#5 delete cprint("\e[1;4;32m",1,cols / 2 - 5,">-=未定=-<") cprint("\e[m",4,cols / 2 -2,"戻る") @@ -199,7 +211,13 @@ end end loding(1,2) - elsif senttaku == 4 +=end + elsif sentaku == 4 # 電卓 + close_screen + print"\e[m" + system("ruby j2124_last.rb") + init_screen + elsif sentaku == 5 # 理科・社会 end end delete diff --git a/odquiz.rb b/odquiz.rb index dbc3bdb..c7e8e44 100755 --- a/odquiz.rb +++ b/odquiz.rb @@ -37,8 +37,8 @@ alreadySantaku = (fu >= 3) # ansIs1 = - ansIs2 = (ans == "2") - ansIs3 = (ans == "3") + # ansIs2 = (ans == "2") + # ansIs3 = (ans == "3") ansAry = ans.chars ansLength = ans.length @@ -49,21 +49,26 @@ if san[0] #どうしようか,,まとまるkun aboutAnsA ={ansIsA: (ans == san[0]), ansHasA: (Regexp.new(san[0]) =~ ans), - ansIs1: (ans == "1"), ansHas1: (Regexp.new( "1" ) =~ ans)} + ansIs1: (ans == "1"), ansHas1: (Regexp.new( "1") =~ ans)} end if san[1] - aboutAnsB ={ansIsB: (ans == san[1]), ansHasB: (Regexp.new(san[1]) =~ ans),} + aboutAnsB ={ansIsB: (ans == san[1]), ansHasB: (Regexp.new(san[1]) =~ ans), + ansIs2: (ans == "2"), ansHas2: (Regexp.new( "2") =~ ans)} end if san[2] - aboutAnsC ={ansIsC: (ans == san[2]), ansHasC: (Regexp.new(san[2]) =~ ans),} + aboutAnsC ={ansIsC: (ans == san[2]), ansHasC: (Regexp.new(san[2]) =~ ans), + ansIs3: (ans == "3"), ansHas3: (Regexp.new( "3") =~ ans)} end + p aboutAnsA,aboutAnsB,aboutAnsC #ansHasA = (ans.include?(san[0]))if san[0] # sanにnilがあるとinclude?で #ansHasB = (ans.include?(san[1]))if san[1] # エラーになるのでこうなった #ansHasC = (ans.include?(san[2]))if san[2] - ansHasAll = ([ansHasA,ansHasB,ansHasC].compact).all? + aboutAllAns = {ansHasAll: [aboutAnsA[:ansHasA],aboutAnsB[:ansHasB],aboutAnsC[:ansHasC]].compact.all?, + ansIsAllNumbers: (ansAry + santakuNumbers).tally == {}} + #ansHasAll =( ).all? - ansIsAllNumbers = ((ansAry + santakuNumbers).tally == {}) + #ansIsAllNumbers = () ansIsAll = (ansHasAll && ansLength == santakuTotalLength) #ansIs順不同 @@ -95,23 +100,25 @@ end # 以下では row["答え"] = nil if row["オプション"] =~ /(すべて)/ # 正解表示(すべて) - printf("正解は%s,%s,%sすべてでした。\n",santaku[0],santaku[1],santaku[2]) + printf("正解は%sすべてでした。\n",*santaku) return elsif row["オプション"] =~ /(どれかひとつ)/ # 正解表示(どれか) - printf("正解は%s,%s,%sの中からひとつでした。\n",santaku[0],santaku[1],santaku[2]) + printf("正解は%sの中からひとつでした。\n",*santaku) return end end def makeSelectHash(keyAry,valAry) - if keyAry.compact.length < 3 - keyAry.compact! - valAry =valAry.values_at(0..(keyAry.length)-1) + keyAry.compact! + valAry.compact! + newHash = {} + newAry = [] + keyAry.zip(valAry).each do|key,val| + newAry << [key,val]if key && val # なんかちゃう? end - mergeAry = [keyAry,valAry].transpose - newHash = mergeAry.to_h.compact - return newHash + newAry.compact.to_h + end setumei = ["カスタムクイズ", @@ -155,9 +162,6 @@ santaku.compact! fuseikai = 0 # fuseikai >= 3で三択表示 kaitou = nil - p sanHash - p sanHash[:'1'] - break while true #入力と三択システム