« 高周波・RFニュース 2024年11月27日 Ericsson Mobility Report Nov.2024発行、NordicのnRF54L15がRaytacモジュールに搭載、SIMComの5G RedCapモジュール、北京の清華大学でLevel4の自律ネットワークが稼働、AmpleonのDoherty RF Power Transistor、Rohmのシリコンキャパシタ | トップページ | Excelで正規表現が使えるようになっていた。REGEXTEST関数などが使える。それなら一回見てみたかった正規表現だけで素数判定をするのをやってみる。1セルに=NOT(REGEXTEST(REPT("1",A2),"^1?$|^(11+?)\1+$")))などと入れると素数判定できる。 »

2024年11月27日 (水)

M1決勝でのさや香のネタと新ネタを含んだ見せ算、8見せ1や3見せ2見せ8にも対応した新・見せ算計算機をJavaScriptの正規表現を使って作った。

カシオの高精度計算サイトに見せ算を計算できるものを作っている。見せ算(さや香のネタ)

ただこれは応用編や大学院レベルはできないし、コメントで8見せ1や3見せ2見せ8というのが新たにできたと知った。
ちょうどこの前から正規表現に凝っている(Pythonで共通テストの日本語プログラムを実行するのに使った)ので、JavaScriptを使ってhtmlでさや香の見せ算を計算できるものを作った。

こちらが計算機。

misezan_calculator.html

こんな感じで計算できます。

Misezan001

説明:

使い方:「見せ」はここでは👀の記号で表します。ボタンを押すと入力されます。例えば1👀1を入力して計算、と書かれたボタンを押すと眼(答え)と説明がでます。

👩(優しい女性)のボタンを押すと👩が入力されます。100👩のように使うと100人の中に優しい女性がいることを表します。

1👀2, 6👀9, 2👀5, 1👀100, 1👀100👩, 8👀1, 3👀2👀8などを試してください。

 

ソースコードはhtmlの中に直接埋め込んでいる(<script></script>の間)のでそちらを参照ですが、こちらにも書いておきます。

適当に作り始めたのでとても冗長になった…


<div>
    <p><h1>新・見せ算計算機</h1></p>
    <label for = "input">入力:</label>
    <input type = "text" required id = "input">
    <p></p>
    <label for = "answer">眼:</label>
    <input type = "text" id="answer" disabled>
    <p id = "reason">解説</p>
    <table>
        <tr>
        <td><button><input type = "button" id = "gan" value = "👀(見せ)"></td>
        <td><button><input type = "button" id = "beauty" value = "👩(優しい女性)"></button></td>
        <td><button><input type = "button" id = "calc" value = "計算"></button></td>
        <td><button><input type = "button" id = "clear" value = "クリア"></button></td>        
        </tr>
    </table>
    <p>使い方:「見せ」はここでは👀の記号で表します。ボタンを押すと入力されます。例えば1👀1を入力して計算、と書かれたボタンを押すと眼(答え)と説明がでます。</p>
    <p>👩(優しい女性)のボタンを押すと👩が入力されます。100👩のように使うと100人の中に優しい女性がいることを表します。</p>
    <p>1👀2, 6👀9, 2👀5, 1👀100, 1👀100👩, 8👀1, 3👀2👀8などを試してください。</p>
</div>
<script>
"use strict";
const input = document.getElementById("input");
const answer = document.getElementById("answer");
const calc = document.getElementById("calc");
const gan = document.getElementById("gan");
const clear = document.getElementById("clear");
const beauty = document.getElementById("beauty");
const reason = document.getElementById("reason");

gan.addEventListener('click', ()=>{input.value += "👀"; input.focus();});
beauty.addEventListener('click', ()=>{input.value += "👩"; input.focus();});
clear.addEventListener('click', ()=>{input.value =""; input.focus();});
calc.addEventListener('click', mise);

function mise() {
    const re = /(\d+)(👩*)👀(\d+)(👩*)👀*(\d*)/u;
    const str = input.value;
    const num = str.match(re);
    let ans;
    if (num[2] ==='' && num[4] ==='' && num[5] === '') {
        ans = two_items(num[1],num[3]);
    } else if ((num[2] ==='👩' || num[4] ==='👩') && num[5] === '') {
        ans = extended_two_items(num[1],num[3], num[2], num[4]);
    } else if (num[1] === "3" && num[2] ==='' && num[3] === '2' && num[4] ==='' && num[5] === '8') {
        ans = three_items();
    } else {
        ans =  [undefined, "さや香のネタにないから"];
    }

    answer.value = ans[0];
    reason.textContent = ans[1];
}

