浅野直樹の学習日記

この画面は、簡易表示です

浅野直樹

AWSのCLFとアソシエイト3資格(SAA、SOA、DVA)を取得しました

AWSのCLFとアソシエイト3資格(SAA、SOA、DVA)の合格体験記や勉強方法を解説した記事はたくさんありますが、私なりの観点からまとめます。

AWSそのものはゼロからのスタートだけれども、Linuxを普段から使っていて、極めて小規模なウェブ系や業務効率化系のプログラミングを継続的に行っており、なるべくお金をかけたくなく、学習教材では動画よりも本を好む者の体験記です。

リージョンとアベイラビリティゾーン(AZ)の違いもわからない状態からスタートしました。

 

1.結果

試験結果PDF 受験日 スコア
CLF 2024/01/31 916
SAA 2024/07/17 836
SOA 2024/09/12 753
DVA 2024/10/30 789

 

2.受験を決めるまで

オンプレミスのデータセンターを構築運営したことはありませんが、レンタルサーバーから始めてVPSを使うようになり、柔軟にリソースを変更したくてGCP(Google Cloud)やAWSを使うようになったという道筋は、王道と言ってよいでしょう。2022年頃からGCPを、2023年頃からAWSを使い始めました。

業務でAWSを使うことが多くなり、プログラミングスクールのインストラクターとしての仕事の需要もありそうだったので、資格取得を一つの目標に据え、本腰を入れて勉強を開始しました。それが2023年から2024年にかけてのことです。

 

3.AWSの全般的な学習法

(1)本

冒頭でも述べましたように、私は動画よりも本を好むので、手当たりしだいに乱読しました。

版の新旧は気にせず読んできたので、必ずしも以下で紹介している版を読んだわけではありません。

 


AWSの基本・仕組み・重要用語が全部わかる教科書 : 見るだけ図解


作 者: 

出版社: SBクリエイティブ

発売日: 2022年09月20日

最初に全体像をつかむにはちょうどよいと思います。

 


AWS認定アソシエイト3資格対策 : ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター


作 者: 

出版社: リックテレコム

発売日: 2019年06月26日


AWS認定ソリューションアーキテクト-アソシエイト問題集


作 者: 

出版社: リックテレコム

発売日: 2024年03月04日

試験をより意識した全体像の把握にはこれがおすすめです。

 


Amazon Web Services徹底活用ガイド : 先行ユーザー20社の事例に学ぼう


作 者: 

出版社: 日経BP社

発売日: 2015年01月05日


Amazon Web Servicesクラウドデザインパターン設計ガイド


作 者: 

出版社: 日経BP社

発売日: 2015年06月05日


Amazon Web Servicesクラウドデザインパターン実装ガイド


作 者: 

出版社: 日経BP社

発売日: 2015年03月20日


Amazon Web Services基礎からのネットワーク&サーバー構築 : さわって学ぶクラウドインフラ


作 者: 

出版社: 日経BP

発売日: 2023年05月24日

古い版のものをまとめて安く手に入れられたので、ざっと読んでみました。

現在の進化して複雑になった姿ではなく、昔のシンプルなサービスを現場でどう使おうとしていたかという息吹が感じられて、これはこれで有益でした。

 





作 者: 

出版社: 

発売日: 1970年01月01日

ほぼすべての操作をCLIで行おうという趣旨の本ですから試験には直結しませんが、考え方は共通しているので、深い部分で活きたと思います。

 

(2)ハンズオン

ハンズオン資料 | AWS クラウドサービス活用資料集を全部やりました。初心者向けハンズオン( Hands-on for Beginners)と呼ばれているものです。内容的にも分量的にもこれがベストだと思います。

Amazon Web Services (AWS) のハンズオンチュートリアルAWS Workshopsも検討しましたが、見づらいように感じましたので、見送りました。

Black Beltやホワイトペーパーもちらっと見てこれに深入りするのはしんどそうだと判断し、ほとんど触れていません。

 

4.AWSの試験別学習法

例によって本が中心です。それに加えて、試験ですから、問題演習をやりました。公式が発表している試験範囲と模擬問題を熟読しました。

(1)CLF

国語力やクラウドの常識で解ける問題と、AWSの具体的なサービスの概要を知っていれば解ける問題とで構成されていると捉えました。

前者はよいとして、後者は軽く100個以上のサービスがありますから、入念に準備しました。

 





作 者: 

出版社: 

発売日: 1970年01月01日

