diff --git a/bin/quiz b/bin/quiz new file mode 100755 index 0000000..7349bd8 --- /dev/null +++ b/bin/quiz @@ -0,0 +1,2 @@ +#!/bin/sh +exec `dirname $0`/../share/qexam/quiz "$@" diff --git a/share/qexam/calc-1.txt b/share/qexam/calc-1.txt new file mode 100644 index 0000000..3af7d84 --- /dev/null +++ b/share/qexam/calc-1.txt @@ -0,0 +1,9 @@ +Shift_JIS:主に Microsoft のOSやアプリケーションで使用される文字コード規格 +UTF-8:日本語だけでなく、様々な言語の文字コードを定めた国際的な規格 +CSV:1行単位のデータの集まりで行内の項目(カラム)がカンマで区切られているデータファイル形式 +C-c:表計算ソフトでコピーのショートカットキー +C-x:表計算ソフトで切り取りのショートカットキー +C-v:表計算ソフトで貼り付けのショートカットキー +C-z:表計算ソフトで操作の取消(アンドゥ)のショートカットキー +Del:表計算ソフトでセルの内容を単純消去するときに押すキー +C-a:表計算ソフトで全セルの内容を選択するときのショートカットキー diff --git a/share/qexam/command-1.txt b/share/qexam/command-1.txt new file mode 100644 index 0000000..b725f75 --- /dev/null +++ b/share/qexam/command-1.txt @@ -0,0 +1,6 @@ +cd:ディレクトリを移動するコマンドは +mkdir:ディレクトリを作成するコマンドは +cat:ファイルの中味を出力するコマンドは +less:ファイルの中味を対話的に見るコマンドは +.:カレントディレクトリ(今いるディレクトリ)を表す記号は +..:親ディレクトリ(一つ上のディレクトリ)を表す記号は diff --git a/share/qexam/command-2.txt b/share/qexam/command-2.txt new file mode 100644 index 0000000..8e92121 --- /dev/null +++ b/share/qexam/command-2.txt @@ -0,0 +1,7 @@ +chmod:ファイルの属性を変更するコマンドは ++x:ファイルに実行属性を付けるときに付けるシンボル表記は +-l:ls コマンドで日付やファイルサイズを出すためのオプションは +-t:ls コマンドでファイルを日付順で出すためのオプションは +-r:ls コマンドでファイルの並べ換えを逆順にするオプションは +rm:ファイルを消すコマンドは +mv:ファイルの名前を変えたりディレクトリを移動したりするコマンドは diff --git a/share/qexam/css.txt b/share/qexam/css.txt new file mode 100644 index 0000000..5ef9c59 --- /dev/null +++ b/share/qexam/css.txt @@ -0,0 +1,8 @@ +text-align:文字の割り付け位置を決定するプロパティ +color:文字の色を決めるプロパティ +background-color:その要素の背景色を決めるプロパティ +background-image:その要素の背景画像を決めるプロパティ +border:要素の周囲の枠のスタイルを決めるプロパティ +margin:要素の周囲の枠と別の要素との間隔を決めるプロパティ +padding:要素の周囲の枠と中味との隙間を決めるプロパティ +p.abc:

...

