進捗状況の確認. 1. Sierpinski のカーペットと三角形が再帰プログラムで書けた

Documentos relacionados
AUTO AVALIAÇÃO-MARCO SITUACIONAL 2017 Escola Alegria de Saber, Unidade SUZUKA 学校法人イーエーエス伯人学校伯人学校イーエーエス鈴鹿. Critérios avaliados 評価基準

在日ブラジル人児童むけ教材開発プロジェクト. 在日ブラジル人児童のための算数教材 掛け算マスター 日本語クリアー 児童用

難民認定申請書 ( 再申請用 ) Requerimento de Reconhecimento de Refugiados (para pedir de novo) Local de nascimento

TIRA-DÚVIDAS VITEM V - RN 100/2013 新規制 RN100/2013 一時就労査証 V 取得関する疑問解消

INSTRUÇÃO Nº /2010 CG CURSO GESTOR DE POLICIAMENTO COMUNITÁRIO SISTEMA KOBAN - BH /JUN

SORRISO. 3a e 4a séries

3 級ポルトガル語. Duração do Exame. Aviso Importante. É proibido levar o caderno de questões traduzido ao local do exame. Solicitamos a compreensão de todos.

Viajar Geral. Português

夏休みの予定. Programação das férias de verão * 中止の場合は, 横川小 HP でお知らせしたり,12 時までにプールの入 り口に赤旗を出したりします 更衣 : 女子はプール内更衣室 男子は体育館更衣室参加する人は

[Número de ID de Exame] Impresso na sua folha de respostas.

準 2 級ポルトガル語. Duração do Exame. Aviso Importante

5 級ポルトガル語. Duração do Exame. Aviso Importante. É proibido levar o caderno de questões traduzido ao local do exame. Solicitamos a compreensão de todos.

平成 29 年度千葉県公立高等学校入学者選抜の手続 ( ポルトガル語版 ) Procedimentos de Seleção para Admissão nas Colegiais públicas da Província de Chiba 2017 ( Versão em Português )

1. Sistema de serviço médico 医 療 サービスのしくみ

As partículas gramaticais da língua japonesa: suas categorias e funções

Pedido de cooperação sobre a pesquisa relativo à sua situação e reconstrução da vida diária.

Modelo de Contrato de Representação Comercial CONFERE 代理店契約書雛形 ( 仮訳 )

子どもを預けたいけど どうすればいいの? ポルトガル語版

2 級ポルトガル語. Duração do Exame. Aviso Importante. É proibido levar o caderno de questões traduzido ao local do exame. Solicitamos a compreensão de todos.

Vamos pensar na função do lanche おやつの役目を考えて見ましょう

耳 鼻 咽 喉 科 受 診 の お す す め

Prezado Vítor Silva, Caro Vítor Silva, 様 Menos formal, o remetente já realizou negócios com o destinatário anteriormente Eu gostaria de candidatar-me

Principais Registros

ポルトガル語 別記第七十四号様式 ( 第五十五条関係 ) Folha anexa Nº.74 (Relação ao Artigo 55) 日本国政府法務省 Ministério da Justiça do Japão 法務大臣殿 Ao Sr. Ministro da Justiça 氏 Nome

JICA 契約企業 MAJOL 社関係者による暴言と脅威に曝された UNAC 出席者への連帯宣言 仮訳

LIÇÃO 18. Estruturas de comparação. Auxiliar verbal de suposição らしい

電 流 くなると モーターは( 速 )く 回 る モーターの 回 る( 向 き)も 変 わる. Corrente elétrica. Amperímetro. (Corrente de eletricidade) Ligação em série

定住外国人等で家庭の生活事情等により経済的理由で進学や在学が困難な人に対して は, 主に次のような奨学金制度等を利用することができます

CJ1W-INT01 CJ1W-INT

4 級 ポルトガル 語. Duração do Exame. Aviso Importante

O meu primeiro contato com...foi em..., quando ele とは 年に彼が に参加して entrou para... いた時に親しくなりました... me pediu para escrever uma carta de への応募に際し から推薦状を書い r

パネルディスカッション資料 2. 現在行っている活動の評価 ( うまくいっている点 困っている点 ) 1. 古井小学校内にある 共生学級エスペランサ にて 子どもたちに日本語の読み書き 練習などのサポートを行っている

公 営 住 宅 等 :Moradias Públicas, etc.

5 級 ポルトガル 語. Duração do Exame. Aviso Importante

Manual de uso do Sistema de Pesquisa Online Censo Demográfico Nacional de 2015 平 成 27 年 国 勢 調 査 オンライン 調 査 システムのマニュアル

<3>SAÚDE ASSISTÊNCIA SOCIAL ASSISTÊNCIA MÉDICA (Kenko Fukushi Iryo) 1. SAÚDE E BEM-ESTAR DAS CRIANÇAS