無料であることが信じられないくらいクオリティが高いです。特にまっさらの状態からCLFを受けようかと考えている人には、最初に読むことをおすすめします。

 


AWS認定クラウドプラクティショナー


作 者: 

出版社: SBクリエイティブ

発売日: 2024年04月10日

この本もよくまとまっています。私は2, 3回読みました。

 

あとは【AWS資格】無料WEB問題集&徹底解説 | クラウドプラクティショナー(CLF)を一通り解き、インストラクターをしているために見ることができるプログラミングスクールの教材の問題に目を通しました。

 

(2)SAA

SAAになると各サービスの内容を本格的に問われます。実務やハンズオンで触れたことがあるところが問われると自信を持って答えられることが多かった印象です。

 





作 者: 

出版社: 

発売日: 1970年01月01日

無料であるにもかかわらず内容が充実しています。

 


AWS認定ソリューションアーキテクト〈アソシエイト〉


作 者: 

出版社: SBクリエイティブ

発売日: 2023年10月16日

安定の内容です。

 


AWS認定ソリューションアーキテクト-アソシエイト教科書 : 試験番号SAA-C03


作 者: 

出版社: インプレス

発売日: 2023年03月15日

LPIC等でもおなじみの黒本です。

 

問題演習にはPing-tを大いに活用させていただきました。難易度的にちょうどCLFとSAAの橋渡しになりますし、無料でこれだけの分量の問題が解けるのはうれしいです。

【AWS資格】無料WEB問題集&徹底解説 | ソリューションアーキテクト(SAA)とプログラミングスクールの問題に目を通したのはCLFと同じです。

 

(3)SOA

SOAはSAAに近いです。私が受けたときはラボ試験がなかったのでなおさらです。とはいえ、管理系のサービスを中心に深い部分まで問われますから、ラボ試験の想定問題は積極的に実施しました。

 


AWS認定SysOpsアドミニストレーター〈アソシエイト〉


作 者: 

出版社: SBクリエイティブ

発売日: 2022年07月05日

このシリーズを信頼しています。

 


AWS認定SysOpsアドミニストレーター-アソシエイト教科書&問題集


作 者: 

出版社: インプレス

発売日: 2024年03月29日

こちらも手堅い内容です。

 


ポケットスタディAWS認定SysOpsアドミニストレーターアソシエイト : アソシエイト試験


作 者: 

出版社: 秀和システム

発売日: 2023年01月24日

3冊目がほしいならこれかなと。

 

【AWS資格】無料WEB問題集&徹底解説 | SysOpsアドミニストレーター -アソシエイト(SOA)とプログラミングスクールの問題に目を通したのはいつもと同じです。

 

(4)DVA

DVAは試験範囲が限定されているように感じました。個人的には、開発系の仕事が多いので、違和感なく入り込めました。

DVAは本と問題集が少なめです。

 


AWS認定デベロッパー-アソシエイト教科書&問題集


作 者: 

出版社: インプレス

発売日: 2024年01月31日

この本が第一候補なのでしょうけれども、試験範囲とあまりマッチしていないように感じました。まえがきによると、意図的にそのようにしているようです。

 


ポケットスタディAWS認定デベロッパーアソシエイト : アソシエイト試験


作 者: 

出版社: 秀和システム

発売日: 2023年12月15日

この本は試験範囲とマッチしていますが、これだけでは足りないかもしれません。

 





作 者: 

出版社: 

発売日: 1970年01月01日

DVAではCodeシリーズの比重が高いので、この本で補いました。

 

問題集を見つけることができなかったので、Ping-tのSAA問題で感覚を鈍らせないようにしました。

 

5.感想

私がAWSを本格的に触り始めたのは2023年頃と遅かったのですけれども、これでAWSに対する苦手意識は払拭できました。

私の業務で使うのは、IAMやCloudWatchのような管理系サービスを除くと、Lambda、Lightsail、S3、EC2くらいなので、現場の業務に直結するかと問われると微妙です。

 


AWS Lambda実践ガイド : アーキテクチャとイベント駆動型プログラミング


作 者: 

出版社: インプレス

発売日: 2022年03月30日

Lambdaを使うときには、この本にとてもお世話になりました。

 

Lightsailは他社のVPSと大差なく、必要なのは主にLinuxの知識ですしね。

そのせいか、Lightsailは基本的に試験範囲から除外されています。

 

AWSに頼り切ってベンダーロックインに陥るのもこわいですし、各種試験をきっかけとしてAWSの具体的なサービスとともにクラウドの考え方を学んで、必要なサービスを絞って使っていこうと思っています。

 



