ヌメロンルールまとめ&スプレッドシートで一人用ヌメロン作ってみた

Numer0n』(ヌメロン)は、2012年~2013年フジテレビの深夜帯で放送していたゲームバラエティ。互いに設定した3桁の数字を当て合うというゲームです。

学校でも友達通しでやったなーと思い、どんなルールだったっけ。ってのを懐かしみながら調べてたんですけど、これスプレッドシートの関数だけで組むことができるのかなということで、ちろっと作ってみました笑

スプレッドシートのリンクも共有しておくので、興味ある方、見てってくださいな!

記事を書いた人

こんにちは。当ブログの管理人の『くろん』です。
30代サラリーマン、新規事業推進室に所属。ブラック企業勤め時代に身に着けた業務効率化ノウハウをアウトプットしていきます。
読んでくれた方の業務が一秒でも早く終わりますように!と願いながら記事書いていきます!

スポンサーリンク
目次

ヌメロン(Numer0n)のルールまとめ

ヌメロンは、2人のプレーヤーがそれぞれ、0から9の数字から3つの異なる数字を用いて作られた3桁の数字を当てあうゲームです。

先攻プレーヤーが、3桁の数字をコールし、後攻プレーヤーがその数字が、自分が選択した数字とどの程度被っているかを、『EAT(イート)とBITE(バイト)』を用いて返答します。

『EAT』は、数字とその位がともに合っている場合、『BITE』は数字はあっているが位が異なる場合に用います。

例えば、後攻プレイヤーが『253』を選択していた場合において、先行プレイヤーが『123』とコールした場合は、『1EAT(1の位の3が完全に一致) 1BITE(10の位の2が、位は異なるが使用している)』になります。

このやりとりを繰り返していき、相手の数字を完全に当てたほうが勝ちとなります。

アイテムの紹介

本家ヌメロンには、バトルを有利に進めるアイテムが存在します。紹介していきましょう。

DOUBLE(ダブル)

攻撃系のアイテムで、自分のターンに2回相手の番号をコールする権利が発生するアイテムです。ただし、使用の代償として、『自分の番号について、相手が指定した位を開示しなくてはいけない。』というのが発生します。

ここで決める!というタイミングで使用されますが、2回のコールで番号を当てられないと、途端に窮地に追い込まれる両刃の剣ですね。

HIGH&LOW(ハイアンドロー)

相手の番号について、すべての桁において、『HIGH(5~9)』か『LOW(0~4)』を教えてくれるアイテム。

中盤~終盤にかけて、数字をある程度絞れたときに、数字確定の手助けとして有効なアイテムになります。

TARGET(ターゲット)

『0~9』の数字のうち1つを宣言し、その数字が選択した数字に含まれているかどうかを知ることができるアイテム。もし、含まれていた場合は、どの位に使用されているかも知ることができるので、当たれば一気に相手の数字の解析が進むこと間違いないアイテムになります。

SLASH(スラッシュ)

相手が使用している数字の最大値ー最小値の値を知ることができるアイテム。例えば、『739』であれ9-3で『4』という数字を知ることができる。

なかなか使い勝手が悪いというか難しいアイテムではあるが、『9』と『0』を使用した数字を選択したくなくなったり、『123』のような連チャンの数字を選択したくなくす、抑止力的な効果を期待できる。
※スラッシュナンバーが9だったら、『9』と『0』を使用していることがバレますし、スラッシュナンバーが『2』だったら『123』『345』とかの連続数字であることがバレるので。

SHUFFLE(シャッフル)

シャッフルは、自分がゲーム開始時に選択した数字の順番を並び替えることができるアイテム。必ず並び替えなくてはいけないわけではなく、ゲーム開始時と同じ並びにしてもよい。ゲーム終盤で、もう次当てられそうだ!ってときに使うと効果があるアイテムです。

CHANGE(チェンジ)

自分の選択している3桁の数字のうち、1つを選択し、その位及びLOWかHIGHかを宣言した後、他の手持ち数字カードと交換してもよいアイテム。但し、LOWを交換する場合はLOWと、HIGHの場合はHIGHとしか交換できない。

ヌメロンルールに基づき、スプレッドシートでお一人様ヌメロン再現

スプレッドシートで、ヌメロンができるゲームを簡単ですが、作ってみました。本家ヌメロンでは、アイテムが豊富にありますが、アイテム制度はなしになります。技術力がなくてごめんなさい。。。

ヌメロン(Numer0n)_スプレッドシート_くろんの部屋

コピーでの共有モードになっているリンクなので、Googleアカウントにログインして、コピーしちゃってくださいませ!

使い方は、A2セルに適当な正の整数の値を入力して頂き、すると裏側で暗号化処理がなされ、今回当てる『3桁の数字』が生成されます。(あ、4桁Verも作ったので、やりたい桁数のシートを選択してください)

その後、A7セルに3桁の数字を入力していただければ、それに対して『HITBITE』が返ってくるしくみになってます。

一応、どういう仕様になっているか、解説していきますね。

工程① 数字ランダム化手順

正直この工程が一番悩みました笑
GAS使えば一発なんですけど、関数でやろうという制約で考えていたので。。。

ヌメロンを一人でやるときにネックになるのが、当てるべき数字を、自分が分からない形で、存在させないといけないという点です。

ランダムな文字列を算出する、『rand関数』かなあとも思ったのですが、この関数の問題な点は、リロード・再計算のたびに数字が変わってしまうことです。それじゃあ役に立ちそうにないですね。

