矮小

井の中の蛙

PX-W3PE4をUbuntu 17.10.1で使えるようにする

Prerequisites

  • チューナー:PX-W3PE4
  • ICカードリーダー:ACR39-NTTCom

PX-W3PE4に付属のカードリーダーではB-CASカードは読み込めません。何のために付いてるんだ……。

sudo apt install pcscd pcsc-tools libpcsclite-dev cmake g++ unzip dkms pkg-config nasm

作業

B-CASカード読み取り確認

pcsc_scan
 Japanese Chijou Digital B-CAS Card (pay TV)

libarib25

git clone https://github.com/stz2012/libarib25
cd libarib25
mkdir build
cd build
cmake ..
make
sudo make install

ドライバ

LinuxでPX-W3U4を使う – 底辺迷走

wget http://plex-net.co.jp/plex/linux/Ubuntu17.10_64bit_Kernel4.13.0-19.zip
unzip Ubuntu17.10_64bit_Kernel4.13.0-19.zip
cd Ubuntu17.10_64bit_Kernel4.13.0-19
sudo mkdir -p /usr/src/px4-1712/src/
sudo cp -v *.ko /usr/src/px4-1712/src/
sudo vi /usr/src/px4-1712/dkms.conf

gist.github.com

これの上のdkms-ubuntu.confの方。

sudo dkms install -m px4 -v 1712
sudo vi /etc/udev/rules.d/99-px4.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0511", ATTR{product}=="*[QW]3*4", RUN+="/sbin/modprobe -f usb-px4"
sudo reboot
ll /dev/px4-DTV*
crw-rw-rw- 1 root video 180, 1 Mar 21 15:01 /dev/px4-DTV0
crw-rw-rw- 1 root video 180, 2 Mar 21 15:01 /dev/px4-DTV1
crw-rw-rw- 1 root video 180, 3 Mar 21 15:01 /dev/px4-DTV2
crw-rw-rw- 1 root video 180, 4 Mar 21 15:01 /dev/px4-DTV3

デバイスドライバ

wget http://plex-net.co.jp/download/linux/Linux_Driver.zip
unzip Linux_Driver.zip
cd Linux_Driver/MyRecpt1/MyRecpt1/recpt1/
sh ./configure --enable-b25
make // なぜかここで1回落ちる
make clean
make // cleanしたあともう一度ビルドするとなぜか通る
./recpt1 --b25 --strip 27 10 ~/test.ts
using B25...
enable B25 strip
(PID:3142)(CH:T27) Presented = 0x0, Locked = 0x0, Strength = 0, Quality = 0, C/N = 0.000000dB 
(PID:3142)(CH:T27) Presented = 0x1, Locked = 0x1, Strength = 59, Quality = 100, C/N = 26.648802dB 

(PID:3142)(CH:T27) Recording...
(PID:3142)(CH:T27) Recorded 10sec
ll ~/test.ts
-rw-rw-r-- 1 hoge hoge 18849068 Mar 21 15:11 /home/yusaku/test.ts

Mirakurun

UbuntuのNode.jsは古くてMirakurunを入れられないのでソースコードをビルドしてインストールする。

wget https://nodejs.org/dist/v8.10.0/node-v8.10.0.tar.gz
tar xf node-v8.10.0.tar.gz
cd node-v8.10.0
./configure
make
sudo make install

あとは

GitHub - Chinachu/Mirakurun: A Modern DTV Tuner Server Service.

に従う。ただし、pm2はログファイルの管理をしないので、pm2を入れたらMirakurunを入れる前に pm2 install pm2-logrotate する。

Chinachu

FFmpegのハードウェア支援を使いたいのでソースコードをビルドしてインストールする。

git clone https://git.ffmpeg.org/ffmpeg
cd ffmpeg
./configure
make
sudo make install

あとは

Gamma Installation V2 · Chinachu/Chinachu Wiki · GitHub

に従う。ただし rm ./usr/bin/ffmpeg して "vaapiEnabled"true にする。

あとは20772番ポートにアクセスすればChinachuが見られるようになっているはず。

AtCoderに登録したら解くべき精選過去問10問をD言語で解いてみた - D言語の構文と標準ライブラリを使い倒す編

をやろうとしたら先を越されていました。

が、せっかくなので競技プログラミングのリハビリをするために10問全部D言語で解いてみました。解き方は

でも解説されているので、ここではD言語らしく書けたところに注目していきたいと思います。