平成 30 年度千葉県公立高等学校入学者選抜の手続 ( ポルトガル語版 ) Procedimentos de Seleção para Admissão nos Colégios públicos da Província de Chiba 2018 ( Versão em Português )

Explicação sobre Transfusão de Sangue / 輸血療法に関する説明書

平成 31 年度千葉県公立高等学校入学者選抜の手続 ( ポルトガル語版 ) Procedimentos de Seleção para Admissão nos Colégios públicos da Província de Chiba 2019 ( Versão em Português )

ようこそちばの学校へ. Português ポルトガル語

Indicadores da indústria paranaense パラナ州工業生産

1 Comprovante de imposto de renda retido na fonte (gensen) ( 源泉徴収票 )

Explicação sobre o Exame de TC Contrastada

Aula 2 Suas primeiras frases em japonês. Luiz Rafael Passari

社会保障に関する日本国とブラジル連邦共和国との間の協定 JP/BR0 1A 伯 日

ポルトガル語版 太田市教育委員会学校指導課 プレクラス ひまわり教室

2 奨 学 制 度 等 Programa de Bolsas de Estudos, etc.

Comunicado Mensal do Templo

Oyagaku No-to : Guia de Orientação Aos Pais Os pais cultivam a si próprios enquanto educam as crianças.

Celia Jones 47 Herbert Street Floreat Perth WA 6018 Formato de endereço australiano: nome da província nome da cidade + código postal Celia Jones, TZ

- Aniversários Parabéns! 誕生日おめでとう! Feliz Aniversário! 誕生日おめでとう! Muitos anos de vida! 誕生日おめでとう! Desejando-lhe muita felicidade no seu dia especial. あなた

婚約おめでとう 結婚式はいつにするかもう Parabéns pelo noivado. Vocês já decidiram quando será 決めた? o grande dia? Usada para parabenizar um casal que você conhece bem por

婚約おめでとう 結婚式はいつにするかもう決めた? Parabéns pelo noivado. Vocês já decidiram quando será o grande dia? Usada para parabenizar um casal que você conhece bem por

bab.la Frases: Pessoal Cumprimentos Português-Japonês

MOBILE PHONE SERVICE GUIDE vo l.1

Auxílio Para as Crianças(Kodomo Teate)

5 級 ポルトガル 語. Duração do Exame. Aviso Importante

社会保障に関する日本国とブラジル連邦共和国との間の協定 JP /BR01B 伯 日

Ano letivo de 2018 (Heisei 30) Curso Introdutório da Língua Japonesa da Cidade de Koka

輸出検疫証明書 農林水産省動物検疫所 日本国農林水産省 申請者住所 検疫証明書番号 氏名 ( 法人にあつては その名称及び代表者の氏名 ) 発行年月日 下記は 家畜伝染病予防法の規定に基く検査の結果 家畜の伝染疾病の病原体をひろげるおそれがないことを証明する 物品の種類 重量 個数又はこうり数

Trâmites necessários para quando mudar da Cidade de Seki para outa Cidade.

Comunicado Mensal do Templo

Jornal Bom Amigo Edição nº 11

Talvez não seja fácil agora, mas o seu esforço e sua perseverança どんな事でも一生懸命する

がっこう学校より Mensagem da Escola

Análise de erros das partículas gramaticais wa e ga para a comunicação

Acordo de Previdência Social entre a República Federativa do Brasil e o Japão

Para estrangeiros que estejam partindo do Japão

Sobre o Seguro de Assistência Pública aos Idosos Departamento Municipal Kobe-shi Kaigo Hoken-ka

対象機種一覧 No. 事業者 / メーカー 機種名 NTT docomo ハンズフリー メモリ読み出しデータ通信 オーディオ マルチ接続 1 Apple iphone 5c ,22,48,53,91 2 iphone 5s ,22,48,53,91 3

(Edição de 2017) 名古屋市国民健康保険のてびき (2017 年版 )

- Resultado da Pesquisa aos Moradores para a Construção da Cidade - - 住 民 まちづくりアンケート 調 査 結 果 - Pesquisa aos Estrangeiros (Resultado Geral)

Jornal Bom Amigo Edição nº 13

定住外国人の方々が地域で安心して生活するため, 疾病の予防とともに, 保健, 医療等に ついて利用しやすい環境づくりを進めています

1 銀 行. 1. Banco GUIA PARA VIVER EM GIFU 岐 阜 県 生 活 ガイドブック

(Edição de 2015) 名 古 屋 市 国 民 健 康 保 険 のてびき(2015 年 版 )

Guia de orientação educacional

