60歳を迎えて、思うこと。 -16ページ目

60歳を迎えて、思うこと。

いつの間にか、「60」という年月が経ちました。
残り少ないか多いか?わかりませんが。
じじぃ~の「ひとりごと」を細々と続けられれば。。。

L580> パスワード

パスワード

3段重ね;;

# ==== あどばいざぁ~ 【Gemini】様

Windowsは、以下の順番で設定しないと先に進ませてくれない頑固な仕組みになっています。
1.  パスワード(英数字の長いもの)
2.  PIN(数字4桁などの暗証番号)
3.  指紋認証(生体認証)
# ==============================
 🛠️ 今すぐやるべき操作
「サインイン オプション」の画面をもう一度見てください。

1.  「PIN」や「指紋」が並んでいるリストの中に、
「パスワード(ご使用のアカウントのパスワードを使用してサインインする)」 
という項目があるはずです。

はい 並んでいます
パスワード
アカウントのパスワードを使ってサインインする

2.  そこをクリックして、「追加」 ボタンを押します。
くりっく!
追加

青画面(パスワードの作成)
ぱすわ~ど    もにゃもにゃ
ぱすわ~ど再入力 もにゃもにゃ
ひんと むにゃむにゃ
次へ
完了

3.  適当なパスワード(英数字など)を決めて入力し、完了させます。
    * ※これが「全ての鍵の親」になります。忘れないようにメモしてくださいね。

4.  パスワードの設定が終わると、ようやく 「PIN」 の設定ができるようになります。
PIN 追加
すうじ4けた  
ぱぱのくるま
完了

5.  PINが終わると、やっと本命の 「指紋」 が設定可能になります!
しもんだぁ~


指紋
追加

ぺたぺた

完了!

ほんとか?

魑魅魍魎な
お年頃♪

じじぃ~

Wiz日誌 成長 Rev.J

ずびずばぁ~

日々の 
Wizardry

キャラクターの成長を

記録している

が!

しかし!

ミスタイプが 多い!

なので

入力した データの

の適正を 判定する

pythonスクリプトを
作ってもらった・・・

のは とお~~~い 昔

今日は 
Rev.J で ある

# ==== 【Gemini】様 作成
# ==== pythonスクリプト
# ==== Rev.J
# ====  2026/03/27 15:58:48

# ### Wiz-データチェック【Rev.J:至高の真・鑑定士版】


import csv
import os
import unicodedata
import re

# ===== 1. 設定エリア:あなたの環境に合わせて調整してください =====
target_file = r"F:\__Libre-ods\_Wiz\Wiz-シナリオ1-成長記録.csv"

# [呪文回数列] CSVのヘッダー名と完全に一致させてください
SPELL_COLUMNS = ["魔法呪文回数", "僧侶呪文回数"]

# [装備品マスターリスト] E1~E8で「正しい」とする名前をここに追加
# 「なし」や「鑑定」をここに入れておけば、全角エラーを回避します
VALID_ITEMS = {
    "MURAMASA BLADE!", "BLADE CUSINART'","SLAYER of DRAGONS",
    "DAGGER of THIEVES","SHURIKENS","だみぃ~",
    "LONG SWORD","LONG SWORD+1","LONG SWORD+2",
    "SHORT SWORD", "SHORT SWORD+1", "SHORT SWORD+2",
    "GARB of LOADS", "PLATE MAIL","PLATE MAIL+1","PLATE MAIL+2",
    "PLATE+2(N)",
    "ROBE", "STAFF of MONTINO",
    "RING of MALOR", "LEATHER+2",
    "PRIESTS RING", "STAFF", "STAF+1", "STAFF+2",
    "BREAST PLATE", "BREAST PLATE +1", "BREAST PLATE +2",
    "SHIELD+1", "SHIELD+3", "HELM+1",
    "GLOVES of COPPER", "GLOVES of SILVER",
    "RING of HEALING",
    "BLUE RIBBON", "KEY of SILVER",
    "BP+6", "BP+7", "IQ+7", "STR+6",
    "LEATHER ARMOR", "SMALL SHIELD", "LARGE SHIELD", 
    "なし", "鑑定", "倉庫", "NONE",
    "to フォル", "to_ギーヴ"
}

# [基本定義]
VALID_RACES = {"HUMAN", "ELF", "DWARF", "GNOME", "HOBBIT"}
VALID_CLASSES = {"FIGHTER", "MAGE", "PRIEST", "THIEF", "BISHOP", "SAMURAI", "LORD", "NINJA"}

# [数値列のマッピング]
COL_MAP = {
    "STR": ["STR"], "IQ": ["I.Q", "IQ"], "PIE": ["PIE"], "VIT": ["VIT"],
    "AGI": ["AGI", "AGL"], "LUK": ["LUK", "LUC"], "AC": ["AC"], "HP": ["HP"], "AGE": ["AGE"]
}
EQUIP_SLOTS = [f"E{i}" for i in range(1, 9)]