function two_items(a, b) {
    let ans = "";
    // 同じ数字の場合は0
    if (a === b) {
        return  ["0","同じ数字だと恥ずかしくて立ち去るため"];
    }
    // 6と9, 2と5の処理
    let first = "";
    let last = "";
    let delim = "";
    if (a.length === b.length && /^[69]+$/.test(a) && /^[69]+$/.test(b) ) {
        let matched = false;
        for (let i = 0; i < a.length; i++) {
            if ((a[i] === "6" && b[i] === "9") ||(a[i] === "9" && b[i] === "6")){
                first += "1";
                last += "1";
                matched = true;
            } else {
                matched = false;
                break;
            }
        }
        if (matched) {
            return [first + last, "6と9が「俺か?」と近づいて行って1人と1人になるから"];
        }
    }
    if (a.length === b.length && /^[25]+$/.test(a) && /^[25]+$/.test(b) ) {
        let matched = false;
        for (let i = 0; i < a.length; i++) {
            if ((a[i] === "2" && b[i] === "5") ||(a[i] === "5" && b[i] === "2")){
                first += "1";
                delim += "."
                last += "1";
                matched = true;
            } else {
                matched = false;
                break;
            }
        }
        if (matched) {
            return [first + delim + last, "2と5が「俺か?」と近づいて行って1人と1人になるがあまりに違うので5が携帯(.)を落とすから"];
        }
    }
    if (a === "1" && Number(b) >=100) {
        return [String(Number(b)-17), "1は大群で逃げられないと思って腹くくって、うおーって叫びながらバーって100に突っ込んでいって、頑張って17人倒すから"]
    }
    if (b === "1" && Number(a) >=100) {
        return [String(Number(a)-17), "1は大群で逃げられないと思って腹くくって、うおーって叫びながらバーって100に突っ込んでいって、頑張って17人倒すから"]
    }
    if ((a === "8" && b ==="1") ||(a === "1" && b ==="8")  ) {
        return ["%", "1は自分が串で8が団子と思って刺しに行き、8は嫌がって避けるがつなぎ目に刺さって分裂するから"]
    }
   
    if (Number(a) > Number(b)) {
        return [a, "小さいものが大きいものを見ると怖いから小さい方が立ち去る"];
    } else {
        return [b, "小さいものが大きいものを見ると怖いから小さい方が立ち去る"];
    }

    return [undefined, "さや香のネタにないから"];

}

function extended_two_items(a, b, ex1, ex2) {
    let ans = ""
    if (a === "1" && Number(b) >=100 && ex2 ==="👩") {
        return [String(Number(b)-17+1), "1は大群で逃げられないと思って腹くくって、うおーって叫びながらバーって大群に突っ込んでいって、頑張って17人倒すが自分も倒れ中に優しい女性が1人いて介抱され、その2人が恋に落ちて後々結婚して子供が1人生まれてさらにまた1増えるから"]
    }
    if (b === "1" && Number(a) >=100 && ex1 ==="👩") {
        return [String(Number(a)-17+1), "1は大群で逃げられないと思って腹くくって、うおーって叫びながらバーって大群に突っ込んでいって、頑張って17人倒すが自分も倒れ中に優しい女性が1人いて介抱され、その2人が恋に落ちて後々結婚して子供が1人生まれてさらにまた1増えるから"]
    }
    return [undefined, "さや香のネタにないから"];

}

function three_items() {
    return ["140", "3と2と8はとても仲が良く肩を組み合い、俺ら(328)三ツ矢サイダーやな、という。三ツ矢サイダーは140周年だから。"]
}

« 高周波・RFニュース 2024年11月27日 Ericsson Mobility Report Nov.2024発行、NordicのnRF54L15がRaytacモジュールに搭載、SIMComの5G RedCapモジュール、北京の清華大学でLevel4の自律ネットワークが稼働、AmpleonのDoherty RF Power Transistor、Rohmのシリコンキャパシタ | トップページ | Excelで正規表現が使えるようになっていた。REGEXTEST関数などが使える。それなら一回見てみたかった正規表現だけで素数判定をするのをやってみる。1セルに=NOT(REGEXTEST(REPT("1",A2),"^1?$|^(11+?)\1+$")))などと入れると素数判定できる。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 高周波・RFニュース 2024年11月27日 Ericsson Mobility Report Nov.2024発行、NordicのnRF54L15がRaytacモジュールに搭載、SIMComの5G RedCapモジュール、北京の清華大学でLevel4の自律ネットワークが稼働、AmpleonのDoherty RF Power Transistor、Rohmのシリコンキャパシタ | トップページ | Excelで正規表現が使えるようになっていた。REGEXTEST関数などが使える。それなら一回見てみたかった正規表現だけで素数判定をするのをやってみる。1セルに=NOT(REGEXTEST(REPT("1",A2),"^1?$|^(11+?)\1+$")))などと入れると素数判定できる。 »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