「Swedish」の得点表示の作り方

abcでは、the 11thより、3Rコース別にて「Swedish 10」という形式が行われています。

これは、「10問正解で勝ち抜け、10×で失格」というルールなのですが、この「×」は単なる誤答数を表しているわけではありません。
最初の1○目を正解するまでは誤答で+1×、その次の2○(1~2○)は誤答すると+2×、その次の3○(3~5○)は誤答すると+3×、最後の4○(6~9○)は誤答すると+4×という設定です。
すなわち、正解を重ねていくにつれて、加算される「×」の数が増えていくというものです。勝ち抜けに近づいていくほど慎重なプレイが要求されていきます。

名前の由来は、おそらくクイズの定番問題の一つである「スウェーデンリレー」でしょう。
これは、4人の走者が、それぞれ100m、200m、300m、400mを走るリレー競技のことです。

さて、abcでは10○で勝ち抜けとなっているため、誤答罰は4×までしか設定されておりませんが、勝ち抜け条件のポイントをもっと高く設定する場合は、4×以降の誤答罰も設定する必要があります。
列挙してみると、

10~14P時の誤答:+5×
15~20P時の誤答:+6×
21~27P時の誤答:+7×
28~35P時の誤答:+8×
36~45P時の誤答:+9×
……

ちょっと非現実的のように思えますが、加点方式というのは、連答ボーナスとか、答えの文字数がポイントになるとか、サイコロ複数個振って出た目の合計がポイントになるとか、ルール次第でいくらでもインフレさせることは可能です。
このような場合に備え、その時点のポイント数から、誤答時の加算×数を求める公式が必要です。

結論から言うと、次の2式のいずれかを使えばよいです。
(ポイント数をpとする)

A.




を小数第1位で切り上げ



B.



を小数第1位で切り捨て


それでは、「「終わった問題」の行と「今の問題」の行を色分け表示する」の続きから作っていきます。
完成品はこちらです。

【新たに使用するExcelの機能】

・関数「ROUNDUP」「ROUNDDOWN」

【作り方】

①加算×数記録テーブルを作る

こちらももうおなじみですね。
N~U列を使います。


N7セルに以下の数式を入力し、U56セルまでオートフィルします。

=IF(D7="x",ROUNDUP((-1+SQRT(SUM(D$7:D7)*8+9))/2,0),"")
もしくは
=IF(D7="x",ROUNDDOWN((1+SQRT(SUM(D$7:D7)*8+1))/2,0),"")

その問題で誤答した場合は、その行に「加算される×の個数」を、そうでない場合は何も入力されません。
ここで、新しい関数が登場しました。ROUNDUP関数とROUNDDOWN関数は、指定した桁でそれぞれ切り上げ、切り捨てを行います。
この関数の引数は2つ。1つ目は「切り上げたい(切り捨てたい)数字」、2つ目は「小数第何位までを残すかの数字」です。
例えば、

=ROUNDDOWN(3528.654,2)

と入力すれば、小数第2位までは残され、3528.65と表示されます。

では、小数第1位以下を切り捨てて整数にしたい場合は?
小数の桁は1つ残らず切り捨てるのですから、0と入力すればよいのです。
なお、第2引数には負の値も指定することができます。例えば、100の位以下を切り捨てたい場合は-3と入力します。
ちなみにこれは、四捨五入を行うROUND関数でも同様です。

さて、試しに、ある解答者に正解と誤答を繰り返して入力しましょう。
そして、加算×数テーブルを見ると…


1が1個、2が2個、3が3個、・・・というように、きちんとルールに則って×数が記録されていることが確認できます。

②誤答数表示セルの数式を書き換える

現状、誤答数表示セル(5行目)には、COUNTIF関数を用いて入力されたxの数を数えた値が表示されております。
これを、先程作った加算×数記録テーブルに表示された値を合計するように変更します。

D5セルに以下の数式を入力し、K5セルまでオートフィルします。

=SUM(N7:N56)&"×"

下の画面では、第3枠の人を誤答→正解→誤答→正解→…とし、11○11×させた状態です。11Pで35×(1+2×2+3×3+4×4+5)と表示されています。


③次に誤答した際の加算×数を表示する

「次間違えたら何×が加えられるか」ということも併せて表示されるようにしておきましょう。
試合中、今の点数で間違えたら何×がつくかというのは、プレイヤーも観客も瞬時にわかるものではありません。こういった、人間が咄嗟に把握できない数字こそ、得点表示プログラムにまかせるべきです。

6行目の見出しをクリックし、「挿入」を押して、新しい行を挿入します。
そして、D6セルに以下の数式を入力し、K6セルまでオートフィルします。

="(+"&ROUNDDOWN((1+SQRT(SUM(D$7:D$56)*8+1))/2,0)&")"


④ポイント数表示セルの数式を書き換える

ポイント数表示セルも、先ほどまでの誤答数表示セル同様、COUNTIF関数を用いてxの数を数えることで"LOSE"と表示するように指定されています。
加算×数記録テーブルを合計して判断するように書き換えましょう。

D4セルを以下のように書き換えて、K4セルまでオートフィルします。

=IF(SUM(D8:D57)>=$N$4,"WIN",IF(COUNTIF(D8:D57,"x")>=$O$4,"LOSE",SUM(D8:D57)))

=IF(SUM(D8:D57)>=$N$4,"WIN",IF(SUM(N8:N57)>=$O$4,"LOSE",SUM(D8:D57)))

これで、LOSE表示もきちんとできるようになりました。



コメント

このブログの人気の投稿

基本①:「m○n×クイズ」の得点表示の作り方

参加者の苗字と名前を分離する/選手名を均等な大きさで表示する

勝ち抜け時に順位を表示する