# ===== 2. 判定・正規化ロジック =====
def normalize_strict(s):
    """前後の空白削除と全角半角・記号の統一"""
    if s is None: return ""
    s = str(s)
    s = unicodedata.normalize("NFKC", s)
    s = s.replace("’", "'").replace("`", "'")
    return s.strip()

def is_int(s):
    """数値判定"""
    try:
        int(s)
        return True
    except ValueError:
        return False

def check_spell_slots(val):
    """呪文回数形式 '0-0-0-0-0-0-0' のチェック"""
    s = val.replace("-", "-").replace("ー", "-").strip()
    parts = s.split("-")
    if len(parts) != 7:
        return False, f"段階エラー({len(parts)}段階)"
    for p in parts:
        if not p.isdigit() or not (0 <= int(p) <= 9):
            return False, f"回数異常({p})"
    return True, ""

# ===== 3. メイン鑑定エンジン =====
def check_wiz_csv(file_path):
    print(f"--- 鑑定開始: {os.path.basename(file_path)} ---")
    if not os.path.exists(file_path):
        print(f"【エラー】ファイルが見つかりません: {file_path}")
        return

    errors = []
    warnings = []
    
    char_master = {} 
    age_history = {} 
    target_numbers = {f"{i:02d}" for i in range(1, 21)}
    row_count = 0

    try:
        with open(file_path, mode='r', encoding='utf-8-sig') as f:
            reader = csv.DictReader(f)
            for i, row in enumerate(reader, start=2):
                row_data = {k.strip(): v for k, v in row.items()}
                
                raw_no = str(row_data.get("番", "")).strip()
                if not raw_no: continue
                char_no = raw_no.zfill(2) if raw_no.isdigit() else raw_no
                if char_no not in target_numbers: continue
                
                row_count += 1
                name = normalize_strict(row_data.get("なまえ", ""))
                race = normalize_strict(row_data.get("種族", ""))
                job  = normalize_strict(row_data.get("職業", ""))

                # --- B. 名簿整合性チェック ---
                if char_no not in char_master:
                    char_master[char_no] = {"name": name, "race": race}
                else:
                    m = char_master[char_no]
                    if name != m["name"]:
                        errors.append(f"{i}行({char_no}): [名前不一致] 正:{m['name']} 誤:{name}")
                    if race != m["race"]:
                        errors.append(f"{i}行({char_no}): [種族不一致] 正:{m['race']} 誤:{race}")

                # --- C. スペル・種別チェック ---
                if race and race not in VALID_RACES:
                    errors.append(f"{i}行({char_no}): [種族不明] {race}")
                if job and job not in VALID_CLASSES:
                    errors.append(f"{i}行({char_no}): [職業不明] {job}")

                # --- D. 数値系チェック ---
                for key, possible_names in COL_MAP.items():
                    actual_col = next((n for n in possible_names if n in row_data), None)
                    if not actual_col: continue
                    val = normalize_strict(row_data.get(actual_col, ""))
                    if not val: continue
                    if not is_int(val):
                        errors.append(f"{i}行({char_no}): [{actual_col}] 数値不正 '{val}'")
                        continue
                    num = int(val)
                    if key in ["STR", "IQ", "PIE", "VIT", "AGI", "LUK"] and num > 18:
                        warnings.append(f"{i}行({char_no}): [{actual_col}] 18超え({num})")
                    if key == "AC" and not (-10 <= num <= 20):
                        errors.append(f"{i}行({char_no}): [AC] 異常値({num})")
                    if key == "AGE":
                        if num < 10: errors.append(f"{i}行({char_no}): [年齢] 10歳未満({num})")
                        if char_no in age_history and num < age_history[char_no]:
                            warnings.append(f"{i}行({char_no}): [年齢] 若返り判定({age_history[char_no]}->{num})")
                        age_history[char_no] = num

                # --- E. 呪文回数チェック ---
                for col in SPELL_COLUMNS:
                    spell_val = row_data.get(col, "")
                    if spell_val:
                        is_ok, msg = check_spell_slots(spell_val)
                        if not is_ok:
                            errors.append(f"{i}行({char_no}): [{col}] {msg} -> '{spell_val}'")

                # --- F. 装備品スペルチェック (Rev.J 修正ポイント) ---
                for slot in EQUIP_SLOTS:
                    item_raw = (row_data.get(slot, "") or "").strip()
                    if not item_raw: continue
                    
                    # 1. 【最優先】ホワイトリスト照合
                    # ここで「なし」や「鑑定」に合致すれば、以降の全角チェックをスキップ
                    item_normalized = normalize_strict(item_raw)
                    if item_normalized in VALID_ITEMS:
                        continue 
                    
                    # 2. リストにない場合のみ、エラーを出す
                    # 全角文字が含まれているかチェック
                    if re.search(r'[ぁ-んァ-ヶ亜-熙]|[’”]', item_raw):
                        warnings.append(f"{i}行({char_no}): [{slot}] 全角文字/記号あり [{item_raw}]")
                    else:
                        # 全角ではないが、リストにない(スペルミスなど)
                        warnings.append(f"{i}行({char_no}): [{slot}] 未登録スペル [{item_normalized}]")

    except Exception as e:
        print(f"【致命的エラー】中断されました: {e}")
        return

    # --- 結果表示 ---
    print(f"--- 鑑定終了: {row_count}件をチェックしました ---")
    if not errors and not warnings:
        print("\n[SUCCESS] 完璧な日誌です。カント寺院の祝福がありますように。")
    else:
        if errors:
            print(f"\n【要修正: {len(errors)}件】")
            for e in errors: print(f"  × {e}")
        if warnings:
            print(f"\n【要確認: {len(warnings)}件】")
            for w in warnings: print(f"  ! {w}")