在日ブラジル人児童むけ教材開発プロジェクト 在日ブラジル人児童のための漢字教材 簡単な会話はできるけど漢字は苦手 そんな子どもたちが漢字を楽しく勉強できる教材です この漢字教材シリーズでは小学校 1 年生から 3 年生までの学年配当漢字を基本漢字として提出しています メウアミーゴカンジ

Guia de Registro de estrangeiro 外 国 人 登 録 ガイド

Prevencao para a Influenza

Guia de Pronto Socorro Infantil

16 Congresso Mundial de Mulheres Budistas 大会日程 :2019 年 8 月 30 日 ~9 月 1 日. PROGRAMAÇÃO OFICIAL: 30 de AGOSTO~1 DE SETEMBRO de 2019

がっこう学校より Mensagem da Escola

就学ガイドブック GUIA ESCOLAR 日本の学校への入学手続き. Procedimentos para matrícula em escola japonesa 2015 年 4 月. Edição Abril de 2015 文部科学省

Comunicado Mensal do Templo

CAPÍTULO 3 Resultados da Pesquisa II (Grupo de Pesquisa para a Elaboração de um Sistema)

Comunicado Mensal do Templo

Ⅰ Há algum apoio por parte da polícia? 警察等からの支援などはあるのですか

1. 外国人登録. 1. Registro de Estrangeiro GUIA PARA VIVER EM GIFU 岐阜県生活ガイドブック

Comunicado Mensal do Templo

VI BENEFÍCIO SOCIAL Ⅵ 思いやりのある福祉. 1 Seguro de Bem Estar Nacional (Kokumin Nenkin) 1 国民年金

うかくにんけられるかどうか確認するためのものです この届 ゆうそうでお知 しらせします

PARA LEVAR UMA VIDA TRANQUILA E COM SEGURANÇA

日本で働く外国人の方のための労働基準法等のポイント

Transcrição:

関数から計算へ 文字列

進捗状況の確認 1. Sierpinski のカーペットと三角形が再帰プログラムで書けた 2. Sierpinski のカーペット ( 再帰 ) だけが書けた 3. Sierpinski の三角形 ( 再帰 ) だけが書けた 4. Sierpinski の三角形が combination の配列で書けた 5. まだ書いていない

文字列 irb(main):003:0> s = "abra" => "abra" irb(main):004:0> t = "cadabra" => "cadabra" irb(main):005:0> u = s + t => "abracadabra" irb(main):006:0> "123" + "456" => "123456"

irb(main):009:0> s.length() => 4 irb(main):010:0> (s + t).length() => 11 irb(main):011:0> s[0..0] # s[0] でも良い => "a" irb(main):012:0> s[1..2] => "br" irb(main):013:0> t[1..(t.length()-1)] => "adabra"

言葉探し def match(s,p) i=0 w=p.length() while submatch(s,i,p,w) < w i = i + 1 end i end

def submatch (s,i,p,w) j = 0 while j < w && s[(i+j)..(i+j)] == p[j..j] j = j + 1 end j end

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 0, p, 4)

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 0, p, 4) i==0 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 0, p, 4) i==0 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => "b" => "a"

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 0, p, 4) i==0 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => false

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 0, p, 4) => 0

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4)

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => "a" => "a"

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => true

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==1 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==1 j < w && s[(i+j)..(i+j)] == p[j..j] => true

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==2 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==2 j < w && s[(i+j)..(i+j)] == p[j..j] => true

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==3 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) i==1 w==4 j==3 j < w && s[(i+j)..(i+j)] == p[j..j] => false

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 1, p, 4) => 3

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 2, p, 4)

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 2, p, 4) i==2 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 2, p, 4) i==2 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => "l" => "a"

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 2, p, 4) i==2 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => false

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 2, p, 4) => 0

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4)

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => "a" => "a"

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==0 j < w && s[(i+j)..(i+j)] == p[j..j] => true

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==1 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==1 j < w && s[(i+j)..(i+j)] == p[j..j] => true

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==2 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==2 j < w && s[(i+j)..(i+j)] == p[j..j] => true

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==3 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==3 j < w && s[(i+j)..(i+j)] == p[j..j] => true

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==4 j < w && s[(i+j)..(i+j)] == p[j..j]

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==4 j < w && s[(i+j)..(i+j)] == p[j..j] => false

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) i==3 w==4 j==4 j < w && s[(i+j)..(i+j)] == p[j..j] => false j < w が false なので s[(i+j)..(i+j)] == p[j..j] は検査されない

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) => 4

0 1 2 3 4 5 6 7 8 s: b a l a l a i k a 0 1 2 3 p: a l a i submatch(s, 3, p, 4) => 4 i==3 のときに submatch(s, i, p, w) < w が false になる

言葉探し def match(s,p) i=0 w=p.length() while submatch(s,i,p,w) < w i = i + 1 end i end

