diff --git a/157-after1.jpeg b/157-after1.jpeg new file mode 100644 index 0000000..4c9bb43 --- /dev/null +++ b/157-after1.jpeg Binary files differ diff --git a/158-after2.jpeg b/158-after2.jpeg new file mode 100644 index 0000000..a8a996d --- /dev/null +++ b/158-after2.jpeg Binary files differ diff --git a/after1.jpg b/after1.jpg new file mode 100644 index 0000000..869bd59 --- /dev/null +++ b/after1.jpg Binary files differ diff --git a/after2.jpg b/after2.jpg new file mode 100644 index 0000000..cf38a52 --- /dev/null +++ b/after2.jpg Binary files differ diff --git a/after3.jpg b/after3.jpg new file mode 100644 index 0000000..96b41d6 --- /dev/null +++ b/after3.jpg Binary files differ diff --git a/before.jpg b/before.jpg new file mode 100644 index 0000000..660e13f --- /dev/null +++ b/before.jpg Binary files differ diff --git a/birthstone.rb b/birthstone.rb new file mode 100644 index 0000000..bd85233 --- /dev/null +++ b/birthstone.rb @@ -0,0 +1,11 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +month = %w(0:1月 1:2月 2:3月 3:4月 4:5月 5:6月 6:7月 7:8月 8:9月 9:10月 10:11月 11:12月) + +stone = (ガーネット アメジスト アクアマリン ダイアモンド エメラルド パール ルビー ペリドット サファイア トルマリン トパーズ タンザナイト) + +puts month +puts"何月生まれですか?" +a = gets +printf("あなたの誕生石は%s!\n", ) diff --git a/break.rb b/break.rb new file mode 100755 index 0000000..6e510f2 --- /dev/null +++ b/break.rb @@ -0,0 +1,18 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +puts"1から9の数字を入力しましょう。足した合計が30以上になると終わるよ!" +sum = 0 +while true + suuji = gets.to_i + sum += suuji.to_i + puts"また数字を入れてみましょう!" + if sum >= 30 then #合計が30以上になると、処理を開始する。 + printf("合計は%dです。\n",sum) + break # 処理を中止して、ループを終わらせる + end +end + + +#break 処理を中止して、ループを終わらせる +#改良点 ifを何個か用いることで、いくつかの条件ごとに結果が分かれるようなプログラムをつくることが。 diff --git a/cafe.csv b/cafe.csv new file mode 100644 index 0000000..6f3c838 --- /dev/null +++ b/cafe.csv @@ -0,0 +1,4 @@ +店名,人気メニュー,住所,電話番号,バス停,バス線名 +Le-Monde,塩汁スパゲティー,山形県酒田市北新橋2-11-8,0234-23-0373,北新橋,市内循環D線 +ギャラリー喫茶ヴィヨン,鉄板ナポリタン,山形県酒田市千石町2-11-15,0234-24-8300,酒田リハビリ病院前,市内循環A線 +珈琲貴族,担々麺,山形県酒田市東泉町1-13-13,0234-24-7811,東泉町二丁目,市内循環A線・市内循環B線 diff --git a/cafe.rb b/cafe.rb new file mode 100644 index 0000000..9b84433 --- /dev/null +++ b/cafe.rb @@ -0,0 +1,37 @@ +#!/usr/koeki/bin/ruby +#-*-coding: utf-8-*- + +require 'csv' +data = CSV.read("cafe.csv", headers: true) +while true + puts "酒田市のカフェについてのページだよ!" + puts "何を知りたい?" + puts "1 カフェの場所" + puts "2 カフェ近くのバス停(るんるんバス)" + puts "0 終了" + print("番号を選んでね!:") + input=gets.to_i + if input == 0 then + break + elsif input == 1 then + n=0 + data.each{|row| + printf("%d %s: %sが有名のカフェだよ\n",n+=1, row["店名"],row["人気メニュー"]) + printf("住所は、%s。電話番号は、%s。\n", row["住所"],row["電話番号"]) + print("-------------------------------------------------------------\n")} + elsif input == 2 then + s=0 + data.each{|row| + printf("%d %s \n",s+=1,row["店名"])} + print("どのバス停が知りたい?(番号で答えてね):") + num = gets.to_i-1 + if num >= 0 && num < data.length + printf("%sに近いバス停は、 %sです\n", data[num]["店名"],data[num]["バス停"]) + printf("そのバス停は%sのバス線にあります\n", data[num]["バス線名"]) + print("------------------------------------------------------\n") + end + else + print("0〜2から選んでね\n") + end +end + diff --git a/for.rb b/for.rb new file mode 100644 index 0000000..dbeffa1 --- /dev/null +++ b/for.rb @@ -0,0 +1,22 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- +#一つ目のプログラム +sports = ["野球","バレーボール","サッカー"] +for kibun in sports #kibun変数にsports配列の要素を順番に代入される + printf("今日は%sしたい気分だ。\n",kibun) #この部分が繰り返される +end + +#for文とは??:配列や範囲などの複数の値を、順番に変数へ代入する処理 +#一つ目のプログラムの詳しい解説:sportsという配列に格納される配列の要素を順番にkibunという変数に代入して処理が繰り返されて、野球、バレーボール、サッカーの順番で出力されます。 +#今回はsportsという配列を事前に作ってfor文のオブジェクト指定の部分に要素として入れていますが、["野球","バレーボール","サッカー"] を直接入力しても動きます。 + + +#改善編~このプログラムを動かすときは一つ目のプログラムの行の初めにシャープをつけてコメント文にして、改善版プログラムの一行目からシャープを消そう~ +#sports = ["野球","バレーボール","サッカー","ボート","ホッケー","ラグビー","卓球"] +#i=0 #for文の中のprintf文で添字を作るためのもの +#puts "スポーツ図鑑" +#for zukan in sports #x変数にsports配列の要素を順番に代入される +# printf("%d: %s\n", i+=1, zukan) #%dにはiに1づつ追加されていき、%sにはx変数に代入されているsports配列の要素がが入る +#end + +#改善版プログラムの詳しい解説:i=0を活用してprintfの中にi+=1を入れることでスポーツ名を出す時の添字にしています。また、sportsという配列に格納される配列の要素を順番にzukanという変数に繰り返し代入されるため、野球、バレーボール、サッカーボート、ホッケー、ラグビー、卓球の順番で出力されます。 diff --git a/fruits.csv b/fruits.csv new file mode 100644 index 0000000..9302318 --- /dev/null +++ b/fruits.csv @@ -0,0 +1,7 @@ +品物,価格,生産地 +あおりんご,200,青森 +さくらんぼ,500,山形 +みかん,100,愛媛 +もも,1000,福島 +バナナ,300,沖縄 +ぶどう,700,山梨 diff --git a/fruits.rb b/fruits.rb new file mode 100644 index 0000000..0630c12 --- /dev/null +++ b/fruits.rb @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby +# coding: utf-8 +Encoding.default_external = "utf-8" # CSVファイルがutf-8のとき +require "csv" +data = CSV.read("fruits.csv",headers: true) + +data.each{|row| + printf("%sは、%d円で生産地は%sです\n", + row["品物"],row["価格"],row["生産地"])} + + + diff --git a/hairetsu.rb b/hairetsu.rb new file mode 100644 index 0000000..bed7b80 --- /dev/null +++ b/hairetsu.rb @@ -0,0 +1,36 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +jikanwari = [] + +puts "時間割に1〜5時間目の教科を登録します。" +puts "1時間目の教科を入力してください。" +kyoka1 = gets.chomp +jikanwari << kyoka1 +puts "2時間目の教科を入力してください。" +kyoka2 = gets.chomp +jikanwari << kyoka2 +puts "3時間目の教科を入力してください。" +kyoka3 = gets.chomp +jikanwari << kyoka3 +puts "4時間目の教科を入力してください。" +kyoka4 = gets.chomp +jikanwari << kyoka4 +puts "5時間目の教科を入力してください。" +kyoka5 = gets.chomp +jikanwari << kyoka5 + +printf("今日の時間割は%sです。\n", jikanwari) + +#内容 +#<<でgetsしたデータをどんどん足していくものです。1〜5時間目の教科を入力していき配列として出力されます。 + +#各行の説明 +#4行目:データを格納するために空の配列jikanwariを用意します。 +#7〜9行目:1時間目の教科として入力した値が変数kyoka1に代入され、jikanwariに格納されます。 +#10〜21行目:同様に入力した2〜5時間目の教科も配列に格納されます。<<は配列の末尾に値を格納していくものです。 +#23行目:printfでjikanwariを参照し、配列として時間割が出力されます。 + +#改良点 +#何校時授業かを最初に入力してもらって、whileでその回数だけ入力させられるとよいでしょう。 +#また、forでjikanwariに入っている値を取り出して、1教科ずつ出力できるとよいと思います。 diff --git a/if.rb b/if.rb new file mode 100644 index 0000000..43f157d --- /dev/null +++ b/if.rb @@ -0,0 +1,78 @@ +# 点数の入力・判別、それに対してのコメントをするプログラム +# 「if」はプログラムに分かれ道をつくることができる。 +# 場合分けをして実行結果を変化させる処理のことを条件分岐という +# 場合分けを増やす場合は「elsif」 +# 場合分け以外の場合は「else」を使う。 + +# コード +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +# 点数の入力 +puts "テストの点数を入力してね" +score = gets.to_i + +# 点数の判定 +if score > 100 or score < 0 # 0〜100以外の点数は受け付けない。 + puts "もう一度入力してください" +elsif score >= 100 + puts "すごい!満点だ!" +elsif score >= 80 + puts "素晴らしい!" +elsif score >= 60 + puts "グッド!" +elsif score >= 40 + puts "よくやった!" +elsif score >= 20 + puts "もう少し頑張ろう!" +elsif score >= 0 + puts "もっと勉強しよう!" +end + + +# このコードを改造してよりよくするなら。 +# 科目ごとに点数を入力してもらう。while, 配列(array), メソッド(method)を使う。 + +# 改造コード(例) +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +# 判別をするメソッド +# def hanbetu(score) +# comment = "" +# if score > 100 or score < 0 # 0〜100以外の点数は受け付けない。 +# comment = "もう一度入力してください" +# elsif score >= 100 +# comment = "すごい!満点だ!" +# elsif score >= 80 +# comment = "素晴らしい!" +# elsif score >= 60 +# comment = "グッド!" +# elsif score >= 40 +# comment = "よくやった!" +# elsif score >= 20 +# comment = "もう少し頑張ろう!" +# elsif score >= 0 +# comment = "もっと勉強しよう!" +# end +# return comment # comment変数に代入された文字列を返す +# end + +# subject = ["国語","数学","理科","社会","英語"] +# tensuu = [] # 入力された点数が追加される配列 + +# i = 0 +# while i <= subject.length - 1 # iが、配列の長さ(今回は4)より大きくなったらループを抜ける。配列の長さを取得するには、.lengthを使う。 +# printf("%sの点数は?\n>>", subject[i]) +# tensuu << gets.to_i #入力された点数を配列(tensuu)に追加 +# i += 1 +# end + +# puts "" + +# puts "最後に5科目の点数を確認をしましょう。" +# j = 0 +# while j <= subject.length - 1 #上に同じ +# printf("%sの点数は%i点です。%s\n", subject[j], tensuu[j], hanbetu(tensuu[j])) #科目、点数をそれぞれの配列の左から順番に出力している。最後に点数に対してコメントを返す。 +# j += 1 +# end diff --git a/kensaku.csv b/kensaku.csv new file mode 100644 index 0000000..8577746 --- /dev/null +++ b/kensaku.csv @@ -0,0 +1,6 @@ +name,gakko,gakunen,kozukai +公益太郎,三川八中,2,2000 +飯森花子,余目百中,1,4000 +鶴岡一人,タキタロウ小,4,200 +鶴岡二子,タキタロウ小,2,300 +遊佐梅花,丸池小,6,900 diff --git a/kensaku.rb b/kensaku.rb new file mode 100644 index 0000000..fa29cf1 --- /dev/null +++ b/kensaku.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby +#coding: utf-8 + +Encoding.default_external = 'utf-8' +require 'csv' + +data = CSV.read('moji.csv', headers: true) +data.each do |row| + puts row['moji'] +end diff --git a/kensaku1.rb b/kensaku1.rb new file mode 100644 index 0000000..7ddaf3a --- /dev/null +++ b/kensaku1.rb @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby +# coding: utf-8 + +Encoding.default_external = 'utf-8' +require 'csv' + +data = CSV.read('moji.csv', headers:true) +data.each do |row| + if /i/ =~ row['moji'] + puts row['moji'] + end +end diff --git a/kensaku2.rb b/kensaku2.rb new file mode 100644 index 0000000..db220f4 --- /dev/null +++ b/kensaku2.rb @@ -0,0 +1,31 @@ +#!/usr/bin/env ruby +# coding: utf-8 + +require 'csv' +data = CSV.read("kensaku.csv", headers: true) + +puts "学校で探す:1" +puts "金額で探す:2" +print "どれにしますか:" +sel = gets.to_i +if sel == 1 + print "探したい学校名を入れてください:" + ptn = Regexp.new(gets.chomp) + data.each do |row| + if ptn =~ row["gakko"] + printf("%sさんは%s%s年です\n", row["name"], row["gakko"], row["gakunen"]) + end + end + +elsif sel == 2 + print "絞り込みたい金額を入れてください:" + gaku = gets.to_i + data.each do |row| + if gaku < row["kozukai"].to_i + printf("%sさんは%d円もらっています\n", row["name"], row["kozukai"].to_i) + end + end + +else + printf("%d番はありません。さようなら。\n", sel) +end diff --git a/kyoutsuugo.txt b/kyoutsuugo.txt new file mode 100644 index 0000000..4f07c3e --- /dev/null +++ b/kyoutsuugo.txt @@ -0,0 +1,13 @@ +いや~今日のテストわからなくて苦労したよ +わからなくても大丈夫さ +大丈夫なんてお前たちダメでしょう +しっかり勉強しないと偉くなれないよ +偉くなんてならなくてもいいよ +ぺらぺら言わないで早く勉強しなさい +お父さんはいつもうるさいね~ +いいか言うこと聞かないと怒るぞ +でも今日のテストのプリントどこにやったかわからないんだもの +わからないなんてきちんとさがして勉強しなさい +勉強の前にご飯食べさせて +たくさん食べなさい +はい食べます \ No newline at end of file diff --git a/method.rb b/method.rb new file mode 100644 index 0000000..a0ce3ef --- /dev/null +++ b/method.rb @@ -0,0 +1,60 @@ +#!/usr/koeki/bin/ruby +# coding: utf-8 + +def speed(distance,time) + distance/time +end + +puts"分速を計算するよ!" + +puts"距離を入力してね(単位:m)" +x = gets.to_i + +puts"時間を入力してね(単位:分)" +y = gets.to_i + +printf("%dmを%d分で走ったときの分速は%dm/mです\n",x,y,speed(x,y)) + +# defとは +# def メソッド名(仮引数)で最初に実行したい処理を定義し、メソッド名で呼び出すことで決められた処理を実行することができるもの + +# プログラム解説 +# 分速を求めるプログラム +# 速度は距離÷時間で求めることができるので、speedというメソッドで定義する +# 10行目から14行目で計算に必要な距離と時間を入力してもらう +# 16行目で結果を表示 + +# 改善案 +# 入力してもらうところをメソッド定義してみよう! +# 距離と時間の求め方もメソッド定義してwhileでどれを求めるか選択できるようにしよう! +# 例) +# def kazu(x) +# printf("%sを入力してね\n",x) +# end +# def speed(distance,time) +# 時速を求める処理 +# end +# def distance(speed,time) +# 距離を求める処理 +# end +# def time(distance,speed) +# 時間を求める処理 +# end +# while true +# puts"求めたいものを選択してね" +# puts"1.時速" +# puts"2.距離" +# puts"3.時間" +# puts"4.終了" +# sentaku = gets.to_i +# if sentaku == 1 +# x = kazu("距離") +# y = kazu("時間") +# speed(x,y) +# elsif sentaku == 2 +# . +# . +# . +# end + + diff --git a/moji.csv b/moji.csv new file mode 100644 index 0000000..4f7b043 --- /dev/null +++ b/moji.csv @@ -0,0 +1,6 @@ +moji +i +Programming +Application +I +Image diff --git a/next.rb b/next.rb new file mode 100644 index 0000000..46bdb69 --- /dev/null +++ b/next.rb @@ -0,0 +1,21 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +number = 30 #30の数をnumberの関数に代入する + +while number > 0 #0より小さい数を出さないようにする + number -= 1 #30から1ずつ引いていく + if number%2 == 0 #2で割って余りが0のとき(偶数)、 + next #処理を飛ばし、次のループに入る + end #30から0まで、ループして処理を繰り返す +printf("奇数は%d \n",number) #奇数の値が表示される +end + +#nextとは:処理をスキップして、次のループに移る +# 今回は偶数の処理をスキップして、その他の数は処理されるようになっている +# このように、スキップしたい処理があるときに活用できる + + +#改造する時の注意点 +#ifからendの中に、nextが入っているか確認する +#ifからendの中には、スキップしたい処理を記入する diff --git a/program.rb b/program.rb new file mode 100644 index 0000000..1fbc504 --- /dev/null +++ b/program.rb @@ -0,0 +1,60 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +#初期設定 + +require 'curses' +include Curses + +init_screen +cbreak +noecho + +rt = [] + +begin + sleep(0) + + 10.times do + system("display -geometry +0+0 before.jpg&") + sleep(2) + system('pkill magick -U `whoami`') + srand + i = rand(3)+1 + if i == 1 + system("display -geometry +0+0 after1.jpg&") + elsif i == 2 + system("display -geometry +0+0 after2.jpg&") + elsif i == 3 + system("display -geometry +0+0 after3.jpg&") + end + setpos(0,0) + addstr("\n 1:安全 2:危険") + refresh + start = Time.now + answer = getch + stop = Time.now + rt << [i,answer,stop.to_f - start.to_f] + refresh + + system('pkill magick -U `whoami`') + setpos(0,0) + addstr("\n ") + refresh + sleep(2) + end + + correct = 0 + total = 0 + for j in rt + total += j[2] + if (j[0] == 1 && j[1] == "1") || (j[0] != 1 && j[1] == "2") + correct += 1 + end + end + +ensure + close_screen +end + +printf("正答%d回  反応時間%5.3f秒\n", correct, total/10) diff --git a/program_advanced.rb b/program_advanced.rb new file mode 100644 index 0000000..d740d94 --- /dev/null +++ b/program_advanced.rb @@ -0,0 +1,66 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +#初期設定 + +require 'curses' +include Curses + +init_screen +cbreak +noecho + +rt = [] + +begin + sleep(0) + + 10.times do + system("display -geometry +0+0 before.jpg&") + sleep(2) + system('pkill magick -U `whoami`') + srand + i = rand(3)+1 + if i == 1 + system("display -geometry +400+0 quiz1.jpg&") + sleep(0.5) + system("display -geometry +0+0 after1.jpg&") + elsif i == 2 + system("display -geometry +400+0 quiz1.jpg") + sleep(0.5) + system("display -geometry +0+0 after2.jpg&") + elsif i == 3 + system("display -geometry +400+0 quiz1.jpg&") + sleep(0.5) + system("display -geometry +0+0 after3.jpg&") + end + setpos(0,0) + addstr("\n 1:安全 2:危険") + refresh + start = Time.now + answer = getch + stop = Time.now + rt << [i,answer,stop.to_f - start.to_f] + refresh + + system('pkill magick -U `whoami`') + setpos(0,0) + addstr("\n ") + refresh + sleep(2) + end + + correct = 0 + total = 0 + for j in rt + total += j[2] + if (j[0] == 1 && j[1] == "1") || (j[0] != 1 && j[1] == "2") + correct += 1 + end + end + +ensure + close_screen +end + +printf("正答%d回  反応時間%5.3f秒\n", correct, total/10) diff --git a/quiz1.jpg b/quiz1.jpg new file mode 100644 index 0000000..a9e568d --- /dev/null +++ b/quiz1.jpg Binary files differ diff --git a/quiz2.jpg b/quiz2.jpg new file mode 100644 index 0000000..f8cced8 --- /dev/null +++ b/quiz2.jpg Binary files differ diff --git a/quiz3.jpg b/quiz3.jpg new file mode 100644 index 0000000..0e1d599 --- /dev/null +++ b/quiz3.jpg Binary files differ diff --git a/rand.rb b/rand.rb new file mode 100644 index 0000000..39c9112 --- /dev/null +++ b/rand.rb @@ -0,0 +1,32 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +# randを使ったおみくじプログラム + +# おみくじの結果リストを配列として定義 +omikuji = ["大吉", "吉", "中吉", "小吉", "凶", "少凶", "中凶", "大凶"] + +# omikuji配列の中からランダムなおみくじを選ぶ +# sizeの他にlengthがあります。lengthに変えても結果が変わらないことを確認しましょう。 +erabu = rand(omikuji.size) + +# 選ばれたおみくじの結果を取得 +kekka = omikuji[erabu] + +printf("あなたの運勢は「%s」です。\n", kekka) + + +# ---------------randとは---------------- + +# 例えばrand(5)のとき0から4までの中でランダムに数字を発生させるメソッド。 +# もし5までの自然数をランダムに表示したいときはrand(5)+1と書く。詳しくは教科書p27を参照 + + +# ---------------改良してみよう!---------------- + +# 内容をおみくじではなく自由ししてみよう! +# 果物をランダムに選ぶプログラムなら kudamono = ["りんご", "みかん", "ぶどう", "バナナ", "イチゴ"]などのように最初に配列を用意しよう! + +# 結果が一回しかでないのでwhile endを使って繰り返し出るようにしてみよう! +# yesかnoを入力させて、noが入力されたら「break」でループを抜け出そう! + diff --git a/redo.rb b/redo.rb new file mode 100644 index 0000000..9151e99 --- /dev/null +++ b/redo.rb @@ -0,0 +1,35 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +puts "1から9の間の数字を3回入力してください。その合計を足します。" +tasu = 0 +goukei = 0 + +while tasu < 3 + printf("数字を入力してください: ") + kazu = gets.to_i + + if kazu > 9 || kazu < 0 + printf("----1から9の数字を入力してください。----\n") + redo + end + + goukei += kazu + printf("入力された数字: %d\n", kazu) + tasu += 1 +end + +printf("3つの数字の合計は %dです。\n", goukei) + +# redoとは、繰り返し処理を中断し、処理を最初からやり直す働きを持っています。 +# 3回入力してもらいますが、1〜9以外の数字を入力すると9行目の +# printf("数字を入力してください: ")に戻り、処理を最初からやり直します。 + +# 最後に3つの入力された数字の合計を出力しますが、1〜9以外の数字が入力されたときは足されません. + +#-------------改良するなら------------- +# redoだけではなく、nextやbreakもプログララムの中で使ってみよう! +# たとえば、1〜4の4択クイズで不正解の場合はredoでやり直し、正解したらbreakでプログラムを終了するようなプログラム + +# また、このプログラムは3回ですが、最初に何回入力させるかをユーザーに入力させてその回数分だけ入力を繰り返してみよう! + diff --git a/sa.rb b/sa.rb new file mode 100755 index 0000000..b80a68b --- /dev/null +++ b/sa.rb @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +#-*- coding: utf-8-*- + +print("こんにちは\n") diff --git a/shonaiben_translator.rb b/shonaiben_translator.rb new file mode 100644 index 0000000..18ce909 --- /dev/null +++ b/shonaiben_translator.rb @@ -0,0 +1,44 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +def levenshtein(string1, string2, memo={}) # レーベンシュタイン距離を計算するメソッド + return memo[[string1, string2]] if memo[[string1, string2]] + return string2.size if string1.empty? + return string1.size if string2.empty? + return levenshtein(string1[1..], string2[1..], memo) if string1[0] == string2[0] + min_dist = 1 + [levenshtein(string1[1..], string2, memo), + levenshtein(string1, string2[1..], memo), + levenshtein(string1[1..], string2[1..], memo) + ].min + memo[[string1, string2]] = min_dist + min_dist +end + +source = File.readlines("shounaiben.txt") # 庄内弁の文章をファイルから読み込み、配列に保存 +candidates = File.readlines("kyoutsuugo.txt") # 共通語の訳文をファイルから読み込み、配列に保存 + +i = 0 +while i < source.length # 庄内弁の文章ごとに同じ処理を繰り返す + dist2target = levenshtein(source[i].chomp, candidates[i].chomp) # 正解訳文への編集距離の計算 + min_dist = dist2target # 最短編集距離の初期値(=正解訳文への編集距離) + count_same_or_lower = 0 # 編集距離が正解への距離以下である文章の総数の初期値 + best_cand = candidates[i].chomp # 最短編集距離の訳文の初期値(=正解訳文) + for cand in candidates # それぞれの共通語の文章への編集距離を調べる + dist = levenshtein(source[i].chomp, cand.chomp) + if dist < min_dist + min_dist = dist + best_cand = cand + end + if dist <= dist2target + count_same_or_lower += 1 + end + end + printf("庄内弁の文章: %s\n", source[i].chomp) + printf("共通語の訳文(正解): %s\n", candidates[i].chomp) + printf("最短編集距離の訳文: %s\n", best_cand.chomp) + printf("正解訳文への編集距離: %d\n", dist2target) + printf("最短編集距離: %d\n", min_dist) + printf("編集距離が正解訳文への距離以下である文章の総数: %d\n", count_same_or_lower) + puts + i += 1 +end \ No newline at end of file diff --git a/shounaiben.txt b/shounaiben.txt new file mode 100644 index 0000000..8266081 --- /dev/null +++ b/shounaiben.txt @@ -0,0 +1,13 @@ +いや~今日のテストわがらねぐでよいでねけ~ +わがらねたってなんでもね~ +なんでもでねんでろおめだだめだんねあんが +ちゃんと勉強しねど偉ぐならんねさげの~ +偉ぐなんてなんねぐてもいさげ +しゃべっちょこいでねでちゃっちゃど勉強せ +だだはいっつもやがましちゃ +いがの~言うごど聞がねどごげっぞ +したって今日のテストのプリントどごさやたがわがらねもの~ +わがらねどちゃんとさがして勉強せ +勉強の前さままかせでくれ +ほれいっぺけ~ +せばく~ \ No newline at end of file diff --git a/while.rb b/while.rb new file mode 100644 index 0000000..11130e7 --- /dev/null +++ b/while.rb @@ -0,0 +1,46 @@ +#!/usr/koeki/bin/ruby +# -*- coding: utf-8 -*- + +num = 1 # ① +while num < 51 do # ② + puts num # ③ + num = num + 1 # ④ +end # ⑤ + + + +# どういったもの ? + +# A.繰り返し(ループ)処理を記述するためのもので、指定した条件が満たされている間はずっと繰り返し処理を行いたいときに使う。 + + + +# ーーーーーーーーーーーーーーーー +# ① 最初の数字 | ( 例 ) num = 1の時 1〜50 | +# | num = 0の時 0〜50 | +# ーーーーーーーーーーーーーーーー + + +# ② [ while ]から[ end ]までの間をループする。 +# [ num < 51 do ]は51以上の数字を出さないようになる。 + + + +# ③ [ puts num ]は[ num ]の数字を表示する。 + + + +# ④ [ num = num + 1 ]は①の数字に[ 1 ]を足した数が左に出てくる。 +# ↑ ======== +# ーーーーーーーーーーーーーーーーーー| +# * 注意 :③と④の位置を変えると [ 51 ]まで表示してしまう。 + + +# ⑤ [ end ]がないとエラーが発生する。 + + +# ーーーーーーーーーーーーーーー* 改造する時の注意点 *ーーーーーーーーーーーーーーーーーーーーーーーー + +# 1. 改造するときには必ず [ whille ]と [ end ] をセットとして入れること。 +# 2. [ while ]のうしろに [ do ] や [ true ]、[ break ] が作成するプログラムによって使い方が変わる。 +# 3.あとは②、③を改造すれば [ while ]から[ end ]内にある改造したものがループするようになる。