diff --git "a/\043hello13.rb\043" "b/\043hello13.rb\043" new file mode 100755 index 0000000..7543916 --- /dev/null +++ "b/\043hello13.rb\043" @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- +require 'csv' +CSV.open("output.csv", "w") do |csv| + csv << ["a", "b", "c"] + csv << [1, 2, 4] + csv << ["1", "1", "3", "0"] +end +data = CSV.read("output.csv", headers: true) + +data.each do |row| + printf("%s" + "%s") +end diff --git a/bun.csv b/bun.csv new file mode 100644 index 0000000..6bf433f --- /dev/null +++ b/bun.csv @@ -0,0 +1 @@ +おやつ何がいい,ポッキー diff --git a/keisan7.rb b/keisan7.rb new file mode 100755 index 0000000..ee351da --- /dev/null +++ b/keisan7.rb @@ -0,0 +1,95 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- +require "curses" +def keisan(shiki, ichi=0, ans=0.0) + suuji=[]; enzan=[]; yuusen={'+'=>1,'-'=>1,'*'=>2,'/'=>2} + tekiyou = ->{ + b=suuji.pop; a=suuji.pop; e=enzan.pop + suuji << (e=='+' ? a+b : e=='-' ? a-b : e=='*' ? a*b : a/b) + } + yomu_atai = lambda do + ichi += 1 while shiki[ichi]==' ' + raise "式の途中で終わりました" unless shiki[ichi] + if shiki[ichi,3] && shiki[ichi,3].downcase=="ans" + next [ans, ichi+3] + end + if shiki[ichi]=='-' + ichi += 1 + v, ichi = yomu_atai.call + next [-v, ichi] + end + if shiki[ichi]=='(' + v, ichi2 = keisan(shiki, ichi+1, ans) + raise "閉じカッコ ) がありません" unless shiki[ichi2]==')' + next [v, ichi2+1] + end + hajime=ichi + ichi += 1 while shiki[ichi] && shiki[ichi]=~/[0-9.]/ + raise "数値が見つかりません" if hajime==ichi + [shiki[hajime...ichi].to_f, ichi] + end + atai_hoshii=true + while ichi < shiki.length + ichi += 1 while shiki[ichi]==' ' + break if ichi>=shiki.length || shiki[ichi]==')' + if atai_hoshii + v, ichi = yomu_atai.call + suuji << v + atai_hoshii=false + next + end + e=shiki[ichi] + raise "演算子が不正です" unless yuusen[e] + while enzan.any? && yuusen[enzan[-1]] && yuusen[enzan[-1]] >= yuusen[e] + tekiyou.call + end + enzan << e + ichi += 1 + atai_hoshii=true + end + tekiyou.call while enzan.any? + [suuji[0], ichi] +end + +include Curses +init_screen +cbreak +noecho +curs_set(0) +nyuryoku=""; messeji="Enter=計算 / BS=削除 / Ctrl+L=クリア / q=終了"; kekka=""; ans=0.0 +begin + loop do + clear + setpos(0,0); addstr("curses電卓(+-*/() 小数)"[0,cols-1]) + setpos(1,0); addstr(messeji[0,cols-1]) + setpos(2,0); addstr(("> "+nyuryoku)[0,cols-1]) + setpos(3,0); addstr(("= "+kekka)[0,cols-1]) + key=getch + case key + when 'q','Q' then break + when 10,13 + begin + shiki = nyuryoku.strip + shiki = ans.to_s if shiki.empty? + shiki = ans.to_s + shiki if shiki.start_with?('+','*','/') + kotae, owari = keisan(shiki, 0, ans) + owari += 1 while shiki[owari]==' ' + raise "式の後ろに余計な文字があります" if owari < shiki.length + ans = kotae + kekka = kotae.to_s; nyuryoku=""; messeji="計算しました(ans=#{ans})" + rescue => e + kekka = ""; nyuryoku=""; messeji="エラー: #{e.message}" + end + when 12 + nyuryoku=""; kekka=""; messeji="クリアしました" + when KEY_BACKSPACE,127,8 + nyuryoku = nyuryoku[0...-1] + when Integer + nyuryoku << key.chr if key>=32 && key<127 + when String + nyuryoku << key if key.ord>=32 && key.ord<127 + end + end +ensure + close_screen +end diff --git a/random.rb b/random.rb new file mode 100755 index 0000000..7385232 --- /dev/null +++ b/random.rb @@ -0,0 +1,57 @@ +#!/usr/bin/env ruby +# -*- coding; utf-8 -*- +require 'csv' +data = CSV.read("bun.csv", headers: true) +CSV.open("bun.csv", "w") do |csv| +puts "ランダムに任せて適当に決めよう" +puts "1.ランダムに答える 2.ランダムを作る" +u = gets.chomp.to_i +row = data.sample +if u == 1 + srand() + a = rand(3) + 1 + if a == 1 + printf("%s\n", row["1"]) + kotae1 = row["1.5"] + kotae1n = gets.chomp + if kotae1n==kotae1 + printf("正解!\n") + else + printf("不正解、答えは" kotae1 "でした") + end + end + if a == 2 + printf("%s\n", row["2"]) + kotae2 = ("%s\n", row["2.5"]) + kotae2n = gets.chomp + if kotae2n==kotae2 + printf("正解!\n") + else + printf("不正解、答えは\n" kotae2) + end + end + if a == 3 + printf("%s\n", row["3"]) + kotae3 = ("@s\n",row["3.5"]) + kotae3n = gets.chomp + if kotae3n==kotae3 + print("正解!\n") + else + printf("不正解、答えは %s でした\n" row["3.5"]) + end + end +elsif u == 2 + print("使い方を見ますか? 1.見る 2.見ない\n") + tukaikata = gets.chomp + if tukaikata == 1 + print("使い方は、1, 問題1, 1.5, 答え1, 2, 問題2, 2.5, 答え2, 3, 問題3, 3.5 答え3 1.5が打ち終わったらエンターキーを押すと改行されるので次の2.5とか3.5をそれでまた打ってください。\n") + end + print("問題を入れてください\n") + mondai1 = gets.chomp + csv << [mondai1] + mondai1 = gets.chomp + csv << [mondai1] + mondai1 = gets.chomp + csv << [mondai1] + print("問題が完成しました。") +end diff --git a/random2.rb b/random2.rb new file mode 100644 index 0000000..b806962 --- /dev/null +++ b/random2.rb @@ -0,0 +1,35 @@ +require "csv" + +data = CSV.read("bun.csv") # ← headers は使わない(Array前提) + +puts "1.ランダムに答える 2.問題を作る" +u = gets.chomp.to_i + +if u == 1 + row = data.sample # row は Array + mondai = row[0] # 問題 + kotae = row[1] # 答え + + puts mondai + print "答え: " + user = gets.chomp + + if user == kotae + puts "正解!" + else + puts "不正解" + puts "正解は#{kotae}" + end + +elsif u == 2 + print "問題: " + mondai = gets.chomp + print "答え: " + kotae = gets.chomp + + CSV.open("bun.csv", "a") do |csv| + csv << [mondai, kotae] + end + + puts "追加した" +end