言葉探し irb(main):007:0> match("balalaika", "alai") => 3 irb(main):008:0> match("hualalai", "alai") => 4 irb(main):009:0> match("balalaika", "aa") 止まらなくなるので Control-C match.rb を授業のページからダウンロードする

練習 match の定義では s 中に p が必ず現われることを仮定していた p が現われない場合に -1 と答える match_safe(s,p) を定義せよ ( ヒント ) match の while の条件が問題 現われない場合に -1 にする方法も必要 match_safe(s,p) ができた人は 教科書 65 ページの練習 4.5 に挑戦してみてください 配布プログラムは授業の Web ページからダウンロードできます

進捗状況の確認 1. match_safe(s,p) ができた ( できた時点で投票してください ) match_safe(s,p) ができた人は 教科書 65 ページの練習 4.5 に挑戦してみてください 配布プログラムは授業の Web ページからダウンロードできます

言葉探し def match_safe(s,p) i = 0 w = p.length() while i + w <= s.length() && submatch(s,i,p,w) < w i = i + 1 end if i + w > s.length() i = -1 end i end

文字列の反転 反復版 def reverse_loop(s) result = "" for i in 0..s.length()-1 result = s[i..i] + result end result end irb(main):002:0> reverse_loop("yama") => "amay"

文字列の反転 再帰版 def reverse1(s) if s.length() == 1 s else reverse1(s[1..(s.length()-1)]) + s[0..0] end end irb(main):002:0> reverse1("yama") => "amay"

文字列の反転 再帰版 def reverse2(s) if s.length() == 1 s else s[(s.length()-1)..(s.length()-1)] + reverse2(s[0..(s.length()-2)]) end end irb(main):002:0> reverse2("yama") => "amay"

わからない? 1. わかったので大丈夫 2. reverse_loop 3. reverse1 ( 再帰 ) 4. reverse2 ( 再帰 ) 5. そのほか具体的に書く

文字列への変換 irb(main):010:0> 123+123 => 246 irb(main):011:0> "123"+"123" => "123123" irb(main):012:0> "123"+123 TypeError: no implicit conversion of Fixnum into String from (irb):12:in `+' from (irb):12 from :0

文字列への変換 irb(main):013:0> "123"+123.to_s() => "123123" irb(main):014:0> i = 10 => 10 irb(main):015:0> i.to_s() => "10" irb(main):016:0> (i+1).to_s() => "11"

2 進数文字列への変換 基本 2 で割った余りを逆に並べる 25 11001 12 1 6 0 3 0 1 1 0 1

2 進数への変換 反復版 def binary_loop(n) s = "" while n >= 1 s = s + (n%2).to_s() n = n / 2 end s end irb(main):007:0> binary_loop(25) => "10011"

2 進数への変換 反復版 def binary_good(n) s = "" while n >= 1 s = (n%2).to_s() + s n = n / 2 end s end irb(main):008:0> binary_good(25) => "11001"

2 進数への変換 再帰版 def binary(n) if n < 2 n.to_s() else binary(n/2) + (n%2).to_s() end end irb(main):009:0> binary(25) => "11001"

わからない? 1. わかったので 大丈夫 2. binary_loop 3. binary_good ( 前に付け足していく ) 4. binary ( 再帰 : 先に前を計算して後に付ける ) 5. そのほか具体的に書く

ハノイの塔

ハノイの塔 n 1 n-2 n-1

ハノイの塔

ハノイの塔

ハノイの塔

ハノイの塔

ハノイの塔 1 n-1 n

ハノイの塔

ハノイの塔

ハノイの塔

def hanoi_times(n) if n==0 0 else hanoi_times( ) + 1 + hanoi_times( ) end end

def hanoi(n, from, to, buf) if n==0 "" else hanoi(,,, ) + "from " + from + " to " + to + "; " + hanoi(,,, ) end end

irb(main):001:0> load("./hanoi.rb") => true irb(main):002:0> hanoi(4, "A", "B", "C") Þ"from A to C; from A to B; from C to B; from A to C; from B to A; from B to C; from A to C; from A to B; from C to B; from C to A; from B to A; from C to B; from A to C; from A to B; from C to B; " irb(main):003:0> hanoi_times(4) => 15

練習 ハノイの塔での円盤の移動回数や移動方法を求めるプログラムを作成する ( ヒント ) 問題を小さくすることを考える n 枚移動の問題を n-1 枚の移動に分解する

レポート 課題以下の関数を定義した hanoi.rb を提出せよ ハノイの塔で円盤 n 枚の場合の移動回数を返す再帰的な関数 hanoi_times(n) ハノイの塔で,from から to へ円盤 n 枚を移動する過程を書いた文字列を返す再帰的な関数 hanoi(n, from, to, buf) 提出先 ITC-LMS 〆切 11 月 13 日授業開始前

ハノイの塔 A B C