リチャード・M・ストールマン『フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集』の内容へのリンク

リチャード・M・ストールマン『フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集』は今読んでもおもしろいので、リチャード・M・ストールマン『フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集』(アスキー、2003)の本文テキストとPDF公開でご案内しましたように、その本体の内容をHTMLとPDFで公開しました。

HTML目次

PDFファイル

実は英語の原著では第3版まで出ています。以下のWikipediaからすべての版をダウンロードできます。

Free Software, Free Society – Wikipedia

そこで、本の目次と対応させる形で、GNUオペレーティング・システムと自由ソフトウェア運動で公開されている内容へのリンクを作りました。

日本語に訳されているものはタイトルを日本語に、そうでないものはタイトルを英語にしてあります。

日本語ネイティブとしては日本語で読めるほうがありがたいですし、英語のものはPDFファイルで読めはしますが章ごとに分かれていたほうが便宜なので、下記のようにまとめました。

 

1.第1版

Editor’s Note

A Note on Software

Topic Guide

Introduction

1 GNUプロジェクト

2 GNU宣言

3 Free Software Definition(自由ソフトウェアとは?に発展的に解消?)

4 ソフトウェアに所有者がいてはならない理由

5 名前が何であろうか?

6 Why “Free Software” is Better than “Open Source”なぜ、オープンソースは自由ソフトウェアの的を外すのかに置き換え)

7 Releasing Free Software if You Work at a University

8 自由ソフトウェアの販売

9 自由ソフトウェアが自由な文書を必要とする理由

10 Free Software Song

11 読む権利

12 Misinterpreting Copyright—A Series of Errors

13 Science Must ‘Push’ Copyright Aside

14 コピーレフトって何?

15 コピーレフト: 実際的な理想主義

16 The Danger of Software Patents

17 Can You Trust Your Computer?

18 Why Software Should Be Free

19 Copyright and Globalization in the Age of Computer Networks

20 Free Software: Freedom and Cooperation

21 避けるべき言葉 (あるいは注意深く使う)、含みがあるかまぎらわしいので

GNU一般公衆ライセンス

GNU劣等一般公衆ライセンス

GNU自由文書ライセンス