次に考えたのが、適当な長めの数字を作り出し、そのどこらか3桁を抽出してしまえばいいだろう。なのですが、これまた問題になったのが、『3桁だが、各位で重複した数字を取りうる』点です。ヌメロンでは、各桁で使用される数字は、被っててはいけないので、このあたりからドツボにハマりだしました笑

結局、こういうふうにしました。

  1. 数字を入力してもらい、大きな数字を掛けて巨大な数にして、指数表記にさせた文字列から、mid関数を用いて必要桁数分抽出する。
  2. これだと重複した数字を使用している可能性があるので、『1234567890』の文字列を上記ででてきた数字の各桁の数分だけ、左と右を入れ替え処理を行い、一番左の数字を抽出する。
  3. 抽出した数字をつなぎ合わせて、必要桁数の数字とする。

順を追って、関数とともに説明していきます。

=mid(A2*365365365365365,4,3)

A2セルにユーザーが記入してもらった数字を、大きな数字(なんでもいい)を掛けて、指数表記にします。
例えば、A2に『15』と入力された場合、『5.48048E+15』となります。これをMID関数で、4つめの文字列から3つ分抽出する処理となっているので、『804』が抽出されます。

=value(mid($B$3,1,1))
=value(mid($B$3,2,1))
=if(value(mid($B$3,3,1))>8,8,value(mid($B$3,3,1)))

さきほどの例でいくと、『804』を『8』『0』『4』に分解する工程ですね。
一の位だけ謎の処理になっているかと思うのですが、これは、後述する『くるくる処理』の過程で、挙動がおかしくならないように、一の位のみは8以下の数字にしなくてはいけないための処理になります。
※ちなみに補足ですが、『value関数』を用いて数字としての値に変えないと、不等号の条件式が反応しなくなります。

=right(F4,len(F4)-C3)&left(F4,C3)
=left(G3,1)
=right(G3,len(G3)-1)

これが、個人的には『くるくる処理』と呼んでいるのですが、F4セルには、『1234567890』という数字を用意しておき、イメージとしてはこれをシャッフルして、並び替えた(そんな大層なシャッフルではなく、区切り位置を設けて、左と右を入れ替える程度)文字列の一番左を抽出、残りの文字列を同様に処理する形になります。

これをさきほどの、『804』という数字で3回繰り返して、各桁重複ない3桁の数字に変えています。ここまでが、『数字ランダム化手順』になります。

工程② 入力数字判定

工程①で、当ててほしい数字は決まりましたので、今度はプレイヤーが入力してくれた数字に対して、『EAT』『BITE』判定をする工程に入ります。

  1. A列にプレイヤーの予想数字を入力してもらう。
  2. BCD列(黄色い部分)で、入力した数字を各位に分解する
  3. EFG列(赤い部分)で、『EAT』の判定を行う
  4. HIJ列(青い部分)で、『BITE』の判定を行う
  5. K列で今までの判定情報をまとめる

このように判定を進めていきます。

BCD列(黄色い部分)で、入力した数字を各位に分解する

BCD列(黄色い部分)の各位の数字に分解するのは、このような関数です。

=MID($A7,COLUMN()-1,1)

『MID関数』を用いて文字列を分解していきます。『COLUMN関数』を用いることで、百の位を抜きたいときに『1』、十の位を抜きたいときに『2』といった感じで、引数をいちいち変える必要がないようにしています。

EFG列(赤い部分)で、『EAT』の判定を行う

続いて、EFG列(赤い部分)で、『EAT』の判定を行っています。
『EAT』の判定は、設定された数字と、プレイヤーが入力した数字の、それぞれの位が一致しているかどうかで判定できますね。

=IF(G$4=B7,"○","✕")

設定された当てるべき数字の百の位は『G4』セルに、十の位は『H4』、一の位は『I4』セルにあるので、それと、先程分解したプレイヤー入力数字の各桁とを比較しています。

プレイヤー入力数字は下にどんどん書かれていくので、この関数は下方面に展開していくのですが、その際に、設定された数字の行は4行目で変更されないので、行方向のみ絶対参照として『$』をくっつけています。

HIJ列(青い部分)で、『BITE』の判定を行う

最後に、HIJ列(青い部分)で『BITE』の判定を行っています。

=IF(AND(COUNTIF($G$4:$I$4,B7)=1,E7="✕"),"○","✕")

『BITE』の判定は、少しだけややこしくて、まず、プレイヤー入力数字の各位の数字が、設定された数字に存在するかどうかを判定します。『COUNTIF関数』で、数字があれば『1』になるので、それを利用しています。

そして、これだけだと、『EAT』の場合も含んでしまうので、それを排除するために、『AND関数』で、『EAT』判定されてない場合、という条件を付け加えています。

K列で今までの判定情報をまとめる

K列では、今まで判定してきた『EAT』『BITE』情報をまとめて文字情報にしています。

=COUNTIF(E7:G7,"○")&"EAT "&COUNTIF(H7:J7,"○")&"BITE"

EFG列の○の数を数え、HIJ列の○の数を数え、『EAT』『BITE』を付記している感じですね。

これで完成になります!!!

ヌメロンスプレッドシートで作ってみようまとめ

スプレッドシートのみで関数のみで作ってみましたが、一番むずかしかったのは、どうやってランダム的に当てるべき数字を固定するかっていうところでした。ランダム=rand関数っていう頭があったのですが、いやそれだと、入力するたびに数字変わってしまって、使い物にならないなと。。。

『EAT』『BITE』の判定自体は、『IF関数』『COUNTIF関数』あたりを使えばイケルだろうなと思ってただけに、そこに至る前につまづきかけたのは盲点でした笑

思い出にふけって、仕事の休み時間にでもプレイしていただければ幸いです!

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次