if __name__ == "__main__":
    check_wiz_csv(target_file)

# ==============================

 

雑学としての 罪の重さ

にゃあにゃあ
わんわん


私は 無罪です!

とぼけるんじゃね~~~
この 
猛吹雪の いれずみ
忘れた とわ いわせね~~~ぜ!


お お代官 さまぁ~~~

なんて 時代劇が あったような
なかったようなw

さて

【Gemini】様と お話した
※架空の犯罪の話
※架空の犯罪の話
だからぁ~~~
※架空の犯罪の話 ですよ!


 2. 「有印私文書偽造」で公民権はどうなる?
ここが一番の注目ポイントです。前回の「公職選挙法(または地方自治法)」の
違反と、今回の「有印私文書偽造」では、公民権停止のルールが異なります。

 公職選挙法違反の場合
* 原則: 罰金刑以上で即、公民権停止(5年間など)。
* 例外: 裁判所が「情状により停止しない」と判断すれば、すぐに立候補可能


 有印私文書偽造(刑法)の場合
こちらは「選挙の犯罪」ではないので、少しルールが違います。
1.  禁錮・懲役刑(実刑)の場合:
    刑務所にいる間、および出所して刑期が終わるまでは立候補できません。
2.  執行猶予がついた場合:
    実は、執行猶予中であっても「公職選挙法違反以外の罪」であれば、立候補
    できるケースがあります。(※禁錮以上の刑に処せられ、その執行を受ける
    ことがなくなるまでの者は除く、という規定があるため)
3.  罰金刑の場合:
    有印私文書偽造には「罰金刑」という選択肢がありません。「3ヶ月以上5年
    以下の懲役」のみです。
> [!IMPORTANT]
> ここがポイント!
> 有印私文書偽造は「罰金で終わり」がありません。起訴されて有罪になれば、
最低でも「懲役(執行猶予付き含む)」になります。

 2. 「厳重処分の意見を付記」は珍しいのか?
結論から言うと、「珍しくはないが、警察からの強い意思表示」です。
通常、警察が事件を検察に送る(送検する)ときには、大きく分けて4つの「意
見」を付けます。

| 意見の種類 | 内容 |
| 厳重処分 | 「非常に悪質なので、起訴して裁判にかけてください」という強
い要求。 |
| 相当処分 | 「検察の判断に任せますが、それなりの処罰が妥当です」という
標準的なもの。 |
| 寛大処分 | 「反省しているし被害も小さいので、許してあげては?」という
ニュアンス。 |
| しかるべき処分 | 判断が難しい、あるいは中立的な立場。 |

 なぜ「厳重処分」と書くのか?
警察がわざわざ「厳重処分」と書くのは、捜査の結果として「動機が身勝手であ
る」「証拠が固まっている」「社会的影響が大きい」と判断した証拠です。

「付記(付け加えて書くこと)」自体は手続き上のルールですが、そこに「厳重
処分」という言葉が選ばれたことは、前市長という立場も相まって、警察側の「
逃がさない」という厳しい姿勢の表れと言えます。
# ==============================

 

む むずかしいぜ!

 

難しい

お年頃♪

 

じじぃ~

Wiz日誌 どわぁ~ふ


わっしゃ
わっしゃ

まかせんしぁい!


Wizardry 世界での

どわぁ~ふ 君

HPが 上がりやすくて

前衛の 
戦士として

大活躍♪


そんな どわぁ~ふ様を

【Gemini】様に

おねだりして

描いて もらった


※作画 【Gemini】様

 

うんうん

え~~~な

じじぃ~

Wiz日誌 まほうのじゅもん

しゅぱぱ
しゅばって
ぶしゅっ

さてもさても

LibreOffice表計算で

列E * 列F = 列G

の 必要が 生じた!

普通なら

G2 に =E2*F2

はい 完成 であるが・・・

列E の 中身は 2~7 とかいう 「文字列」で
ある

だから 計算できない;;

【Gemini】様 に

泣きついた・・・

=IF(OR(E2="", F2=""), "", (LEFT(E2, FIND("〜", E2)-1) * F2) & "〜" & (MID(E2, FIND("〜", E2)+1, LEN(E2)) * F2))

という

魔法の
呪文を 伝授された!

てくまく・・・以下自粛

列E * 列F = 列G

2~7 *  3  = 6~21

すげぇ~~~

【Gemini】様

平服・・・平伏する

じじぃ~