(本の形で出版されている、リチャード・M・ストールマン『フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集』(アスキー、2003)では、すべての内容が日本語に訳されています。この記事の冒頭にHTMLとPDFでのリンクを貼っています。訳文が異なるので、読み比べてみるとおもしろいかもしれません。

 

2.第2版

Foreword

Preface to the Second Edition

1 Free Software Definition(自由ソフトウェアとは?に発展的に解消?)

2 GNUプロジェクト

3 最初の声明

4 GNU宣言

5 ソフトウェアに所有者がいてはならない理由

6 Why Software Should Be Free

7 なぜ学校で自由ソフトウェアだけを使うべきか

8 Releasing Free Software if You Work at a University

9 自由ソフトウェアが自由な文書を必要とする理由

10 自由ソフトウェアの販売

11 Free Software Song

12 名前が何であろうか?

13 自由および不自由なソフトウェアの分類

14 なぜ、オープンソースは自由ソフトウェアの的を外すのか

15 「知的財産」ですって? それは魅惑的な蜃気楼です

16 避けるべき言葉 (あるいは注意深く使う)、含みがあるかまぎらわしいので

17 読む権利

18 Misinterpreting Copyright—A Series of Errors

19 Science Must ‘Push’ Copyright Aside

20 Freedom—or Copyright自由 — それとも著作権? (古いバージョン)

21 コピーレフトって何?

22 コピーレフト: 実際的な理想主義

23 Anatomy of a Trivial Patent

24 Software Patents and Literary Patents

25 The Danger of Software Patents

26 Microsoft’s New Monopoly

27 Introduction to the Licenses

28 GNU一般公衆ライセンス

29 GPLv3にアップグレードする理由

30 GNU劣等一般公衆ライセンス

31 GNU自由文書ライセンス

32 Can You Trust Your Computer?

33 そのサーバはいったい誰にサーブするのか?

34 Free but Shackled: The Java Trap

35 JavaScriptの罠

36 Xウィンドウ・システムの罠

37 The Problem Is Software Controlled by Its Developer

38 We Can Put an End to Word Attachments

39 Thank You, Larry McVoy

40 Computing “Progress”: Good and Bad

41 破滅的な折衷案を避ける

42 Overcoming Social Inertia

43 Freedom or Power?

Appendix A: A Note on Software

Appendix B: “free software”という用語の各言語訳

(3, 7, 13, 14, 15, 20, 23, 24, 25, 26, 27, 29, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43はこの版で新出)

 

3.第3版

Foreword to the Third Edition

Foreword to the First Edition

Preface

1 自由ソフトウェアとは?

2 GNUプロジェクト

3 最初の声明

4 自由ソフトウェアはいまやさらに重要だ

5 なぜ学校で自由ソフトウェアだけを使うべきか

6 政府が自由ソフトウェアを奨励するために使える方策

7 自由ソフトウェアが自由な文書を必要とする理由

8 自由ソフトウェアの販売

9 Free Hardware and Free Hardware Designs

10 Applying the Free Software Criteria

11 名前が何であろうか?

12 LinuxとGNUシステム

13 自由および不自由なソフトウェアの分類

14 なぜ、オープンソースは自由ソフトウェアの的を外すのか

15 「知的財産」ですって? それは魅惑的な蜃気楼です

16 Why Call It the Swindle?

17 避けるべき言葉 (あるいは注意深く使う)、含みがあるかまぎらわしいので

18 読む権利

19 Misinterpreting Copyright—A Series of Errors

20 Science Must Push Copyright Aside

21 Copyright vs. Community in the Age of Computer Networks

22 Software Patents and Literary Patents

23 The Danger of Software Patents

24 Giving the Software Field Protection from Patents

25 Introduction to the Licenses

26 あなた自身の作品にライセンスを選択する方法

27 Xウィンドウ・システムの罠

28 Programs Must Not Limit the Freedom to Run Them

29 コピーレフトって何?

30 Why Copyleft?

31 コピーレフト: 実際的な理想主義

32 GNU一般公衆ライセンス

33 GPLv3にアップグレードする理由

34 GNU劣等一般公衆ライセンス

35 GNU自由文書ライセンス

36 On Selling Exceptions to the GNU GPL

37 Can You Trust Your Computer?

38 JavaScriptの罠

39 Releasing Free Software if You Work at a University

40 Nonfree DRM’d Games on GNU/Linux: Good or Bad?

41 The Danger of E-Books

42 E-books Must Increase Our Freedom, Not Decrease It

43 そのサーバはいったい誰にサーブするのか?

44 破滅的な折衷案を避ける

45 Overcoming Social Inertia

46 Freedom or Power?

47 Imperfection Is Not the Same as Oppression

48 民主主義はどれくらい監視に耐え得るか?

A: A Note on Software

B: “free software”という用語の各言語訳

C: Free Software Song

(4, 6, 9, 10, 12, 16, 21, 24, 26, 28, 30, 36, 40, 41, 42, 47, 48はこの版で新出)

 

本に収録されていない小論や講演などがまだまだたくさんありますので、興味のある方は小論と論説 – GNUプロジェクト – フリーソフトウェアファウンデーションなどをご参照ください。



e-Gov 法令検索からダウンロードした条文htmlファイルに条文ごとのidを付与する

記事タイトルの通りマニアックな内容ですが、誰かの役に立つかもしれないので、やり方を公開します。

 

1.問題意識

私は、司法試験短答過去問ウェブアプリを作成しておりまして、事前に条文のhtmlファイルを準備し、参考条文をクリックするとその条文が画面右に表示されるようにしています。

(詳しくは司法試験短答式過去問演習サイトの解説を作り始めましたをご覧ください)

 

ページ内リンクを活用してこれを実現しています。

一年ほど前にe-Gov 法令検索から条文のhtmlファイルを取得したときは、例えば第百九十九条なら、「id=”Mp-At_199″」のようなidがhtml内に付されていました。

最近久しぶりにe-Gov 法令検索から条文のhtmlファイルを取得したところ、形式が変わっていました。

これまでは現に表示しているページをhtmlとして保存していましたが、現在はいろいろな形式でダウンロードできるように用意されていて、その中にはHTML形式もありました。

それをダウンロードするときれいなhtmlファイルで、これはありがたいと思いました。

しかし一つ問題がありまして、条文ごとに「id=”Mp-At_199″」のようなidが付されておらず、軒並み「id=””」となっていたのです。

これが私の問題意識です。

 

2.やり方

結論を最初に示します。

import re

def convert_kansuuji_to_arabic_number(kansuuji):
    # 結果として返すアラビア数字の文字列を初期化
    arabic_number = ''
    # 一〜九の変換表
    convert_table = str.maketrans("一二三四五六七八九", "123456789")
    # 単位の処理
    unit_under_thousand = {"十": 1, "百": 2, "千": 3}
    unit_over_thousand = {"万": 4, "億": 8, "兆": 12, "京": 16}
    # 基準となる単位の初期化
    base_unit = 0
    # 一の位から処理していくために逆順にする
    reversed_kansuuji = list(reversed(kansuuji))
    for i, character in enumerate(reversed_kansuuji):
        # 十、百、千の場合
        if character in unit_under_thousand.keys():
            # unit_under_thousandの値に基準となる単位を加えた桁数でゼロパディング
            arabic_number = arabic_number.zfill(unit_under_thousand[character] + base_unit)
            # ループの最後(先頭の文字)か、次のループ(一つ前の文字)が単位を表す文字ならば、1を前に付け加える
            if i == len(reversed_kansuuji) - 1 or reversed_kansuuji[i+1] in unit_under_thousand or reversed_kansuuji[i+1] in unit_over_thousand:
                arabic_number = '1' + arabic_number
        # 万、億、兆、京の場合
        elif character in unit_over_thousand.keys():
            # unit_over_thousandの値の桁数でゼロパディング
            arabic_number = arabic_number.zfill(unit_over_thousand[character])
            # 基準となる単位を更新
            base_unit = unit_over_thousand[character] 
        # 一〜九の場合
        else:
            # 一〜九の変換表を用いて変換した数字を前に付け加える
            arabic_number = character.translate(convert_table) + arabic_number

    return arabic_number


# 第○○条の部分にマッチさせ、○○という漢数字をキャプチャするパターン
pattern = re.compile(r'第(.*)条')

# e-Govからダウンロードした条文htmlファイルの読み込み
with open('./140AC0000000045_20230713_505AC0000000066.html') as reader:
    # 読み込んだhtmlファイルを一行ずつ保存するリストの初期化
    output_line_list = []
    for i, line in enumerate(reader):
        # 読み込んだ行をリストに追加
        output_line_list.append(line)
        # 「第○○条」の部分にマッチさせる
        result = pattern.search(line)
        # 第○○条の部分にマッチした場合
        if result:
            # ○○という漢数字をアラビア数字に変換
            arabic_joubun_number = convert_kansuuji_to_arabic_number(result.group(1))
            # マッチした行の一つ前の行の「id=""」を「id="Mp-At_199"」のように変換
            output_line_list[i-1] = output_line_list[i-1].replace('id=""', f'id="Mp-At_{arabic_joubun_number}"')

# 保存したリストの書き出し
with open('kei.html', 'w') as writer:
    for output_line in output_line_list:
        writer.write(output_line)

print('done')

細かくコメントを書き入れていますから、読めばある程度わかると思います。

前半は漢数字をアラビア数字に変換するための関数です。

pythonで漢数字をアラビア数字に変換するスクリプトで詳しく説明しました。

条文で万を超えることはないでしょうから、ここまで厳密な変換スクリプトは不要ですが、せっかくなので作ってみました。

 

後半がメインの処理です。

e-Govからダウンロードした条文htmlファイルを一行ずつ読み込み、「第○○条」という部分にマッチしたら、その一つ前の行に「id=”Mp-At_199″」のような形でその数字のidを付与するという処理です。

 

これでやりたいことができました。

 



pythonで漢数字をアラビア数字に変換するスクリプト

pythonで漢数字をアラビア数字に変換しようとしたら、意外に苦戦したので、今後のために記録を残しておきます。

そのようなスクリプトはすでに誰かが書いているだろうと思い、実際検索したらいくつかヒットしたのですが、どれも私にはすぐに理解できず(よほど時間に追われているのでない限り自分が理解できないプログラムは使いたくないです)、自分で数時間かけて作り出しました。

既存のプログラムの中で一番参考にしたのは、Pythonで最もシンプルに文章中の漢数字を数字に変換する方法とプログラム #Python3 – Qiitaです。

ただ、私はそのプログラムをすっきりとは理解できなかったので、引数に漢数字部分だけを渡すという制限を設け、異なる視点から実装しました。

先に結論を示します。


def convert_kansuuji_to_arabic_number(kansuuji):
    # 結果として返すアラビア数字の文字列を初期化
    arabic_number = ''
    # 一〜九の変換表
    convert_table = str.maketrans("一二三四五六七八九", "123456789")
    # 単位の処理
    unit_under_thousand = {"十": 1, "百": 2, "千": 3}
    unit_over_thousand = {"万": 4, "億": 8, "兆": 12, "京": 16}
    # 基準となる単位の初期化
    base_unit = 0
    # 一の位から処理していくために逆順にする
    reversed_kansuuji = list(reversed(kansuuji))
    for i, character in enumerate(reversed_kansuuji):
        # 十、百、千の場合
        if character in unit_under_thousand.keys():
            # unit_under_thousandの値に基準となる単位を加えた桁数でゼロパディング
            arabic_number = arabic_number.zfill(unit_under_thousand[character] + base_unit)
            # ループの最後(先頭の文字)か、次のループ(一つ前の文字)が単位を表す文字ならば、1を前に付け加える
            if i == len(reversed_kansuuji) - 1 or reversed_kansuuji[i+1] in unit_under_thousand or reversed_kansuuji[i+1] in unit_over_thousand:
                arabic_number = '1' + arabic_number
        # 万、億、兆、京の場合
        elif character in unit_over_thousand.keys():
            # unit_over_thousandの値の桁数でゼロパディング
            arabic_number = arabic_number.zfill(unit_over_thousand[character])
            # 基準となる単位を更新
            base_unit = unit_over_thousand[character] 
        # 一〜九の場合
        else:
            # 一〜九の変換表を用いて変換した数字を前に付け加える
            arabic_number = character.translate(convert_table) + arabic_number

    return arabic_number
    
# 実験
test1 = convert_kansuuji_to_arabic_number('五千京二百三十億八百六十五')
test2 = convert_kansuuji_to_arabic_number('千二十三')
test3 = convert_kansuuji_to_arabic_number('百十')

print(test1)
print(test2)
print(test3)

かなり細かくコメントを付けたので、上記のコードとコメントを読むだけで理解できるかもしれませんが、考え方を述べます。

一気に処理しようとするとややこしく感じられたので、一の位から(漢数字表記をしたときに右の文字から)一文字ずつループで処理するという見通しを立てました。

一〜九は1〜9の数字に変換するだけです。

「二万五千四百二十三」などのように、すべての桁に一〜九の漢数字が入っているなら、十、百、千、万といった単位を表す漢数字を消すだけで完成です。

しかし、「千二十三」のように飛んでいる位があると、それではうまくいきません。

この例の「千」なら23ではなく023になるように、適切な桁数でゼロパディングすればいいですね。

問題は、「五千京二百三十億八百六十五」のような大きい数字の場合、「八百六十五」の「十」と「二百三十億」の「十」の桁数が違うことです。

言い換えると、十、百、千は何度も登場することがありますが、万、億、兆、京は一度しか登場しません。

このように、単位を表す漢数字を、千以下のものと千より大きいものとに区別できます。

「八百六十五」の「十」を1桁だとすると、「二百三十億」の「十」は9桁です。

万、億、兆、京を処理するたびに、基準となる単位を4, 8, 12, 16と設定すればよいと気づきました。

あとは「千二十三」が023、「百十」が00となってしまうように、単位を表す漢数字の処理で1が抜けてしまうという問題に対処すれば完成です。

この問題は、一番上の位が単位を表す漢数字である場合か、「百十」のように単位を表す漢数字が連続する場合に発生します。

そこで、コード内のコメントにもありますように、ループの最後(先頭の文字)か、次のループ(一つ前の文字)が単位を表す文字ならば、1を前に付け加えるという処理を書きました。

これが私にとって理解しやすい考え方です。

壱弐参なども変換したければ変換表に加えればいいですし、京より上の単位にも対応したければ「”垓”: 20」のように単位を追加すればいいです。

よろしければ上記のコードと考え方をご活用ください。

 

 



リチャード・M・ストールマン『フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集』(アスキー、2003)の本文テキストとPDF公開

リチャード・M・ストールマン『フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集』(アスキー、2003)は今読んでもおもしろいのですが、入手しづらいため、その本体の内容を、HTMLとPDFで公開します。

HTML目次

PDFファイル

原文の著作権はフリーソフトウェア財団(Free Software Foundation, Inc.)、翻訳の著作権はアスキー(ASCII)にありますが、変更を加えずそのまま公開することは許可されています。

それが本書で主張されているフリーソフトウェアの理念です(ソフトウェアと文書(ドキュメント)では細かい違いはありますが、大本となる理念は共通しています)。

複製して公開する許可がされているかどうかわからなかった表紙の写真と訳者あとがきは割愛しています。

自由にご活用ください。




top