に適用したい場合のルール diff --git a/share/qexam/data-1.txt b/share/qexam/data-1.txt new file mode 100644 index 0000000..2957ceb --- /dev/null +++ b/share/qexam/data-1.txt @@ -0,0 +1,30 @@ +2:'スマートフォンが普及するきっかけとなったiPhoneはどこが開発したか? + + 1.Google + 2.Apple + 3.Facebook + 4.Amazon.com' +3:'ビッグデータとは一般的にどのようなデータを指すか? + + 1.宇宙の広さや年齢などの非常に値の大きな数値データ + 2.原子の質量や大きさなどの非常に値の小さな数値データ + 3.ネットワーク上に蓄積された大量のデータ + 4.スポーツくじBIGで当選するために活用するデータ' +2:'ビッグデータは21世紀の何と呼ばれているか? + + 1.石炭 + 2.石油 + 3.金 + 4.ダイヤモンド' +4:'日本でビッグデータの活用が遅れている主な原因は何か? + + 1.少子高齢化 + 2.インターネットの普及率が低い + 3.ビッグデータが国内に存在しない + 4.ビッグデータを分析できる人材が少ない' +1:'ビッグデータを分析してそこから有用な情報を引き出すことのできる人を何と呼ぶか? + + 1.データサイエンティスト + 2.データマイナー + 3.データリテラシー + 4.データロガー' diff --git a/share/qexam/data-2.txt b/share/qexam/data-2.txt new file mode 100644 index 0000000..3b848d5 --- /dev/null +++ b/share/qexam/data-2.txt @@ -0,0 +1,18 @@ +4:'光の三原色は以下の組み合わせのうちどれか + + 1.赤青黄 + 2.黄緑青 + 3.青赤白 + 4.赤緑青' +2:'画像を解析することでコンピュータに様々な機能を実現させる技術を何というか? + + 1.コンピュータエンジニアリング + 2.コンピュータグラフィックス + 3.コンピュータサイエンス + 4.コンピュータビジョン' +4:'デジタル画像についての文章で間違っているものを一つ選びなさい + + 1.デジタルカメラは受光素子というセンサで光の量を測定している + 2.画像は画素と呼ばれるタイルの集まりである + 3.AIによって画像中の物体を見分ける認識性能が向上している + 4.人間の能力を超えるほどの画像処理技術はまだ存在しない' diff --git a/share/qexam/data-3.txt b/share/qexam/data-3.txt new file mode 100644 index 0000000..a87084e --- /dev/null +++ b/share/qexam/data-3.txt @@ -0,0 +1,12 @@ +2:'マーケティングにおいて機械学習はどういう場面で活用されているか? + + 1.利益を社会に還元する + 2.損失を最小限に抑えて利益を最大にする + 3.災害による被害を予測して最小限に食い止める + 4.為替相場の変動を予測する' +4:'分析によると、企業の売上高と取引高の間にはどういう関係があることが分かったか? + + 1.比例関係 + 2.因果関係 + 3.信頼関係 + 4.無関係' diff --git a/share/qexam/data-4.txt b/share/qexam/data-4.txt new file mode 100644 index 0000000..705fa1c --- /dev/null +++ b/share/qexam/data-4.txt @@ -0,0 +1,15 @@ +4:'同じ物体を異なる点から撮影した2枚の画像を使って距離の情報を得るための方法を何というか? + + 1.移動平均法 + 2.モード法 + 3.モンテカルロ法 + 4.ステレオ法' +1:'画像処理の応用についての文章で間違っているものを一つ選びなさい + + 1.写真で撮影すると3次元の情報のうち時間の情報が失われて2次元の情報になる + 2.三角測量とは、2つの異なる位置 A, B から物体 C を見たときにできる + 三角形 ABC を使って距離を測る方法である + 3.画像解析によって得られた3次元情報を活用すると、もともと撮影していない + 自由視点からの画像を合成できる + 4.自由視点の技術と画像修復の技術を組み合わせて映像から動いている人だけを + 自動的に消すこともできる' diff --git a/share/qexam/data-5.txt b/share/qexam/data-5.txt new file mode 100644 index 0000000..421bf9c --- /dev/null +++ b/share/qexam/data-5.txt @@ -0,0 +1,12 @@ +2:'一般的な銀行には無いと思われる顧客のデータを一つ選びなさい + + 1.年齢 + 2.血液型 + 3.取引履歴 + 4.預金残高' +3:'銀行における顧客別損益分析は何に利用されているか? + + 1.信用リスクの評価 + 2.借金返済時期の予測 + 3.口座解約確率の予測 + 4.来店日の予測' diff --git a/share/qexam/data-6.txt b/share/qexam/data-6.txt new file mode 100644 index 0000000..b91280e --- /dev/null +++ b/share/qexam/data-6.txt @@ -0,0 +1,23 @@ +4:'BtoC(Business to Consumer)企業についての文章で間違っているものを一つ選びなさい + + 1.BtoCとは企業が一般消費者を対象に行うビジネス形態のことである + 2.BtoC企業は購入履歴やサイトへの訪問回数など、消費者の属性と行動が + 分かるビッグデータを持っている + 3.統計的手法で得られる顧客データのシンプルな特徴に基づいた + プロモーションには限界があるため、AIを + 活用した新しい視点からの分析が必要となってきている + 4.年間来店日数予測モデルとは、顧客の購入した商品によって年間の + 来店日数をマーケティング担当者が予測するモデルである' +3:'物体認識についての文章で間違っているものを一つ選びなさい + + 1.物体認識とは、画像から撮影された物体のカテゴリや名前を推定することである + 2.物体認識では、学習用の大量の画像データを使って特徴の抽出から + 識別までを一括で行う深層学習が利用される + 3.物体認識は、学習時に使われていない物体についても正確に認識ができる + 4.物体認識を使って画像に自動的にキャプションを付ける技術の研究が進んでいる' +3:'画像の生成器と識別器の2つを使って画像の生成と認識を自動で繰り返して学習するネットワークをなんというか? + + 1.CAN + 2.CNN + 3.GAN + 4.GUN' diff --git a/share/qexam/emacs.txt b/share/qexam/emacs.txt new file mode 100644 index 0000000..7a7d471 --- /dev/null +++ b/share/qexam/emacs.txt @@ -0,0 +1,7 @@ +C-x C-f:ファイルを開くキーは +C-x C-s:開いたファイルを保存するキーは +C-g:入力しかけたキーコマンドを中止するキーは +C-a:行の先頭に行くキーは +C-e:行の末尾に行くキーは +C-k:行末まで一気に削除するキーは +C-/:直前の編集操作を取り消すキー(アンドゥ)は diff --git a/share/qexam/html.txt b/share/qexam/html.txt new file mode 100644 index 0000000..d09cd64 --- /dev/null +++ b/share/qexam/html.txt @@ -0,0 +1,18 @@ +html:HTML文そのものを示す要素 +head:HTMLのヘッダとなる要素 +title:HTMLのタイトルを示す要素 +body:本文を示す要素 +h1:レベル1見出しとなる要素 +h2:レベル2見出しとなる要素 +p:段落を示す要素 +ul:番号なし箇条書きとなる要素 +ol:番号つき箇条書きとなる要素 +li:箇条書要素の中に配置し,項目となる要素 +table:表全体を表す要素 +tr:表の1行を示す要素 +td:表の1項目(一般項目)を示す要素 +th:表の見出し項目を示す要素 +img:画像をその位置にさし込む要素 +a:リンクを張るための要素 +href:a要素でリンク先を示すための属性 +src:img要素で画像のソースを示すため属性 diff --git a/share/qexam/qexam.rb b/share/qexam/qexam.rb new file mode 100755 index 0000000..7d261bf --- /dev/null +++ b/share/qexam/qexam.rb @@ -0,0 +1,169 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- +require 'csv' +require 'sequel' +require 'etc' +user = ENV["QEUSER"] || Etc.getlogin +gecos = "" +tbl = "exam" +cls="" +timeout=30 +hostname=(`hostname`||"local").sub(/\..*/, "").chomp +showrank = false +mailto = false +while /^-([a-z])/i =~ ARGV[0] + ARGV.shift + case $1 + when "m" # -m email@add.ress.domain + mailto = ARGV.shift + when "M" # Send Email to $0:h/MAILTO + mailto = IO.readlines(File.expand_path("MAILTO", File.dirname($0))).join + mailto.strip! + when "c" + cls = ARGV.shift.gsub(/\D/, "") + when "t" + timeout = ARGV.shift.to_i + when "T" + tbl = ARGV.shift.gsub(/[^a-zA-Z0-9_]/, "") + when "r" + showrank = true + end +end + +files = ARGV[0]&&ARGV[0]>"" ? ARGV : ["html", "css"] +point = tp = 0 +mydir=File.dirname($0) +stime = Time.now +File.umask(2) + +# Setup Database +# db = Sequel.connect("postgres://ruby_qexam@broy/ruby_qexam") +db = Sequel.connect("sqlite://./score.sq3") +sctbl, gtbl = db.from(tbl), db[:gecos] +db.transaction do + db.create_table?(tbl) { + String :user + Timestamp :time + String :host + Integer :score + Integer :mistake + Numeric :elapse + } + db.create_table?(:gecos) { + String :user + String :gecos + unique [:user] + } + begin + gecos = Etc.getpwnam(user).gecos.to_s + rescue + gecos = user + end + gtbl.where(user: user).delete + gtbl.insert(user: user, gecos: (gecos>'' ? gecos : user)) + if showrank && tbl + i = 0 + if cls > "" + # cls cannot have non-digit (cls.gsub(/\D/, "") was done) + mems = "(SELECT \"user\" FROM lects WHERE scode LIKE \"#{cls}%\")" + else + mems = "(SELECT DISTINCT \"user\" from #{tbl})" + end + if false then + r = db["SELECT c.user,gecos,coalesce(mine,9999) scr,coalesce(cnt,0) + FROM (SELECT a.user,mine,cnt + FROM #{mems} a + LEFT JOIN + (SELECT \"user\", min(elapse) mine, count(elapse) cnt + FROM #{tbl} GROUP BY user) b + ON a.user=b.user ORDER by mine) c + JOIN gecos g ON c.user=g.user ORDER BY scr"] + else + migi = sctbl.select(Sequel.as(:user, :muser), + Sequel.as(Sequel.function(:min, :elapse), :mine), + Sequel.as(Sequel.function(:count, :elapse), :cnt)).group(:user) + hidari = sctbl.select(:user).distinct + # r = sctbl.select(:user).distinct.join_table(:left, :exam) + # p migi.all, hidari.all + # p hidari.join(migi) + # Cannot use aliasing on lefter side of join + r = hidari.left_join(migi, :muser => :user).natural_join(gtbl). + select(:user, :gecos, + Sequel.as(Sequel.function(:coalesce, :mine, 9999), :scr), + Sequel.as(Sequel.function(:coalesce, :cnt, 0), :cnt)).order(:scr) + end + r.each do |row| + u=row[:user] + user==u and print("\e[33m") + printf("%3d %-10s|%-32s%8.2f%8d\n", i+=1, *row.values) + user==u and print("\e[m") + end + exit 0 + end +end + +miss = 0 +for f in files + pt = 0 + printf("====> %sに関する問題です <====\n", f) + qf = File.expand_path(f, mydir) + d = CSV.read(qf+".txt", :col_sep => ":", :quote_char => "'", + :encoding => 'utf-8') + d = d.shuffle + nQ = d.length + start = Time.now + limit = start + timeout*nQ + tp += nQ + while d[0] + q = d[0][0] + printf("[%d/%d] %s\n==> ", pt, nQ, d[0][1]) + a = STDIN.gets.strip + ## ptn = %r,^/, =~ a ? a : Regexp.quote(a) + ptn = Regexp.quote(a.gsub(/\s/, "")) + if Regexp.new("^"+ ptn +"$", true) =~ q.gsub(/\s/, "") then + puts "正解!" + d.shift + pt += 1 + sleep 1 + else + miss += 1 + printf("不正解です。\n正解は %s です。\n(Enterで次に進む)", q) + STDIN.gets + end + if Time.now > limit then + puts("時間切れです。") + break + end + print("\e[2J\e[1;1H") + d.shuffle! + end + point += pt +end +etime = Time.now +now = Time.at(etime.to_i) +elapse = etime-stime +el2 = elapse.round(2) + +sctbl.insert({ + user: user, time: now, host: hostname, score: point, + mistake: miss, elapse: el2}) +trial = sctbl.where(user: user).count +rank = sctbl.where(user: user).where(Sequel.expr(:elapse) < el2).count + # or .where{elapse() < el2} + # or .where{self.elapse < el2} +qname = files.join("+") + +printf("問題: %s - ", qname) +printf("%d回中 %d番目の記録\n", trial, rank+1) +printf("得点: %d/%d\n", point, tp) +printf("時間: %.2f杪\n", elapse) +printf("ミス: %d回\n", miss) + +db.disconnect +if mailto + open("| mail -s \"quiz-record of #{qname} by #{gecos}\" #{mailto}", "w") do |m| + m.print(<<~EOF) + #{user},#{point},#{elapse} + EOF + end +end diff --git a/share/qexam/quiz b/share/qexam/quiz new file mode 100755 index 0000000..48c068c --- /dev/null +++ b/share/qexam/quiz @@ -0,0 +1,32 @@ +#!/bin/sh +mydir=`dirname $0` +mydir=`(cd $mydir; pwd -P)` +myname=`basename $0` +qedir=$mydir +ropt='' +if false; then + while [ -n "$1" ]; do + case $1 in + -r) ropt='-r' ;; + -M) Mopt='-M' ;; + html) t=50; te=html args="html css" ;; + ruby) t=90; args="emacs command-1" ;; + ruby-*) t=60; te=${1%%-*}${1##*-} args=$1 ;; + calc-*) t=60; te=${1%%-*}${1##*-} args=$1 ;; + data-*) t=45; te=${1%%-*}${1##*-} args=$1 ;; + data) t=45; te=${1%%-*}${1##*-} + args="data-1 data-2 data-3 data-4 data-5 data-6" ;; + *) cat<<-EOF >&2 + Usage: $myname html|ruby-1|ruby-2 - Do exam + $myname -r html|ruby-1|ruby-2 - Show rank + EOF + exit 1 ;; + esac + shift + done +else + cd $HOME/Ruby + t=180; te=${1%%-*}${1##*-}; args=ruby-jd +fi +PATH=/usr/koeki/ruby/2.5.3/bin:$PATH +$qedir/qexam.rb -t $t -T "$te" $ropt $Mopt $args diff --git a/share/qexam/ruby-2.txt b/share/qexam/ruby-2.txt new file mode 100644 index 0000000..5a0379f --- /dev/null +++ b/share/qexam/ruby-2.txt @@ -0,0 +1,2 @@ +#!/usr/koeki/bin/ruby:(sime環境で)Rubyプログラムの1行目に書くのは +'-*- coding: utf-8 -*-':Rubyプログラムの2行目#の後に書く文字コードUTF-8指定は diff --git a/share/qexam/ruby-3.txt b/share/qexam/ruby-3.txt new file mode 100644 index 0000000..3f8b399 --- /dev/null +++ b/share/qexam/ruby-3.txt @@ -0,0 +1,11 @@ +/:割り算を行なう記号は +%:あまりを求める演算記号は ++=:数値を持つある変数に別の数値を足し込む演算記号は +true:「真」を意味するシンボルは +false:「偽」を意味するシンボルは +while:ある条件が成り立つ間処理を繰り返すための制御構造は +break:繰り返し処理を途中で抜けるときには? +**:べき乗を表す演算子は +==:2つの値が「等しい」かを調べる演算子は +&&:論理的に「かつ」を表す演算子は +||:論理的に「または」を表す演算子は diff --git a/share/qexam/ruby-4.txt b/share/qexam/ruby-4.txt new file mode 100644 index 0000000..85ee9f0 --- /dev/null +++ b/share/qexam/ruby-4.txt @@ -0,0 +1,9 @@ +gets:標準入力から文字列を読み込むメソッドは +to_i:文字列を整数に変換するメソッドは +to_f:文字列を浮動小数点数(実数)に変換するメソッドは +chomp:文字列末尾に改行文字があればそれを削るメソッドは +printf:文字列や数値を書式に従って変換して出力するメソッドは +%d:printfで10進数を出したいときに対応させる記号は +%f:printfで浮動小数点数(実数)を出したいときに対応させる記号は +%s:printfで文字列を出したいときに対応させる記号は +%x:printfで16進数を出したいときに対応させる記号は diff --git a/share/qexam/ruby-5.txt b/share/qexam/ruby-5.txt new file mode 100644 index 0000000..f368291 --- /dev/null +++ b/share/qexam/ruby-5.txt @@ -0,0 +1,9 @@ +.:正規表現で「任意の1字」を意味する記号は +[a-f]:正規表現で「小文字aからfまでのどれか1字にマッチ」させるパターンは +[^0-9]:正規表現で「0から9まで*以外*のどれか1字にマッチ」させるパターンは +*:正規表現で「直前のパターンが0回以上登場する」を意味する記号は ++:正規表現で「直前のパターンが1回以上登場する」を意味する記号は +?:正規表現で「直前のパターンが0回か1回登場する」を意味する記号は +\d:正規表現で「数字1字」を意味する記号列は +\s:正規表現で「空白1字」を意味する記号列は +\S:正規表現で「空白ではない1字」を意味する記号列は diff --git a/share/qexam/ruby-5b.txt b/share/qexam/ruby-5b.txt new file mode 100644 index 0000000..9cea1cd --- /dev/null +++ b/share/qexam/ruby-5b.txt @@ -0,0 +1,5 @@ +\d+:正規表現で「数字の1回以上続き」にマッチするパターンは +^[a-z]:正規表現で「行の先頭がaからzで始まる行」にマッチするパターンは +z$:正規表現で「zで終わる行」にマッチするパターンは +(.)\1:正規表現で「任意の1字が2回繰り返す」を表現するパターンは +ac\.jp:正規表現で「ac.jp」という文字列にマッチするパターンは diff --git a/share/qexam/ruby-6.txt b/share/qexam/ruby-6.txt new file mode 100644 index 0000000..f7eeb92 --- /dev/null +++ b/share/qexam/ruby-6.txt @@ -0,0 +1,8 @@ +x[1]=3:配列xの2番目の要素に3を代入する文は +length:配列の要素数を返すメソッドは size ともうひとつ何 +<<:配列の末尾に1つの要素を追加する記号は +sort:配列の要素を昇順に並び換えるメソッドは +reverse:配列の要素を逆順に並び換えるメソッドは +[1,3,5]:3つの要素、1と3と5で構成される配列を表現すると +2:配列 ["foo", "bar", "baz", "hoge"] の "baz" の位置の添字は +0:配列 ["foo", "bar", "baz", "hoge"] の "foo" の位置の添字は diff --git a/share/qexam/ruby-7.txt b/share/qexam/ruby-7.txt new file mode 100644 index 0000000..d3fbf23 --- /dev/null +++ b/share/qexam/ruby-7.txt @@ -0,0 +1,6 @@ +open:ファイルを開くときに使うメソッドは +|f|:開いたファイル情報を変数fに結び付けたい。どのようにfを括るか。 +r:ファイルを読込モードで開くためのシンボルは +w:ファイルを書き出しモードで開くためのシンボルは +a:ファイルを追記モードで開くためのシンボルは +end:ファイルを開いた処理ブロックを終わらせる場所には何を書く diff --git a/share/qexam/ruby-8.txt b/share/qexam/ruby-8.txt new file mode 100644 index 0000000..c82258a --- /dev/null +++ b/share/qexam/ruby-8.txt @@ -0,0 +1,10 @@ +32:2の5乗(2**5)は +64:2**6= +128:2**7= +256:2**8= +512:2**9= +1024:2**10= +2048:2**11= +65536:2**16= +32:スペース(ASCII空白)の文字コード(10進数)は +0x61:小文字aのASCIIコードを16進数表記で diff --git a/share/qexam/ruby-jd.txt b/share/qexam/ruby-jd.txt new file mode 100644 index 0000000..6029abc --- /dev/null +++ b/share/qexam/ruby-jd.txt @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby:(JD)Rubyプログラムの1行目に書くのは +/:割り算を行なう記号は +%:あまりを求める演算記号は ++=:数値を持つある変数に別の数値を足し込む演算記号は +true:「真」を意味するシンボルは +false:「偽」を意味するシンボルは +while:ある条件が成り立つ間処理を繰り返すための制御構造は +break:繰り返し処理を途中で抜けるときには? +==:2つの値が「等しい」かを調べる演算子は +gets:標準入力から文字列を読み込むメソッドは +to_i:文字列を整数に変換するメソッドは +to_f:文字列を浮動小数点数(実数)に変換するメソッドは +chomp:文字列末尾に改行文字があればそれを削るメソッドは +printf:文字列や数値を書式に従って変換して出力するメソッドは +%d:printfで10進数を出したいときに対応させる記号は +%s:printfで文字列を出したいときに対応させる記号は +length:配列の要素数を返すメソッドは size ともうひとつ何 +<<:配列の末尾に1つの要素を追加する記号は diff --git a/share/qexam/score.sq3 b/share/qexam/score.sq3 new file mode 100644 index 0000000..c35e70f --- /dev/null +++ b/share/qexam/score.sq3 Binary files differ