PracticeA - はじめてのあっとこーだー(Welcome to AtCoder

3つの整数の合計値と与えられた文字列を出力します。

import std.stdio, std.string, std.conv, std.algorithm;

void main() {
  auto a = readln.chomp.to!int;
  auto bc = readln.chomp.split.map!(to!int);
  auto s = readln.chomp;

  "%d %s".writefln(a + bc[0] + bc[1], s);
}

D言語には多重代入やC++のようなストリームやは無いので、愚直に分割してインデックスでアクセスしないといけません(誰か良いやり方あったら教えてください……)。ここではUFCS (Uniform Function Call Syntax) を使っていて、どういうものかというと、任意の関数で a(b(c(d)))d.c.b.a が等価になるという実装です。変数 bc の場合は標準入力読み込み→改行切り落とし→空白で分割→各要素を int に変換というように、左から右に流れるように読めるようになることでコードの可読性が上がります。 writefln は書式・改行付き出力です。ここでもUFCSを使っています。

また、D言語には型推論があるので、変数を宣言する時の型は auto でだいたい通ります。

冒頭の4つの標準ライブラリはそれぞれ writefln, chomp, to, map を使うためにインポートしています。標準入力から複数の数字列を読み込んで配列に変換するためにはこの4つのライブラリが必須です。

20180321 追記

行けました。D言語を知って6年ぐらいになるけど初めて知った。すごい。

ABC086A - Product

2つの整数を受け取って、その積の偶奇を判定します。

import std.stdio, std.string, std.conv, std.algorithm;

void main() {
  auto ab = readln.chomp.split.map!(to!int);
  if (ab[0] * ab[1] % 2 == 1)
    "Odd".writeln;
  else
    "Even".writeln;
}

ABC081A - Placing Marbles

3桁の数字を受け取って、1が何個あるかを出力します。

import std.stdio, std.conv, std.string, std.algorithm;

void main() {
  readln.chomp.count('1').writeln;
}

std.algorithm には count がいます。これは与えられた配列中に、与えられた要素が存在する数を返す関数です。また、D言語では stringimmutable(char)[] なので "hogehoge".count('h') とすることで文字列中の特定の文字を数えることができます。ということで入力の受け取りから答えの出力まで1行で書くことができました。

ABC081B - Shift only

N個の整数が与えられ、すべての整数を2で割り切る操作が何回できるかを出力します。

import std.stdio, std.conv, std.string, std.algorithm, std.array;

void main() {
  readln;
  auto a = readln.chomp.split.map!(to!int).array;
  auto ans = 0;

  while(a.all!"a % 2 == 0") {
    a = a.map!"a / 2".array;
    ans++;
  }

  ans.writeln;
}

いつも通り整数列を受け取って配列にしますが、今回はその変数を破壊的に操作したいので、後々のために array() を使って map() を評価して型を int[] にしておきます。

std.algorithm には all というテンプレート関数がいます。これは、文字列で受け取った述語を各要素で評価して、すべて true と評価したら trueを、そうでなければ false を返す関数です(同様に any もあります)。もしすべての要素が偶数なら、すべての要素を2で割って置き換えるという操作を愚直に行います。LDCで1msで通りました。

20180321 追記

はい。D言語上記のようにベクトル演算といって、配列のスライスを対象として各要素に演算子を適用することができます。 map を書くことに夢中ですっかり忘れていました。

ABC087B - Coins

500円玉、100円玉、50円玉がA, B, C枚与えられたとき、これらを使ってX円を作る方法が何通りあるかを出力します。

import std.stdio, std.conv, std.string, std.algorithm, std.range;

void main() {
  auto a = readInt; // 500
  auto b = readInt; // 100
  auto c = readInt; //  50
  auto x = readInt;
  auto ans = 0;

  foreach (i; iota(a + 1))
    foreach (j; iota(b + 1))
      foreach (k; iota(c + 1))
        if (i * 500 + j * 100 + k * 50 == x)
          ans++;

  ans.writeln;
}

int readInt() {
  return readln.chomp.to!int;
}

X円からの引き算や0円からの足し算でもできそうな気がしますが、3枚の枚数の最大がそれぞれ50枚なので、全探索で間に合います。 iotaPythonで言う range() のようなものです(実際にはイテレータのようなものではなく配列を返すので厳密には違いますが)。

ABC083B - Some Sums

整数Nが与えられ、10進法でのNの各桁の合計がA以上B以下である数の合計を出力します。

import std.stdio, std.string, std.conv, std.algorithm;

void main() {
  auto nab = readln.chomp.split.map!(to!int);
  auto ans = 0;

  foreach (n; 1 .. nab[0] + 1) {
    auto digit_sum = n.to!string.split("").map!(to!int).reduce!"a + b";
    if (nab[1] <= digit_sum && digit_sum <= nab[2])
      ans += n;
  }

  ans.writeln;
}

foreach 文の範囲にはこのように x .. yx 以上 y 未満の範囲を取ることができます。

肝心の各桁の和を取る部分ですが、n を一旦文字列に変換→空文字列で分割することで1文字ずつの配列に変換→各要素を整数に変換→ reduce で各要素の総和を取ることで各桁の和を取ることができます。

ABC088B - Card Game for Two

AliceとBobが、整数が書かれたN枚のカードを交互に取り合って、自分が持っている整数の和を最大化しようとします。Aliceが先攻で、2人が最善手を取り続けたとき、AliceがBobを何点上回っているかを出力します。

import std.stdio, std.string, std.algorithm, std.conv, std.range;

void main() {
  auto N = readln.chomp.to!int;
  auto a = readln.chomp.split.map!(to!int).array.sort!"a > b".array;
  auto alice = 0;
  auto bob = 0;

  foreach (i, e; a) {
    if (i % 2 == 0)
      alice += e;
    else
      bob += e;
  }

  (alice - bob).writeln;
}

foreach (i, e; a) とすることで、i にはインデックスが入ってきます。Pythonenumerate のような関数を噛まさなくていいところが良いですね(ただし a が評価済みの配列である必要があるみたいです)。

ABC085B - Kagami Mochi

X段の鏡餅とは、どの餅も下の餅よりも厳密に小さいものがX個続いたものを言います。餅が複数個与えられるので、最大何段の鏡餅を作れるかを出力します。

import std.stdio, std.string, std.conv, std.algorithm, std.range;

void main() {
  auto n = readln.chomp.to!int;
  int[] d;
  
  foreach (_; 0 .. n)
    d ~= readln.chomp.to!int;

  d.sort.uniq.array.length.writeln;
}

整数が何種類あるか良いかを数えればいいのでカウント用の連想配列を作りたくなります(D言語にはSetがありません)が、面倒なのでソートしてユニークを取った配列の length をそのまま出力します。D言語では配列の初期化時にサイズを与えなければ動的配列になるので、~= 演算子で要素を配列の後ろに追加していくことができます。

20180321 追記

赤黒木に突っ込めば勝手にユニークな配列が取れますね。情弱だった……。要はC++でいう std::map のようなものだと思ってもらえればいいと思います(C++詳しくないのでもしかしたら違うかもしれませんが)。ということで redBlackTree(d).length.writeln; が別解となります。sort.uniq する方は2msでしたが赤黒木を使うと1msになりました。オーダーがー大きな問題を解くときには効いてくるのかな?

ABC085C - Otoshidama

10000円札、5000円札、1000円札が合わせてN枚あったとき、Y円を作ることができるお札の組み合わせを1つ出力します。できなければ-1 -1 -1を出力します。

import std.stdio, std.string, std.conv, std.algorithm;

void main() {
  auto ny = readln.chomp.split.map!(to!int);
  solve(ny[0], ny[1]).map!(to!string).join(" ").writeln;
}

int[] solve(int n, int y) {
  foreach (i; 0 .. n + 1) // 10000
    foreach (j; 0 .. n - i + 1) { // 5000
      auto k = n - i - j; // 1000
      if (i * 10000 + j * 5000 + k * 1000 == y)
    return [i, j, k];
    }

  return [-1, -1, -1];
}

お札が3種類あるので一見3重ループに見えますが、2種類のお札の枚数が決まれば残りのお札の枚数は引き算するだけで求められるので2重ループになります。

ABC049C - 白昼夢 / Daydream

文字列Sが与えられるので、空文字列の状態からdream, erase, dreamer, eraserのどれかを足すことでSにできるかどうかを出力します。

import std.stdio, std.string, std.conv, std.algorithm;

void main() {
  auto s = cast(char[])readln.chomp;
  s.reverse;

  if (s.solve)
    "YES".writeln;
  else
    "NO".writeln;
}

bool solve(char[] s) {
  if (s.length == 0) return true;
  
  if (s.length >= 5 && (s[0 .. 5] == "maerd" || s[0 .. 5] == "esare"))
    return solve(s[5 .. $]);
  if (s.length >= 6 && s[0 .. 6] == "resare")
    return solve(s[6 .. $]);
  if (s.length >= 7 && s[0 .. 7] == "remaerd")
    return solve(s[7 .. $]);

  return false;
}

初めてこの問題を見た時はどう解けばいいのか困りましたが、後ろから消していけばいいという話を見てなるほどと思いました。D言語は配列のスライスを取ることができます。また、配列の [] の中に限っては $ が配列の長さを返してくれるので、それを範囲の終端に取ることで、配列の終わりまでの要素を取ることができます。最初の入力は空文字列は与えられないので、solve にやってきた文字列の長さが0なら全ての文字列を消し切ることができたということで true、dream, erase, dreamer, eraserを反対にしたもののどれかがSを逆にしたものの頭に一致すればそれを取り除いたものを solve に渡し、いずれにも当てはまらなければ false を返せばいいです。

20180322 追記

よく考えたら正規表現にかけるだけでいいですね。

import std.stdio, std.string, std.conv, std.algorithm, std.regex;

void main() {
  auto ans = readln.chomp.matchFirst("^(dream|dreamer|erase|eraser)+$");
  if (ans) "YES".writeln;
  else "NO".writeln;
}

今回は行頭から行末まで全部にマッチしてほしいのでどちらでもいいですが、std.regex には matchAllmatchFirst の2つがいるので、適宜使い分けていきましょう。公式リファレンスにもありますが、以前使われていた match は今ではdeprecatedになっています。

ちなみにこのコードは 8ms で通りました。最大ケースは100,000文字ですが余裕でしたね。他の言語でも通るのかな?

ABC086C - Traveling

時刻0には(0, 0)におり、1時刻につき2次元平面状の上下左右のいずれかに移動できるとして、時刻tに(x, y)にいることができるかどうかを判定したいです。このような組み合わせを複数与えられたときに、全ての条件を満たすことができるかどうかを判定します。

import std.stdio, std.string, std.conv, std.algorithm, std.math;

void main() {
  auto n = readln.chomp.to!int;
  auto t_before = 0;
  auto x_before = 0;
  auto y_before = 0;

  foreach (_; 0 .. n) {
    auto txy = readln.chomp.split.map!(to!int);
    auto t = txy[0];
    auto x = txy[1];
    auto y = txy[2];
    auto time = t - t_before;
    auto x_dist = abs(x - x_before);
    auto y_dist = abs(y - y_before);
    auto distance = x_dist + y_dist;

    if (distance > time || ((x_dist + y_dist) % 2 != time % 2)) {
      "No".writeln;
      return;
    } else {
      t_before = t;
      x_before = x;
      y_before = y;
    }
  }

  "Yes".writeln;
}

先達の教えの通り、2次元平面上の点(x, y)のx + yの偶奇と移動するのに必要な時刻の偶奇が一致しなければいけないという事実を利用します。上記のコードで59msで通すことができたので、必要なオーダーの割にはまあまあの速度が出ているのではないかなと思います。

まとめ

以上のように、AtCoder初心者向け精選10問を、D言語のライブラリを駆使して上手く解くことができました。問題がアルゴリズミカルになるにつれ見た目がCやC++に近づいていく感はありますが、ABCのA-B問題であればUFCSと標準ライブラリを用いてあたかもスクリプト言語のように問題を解くことができることが示せたのではないかなと思います。私の記事をきっかけにD言語競技プログラミングを解いてみようかなと思う人が増えてくれれば幸いです。

ABC044 B問題「美しい文字列」をD言語で解く

理由(ワケ)あって4ヶ月弱休職していましたが、今月から復帰しました。Yousackです。休んでいた間テレビを見る以外のことをほとんどしていなかったので様々なことをリハビリしています(機械学習、プログラミング、音ゲー、ダーツ、……)。

競技プログラミングもリハビリ中で、久しぶりにAtCoder Problemsの色塗りをしています。その中でD言語っぽく書けた問題があったので紹介します。

題意

文字列 w 中に現れる各文字種全てが偶数回現れているかどうかを判定する。

解法

実際に数える。

プログラム

Submission #1873792 - AtCoder Beginner Contest 044

import std.stdio, std.string, std.conv, std.range, std.algorithm;

void main() {
  auto w = readln.chomp;
  int[char] char_count;
  foreach (c; w) {
    char_count[c]++;
  }

  if (char_count.values.all!"a % 2 == 0") {
    "Yes".writeln;
  } else {
    "No".writeln;
  }
}

int[char] char_count は、char をキーとし int を値とする連想配列 (associative array) です。 int のデフォルト値は 0 なので今回は初期化の作業は必要ありません。宣言するだけで大丈夫です。

連想配列について:Associative Arrays - D Programming Language

型について:Types - D Programming Language

foreach では、文字列 w の先頭から文字 c を1文字ずつ取り出して char_count のキーとして突っ込み、対応する値をインクリメントしています。D言語では stringimmutable char[] なので型推論が働くため単に c と書くことができます。今回は必要ありませんが 、ref c とすることで参照を取り出すことができるので、オブジェクト自身を操作することができます(今回は immutable なので無理ですが)。

問題は各文字種全てが偶数回現れるかどうかを判定する部分です。自明ですが、現れない文字は0回出現していることと同値のため、偶数回の出現として扱うことができます。さて、D言語連想配列には .values というプロパティがあります。

https://dlang.org/spec/hash-map.html#properties

これはある連想配列の値を全て並べた配列です(同様に .key もあります)。各文字種が偶数回現れたかどうかを判定したいため、今回はこの値だけ見れば良さそうです。

.values の後には .all!"a % 2 == 0" と続いています。 allstd.algorithm にいるテンプレートで、テンプレート引数には真偽値を返す述語を文字列として渡します。各要素を a に代表させて、それを2で割った余りが0になるかどうか、すなわちその数が偶数であるかどうかを判定しています。全ての要素について true と評価できれば alltrue を返します。

https://dlang.org/phobos/std_algorithm_searching.html#all

ちなみにここではUFCS (Uniform Function Call Syntax) という糖衣構文のようなものを使っていて、簡単に言うと function(a, b, ...)a.function(b, ...) が同義になるシステムです(これは再帰的に適用できるので fa(fb(fc(x), y))x.fc.fb(y).fa と書けます)。そのためこの部分は本来は all!"a % 2 == 0"(char_count.values) と書きますが、自分はRuby出身者でメソッドチェーン大好きマンのためUFCSを多用しているので上のように書きました。ここが一番のD言語らしさだと思っています。つまり、配列・連想配列のプロパティと std.algorithmstd.rangestd.container などにいる関数・テンプレートさえ覚えれば、左から右へ流れるようにメソッドチェーンを書くことができます。D言語では引数を取らない関数は括弧を省略することができるため、 上記再帰的なUFCSの例のように書くことでタイプ数の減少・括弧の対応の複雑さの解消にもつながります。

https://dlang.org/spec/function.html#pseudo-member

最近はAtCoderではLLVMベースのコンパイラであるLDCを使って提出していますが、簡単な問題であればほぼ全てのケースで1msで通ります。みんなもD言語で競プロをやろう。

続パタ4.5節の式を厳密に計算してみる

「厳密に計算してみる」=「数学弱者なので細かく式変形しないとわからん」の意です。式4.41の正規化定数  Z_1 を見て「は?」と思ったので全部自分で計算することにしました。

問題

表の出る確率が  \theta\ (0 \lt \theta \lt 1) のコインを  n 回投げたら表が  r 回出た。今回得た事象を  \mathbf{x}^{(n)} と表す時、 p(\theta|\mathbf{x}^{(n)}) を求めよ。

解く

ベイズの規則より  \displaystyle p(\theta|\mathbf{x}^{(n)}) = \frac{P(\mathbf{x}^{(n)}|\theta)}{P(\mathbf{x}^{(n)})} p(\theta) です。

右辺は \[ \begin{align} P(\mathbf{x}^{(n)}|\theta) &= \theta^{r} (1-\theta)^{n-r}, \\ P(\mathbf{x}^{(n)}) &= \int_0^1 P(\mathbf{x}^{(n)}|\theta) p(\theta)\ d\theta \\ &= \int_0^1 \theta^{r} (1-\theta)^{n-r} p(\theta)\ d\theta \end{align} \] であることは今までと同じです。問題は事前分布  p(\theta) の選び方で、続パタ4.5節ではこれをベータ分布  \displaystyle \mathrm{Be}(\alpha, \beta) = \frac{\theta^{\alpha-1}(1-\theta)^{\beta-1}}{\mathrm{B}(\alpha, \beta)} で仮定しています。ということで \[ \begin{align} P(\mathbf{x}^{(n)}) &= \int_0^1 \theta^{r} (1-\theta)^{n-r} \frac{\theta^{\alpha-1}(1-\theta)^{\beta-1}}{\mathrm{B}(\alpha, \beta)} \ d\theta \\ &= \frac{1}{\mathrm{B}(\alpha, \beta)} \int_0^1 \theta^{\alpha+r-1} (1-\theta)^{\beta+n-r-1}\ d\theta\ \\ &= \frac{\mathrm{B}(\alpha+r,\ \beta+n-r)}{\mathrm{B}(\alpha, \beta)} \end{align} \] なので、\[ \begin{align} p(\theta|\mathbf{x}^{(n)}) &= \theta^{r} (1-\theta)^{n-r} \frac{\mathrm{B}(\alpha, \beta)}{\mathrm{B}(\alpha+r,\ \beta+n-r)} \frac{\theta^{\alpha-1}(1-\theta)^{\beta-1}}{\mathrm{B}(\alpha, \beta)} \\ &= \frac{\theta^{\alpha+r-1} (1-\theta)^{\beta+n-r-1}}{\mathrm{B}(\alpha+r,\ \beta+n-r)} \\ &= \mathrm{Be}(\alpha+r,\ \beta+n-r) \end{align} \] ということで事後分布が簡単に導けました。

YOI#5で勝生が出したSP94.36点を逆算してみた

Minami's Boogie良かったですね。あれぐらいの歳の選手がああいう曲で演技するのを見るのはとても楽しいです。

フィギュアスケートの基本的な技術要素については先週までで終わりにして、今週からは(自分の勉強も兼ねて)ルールのさらに細かいところまで突っ込んで見ていきたいと思います。今週はショートプログラムの採点ごっこに挑戦したいと思います。例のごとく間違いに気付かれた方はブログのコメントや Yousack!!! on ICE (@antefest) | Twitter までお知らせください(ブコメは通知が来ないので気付きません😭)まだフィギュアスケートを見始めたばかり〜という方は過去記事からどうぞ。

yousack.hateblo.jp

StSqとかFSSpとか何のこと? という方は フィギュアスケート要素検索 が良くまとまっていてオススメです。

本題

ユーリ!!! on ICE 第5話では勝生勇利が本編中の中四国九州選手権大会のショートプログラムで94.36点という点数を出していました。参考までに以下が現実世界の男子シングルショートプログラムの自己ベストランキングです(出典:http://www.isuresults.com/isujsstat/pbsmsp.htm )。

f:id:Nagoyan:20161105001004p:plain

世界8位に入りますね……。参考までに、この画像で8位の宇野昌磨の15-16四大陸選手権のショートのリザルトを見てみましょう(出典:http://www.isuresults.com/results/season1516/fc2016/fc2016_Men_SP_Scores.pdf)。

f:id:Nagoyan:20161105002213p:plain

ショートで90点台と言うと上のランキングを見ても分かる通りかなり高い点数ではあるので、本編を見たときは「ここでそんな出してくる?」と思ったのですが、4回転1本でそれが微妙な出来になっても他の質の高い技術要素とPCSの高さで割と取り返せるっぽいですね。

ちなみに演技動画がこちら。

www.youtube.com

ということで、試しにどんな感じの採点をすれば勝生のショートが94点ぐらいになるのかを計算してみましょう。ショートプログラムの要件(分からん人:YOI#3で覚えるフィギュアスケート技術要素(スパイラル・スピン基本姿勢・ショート構成) - 矮小 )と合わせて中四国九州選手権大会でのショートの演技構成を確認してみます。

  1. StSq(ステップシークエンス)
  2. CCSp(足換え必須かつフライングスピンとは異なる姿勢のソロスピン)
  3. FSSp(フライングエントリーのソロスピン)
  4. 3A(2Aまたは3A(単独)、ここから後半でジャンプの基礎点は1.1倍)
  5. 4S(ステップなど*1から直ちに単独ジャンプ)
  6. 4T+2Tx(ジャンプコンビネーション)
  7. CCoSp(スピンコンビネーション)

スピンは最後のスピンコンビネーションしか描写がなかったので、第3話で披露された演技を参考に2.と3.を埋めてみました。3.のFSSpはまだ本編では見られていませんが、まず2.がCCSpなので3.をフライングエントリーのソロスピンにしないとショートプログラムのスピン要素の要件に合いません。さらに3.で選べるスピンは2.とは基本姿勢が異ならなければならないのでFSSpとFUSpのどちらかで、まあシニアだし勝生はスピンとステップが得意な設定があるし……ということでFUSpより基礎点が高くて実際に実施されることも多い*2FSSpにしておきました(今後の放送で確定するかもしれません)。

基礎点を計算する前に、ステップシークエンスとスピンのレベルを確定させなければいけません。面倒なのでとりあえず超適当に決めます(ので、「とりあえず」みたいな枕詞を置いているところについてはあまり信用しないでください。あくまでもお遊びということで……)。

まずステップシークエンス。ステップシークエンスでレベル4を取るためには定められた4つの要件を全て満たさないといけないので、その中の一つである「異なる足で難しいターン・ステップの3連続で異なる組み合わせで1回ずつ行う」*3という要件も要求されます。本編の演技を見てもそれをこなそうとしてる感じはする(しさすがに宮本賢二先生もレベル4が取れるように作っているはず、たぶん、信じてる)のでとりあえず全てのレベル要件を満たしたということにしてStSq4にしておきます。

次にスピン。スピンのレベル要件は(レイバックスピンを除いて)11個もある上にそのうち9個は1つの演技で2度以上繰り返し使えないのでカウントするのが超大変です。今回は7.のCCoSpだけ映されたのでこれだけレベルを検討してみます。他のスピンについては面倒なのでとりあえず全部レベル4にしておきます(よいこのみんなは真似せずにちゃんとレベル要件を確認してね!)

スピン・ステップのレベル要件についてはScale of Valueの後ろの方に載っています。各要素の点数表もこれの前半に載っているので適宜参照してください(Related DocumentsのISU Communication 2000)。

www.isu.org

難しい姿勢の定義と参考写真はテクニカルパネルハンドブックに載っています (Technical Panel Handbook Single Skating)。

Single & Pair Skating - ISU

日本語版はこちら(国内規程→ISUハンドブック→シングル→テクニカルパネル→日本語)。

|Japan Skating Federation Official Results & Data Site|

それでは勝生のCCoSpを参考に、スピンのレベルを上げる要素を確認していきましょう。最初の姿勢は左足でキャメル。

f:id:Nagoyan:20161105010645p:plain

ホップを挟んで……

f:id:Nagoyan:20161105010751p:plain

キャメル・シット・アップライトのどれでもない非基本姿勢。非基本姿勢は1つの種類をこなすごとにレベルが1つ上がります(ただし非基本姿勢や、基本姿勢の「難しい姿勢」は、レベルを上げる要素としては1つの姿勢につき1回までしか演技内では使えません)。これでレベル1を獲得しました。また、スケーティングレッグは1個前の画像と同じ左足のままなので、“Jump within a spin without changing foot”(スピン中に足換えを伴わないジャンプ)を満たしました。これでレベル2。

f:id:Nagoyan:20161105011614p:plain

足換えしてシットスピン。ここは普通の姿勢です。

f:id:Nagoyan:20161105011827p:plain

姿勢を少し変化して左足を手で掴みます。左足が後ろに出ているのでシット・ビハインドの「難しい姿勢」です。これでレベル3。

f:id:Nagoyan:20161105014103p:plain

最後にアップライトスピン。氷上に両足を乗せて回るクロスフット・スピンはアップライトスピンの「難しい姿勢」(アップライト・ストレート)として認められます。これでCCoSp4になりました。めでたしめでたし。

f:id:Nagoyan:20161105014116p:plain

ジャンプについてはGOEを計算してみましょう。3つやってるとまた文量が大変なことになってしまうので、とりあえず上手く行かなかった4Sだけ。4Sはそもそもコマ送りして確認すると回転不足な感じがしました(内心「回りきってる! とは言ってましたが……」)。これが離氷点。

f:id:Nagoyan:20161105014219p:plain

そして着氷点。

f:id:Nagoyan:20161105014609p:plain

YOIのジャンプシーンは、アップで映される場合は基本的に離氷時が右向き(上手向き)になるようにカットが作られている感じがするので、カメラが同じ向きのまま選手を映しているとすれば右向きで着氷しなければいけません。2枚目を見ると回転が1.5/4足りないような感じがするので回転不足(不足分が1/4以上1/2未満)ですかね。僕の解釈が違うかもしれませんがとりあえずそういうことにしておきます。回転不足の場合は点数表のV列の点数が使われるので、基礎点がだいたい0.7倍ぐらいになります。さらに回転不足の場合はGOEの減点要素の “Under-rotated (sign <): -1 to -2” に該当します。

f:id:Nagoyan:20161105024811p:plain

またこの4Sは着氷した時に片手をついてしまいました。これはGOE減点要素の “Touch down with one hand or free foot: -1” に該当します。 GOE加点要素については “clear recognizable steps/free skating movements immediately preceding element” にギリギリ該当しそう。プラスのGOEについては定められた要件を2個満たすたびに1点上がっていくのでここでの加点は付きません。合わせると-2点から-3点になりますが、ここではとりあえず-2にしておきます。

他のジャンプについてはなんとか回転が足りてそうだったのでそのままにしておきます。

ここまで考えた技術要素の基礎点を全部足してみます。4S以外のGOEはとりあえず全部0にして一旦基礎点だけ計算してみます。

  1. StSq4: 3.9
  2. CCSp4: 3.2
  3. FSSp4: 3.0
  4. 3Ax: 8.5 x 1.1(演技後半ボーナス)= 9.35
  5. 4S<x: 8.1(“<”なのでV列の点数)x 1.1 - 2.4 (GOE-2)= 6.51
  6. 4T+2Tx: (10.3 + 1.3) x 1.1 = 12.76
  7. CCoSp4: 3.5

全部足すと42.22点になりました。合計は94.36点で、考えうる最大の演技構成点は 94.36 - 42.22 = 52.14点。男子シングルの演技構成点は50点が満点なので、……あれ? さすがに4S以外のGOEを考慮しなかったのは低く見積もりすぎたようです。ということで、超適当ではありますが、イーグルから入って着氷後の流れも良かった3Aと得意なStSq4をGOE+3に、それ以外の要素はGOE+2にしてみます。

  1. StSq4: 3.9 + 2.1 (GOE+3) = 6.0
  2. CCSp4: 3.2 + 1.0 (GOE+2) = 4.2
  3. FSSp4: 3.0 + 1.0 (GOE+2) = 4.0
  4. 3Ax: 8.5 x 1.1(演技後半ボーナス)+ 3.0 (GOE+3) = 12.35
  5. 4S<x: 8.1(“<”なのでV列の点数)x 1.1 - 2.4 (GOE-2)= 6.51
  6. 4T+2Tx: (10.3 + 1.3) x 1.1 + 2.0 (GOE+2)*4 = 14.76
  7. CCoSp4: 3.5 + 1.0 (GOE+2) = 4.5

全部足すと52.32点になりました。94.36 - 52.32 = 42.04点で、これは上で挙げた宇野の四大陸選手権ショートのPCSより少し低いぐらいの点数です。GOEをかなり適当にモリモリ加点しましたが、4回転が2本入ってるのもあるし、もうちょいGOEを下げてPCSを上げれば意外とかなりそれっぽい点数になるかもしれません。

ところで答え合わせできる資料はいつ公開されるのでしょうか……。グッズがたくさん出ていることはアニメオタクとしては嬉しいですがスケオタ的にはやはり詳しいリザルトが見たくなってしまうのがサガですね。

更新履歴

2016-11-06 00:40頃 不正確な記述をしていたので「自己ベストランキング」という表現で明確化しました。まあ(国内大会は割と点数が出る傾向があるとはいえ4S降りられたら普通にこれぐらい出そうだし)トップ10に入ってきそうというのは確かですが……。

*1:ジャンプ前のステップ全然分かんね〜〜〜と思ってましたがよく見るとインサイドイーグル→モホーク→4Sということで要件を満たしてそう

*2:カナダのケヴィン・レイノルズはフリーでではありますがスケート・カナダでFUSpしてました

*3:言葉で伝えるのが非常に難しいですが、例えば上で出した宇野の演技動画の2:30-2:32あたりで1, 2, 3って感じで一定のリズムに乗ってターン(ロッカー?→カウンター?→ツイズル)してるやつがこれの1つです

*4:ジャンプコンビネーションのGOE加減点については、その係数が一番大きいジャンプのもののみを考慮します。この場合は4TのGOE係数だけを見る

YOI#4解説 採点方法とプロトコルの読み方・フリープログラムの構成とザヤ回避検討

YOI#4を見た皆さん、こんばんは。生きてますか? 僕は終盤の勝生とプリセツキーのモノローグを思い出すたびに鬱になっています。フィギュアスケートのルール・技術解説を4週間に渡って投稿し続けてきましたが、基本的な部分については今回の投稿でほぼ終わりにできるかと思っています。ステップをまだ取り上げられていませんが、まあそれについては勝生の華麗なステップが本編で披露されたら僕が頑張って猛勉強*1するということで何卒……。

採点方法とプロトコル

f:id:Nagoyan:20161028235610p:plain

「4回転1種類でも、プログラムコンポーネンツ満点出せばいいじゃないか」

第1話の時の記事でも軽く解説しましたが、本編で出てきたので一応ここでも書いておきます。2002年のソルトレイクシティオリンピックでとある事件*2が起こってからそれまでの6.0点満点方式の採点が見直され、2004-2005シーズンから現行のISUジャッジングシステムが導入されました。このシステムでは、演技時間中に実施された技術要素の要素ごとの点数(に減点やGOEを加味したもの)を合計した技術点 (Technical Elements Score; TES) と、5つの観点から採点された演技構成点 (Program Components Score; PCS) の合計から減点 (Deduction)(だいたいは転倒、演技時間超過・不足、演技中断によるもの)を引いた点数で順位が決められます。そしてその採点が全て詰まっているのが、競技会の各種目終了後に即座に公開されることになっている「プロトコル*3です。先週行われたスケート・アメリカでの実例を見てみましょう。

f:id:Nagoyan:20161028234048p:plain

画像は ISU GP 2016 Progressive Skate America より、2016年グランプリシリーズスケート・アメリカの宇野昌磨のフリーのプロトコルです。上の枠には選手のプロフィールと各セグメントの合計点・減点が、下の枠には技術点と演技構成点の詳細が記載されています。技術点は左から要素の記号、要素のインフォメーション記号(回転不足やエッジエラーなど)、インフォメーション記号が加味された後の基礎点、計算後のGOE、各ジャッジのGOE、計算後の要素の合計点となっています。その下には演技構成点の採点が記載されています。演技構成点にはFactorという項目がありますが、これはショートとフリーの要素数の差による技術点の差や、男女間における技術点の差(男子よりも女子の方が実施される技術要素の平均的な難易度が(主にジャンプにおいて)低めとなってしまう)を考慮して演技構成点に掛けられる倍率のことです。具体的には、男女シングルだと女子ショートがx0.8、女子フリーがx1.6、男子ショートがx1.0、男子フリーがx2.0となっています。男女間が0.8倍、ショートとフリーが2.0倍という関係になっていますね。技術要素の略記号を覚えるとプロトコルが読めるようになるので、適当な動画サイトで演技を見ていて採点が気になったら「isuresults 2016 skate america」みたいな感じでググってPDFを開いてプロトコルを見る……という技術沼に沈むことができます😇

ちなみに現行の採点方式は2003年のネーベルホルン杯とグランプリシリーズで先行して試行されており、こちらがその最古のプロトコル(2003年ネーベルホルン杯)です。

35th Nebelhorn Trophy

……が、なぜかDetailed ResultのPDFだけレスポンスが返ってこないのでなんとなく2003年スケートアメリカの男子フリーのリザルトを開いてみたら本田武史が1位でした。下の方にはステファン・リンデマンが。時代。

http://www.isuresults.com/results/sa2003/sa03_men_fp_scores.pdf

この頃まだ全くフィギュアスケートを見ていなかったので適当言いそうで怖いですが。5番目の要素は4T+COMBOとなっていますが、この時はまだ「3回転以上の同種類のソロジャンプの繰り返し」は+SEQ記号が無く+COMBOが付いてジャンプコンビネーション扱いになったからのはずです。このせいで回数制限のあるジャンプコンビネーションを1回分消費してしまうというルールでした。SeSqはサーペンタインステップシークエンス、SlSqはストレートラインステップシークエンスで、前者はリンクの短辺から短辺まで2長辺の間を蛇行するように進み、後者は短辺から短辺まで直線の軌道で進むステップシークエンスでした。残りの中央いっぱいに円を描く軌道のサーキュラーステップシークエンス (CiSq) も含めて全て同じ基礎点ですが、男子はFSではこの3つのうち2つを選んで実施しないといけないため、一番軌道が長くなるSeSqを入れる選手はほとんどいませんでした(らしい)。しかしステップもスピンもレベルを考慮した演技がまだ無いためか軒並みレベル1から2になっていますね。

冒頭に出した画像でニキフォロフは「プログラムコンポーネンツ満点出せばいいじゃないか」と簡単そうに言っていますが、過去の6.0点満点システムであれば芸術点で全員6.0点の満点が出された選手がいます。

www.youtube.com

ロシアのエフゲニー・プルシェンコ。2003-2004シーズンのフリープログラム、『ニジンスキーに捧ぐ』です。ニジンスキーは19世紀のロシアのバレエダンサーであるヴァーツラフ・ニジンスキーのことで、演技中にはこのニジンスキーがバレエで演じた演目で披露されたポーズがいくつか取り入れられています。6.0点採点最後のシーズンのプログラムですが、これが今の方式で採点されていたらどうなっていたのかが気になりますね……と思っていたら2010年のジャパン・オープンで再演されていたようです。

www.youtube.com

プロトコルはこちら。 http://www.jsfresults.com/InterNational/2010-2011/jo/data0105.pdf あのプルシェンコがフリップでエッジエラーを取られるとは……。

フリープログラムの構成

第4話ではタイトル通り勝生のフリープログラムが完成し、終盤ではその断片が垣間見えました。先週はショートプログラムの要件を確認したので、今週はフリースケーティングの要件を確認しましょう。男子シングルのフリースケーティングの要件は以下の通りです:

f:id:Nagoyan:20161029003459p:plain

ちなみにフリースケーティングの要件は男女・クラス間であまり差が無く、演技時間を4分30秒から4分にすれば男子ジュニアになります(この30秒がシニア上がりの大きな壁……)。また、演技時間を4分にしてジャンプの要素を8本から7本にすれば女子シニアになります(ジャンプコンビネーションの3本は変わりません)。

本編で公開された勝生の予定構成を見て照らし合わせてみましょう。

f:id:Nagoyan:20161029003316p:plain

  1. 4T+2T(ジャンプ1, ジャンプコンボ1)
  2. FSSp(フライングスピン)
  3. 4S(ジャンプ2)
  4. CCSp(単一姿勢のスピン)
  5. 3Lo(ジャンプ3)
  6. ChSq(コレオシークエンス)
  7. 3A(ジャンプ4、ここから後半?)
  8. 3F(ジャンプ5)
  9. 3A+1Lo+3S(ジャンプ6, ジャンプコンボ2, 3連続ジャンプ, 3A2回目(コンビネーションなのでOK))
  10. 3Lz+3T(ジャンプ7, ジャンプコンボ3)
  11. 4T(ジャンプ8, 4T2回目(1. がコンビネーションなのでOK))
  12. CCoSp(スピンコンビネーション)

そうです。ステップシークエンス (StSq) が足りません……。円盤で修正が入るのか、そもそも本当に予定していないのか……勝生の一番の見せ所のはずですがどうなるんでしょう。 円盤で修正が入りました。よかった。

あまり考えたくないですが、ジャンプの要素で失敗した時のことを考えてみましょう。ジャンプの要素は跳んでしまえば転倒しても何かしらのジャンプ要素としてコールされるので、どの回転数で降りてくるかが割と重要です。特にジャンプコンビネーションの1本目で転倒してソロジャンプになってしまったり、4回転ジャンプがパンクして回転数が減ると他のジャンプと衝突してno valueになるジャンプが発生する可能性があります(いわゆるザヤックルール)。

ジャンプの回数に関するルールをここでもう一度整理しておきましょう。

  • 2回転以上のジャンプについては、同回転数かつ同種類のジャンプで3回目以降の実施はno value
  • 3回転以上のジャンプについては、フリースケーティング中で2回使っていいジャンプは2種類まで(回転数または跳び方のどちらかが違えば別種類とみなす)
  • フリースケーティング中で2回使用される3回転以上のジャンプについては、少なくとも片方がジャンプコンビネーションに含まれていなければならない。これに違反し両方がソロジャンプとなると、2回目に実施したソロジャンプには+REP記号が付き、基礎点が70%となる。

地味に難しいパズルを解かなければいけませんね……。フィギュアスケートのルールの中でもだいぶ複雑なものですが、実際の演技を見ながらゆっくり慣れていきましょう。

勝生の構成で実践してみます。まずジャンプコンビネーションで転倒してしまう場合。

1. 4T+2T→4T

冒頭の4Tで転倒すると4Tのソロジャンプになってしまうため、最後の11. 4Tを4T+2Tに変更しなければいけません。最後の4回転でコンビネーションは本当にしんどいですが、これを忘れてそのまま4Tで跳んでしまうと、4Tが両方ソロジャンプで跳ばれたことになるため、「3回転以上のジャンプで2回繰り返されるものは、少なくとも1回はジャンプコンビネーションに含まれていなければいけない」という要件を満たしません。この場合、2回目に実施した4Tには+REP記号が付き、基礎点が70%となります。この要素は演技後半に実施されるので、基礎点を計算すると10.3(4T基礎点)x 1.1(演技後半ボーナス)x 0.7(+REPによる減点)= 7.93 点となります。転倒するとGOEはほぼ-3になりますが、4回転ジャンプのGOE-3は全て-4.0点に対応するので、最終的には3.93点となります。これは3Tより少し少ないぐらいの点数です。(2016-11-03 1:40頃削除 転倒するとは限らないので参考程度に……)

最後のジャンプで4T+2Tを跳ぶことがスタミナ的に無理であれば、3T+2Tや3Lzに変更してしまうという手もあります。この場合は3回転以上で飛んだジャンプが3Aと3T/3Lzとなり、3Tも両方(3Lzは10.が)ジャンプコンビネーションに含まれているので全てのジャンプが点数を獲得することができます。こちらの方が現実的ですね(ニキフォロフの言う「驚き」は観客には与えられなそうですが……)。

9. 3A+1Lo+3S→3A

7.の3Aが単独なので、9.の3Aで転倒してしまうと9.がソロジャンプになることが確定します。この場合は9.が3Ax+REPとなり、8.5(3A基礎点)x 1.1(演技後半ボーナス)x 0.7(+REPによる減点)-3.0(GOEが-3と仮定) = 3.55 点となります。これは2Aより少し多いくらいの点数ですね。3A+1Lo+3Sxならば14.74点なので11点以上のロスとなります。これは順位が大きく変わってきそうですね*4

「コンビネーションジャンプの2つ目以降はスケーティングレッグが右足になるからTとLoしか付けられないんじゃないの?」と思ったあなたは正しいです。この数シーズン前から流行りの1Lo(実際にはハーフループ)を挟んだジャンプコンビネーションについても、本編で披露された時に(技術規則的な観点から)解説したいと思っています(今週の分でやろうとしたけど思った以上に分量が増えてしまったので今回はやめておきます……)。

3Lz+3Tの3Lzで転倒しても、3Lzを他で使っている場所は無いのでジャンプ数の衝突などの心配はありません(もちろん点数は大きく減りますが)。

続いて、4回転ジャンプがパンクして回転数が減ってしまった場合を考えましょう。

1. 4T+2T→3T+2T

この場合は、3回転以上で2回使われるジャンプが3Tと3Aの2つになります。3Tは両方コンビネーションに含まれているのでno valueになるジャンプはありません。これは1.の4T+2Tが成功した後に11.の4Tが3Tにパンクしてしまっても同じです(3T+2Tがコンビネーションなので)。ただし4Tと3Tの点数差は6.0点なのでロスは大きいです。

1. 4T+2T→3T+2T, 11. 4T→3T

4Tが両方パンクして3Tになってしまうと、3回転以上で2回跳ぶジャンプは3Tと3Aで上の場合と同じですが、11.の3Tが3回目の実施となるのでno valueになります。4回回って転倒するより3回回って降りた方が点数が減るというのが現行ルールの恐ろしいところですね……。ちなみにno valueを回避するためには、1.の4Tが3Tになってしまった時点で11.の4Tを2Tにしたり、10.の3Lz+3Tを3Lz+2Tにして11.を3Sに変更することが考えられます。

1. 4T+2T→2T+2T, 11. 4T→2T

この場合は1.で2Tを2回跳んでしまったので、11.の4Tもパンクして2Tになってしまうと、2Tの3回目の実施となるのでno valueになります。安全策で11.を3T, 3S, 3Lzに変更して確実に決めれば全てのジャンプが点数を獲得できます。

3. 4S→3S

これ以外のジャンプを全て予定通りに跳んでしまうと、3回転以上で2回繰り返したジャンプが4T, 3A, 3Sの3種類になってしまいます。ジャンプを実施する順番を考えると、「3回転以上で2回繰り返していいジャンプは2種類まで」という要件を先に満たす要素は3Aと3Sになります。これで割りを食うのが最後の11.のジャンプで、これが4Tのままだと1.と、3回転のジャンプにしてもそれまでのいずれかのジャンプと衝突してしまい、3回転以上繰り返すジャンプの3種類目になるのでno valueになってしまいます。これを回避するには3A+1Lo+3Sの3Sをやめればいいので、3A+2Lo+2Lo, 3A+1Lo+2S, 3A+1Lo+2Fなどに変更することが考えられます*5

以上では「この種類が失敗したら」と1種類のジャンプに注目して考えてきましたが、実際には複数種類のジャンプを失敗してしまう可能性があるわけで、もっと複雑なパターンを演技中に考えなければいけません。リンク上のスケーターは淡々と要素をこなしているように見えますが、脳内ではすごく大変なことを考えていることがあるのです(見てきたような言い方ですが……)。

変更履歴

2017-03-29 00:00:00 コメントで指摘をいただいた最古のプロトコルの情報を変更しました。合わせて勝生の予定構成メモも円盤で修正が入っていたため本文を修正しました。

*1:どれだけステップに疎いかというと最近ようやく「難しいターンとステップ」の区別が付いてジャンプ前のステップならギリ分かるか分からないかになってきたレベルです……。各ターンの軌道についてはこのサイトが分かりやすかったです

pandamaster.blog114.fc2.com

*2:https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%AB%E3%83%88%E3%83%AC%E3%82%A4%E3%82%AF%E3%82%B7%E3%83%86%E3%82%A3%E3%82%AA%E3%83%AA%E3%83%B3%E3%83%94%E3%83%83%E3%82%AF%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%95%E3%82%A3%E3%82%AE%E3%83%A5%E3%82%A2%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%88%E3%83%BB%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%80%E3%83%AB

*3:というのはスケオタ間の俗称で、「プロトコル」はあくまである競技会についての情報すべてを包括的に指す用語であり、点数表については上記URLの中ではDetailed Scoresなどと書かれている

*4:この前のスケートアメリカでは宇野昌磨がまさにこのミス(前掲した宇野のプロトコルの10.の要素)をしましたが優勝しました……(宇野の場合は1本目の3Aがコンビネーションなのでここでは+REPは付いていませんが)

*5:1Lo後にフリップはほぼ見ませんが、宇野昌磨は3A+1Lo+3Fにして基礎点を上げたりしています

YOI#3で覚えるフィギュアスケート技術要素(スパイラル・スピン基本姿勢・ショート構成)

こんにちは。試合に勝ってもいないのにカツ丼を食べました。今回は第3話にこっそり仕込まれていたフィギュアスケートの技術系のネタと、試合を見るときに抑えておくべきショートプログラムの構成についてを2人の演技に合わせて確認していきます。

スパイラル

f:id:Nagoyan:20161021214848p:plain

温泉 on ICEのポスター。ユーリ、ユリオと名前が書かれた隣で2人が脚を上げた姿勢を取っています。このように、フリーレッグ(スケーティングしていない方の脚)を腰より高く上げて一定の姿勢を保ったまま滑ることをスパイラルと言います。右のユーリのように上体を地面に平行に近くなるまで下げて、片脚を上げた状態でスパイラルを「アラベスクスパイラル」と言います。アラベスクという名前の姿勢はもともとバレエに存在しているもので、これに近い状態で滑っていることから名付けられました(たぶん)。一方左のユリオのようにフリーレッグを頭上で手づかみしたまま滑ることを「ビールマンスパイラル」と言います。ちなみにこの姿勢のままスピンすると「ビールマンスピン」になります。「ビールマン」はスイス出身の女子フィギュアスケート選手から来ています。

デニス・ビールマン - Wikipedia

ちなみにフリーレッグをつかんだスパイラルには単なる「キャッチフットスパイラル」もありますが、どう違うのか分からなかったので競技規則を確認してみましょう。スピンの章に “Biellmann Position” という項目があります。

Biellmann position is a difficult variation of an upright position (UB) when the skater’s free leg is pulled from behind to a position higher than and towards the top of the head, close to the spinning axis of the skater. Like other categories of difficult spin variations, Biellmann position counts once per program (Short or Free) – first time it’s attempted.

In free skating a spin that starts with layback position (at least 2 revs) and continues with Upright Biellmann variation is still called a layback spin.

フリーレッグを頭上近く・回転軸付近で掴むという2つの条件を満たすことが条件っぽい。

スパイラルではないですがせっかくビールマンの話が出たので。「私はもっと脚が高く上がるから」と言ってビールマンポジションをさらに発展させた「キャンドルスピン」を競技会で披露したのがロシアのユリア・リプニツカヤ

www.youtube.com

動画は2014年冬季オリンピックソチ大会フリースケーティングの『シンドラーのリスト』。演技後半、ジャンプを全て終えた後の2本目のスピンの最後の姿勢がキャンドルスピン。頭が完全に脚と腕の間に挟まれています。赤い衣装が炎に見えてまさにキャンドルという感じがして良いですね。ちなみにキャンドルスピンという名前はリプニツカヤ自身が命名しました。かわいい。

ちなみに昔の競技規則ではスパイラル自体が1つの技術要素となっており、スパイラルシークエンスとかコレオグラフィックスパイラルとかいう名前でしたが、2012-2013シーズンからはコレオグラフィックシークエンスに吸収合併されました。

スピンの基本3姿勢

f:id:Nagoyan:20161021225336p:plain

上の項目のシーン直後の「勇利復活、バンザーイ!!」のシーン。このシーンにはスピンの基本姿勢が3つのうち2つ含まれています。手前でしゃがんで片脚を手で支えて回っているのがシットスピン(SSp)。それ以外の3人はアップライトスピン(USp)です。シットスピンはしゃがんでいるので分かりやすいですが、アップライトスピンの定義が「軸足が直立しているか少し曲がっていてキャメルスピンではないもの」なのでキャメルスピンを先に説明しなければいけません。キャメルスピン(CSp)は、上体が氷面に対して平行に近い状態になっており、フリーレッグが後方に伸びている姿勢を言います。 “free leg backwards with the knee higher than the hip level” なので、定義としてはフリーレッグの膝がお尻より高い位置になければいけません。そのためキャメルスピンは基本的には上体・フリーレッグが氷面に平行になって、全体としてTの字になっていることが多いです。

f:id:Nagoyan:20161021232233p:plain

プリセツキーが温泉 on ICEの演技で披露した途中のスピンにもキャメルスピンが。この姿勢はスパイラルの項目で上げたビールマンスパイラルの姿勢に近いですが、フリーレッグは回転軸近くまで来ているものの上体が氷面に対して平行に近い状態になっているので、キャメルスピンの「難しい変化 (difficult variation)」の1つとして数えられます。ちなみに前の段落で上げたキャメルスピンの定義には続きがあって、“however Layback, Biellmann and similar variations are still considered as upright spins” と書いてあるので、ビールマンスピンや、上体を大きく後ろにそらしてスピンする「レイバックスピン」はキャメルスピンではなくアップライトスピンの難しい変化として考慮されます。ただし、レイバックスピンを単独で行うと要素記号として LSp が与えられ、全ての単独スピンの中で最も基礎点が高くなります。ややこしいね。スピンの項目は競技規則でも一番記述が多くて読むのが大変です(別に読まなくてもいいですが)。

まあ最初はしゃがんでたらシットスピン、脚を後ろに伸ばして上体を前に倒していたらキャメルスピン、それ以外はアップライトスピンということが分かればだいたい大丈夫です。1回のスピンでこの3つの基本姿勢を全てこなすとスピンコンビネーションになります。

ショートプログラムの演技構成

ジャンプの見分け方が分からない人は ヴィクトルの演技を見てジャンプを見分けられるようになろう - 矮小 を上から、英語の記号が全然分からん人は同記事の下の方を読んでからどうぞ。

さて、今日の本番はここからです。せっかく本編でショートプログラムでが披露されたので、2人の演技を見ながらショートプログラムの要件を確認していきましょう。かなり長いので難しいな〜と思ったら適当に読み流してください。そして現実世界のグランプリシリーズを見たらまた戻ってきてください。ちょっとだけ分かるようになってるかも。

ショートプログラムでは以下の要素を実施しなければいけません:

  • ジャンプ
    • 2Aまたは3A(単独)1.
    • ステップ、またはそれに準ずるフリースケーティング動作からの3回転または4回転ジャンプ(単独)2.
    • 2-3, 3-3, 4-2, 4-3 の組み合わせの回転数となるジャンプコンビネーション 3.
  • スピン
    • フライングスピン8回転以上(着氷姿勢が1姿勢のスピンと異なる)4.
    • CSSp または CCSp 各足6回転以上ずつ 5.
    • CCoSp 各足6回転以上ずつ 6.
  • ステップシークエンス
    • StSq 7.

アクセルジャンプは1.でしか跳べません。また2.の単独ジャンプは3.で使ったものとは別のものにしなければいけません。3.のジャンプコンビネーションの組み合わせには同じジャンプを2つ含めても構いませんが、単独ジャンプで4回転ジャンプを跳んでジャンプコンビネーションにも4回転を入れる場合は単独で行った4回転とは別の種類を入れなければいけません(4T 4T-3Tのような場合は2つ目の4Tのみがno value(3Tは加点される*1))。

スピンはかなり制限が厳しいです。フライングスピン以外ではフライングエントリーしてはいけないので、男子シングルのショートプログラムのスピンの組み合わせは FCSp CSSp CCoSp または FSSp CCSp CCoSp のどちらかとなります(4.でアップライトスピンをしてもいいですが、基礎点が最も低いのでシニアのショートプログラムで見ることはほぼありません)。

ステップシークエンスは StSq のみです。コレオグラフィックシークエンス ChSq はフリースケーティングのみで行われます。

完全に覚えるのは少し大変ですが、とりあえず「ジャンプ3、スピン3、ステップ1。ジャンプコンボとスピンコンボは1個ずつ、単独アクセルを必ず跳ばなければいけない」という感じでふわっと覚えておけば何とかなります(というかショートで要素違反が起こることはほぼ無いので最悪無理に覚えなくてもいい)。

それでは実際に今回披露されたプリセツキーと勝生の演技構成を見ていきましょう。

1人目のプリセツキーの演技は、実施されたものの順に見ていくと 3A(1.) FSSp(4.) (C?)CSp(足換すれば5.) 4S+3T(3.) 4T(スリーターンから単独ジャンプ、2.) StSq(7.) CCoSp(6.) となります。またここでは詳しくは検証しませんが4Sがダウングレード(アクセル以外の前向き踏切はダウングレード)、3Tが回転不足気味(回転が1/4以上足りない)な感じだったので、もしそうだと仮定すれば最終的なプロトコルは 3A FSSp (C)CSp(*?) 4S<<+3T< 4Tx StSq CCoSp となります。

せっかく上の項目でスピンの3つの基本姿勢を確認したので、プリセツキーの演技でスピンの姿勢の推移を詳しく見ていきましょう。最初のFSSpはフライングエントリー。

f:id:Nagoyan:20161022004140p:plain

これでFが付くことが確定。

f:id:Nagoyan:20161022004222p:plain

左足でシットスピン。FSSpの完成です。

f:id:Nagoyan:20161022004305p:plain

間に滝の回想を挟んで次はキャメルスピン(上体が氷面に対して平行に近い・足が後ろに伸びて膝がお尻より高い!)。足換えの描写が無いですが、どこかで足換えをしていないと5.の要件を満たしません。このキャメルスピンは肩のラインが表面に対して垂直になっているので、キャメルスピンの「難しい変化」のうちCamel Sidewaysになっていることが分かります(「難しい変化」の姿勢についてはISU Technical Panel Handbookのスピンの章の最後のページに写真がたくさん載ってるので見てみてください)。

2つ目のCCoSp。最初は左足でシットスピン

f:id:Nagoyan:20161022005105p:plain

これで現時点ではSSpです。

f:id:Nagoyan:20161022005141p:plain

次に右足に足換えしてキャメルスピン。フライングエントリーしておらず、足換えのCが付くのでこれでCCoSpが確定しました。

f:id:Nagoyan:20161022005546p:plain

キャメルの基本姿勢から足を掴んで難しい変化に持っていきます。肩のラインが氷面に対して平行なのでCamel Forwardかな?

f:id:Nagoyan:20161022005909p:plain

最後にもう一度シットスピン。今回はここで演技が終わりましたが、スピンコンビネーションの要件を満たすためにはこの後さらにアップライトスピンをこなさなければいけません。逆に言えば、最後にアップライトスピンを追加できれば「足換え後に3つの基本姿勢を全てこなす」を満たせるのでスピンのレベルを1つ上げることができます(スピン・ステップのレベルの要件はScale of Valueの点数表が終わった次のページに書いてあります)。

次に勝生の演技構成は StSq(7.) (C?)CSp(足換えすれば5.) (回想中にFSSp? 4.) 3A(1.) 4S(モホークから単独ジャンプ、2.) 4T+3T(3.) CCoSp(6.)。4Sは回転不足っぽかったので、全て並べると StSq (C?)CSp(*?) (FSSp?) 3Ax 4S<x 4T+3Tx CCoSp となります。何とジャンプを全て後半に持ってきた上にステップシークエンスから始まるという驚きの筋肉プログラム*2……と思いきや、似たような構成をメドベデワがやってましたね。

www.youtube.com

動画は2016年世界選手権ショートプログラム、映画『白夜の調べ』より。演技構成はなんとCCoSp3p4 StSq4 3Fx 2Ax 3Lo+3Tx FCSp4 LSSp4と、こちらも全てのジャンプを後半に持ってきています。この大会の女子シングルショートプログラムで全てのジャンプを後半に持ってきていたのはメドベデワのみでした。

勝生のスピンの構成も見てみましょう。最初はCSp。フライングせずにキャメルから入ります。

f:id:Nagoyan:20161022014005p:plain

ミナコ先生の回想が終わったら勝生のスピンも終わってました。フライングエントリーしないキャメルのみのスピンであれば、足換えをしないと5.の条件に当てはまらずno valueになってしまいます。

続いて最後のCCoSp。これは(これより前にCoSpを行なっていなければ)6.に当てはまるので評価されます。

f:id:Nagoyan:20161022014501p:plain

最初は左足でキャメル。この時点ではCSp。

f:id:Nagoyan:20161022014613p:plain

(たぶん)非基本姿勢*3(基本姿勢のどれでもない姿勢)を経て……

f:id:Nagoyan:20161022015136p:plain

さりげなく足換えしてシットスピン。これでCCoSpが確定。

f:id:Nagoyan:20161022015358p:plain

最後にアップライトスピン。これで3つの基本姿勢をこなせました。この図のように両足に均等に体重を乗せて2足で回転することをクロスフットスピンと言って、この姿勢が成功したと認定されるとアップライトスピンの「難しい変化」のうちUpright Straightに該当し、スピンのレベルを1個上げることができます。

自分で記事を書いてみて分かりましたがスピンの姿勢って変化すると(特にキャメルとアップライトが)かなり曖昧になりますね……。スピンについてはあまり詳しくないのでもし間違っているところがあればコメントにてお知らせください(勉強中の人は他のサイトや動画も当たりましょう!!)。次回は特に技術的な要素が本編中に無ければ第1話のヴィクトルの昨シーズングランプリファイナルのフリースケーティングの演技構成を詳しく見ていこうかなと思っているのでよろしくお願いします。

改定履歴

2016-10-22 03:20:00頃 プリセツキーのスピンでFCCoSpとしていたのを勝生のモノローグでFSSpとCCSpに分割しました。また勝生の構成で回想中に実施していた可能性があるとして、ショートの構成として足りなかったFSSpを捕捉しました。アニメ上の演出の問題もあるので考えることが増えて大変だ……。えばらさんありがとうございました。

2016-10-23 22:45:00頃 ショートプログラムのジャンプ構成で一部日本語がおかしかったので訂正しました。夜中に文章を書くのはやめましょう。

2016-10-23 22:55:00頃 アニメの演出を意識してスピンをいい感じに解釈したら普通にショートプログラムの構成になったので文章を一部変更しました。プリセツキーのCCoSpもカウントされるので * 記号を外しました。拡散されてから内容を変更しまくるのやめろ。

*1:昨シーズンまではこの場合3Tも巻き添えを食ってno valueになっていました

*2:普通はジャンプが一番体力を使うので最初に持ってきたいが、演技後半に実施すれば基礎点が1.1倍になるのでそうもいかない

*3:パッと見アップライトっぽいが基本姿勢の繋ぎなのもあって非基本姿勢っぽい? 識者の意見を求めます