だんだんプログラミングコンテストにも慣れてきました!
こんにちは鬱太郎です。今週土曜にAtCoder Beginner Contestの大会が夜九時からあります。それに向けての練習もかねて、今日もAtCoderの過去問を解いていました。
本番想定で300点、時間を過ぎてしまいましたが自力で400点獲得しました!満点は401点です。
あと1点は難しいらしく、問題に満点を目指さずに、まず部分点を目指しましょう
と書かれていました。15時くらいからずっと考えてましたが、なかなかわかりません('ω')
不完全燃焼ですが、部分点をとれたので良しとしましょう!
今日は当日中に問題が解けて満足です。だんだんコンテストのプログラミングにも慣れてきました。
終わりに
ここまで読んでくださってありがとうございます!
スターやブックマーク、読者登録ありがとうございます!励みになってます!
プログラミングに興味のない人にはほんとに申し訳ないと思っていますが、やっぱりプログラミングが好きなのでこんな感じの記事を続けていくと思います。
明日は今日解いた問題の解説を読んで復習してできれば記事にしたいと思います。
またね('ω')ノ
スターフレンドを使ってブログ巡りをしよう!
こんにちは鬱太郎です。今日はブログ巡りをする際に便利なものを見つけたので、その紹介をしたいと思います。
背景
よーし、AtCoderの問題の記事も終わった!よっしゃブログ巡りしよう!
よーし・・・
ん?
未読267件
あ…
これ読み切れないやつだ…( ゚Д゚)
という事で、どうにかしようと思いました。
色々悩んだ結果、スターやブクマをしてくださった読者さんを優先に見て回ろうという結論に至りました。
そこで役に立ったのははてなスターのページです。
はてなスターでスターフレンドを見つけよう
はてなスターのマイページにはスターフレンドというものがあります。
このスターフレンドという欄には、一か月以内にお互いの記事にスターを付けた人が表示されます。
ワタシ、アナ、タト、トモダチ、ニ、...なってた!?こんなに簡単に友達できたら引きこもりのニートになってないよ
という事で、スターやブクマを付けてくれた人と、スターフレンドの人を優先的にブログ巡回したいと思います(記事を書いた時はまだ未巡回)。
終わりに
ここまで読んでくださってありがとうございます!
スター、ブックマーク、読者登録等いつもありがとうございます!すごい励みになっています。
いつの間にか読者登録も130人越えしていて驚きました!本当にありがとうございます!少し時間がかかるかもしれませんが、新しい読者さんも読者登録していきたいと思います。
またね('ω')ノ
AtCoderの過去問に挑戦 ABC002 AtCoder Beginner Contest 002
はじめに
私はプログラムやプログラミングコンテストに対して何ら知識はありません。私が書くコードは、性能的にも優れているものではありません。私自身が考え、学んでいく過程でできたコードです。無駄がありますが、お許しください。また、改善等の指導があればコメント欄に記入していただけると助かります。
公式URL
使用したもの等
名称 | 使用したもの |
---|---|
言語 | JavaSE8 |
エディタ | pleiades All in one var.4.7.0 |
プラグイン | addons.mozilla.org |
A - 正直者
略
B - 罠
問題
問題文
B問題のリジャッジ(再採点)が終了しました。21: 50
B問題のテストケースにミスがあったので、提出されたコードをリジャッジ(再採点)してます。21: 40
神の恵みで財産を築いた高橋くんですが、なんとそこには罠がありました。
神は、高橋くんの発した言葉から母音a
、i
、u
、e
、o
を全て盗んでいったのです。
高橋くんが発した言葉を表す文字列 W が与えられるので、周囲の人が聞く言葉を表す文字列を出力するプログラムを書いてください。
入力
入力は以下の形式で標準入力から与えられる。 W
- 1 行目には、高橋くんの発した言葉を表す文字列 W が与えられる。
- W の長さ |W| は 1≦|W|≦30 を満たす。
- W は半角英小文字(
a
からz
まで)のみで構成される。- W には母音以外の文字が少なくとも 1 文字含まれることが保証されている。
出力
W から母音を全て除いた文字列を 1 行で出力してください。
また、出力の末尾には改行を入れること。
入力例 1
- chokudai
出力例 1
- chkd
chokudai
からa
、i
、u
、e
、o
を除くとchkd
になります入力例 2
- okanemochi
出力例 2
- knmch
okanemochi
からa
、i
、u
、e
、o
を除くとknmch
になります
入力例 3
- aoki
出力例 3
- k
aoki
からa
、i
、u
、e
、o
を除くとk
になります- このように、与えられる文字列 W には母音以外の文字が少なくとも 1 文字含まれます
入力例 4
- mazushii
出力例 4
- mzsh
見出しをクリックすると開きます。↓↓
回答
母音を取り除くという問題ですね。
正規表現を使って解く
正規表現を使って解くのが一番わかりやすく、かつコードもシンプルなものになると思います。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { String w = br.readLine(); System.out.println(w.replaceAll("[aiueo]", "")); } } }
正規表現を使った置換のメソッドは多くの言語が実装しているのではないでしょうか?Javaの場合はString
クラスにreplaceAll(String regex, String replace)
というメソッドがあります1。それを使い正規表現を元に空文字に置換してあげましょう。正規表現は他言語で共通している部分が多いですが、言語によっては方言のように詳しく指定できるものもあります2。
問題ではa
,i
,u
,e
,o
を取り除いてあげるという事ですね。
正規表現では[aiueo]
と簡単に書けます。
後はその正規表現をメソッドを使い、空文字に置換しましょう。
System.out.println(w.replaceAll("[aiueo]", ""));
Streamを使って解く
Java8から追加されたStreamを使っても解くことができます。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { String w = br.readLine(); StringBuilder sb = new StringBuilder(); w.chars() .filter(c -> !(c == 'a' || c == 'i' || c == 'u' || c == 'e' || c == 'o')) .forEach(c -> sb.append((char) c)); System.out.println(sb.toString()); } } }
配列を使って解く
勿論配列を使って問題を解くこともできます。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { String w = br.readLine(); char[] ans = new char[w.length()]; int index = 0; for (char c : w.toCharArray()) { if (!(c == 'a' || c == 'i' || c == 'u' || c == 'e' || c == 'o')) { ans[index++] = c; } } // new String(ans)だとchar=0が入り、改行文字がなくなる System.out.println(String.valueOf(ans, 0, index)); } } }
このときnull文字が入って、改行文字が消されないように気を付けましょう。
成績
プログラムの実行時間およびメモリ使用量をまとめました。
実行時間 | メモリ使用量 |
---|---|
79 ms | 24916 KB |
C - 直訴
問題
問題文
神に盗まれた母音を取り戻すため、高橋くんは神へ直訴しました。
「神様、どうかお願いです。僕の母音を返してください。」
神はこう言いました。
「そんなに母音がほしいのか。ならば私の仕事を手伝ってもらおう。」
現在、神は天界のいたるところで測量を行っており、高橋くんは神の測量を手伝わなければなりません。
今回は三角形の測量です。高橋くんには 2 次元平面上の 3 つの点 A, B, C が与えられます。
少しでも早く母音を取り戻すために、三角形 ABC の面積を出力するプログラムを書いてください。
入力
入力は以下の形式で標準入力から与えられる。 xa ya xb yb xc yc
- 1 行目には、3 点 A, B, C の座標が半角空白区切りで与えられる。
- 点 A の座標が (xa, ya)、点 B の座標が (xb, yb)、点 C の座標が (xc, yc) であることを表す。
- 各座標の値 xa, ya, xb, yb, xc, yc は −1,000 以上 1,000 以下の整数であることが保証されている。
- 3 点 A, B, C が同一直線上に配置されていることはない。
出力
三角形 ABC の面積を 1 行で出力してください。
また、出力の末尾には改行を入れること。
出力は絶対誤差が 10−2 以下であれば許容される。
ヒント
3 点 (0,0), (a,b), (c,d) で構成される三角形の面積は、|ad−bc|⁄2 となります。
(このヒントは、コンテスト開始 1 時間後に公開されたものです。)
入力例 1
- 1 0 3 0 2 5
出力例 1
- 5.0
図1:入力例 1 を図示したもの
入力例 2
- -1 -2 3 4 5 6
出力例 2
- 2.0
入力例 3
- 298 520 903 520 4 663
出力例 3
- 43257.5
見出しをクリックすると開きます。↓↓
回答
3点から三角形の面積を求める問題ですね。学校でやったなぁ…でももう忘れたよという私のような方も多いのでは。
ヘロンの公式で3角形の面積を求める
import java.awt.Point; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { String[] array = br.readLine().split(" "); Point x = new Point(Integer.parseInt(array[0]), Integer.parseInt(array[1])); Point y = new Point(Integer.parseInt(array[2]), Integer.parseInt(array[3])); Point z = new Point(Integer.parseInt(array[4]), Integer.parseInt(array[5])); double a2 = x.distanceSq(y); double b2 = y.distanceSq(z); double c2 = z.distanceSq(x); double t = Math.sqrt((a2 + b2 + c2) * (a2 + b2 + c2) - 2 * (a2 * a2 + b2 * b2 + c2 * c2)) / 4.0; System.out.println(t); } } }
3角形の面積を求める方法はいろいろあったのですが、学校で習った記憶がかすかにあるなと思ったこの公式で面積を求めてみましょう。
ヘロンの公式は辺a
,b
,c
に対して
これで求めることができます。懐かしい!その公式のままプログラムを書いてもいいですが、辺abc
を求めるときに平方根を取ります。平方根はできるだけ最後にした方が、計算の誤差が少なくなるため変形した公式を使いましょう。
この公式ですと、abc
がそれぞれ2乗4乗されてますね。距離を求めるときに平方根を取らないでよいという事ですね。
JavaにはPoint2D::distanceSq(Point2D)
というメソッドがあります3。距離を求める計算の途中で平方根を取らない値を返してくれます。
これを使うことで、計算の最後のみに平方根をとるようにできます。
1点を原点にずらす
問題のヒントにもあるように、原点、他2点から作られる三角形の面積は
で求まるようです。そんな便利なのがあるんですね!なんだか行列の計算を思い出します。
という事で、与えられた3点のうちの最初の点を原点とみなすようにしてあげましょう。
package abc002.c; import java.awt.Point; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { String[] array = br.readLine().split(" "); Point a = new Point(Integer.parseInt(array[0]), Integer.parseInt(array[1])); Point b = new Point(Integer.parseInt(array[2]), Integer.parseInt(array[3])); Point c = new Point(Integer.parseInt(array[4]), Integer.parseInt(array[5])); // aを原点にするように全体をずらす Point b2 = new Point(b.x - a.x, b.y - a.y); Point c2 = new Point(c.x - a.x, c.y - a.y); double s = Math.abs(b2.getX() * c2.getY() - b2.getY() * c2.getX()) / 2.0; System.out.println(s); } } }
成績
プログラムの実行時間およびメモリ使用量をまとめました。
実行時間 | メモリ使用量 |
---|---|
85 ms | 23252 KB |
D - 派閥
問題
問題文
神からの財産と、母音を取り戻した高橋くんは、AtCoder国の腐敗した政治を正すため、国会議員となろうと決めました。
もともと人心掌握術とスピーチに定評があった高橋くんは、何の苦労をすることもなく当選しました。
しかし、議員になってからが本番です。国を正すためには、首相に任命される必要があります。
AtCoder国には高橋くんを除いて N 人の国会議員と、M 個の人間関係 (x, y) が存在します。
人間関係 (x, y) とは、議員 x と議員 y が知り合いであることを意味します。
高橋くんは N 人の議員から何人かを選んで派閥を作ろうと企んでいます。
派閥に含まれるすべての議員は互いに知り合いでなければなりません。
高橋くんが作成することができる最大の派閥に属する議員数を求めるプログラムを書いてください。
入力
入力は以下の形式で標準入力から与えられる。 N M x1 y1 x2 y2 : xM yM
- 1 行目には、高橋くん以外の国会議員の数 N (1≦N≦12) と、人間関係の数 M (0≦M≦N(N−1)⁄2) が半角空白区切りで与えられる。
- 2 行目から M+1 行目までの M 行で、人間関係が与えられる。
- 各議員は 1 から N までの整数で番号がつけられている。
- 2 行目を基準とした第 i (1≦i≦M) 行において、議員 xi と議員 yi は知り合いであることを意味する。
- xi と yi はともに整数で、 1≦xi<yi≦N を満たす。
- i≠j のとき、(xi, yi)≠(xj, yj) であることが保証されている。
出力
高橋くんが作成することができる最大の派閥に属する議員数を 1 行で出力してください。
また、出力の末尾には改行を入れること。
入力例 1
- 5 3
- 1 2
- 2 3
- 1 3
- 1 行目:5 人の議員と 3 つの人間関係が存在する。
- 2 行目:議員 1 と議員 2 は知り合いである。
- 3 行目:議員 2 と議員 3 は知り合いである。
- 4 行目:議員 1 と議員 3 は知り合いである。
出力例 1
- 3
- 議員 1、議員 2、議員 3 は互いに知り合いなので、この 3 人は派閥を構成することができる。
入力例 2
- 5 3
- 1 2
- 2 3
- 3 4
出力例 2
- 2
- 議員数 2 の派閥として
の 3 通りが考えられます。
- 議員 1 と議員 2 の派閥
- 議員 2 と議員 3 の派閥
- 議員 3 と議員 4 の派閥
入力例 3
- 7 9
- 1 2
- 1 3
- 2 3
- 4 5
- 4 6
- 4 7
- 5 6
- 5 7
- 6 7
出力例 3
- 4
入力例 4
- 12 0
出力例 4
- 1
- たとえ 12人の議員がいても、誰も知りあいでなければ 1 人からなる派閥しか作成することはできません。
見出しをクリックすると開きます。↓↓
回答
難問でした…この問題では組み合わせを考慮する必要があります(たぶん)。 bit演算を使うなんて変態のすることだ!なんて思ってましたが、どうやら私は変態になったようです(´;ω;`)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { String[] array = br.readLine().split(" "); int n = Integer.parseInt(array[0]); HumanMap map = new HumanMap(n); String str = null; while ((str = br.readLine()) != null) { map.put(str); } System.out.println(map.max()); } } private static class HumanMap { private final int[] map; private final int size; private final int[] key; public HumanMap(int n) { map = new int[n]; key = new int[n]; for (int i = 0; i < n; i++) { map[i] = 1 << i; } size = n; } public void put(String str) { String[] array = str.split(" "); this.put(Integer.parseInt(array[0]), Integer.parseInt(array[1])); } public void put(int a, int b) { map[a - 1] |= (1 << (b - 1)); map[b - 1] |= (1 << (a - 1)); } public int max() { int max = 1; for (int line : map) { if (Integer.bitCount(line) > max) { for (int filter = Integer.lowestOneBit(line); filter <= line; filter++) { int combination = filter & line; if (combination > 0 && Integer.bitCount(combination) > max) { int keySize = setKey(combination); int value = combination; for (int k = 0; k < keySize; k++) { value &= map[key[k]]; } max = Math.max(Integer.bitCount(value), max); } } } } return max; } private int setKey(int line) { int index = 0; for (int i = 0; i < size; i++) { if ((line & (1 << i)) > 0) { key[index++] = i; } } return index; } } }
ポイント1 人間関係を対戦表に入れる
問題では、人間関係(x,y)
が入力されます。人間関係をPoint
クラスのように新しく作ってもいいのですが、クラス作成時やリスト追加などの処理でメモリ・時間のリソースを奪ってしまいます。
ABC001-Dから学んだように人間関係を入れて置ける配列を用意しましょう。具体的には総当たりの対戦表のようなものをイメージします。下の例は入力例1の場合です。
こんな風に配列を用意しておけば、どんなに人間関係が増えても配列の大きさに影響はありません。
人間関係(x,y)
が与えられた場合、この配列の[x-1][y-1]
と[y-1][x-1]
に○(true)を入れてあげるだけです。
人間関係の配列を作る場合、2次元配列はできるだけやめましょう。私の経験不足なだけかもしれませんが、2次元配列でいろいろと処理をしようとすると、頭の中が混乱してしまいます。下のように配列の行をビットとして考え、intの数値配列として保存するのがいいと思います。
- 対戦表の行を検索する場合はint[i]などのアクセス
- 対戦表の列を検索する場合はビット演算によるアクセス
という風に分けることで混乱を最小限に抑えました。
またビット演算&
を使うことで、人間関係で共通の部分を簡単に求めることができます。
例えば、人間関係1,2,3の共通の関係を求める場合は
7(111) & int[0] & int[1] & int[2] = 7(111)
と求めることができます。
ポイント2. 組み合わせをビット演算で表現する
問題の後半高橋くんが作成することができる最大の派閥に属する議員数を求めるプログラムを書いてください。
の部分を求める際に、組み合わせを考えなくてはいけません。
この数だけ、可能性を考慮する必要があります。私にはよくわからなかったので、ビット演算を使って組み合わせを表現しました。
先ほどの例があるとします。
人間1
の人間関係で共通している人数を求めるとします。
人間
1
の人間関係を調べる。
人間1
の人間関係は7(111)です。1から7までの数値と&演算して組み合わせを求める。
人間関係7
の最小ビットの数値1
からその値7(111)
までの値を使って組み合わせを求めます。
7 & 1 = 1
,7(111) & 2(010) = 2(010)
,7(111) & 3(011) = 3(011)
のようにします。すると、1,2,4, 3,5,6, 7という7通りの関係を取得できます。これは
3C1 + 3C2 + 3C3 = 3 + 3 + 1 = 7
という考え方と同じですね。
人間3
の人間関係の場合も同様に
最小のビット1
からその値23(10111)
までの値で&
演算します。すると、
1,2,4,16, 3,5,17,6,18,20, 7,19,22,21, 23の15通りの関係を取得できます。
4C1 + 4C2 + 4C3 + 4C4 = 4 + 6 + 4 + 1 = 15
と同じです。
成績
プログラムの実行時間およびメモリ使用量をまとめました。
実行時間 | メモリ使用量 |
---|---|
86 ms | 23252 KB |
まとめ
問題Dは最大クリーク問題と呼ばれるものの小さいものらしいですね!問題の正答に1日以上かかったわけですが、解説を見ると改善するところはあまりなかったのが嬉しかったです
終わりに
ここまで読んでくださってありがとうございます!
長かったですが、ようやくABC002クリアできました! 今週末にABCのコンテストがあるらしいので、参加したいと思います。(前回あったの知らなかった(´;ω;`))
スター、ブックマーク、読者登録等ありがとうございます!いつも励みになってます!
ブログ巡りもまだなので明日したいと思います。
またね('ω')ノ
今日はお休み
今日はお休みです
一夜明けてAtCoderの過去問を解いたよ!
こんにちは鬱太郎です。日本中では片や選挙、片や台風。そんな中、私はAtCoderの過去問 AtCoder Beginer Contest 002と格闘していました。
そして...
解けたぞぉ!
天の声「13時から始めて、13時半ですべての問題を解いたんだね?30分で解くなんてやるじゃん!」
違うよ...よく見てごらん
天の声「ん?」
天の声「あっ…」
問題を解くのに1日と30分かかりました…
でも回答を見ずに正答できて大満足です(*'ω'*)
まさか、これを使うことになるとは...
しかも値を求めるのではなく、可能性をすべて計算しなくちゃいけない問題でした(まだ正式な回答を見ていないので、間違いかも)
の場合は、10通りですが、10通り分の可能性{0,1},{1,2},{2,3},{3,4},{4,0},{0,2},...
を使い、その条件でいろいろと処理する必要がありました。もしかしたら、そんな必要なかったのかも…
そんなの分かるか!メモリ制限もあるし、時間制限もあるんだぞ!ってことでいろいろと悩んでいたのですが、1日経って解けてうれしいです。そんなこんなでもう遅いので、今日はもう寝ようと思います。
スター、ブックマーク、読者登録ありがとうございます!励みになってます!(豊田議員落ちたみたいですね…)
あした、まだ見てない皆さんのブログを見て回ろうと思います。
またね('ω')ノ
AtCoderの過去問に苦戦中
( ゚Д゚)
_(:3」∠)_
( ;∀;)
3問目まで順調に行ったんだ...
本番と仮定すると、残り時間が105分もあったんだ。でも-440分経った現在も苦戦中…
うぎゃぁ…
お休みなさい
またね('ω')ノ
次のタグをアニメーションで表示非表示にできるようにしました
こんにちは鬱太郎です。先日作ったnext-hidden
を改良しました。良ければ見て言って下さい!
そう!アニメーションで動作をできるようにしました。
前の記事
改善のコメントありがとうございます。
要件見た感じもっとコンパクトにできそうな気がするけど気のせいかも
ghostbassさん
コメントありがとうございます!確かにそうですね!つぎのkathewさんのコメントを元にコードを改良したら確かにコンパクトになりました。でも要件追加して、コードが伸びましたww
eachで回さなくて大丈夫だよ。jQueryでイベントを仕込んだらセレクタにヒットする全ての要素にイベントが適用されるよ/初期状態で非表示化するのは$(セレクタ).next().hide() おすすめ
kathewさん
コメントありがとうございます!そうなんですね!教えていただいてありがとうございます!私はjQueryについて詳しくなくて、逆引きで調べて作って動けばOKみたいな感じでしたので本当に助かりました。
コメントから学んだことを書いていきますね。ありがとうございます。
end()を使ってメソッドチェーンが書ける
end()
はjQueryのメソッドの一つです。一つ前の選択状態に戻すという効果があります。
$(".next-hidden").next().hide();
は、hide()
のところでは$(".next-hidden).next()
を選択しています。end()
を付けることで、一つ前の$(".next-hidden")
の選択状態に戻すことができます。
$(".next-hidden").next().hide().end().click(function(){ $(this).next().toggle(); });
こんな感じにつなげて記述することができます。
これをメソッドチェーンと言うらしいです。
セレクタ.eachは必須じゃない
私が逆引きでいろいろとjQueryについて調べていた時に、セレクタ.eachで処理しているコード例が多かったので初めて知りました。nullの場合とかはエラーを吐かないんですね。
今回のコードのように中にif文とか書いてる場合はさすがにeachでいいのかな?
今回の改善の流れ
コメントで指摘を受けて、いろいろとjQueryについて調べているときに、
ん・・?
.toggle() 表示、非表示を切り替える。
デデーン!
そんな便利なものあったのか!
if($(this).next().is(":visible")){ $(this).next().hide(); }else{ $(this).next().show(); }
これが
$(this).next().toggle();
一行に!
そして、ふと上を見ると?
アニメーション…だと…?
という事で、next-hidden
はコードがシンプルになった途端にアニメーションも追加できる要件が追加されましたw
参考サイト
動作デモ
前回の動作
前回の動作に加え、新たに二つの動作が追加されました。
スライド表示非表示
jQueryのslideToggle()
を使った動作を追加しました。
フェードイン・アウト表示非表示
jQueryのfadeToggle()
を使った動作を追加しました。
ソースコードと使用例
実際の使い方を説明していきます。
1.スクリプトコードを記事に張りつける
下記コードを使用する記事の中に記述してください。そのまま記法の方はHTML編集タグから追加できます。先頭の1行はjQueryの読み込みコードなので、既にヘッダー等に同様の記述がある場合は不要です。
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> <script> $(function(){ var classSelector = ".next-hidden"; var attrForNext = "data-display"; var attrNextClass = "data-next-class"; var attrType = "data-type"; var attrTime = "data-time"; $(classSelector).next().hide().end().each(function(){ if($(this).next().length){ var time = $(this).attr(attrTime); var toggleArgument = (isNaN(time))?time:Number(time); switch($(this).attr(attrType)){ case "slide": $(this).click(function(){ $(this).next().slideToggle(toggleArgument); }); break; case "fade": $(this).click(function(){ $(this).next().fadeToggle(toggleArgument); }); break; default: $(this).click(function(){ $(this).next().toggle(toggleArgument); }); break; } $(this).next().css("display",$(this).attr(attrForNext)).addClass($(this).attr(attrNextClass)); } }); }) </script>
2.イベントを登録したいタグにクラス名や属性を追加する
ソースコードをコピペした後はタグにクラス名を付けるだけで機能します。
そのまま記法の方は、HTML編集ページから、Markdown記法の方は直接記述できます。
通常の動作
class="next-hidden"
を記述することで、そのタグに次のタグを表示非表示にさせるイベントを追加します。このとき、デフォルトで次のタグの要素を非表示にします。
<p class="next-hidden"><a>ここをクリック</a></p> <p>タグに<code>class="next-hidden"</code>を追加することで、クリックすると次のタグを表示非表示させるイベントを追加できます。</p>
タグにclass="next-hidden"
を追加することで、クリックすると次のタグを表示非表示させるイベントを追加できます。
スライドしつつ表示非表示にさせる
class="next-hidden"
を記述し、属性data-type="slide"
を追記することで、スライド動作を有効にします。
<p class="next-hidden" data-type="slide"><a>ここをクリック</a></p> <p>タグに<code>class="next-hidden" data-type="slide"</code>を追加することで、クリックすると次のタグをスライド動作で表示非表示させるイベントを追加できます。</p>
タグにclass="next-hidden" data-type="slide"
を追加することで、クリックすると次のタグをスライド動作で表示非表示させるイベントを追加できます。
フェードしつつ表示非表示にさせる
class="next-hidden"
を記述し、属性data-type="fade"
を追記することで、フェード動作を有効にします。
<p class="next-hidden" data-type="fade"><a>ここをクリック</a></p> <p>タグに<code>class="next-hidden" data-type="fade"</code>を追加することで、クリックすると次のタグをフェード動作で表示非表示させるイベントを追加できます。</p>
タグにclass="next-hidden" data-type="fade"
を追加することで、クリックすると次のタグをフェード動作で表示非表示させるイベントを追加できます。
オプション
最初に次のタグを表示しておきたい場合
さらにdata-display="block"
という属性を追記することで、初期状態を表示状態にすることができます。通常の動作、スライド動作、フェード動作のすべてに追記することができます。次の例はフェード動作に初期状態を表示させる属性を追加します。
<p class="next-hidden" data-type="fade" data-display="block"><a>ここをクリック</a></p> <p>タグに<code>data-display="block"</code>を追記することで、クリックすると次のタグを表示非表示させるイベントを追加できます。また、次のタグは最初から表示されます。</p>
タグにdata-display="block"
を追記することで、クリックすると次のタグを表示非表示させるイベントを追加できます。また、次のタグは最初から表示されます。
次のタグにクラスを追加したい場合
さらにdata-next-class="hogehoge"
という属性を追記することで、次のタグにclass="hogehoge"
を追加します。もちろんhogehoge
の部分には好きなクラス名を記述できます。
これも動作に関わらず追記することができます。次の例はスライド動作にクラス名を追加します。
<style>.hogehoge{background-color: gray;}</style> <p class="next-hidden" data-type="slide" data-next-class="hogehoge"><a>ここをクリック</a></p> <p>タグに<code>data-next-class="hogehoge"</code>を追加することで、次のタグにクラス名<code>hogehoge</code>を追加できます。この例ではCSSで背景を変更しています。</p>
タグにdata-next-class="hogehoge"
を追加することで、次のタグにクラス名hogehoge
を追加できます。この例ではCSSで背景を変更しています。
アニメーション動作にかかる秒数を指定したい場合
全ての動作にかかる時間をミリ秒単位で指定できます。例えば、data-time="3000"
を追記することで、表示非表示に掛かる動作を3秒に指定できます。
通常の動作で3秒
<p class="next-hidden" data-time="3000"><a>ここをクリック</a></p> <p>タグに<code>data-time="3000"</code>を追記することで、クリックすると3秒かけて次のタグを表示非表示させるイベントを追加できます。</p>
タグにdata-time="3000"
を追記することで、クリックすると3秒かけて次のタグを表示非表示させるイベントを追加できます。
スライド動作で3秒
<p class="next-hidden" data-type="slide" data-time="3000"><a>ここをクリック</a></p> <p>タグに<code>data-time="3000"</code>を追記することで、クリックすると次のタグをスライド動作で3秒かけて表示非表示させるイベントを追加できます。</p>
タグにdata-time="3000"
を追記することで、クリックすると次のタグをスライド動作で3秒かけて表示非表示させるイベントを追加できます。
フェード動作で3秒
<p class="next-hidden" data-type="fade" data-time="3000"><a>ここをクリック</a></p> <p>タグに<code>data-time="3000"</code>を追記することで、クリックすると次のタグをフェード動作で3秒かけて表示非表示させるイベントを追加できます。</p>
タグにdata-time="3000"
を追記することで、クリックすると次のタグをフェード動作で3秒かけて表示非表示させるイベントを追加できます。
動作のまとめ
class="next-hidden"
で機能を追加data-type="slide"
でスライド動作data-type="fade"
でフェード動作data-type
を記述しない、もしくは上記2つ以外の値の場合は通常の動作- 読み込み時はデフォルトで次のタグを非表示にします。
data-display="block"
で読み込み時に表示 data-next-class="..."
で次のタグにクラス名を指定data-time=...
で表示非表示にそれぞれかかる秒数を指定できる。1秒の場合はdata-time="1000"
過去の記事も参考に
過去の記事で書いてあることはこの改良型でも動作します。
終わりに
次のタグをアニメーションで表示非表示にできるようにしました!
アニメーションの選択肢が3倍に増えたので3倍遊べますよ!ふふふ(*'ω'*)
スターやブクマ、コメント、読者登録ありがとうございます!すごい励みになってます。
またね('ω')ノ
祝!読者登録100人突破
こんにちは鬱太郎です。先日読者登録が100人を突破しました!
ありがとうございます!
正直プログラムのことをただべちゃくちゃしゃべっているだけなので、普通のブログが好みの方々には申し訳ないと思っています。
こんな私のブログをたまにちょっと見て「ふーん」と思っていただければ嬉しいです!
本当にありがとうございます。
嬉しさのあまりプログラムを作りました(3秒ごとに名前が変わります!)↓↓
さん 本当にありがとうございます!
これからもよろしくお願いします!
またね('ω')ノ
立憲民主党のフォロワーは英数字のみの名前率が高い! 各政党のフォロワー情報を比較してみた
こんにちは鬱太郎です。今日もまだ比較中なので、そのデータを貼り付けます。
終わらない(´;ω;`)
ソースコード
nameプロパティを調べる
nameプロパティはTwitterの名前を意味します。よく変えたりする方も多いのではないでしょうか?
名前の文字列のサイズで比較してみる
名前のサイズで比較してみます。lengthでグループ分けですね!
うわ・・・線が多すぎてどれがどれだかわかりませんね(´;ω;`)
でも4文字の名前の人が1番多いというのが分かりますね!これは日本語の名前が4文字が多いからでしょうか?こういったデータを見ると和みますね!(私だけかな?)
しいて言えば20文字で急にぴょんとデータが跳ねているのが気になるところです。
そのままでは見にくいので、平均からの差のグラフを作りました。
ますますわからん・・・w( ;∀;)
政党名 | 最大 | 最小 | 合計 | 平均 | 中央値 | 標準偏差 |
---|---|---|---|---|---|---|
公明 | 24 | 0 | 488076 | 6.62 | 5 | 4.28 |
自民 | 23 | 0 | 839717 | 6.75 | 5 | 4.30 |
立民 | 29 | 0 | 1215297 | 6.95 | 5 | 4.34 |
日本 | 22 | 0 | 258753 | 6.83 | 5 | 4.37 |
維新 | 22 | 1 | 93210 | 6.80 | 5 | 4.37 |
希望 | 20 | 1 | 73912 | 6.97 | 5 | 4.45 |
幸実 | 23 | 0 | 47743 | 7.07 | 5 | 4.52 |
共産 | 26 | 1 | 264532 | 7.20 | 6 | 4.54 |
民進 | 28 | 1 | 182694 | 7.21 | 6 | 4.61 |
自由 | 24 | 0 | 214001 | 7.58 | 6 | 4.75 |
社民 | 28 | 1 | 164356 | 7.59 | 6 | 4.78 |
各政党別の文字列の長さの詳細です。データを出してみたものの…わからん!(*'ω'*)
文字列の長さ | 立民 | 民進 | 社民 | 幸実 | 共産 |
---|---|---|---|---|---|
0 | 0.00% | 0.00% | 0.00% | 0.01% | 0.00% |
1 | 1.38% | 1.77% | 1.44% | 1.66% | 1.39% |
2 | 7.04% | 6.70% | 5.95% | 6.83% | 6.23% |
3 | 11.14% | 10.32% | 9.34% | 10.22% | 9.88% |
4 | 18.79% | 17.92% | 17.27% | 18.82% | 18.63% |
5 | 11.96% | 12.46% | 11.99% | 12.79% | 13.19% |
6 | 8.58% | 8.33% | 8.36% | 8.80% | 8.58% |
7 | 6.63% | 6.36% | 6.47% | 6.50% | 6.27% |
8 | 6.13% | 5.70% | 5.84% | 5.27% | 5.84% |
9 | 4.46% | 4.61% | 4.45% | 4.25% | 4.46% |
10 | 3.81% | 3.80% | 4.18% | 4.01% | 3.82% |
11 | 3.33% | 3.46% | 3.50% | 3.57% | 3.54% |
12 | 3.22% | 3.16% | 3.55% | 3.08% | 3.20% |
13 | 2.94% | 3.09% | 3.26% | 2.64% | 2.81% |
14 | 2.63% | 2.43% | 2.65% | 2.19% | 2.42% |
15 | 2.11% | 2.16% | 2.53% | 2.13% | 2.31% |
16 | 1.60% | 1.75% | 1.98% | 1.66% | 1.71% |
17 | 1.24% | 1.50% | 1.78% | 1.42% | 1.51% |
18 | 1.00% | 1.43% | 1.59% | 1.38% | 1.24% |
19 | 0.88% | 1.22% | 1.59% | 1.14% | 1.23% |
20 | 1.12% | 1.81% | 2.27% | 1.61% | 1.74% |
21 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
22 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
23 | 0.00% | 0.00% | 0.00% | 0.01% | 0.00% |
24 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
25 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
26 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
27 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
28 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
29 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
文字列の長さ | 自民 | 希望 | 公明 | 日本 | 維新 | 自由 |
---|---|---|---|---|---|---|
0 | 0.00% | 0.00% | 0.00% | 0.02% | 0.00% | 0.01% |
1 | 1.59% | 1.59% | 1.60% | 1.58% | 1.49% | 1.37% |
2 | 7.71% | 7.18% | 8.29% | 8.02% | 7.62% | 5.74% |
3 | 11.18% | 11.15% | 12.03% | 11.43% | 11.41% | 9.59% |
4 | 19.34% | 19.17% | 19.23% | 18.16% | 19.46% | 17.44% |
5 | 12.86% | 11.27% | 13.75% | 12.46% | 12.44% | 11.87% |
6 | 8.55% | 8.62% | 8.53% | 8.69% | 8.73% | 8.53% |
7 | 6.61% | 6.86% | 5.94% | 6.60% | 6.76% | 6.32% |
8 | 5.74% | 6.10% | 5.24% | 5.82% | 5.57% | 5.84% |
9 | 4.29% | 4.32% | 3.95% | 4.63% | 4.18% | 4.44% |
10 | 3.66% | 3.92% | 3.46% | 3.97% | 3.80% | 4.07% |
11 | 3.23% | 3.07% | 3.02% | 3.19% | 2.98% | 3.65% |
12 | 2.85% | 2.85% | 2.77% | 2.77% | 2.77% | 3.57% |
13 | 2.49% | 2.90% | 2.55% | 2.47% | 2.57% | 3.13% |
14 | 2.21% | 2.40% | 2.20% | 2.08% | 2.13% | 2.88% |
15 | 1.91% | 1.86% | 1.85% | 1.88% | 1.88% | 2.52% |
16 | 1.46% | 1.58% | 1.47% | 1.48% | 1.34% | 2.08% |
17 | 1.23% | 1.46% | 1.15% | 1.29% | 1.32% | 1.78% |
18 | 1.00% | 1.04% | 0.96% | 1.10% | 1.08% | 1.59% |
19 | 0.87% | 1.10% | 0.87% | 1.02% | 0.99% | 1.46% |
20 | 1.19% | 1.54% | 1.11% | 1.35% | 1.48% | 2.11% |
21 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.01% |
22 | 0.00% | 0.00% | 0.00% | 0.00% | 0.01% | 0.00% |
23 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
24 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.01% |
25 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
26 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
27 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
28 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
29 | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% | 0.00% |
名前が英数字のみのフォロワー
Twitterの名前が英数字のみ(-_
も含む)の人を検索します。
正規表現で
^[a-zA-Z0-9_\-]+$
と書けますね。
党名 | スクリーン名 | 英数字のフォロワー | フォロワー数 | 英数字率 | 偏差値 |
---|---|---|---|---|---|
立民 | CDP2017 | 47562 | 174880 | 0.272 | 71.79 |
希望 | kibounotou | 2677 | 10606 | 0.2524 | 62.74 |
自民 | jimin_koho | 29791 | 124317 | 0.2396 | 56.83 |
自由 | seikatsu1pr | 6508 | 28240 | 0.2305 | 52.58 |
維新 | osaka_ishin | 3043 | 13705 | 0.222 | 48.69 |
民進 | MinshintoNews | 5500 | 25333 | 0.2171 | 46.41 |
共産 | jcp_cc | 7892 | 36727 | 0.2149 | 45.38 |
日本 | nipponkokoro | 8121 | 37905 | 0.2142 | 45.08 |
公明 | komei_koho | 15603 | 73702 | 0.2117 | 43.91 |
社民 | SDPJapan | 4524 | 21644 | 0.209 | 42.66 |
幸実 | hr_party_TW | 1284 | 6753 | 0.1901 | 33.93 |
名称 | 値 |
---|---|
平均 | 0.224872486895227 |
標準偏差 | 0.0216113775137216 |
立憲民主党が英数字の名前を付けているフォロワーが多いという結果になりました。これが、件の疑惑の元といえるんじゃないですかね。英数字のアカウントが多いという噂は聞いていましたが、本当に他党に比べて多いことが分かりました。
逆に幸福実現党は英数字の名前のフォロワーが少ないという結果が出ました。
名前に@を付けてるフォロワー
Twitterの名前を名前@状況
などのように使っている方をよく見かけますね。そんな人を検索します。
正規表現で
^[^@]+@[^@]+$
と書けますね。
党名 | スクリーン名 | 名前に@を使用 | フォロワー数 | 名前に@使用率 | 偏差値 |
---|---|---|---|---|---|
幸実 | hr_party_TW | 245 | 6753 | 0.0363 | 66.86 |
日本 | nipponkokoro | 1322 | 37905 | 0.0349 | 64.08 |
維新 | osaka_ishin | 445 | 13705 | 0.0325 | 59.3 |
民進 | MinshintoNews | 781 | 25333 | 0.0308 | 56.05 |
社民 | SDPJapan | 605 | 21644 | 0.028 | 50.34 |
希望 | kibounotou | 285 | 10606 | 0.0269 | 48.19 |
共産 | jcp_cc | 954 | 36727 | 0.026 | 46.42 |
自民 | jimin_koho | 3131 | 124317 | 0.0252 | 44.85 |
自由 | seikatsu1pr | 639 | 28240 | 0.0226 | 39.77 |
公明 | komei_koho | 1661 | 73702 | 0.0225 | 39.59 |
立民 | CDP2017 | 3496 | 174880 | 0.02 | 34.54 |
名称 | 値 |
---|---|
平均 | 0.0277814617448422 |
標準偏差 | 0.00504040916871676 |
全体の約2.7%の方が名前に@
を使っているようですね。名前に@
を使っているからアクティブとかそんなわけではないと思いますが、こういったデータでも政党別に違いがあるんだなと思いました。
幸福実現党はフォロワー数が7000と少ないものの、先ほどの英数字の使用率が低いことも合わせると、フォロワーの(生身の人間としての)質が高いという推測ができますね。
逆にフォロワー数が多い政党ほど、質が低いという事がいえるのかも…(不安げ)
まあ、名前からすべてわかるわけないですけどね!
終わりに
ここまで読んでくださってありがとうございます!
なんかもう…疲れた…
読者さんのブログを見るのもをくれてしまって申し訳ないです。でもfeedlyにたまっているので、ひと段落したら見て回りたいと思います。
読者登録が100人を越えました!ありがとうございます!
またね('ω')ノ
公明党のフォロワーは卵アイコン率が高い! 各政党のフォロワー情報を比較してみた
こんにちは鬱太郎です。まだ、フォロワーの分析が終わっていないので、今日は途中の情報をペタペタと張り付けていきます。
bool値の政党別比較
protected
protected
はtrueだと鍵垢であるという事を表します。今回はtrueの数を収集し、各政党別に比較してみました。
党名 | スクリーン名 | 鍵垢数 | フォロワー数 | 鍵垢率 | 偏差値 |
---|---|---|---|---|---|
希望 | kibounotou | 1795 | 10606 | 0.1692 | 71.99 |
立民 | CDP2017 | 25722 | 174880 | 0.1471 | 60.69 |
維新 | osaka_ishin | 1807 | 13705 | 0.1318 | 52.92 |
自民 | jimin_koho | 16327 | 124317 | 0.1313 | 52.66 |
幸実 | hr_party_TW | 874 | 6753 | 0.1294 | 51.68 |
公明 | komei_koho | 9510 | 73702 | 0.129 | 51.48 |
民進 | MinshintoNews | 3257 | 25333 | 0.1286 | 51.25 |
共産 | jcp_cc | 4076 | 36727 | 0.111 | 42.28 |
日本 | nipponkokoro | 4047 | 37905 | 0.1068 | 40.13 |
社民 | SDPJapan | 2288 | 21644 | 0.1057 | 39.59 |
自由 | seikatsu1pr | 2750 | 28240 | 0.0974 | 35.34 |
鍵垢率は希望の党と立憲民主党が飛びぬけて高いことが、偏差値からも分かると思います。
default_profile
default_profile
はtrueだとまだプロフィールを編集していないことを示します。今回はtrueの数を収集し、政党別に比較してみました。
党名 | スクリーン名 | プロフィール未設定 | フォロワー数 | プロフィール未設定率 | 偏差値 |
---|---|---|---|---|---|
公明 | komei_koho | 59121 | 73702 | 0.8022 | 73.31 |
維新 | osaka_ishin | 10093 | 13705 | 0.7364 | 58.93 |
幸実 | hr_party_TW | 4886 | 6753 | 0.7235 | 56.1 |
自民 | jimin_koho | 87787 | 124317 | 0.7062 | 52.3 |
共産 | jcp_cc | 25704 | 36727 | 0.6999 | 50.92 |
民進 | MinshintoNews | 17540 | 25333 | 0.6924 | 49.28 |
日本 | nipponkokoro | 25954 | 37905 | 0.6847 | 47.6 |
希望 | kibounotou | 7185 | 10606 | 0.6774 | 46.01 |
社民 | SDPJapan | 14235 | 21644 | 0.6577 | 41.69 |
立民 | CDP2017 | 111696 | 174880 | 0.6387 | 37.53 |
自由 | seikatsu1pr | 17881 | 28240 | 0.6332 | 36.33 |
名称 | 値 |
---|---|
平均 | 0.695660491063167 |
標準偏差 | 0.0456899688652164 |
公明党が明らかに高い数値を出していることが分かると思います。順に維新の会・幸福実現党・自民党と続きます。
default_profile_image
default_proflie_image
はいわゆる卵アイコンであるかどうかを示します。今回は卵アイコンのユーザーを収集し、政党別に比較してみました。
党名 | スクリーン名 | 卵アイコン数 | フォロワー数 | 卵率 | 偏差値 |
---|---|---|---|---|---|
公明 | komei_koho | 21362 | 73702 | 0.2898 | 75.61 |
自民 | jimin_koho | 28509 | 124317 | 0.2293 | 59.26 |
立民 | CDP2017 | 37371 | 174880 | 0.2137 | 55.03 |
共産 | jcp_cc | 7569 | 36727 | 0.2061 | 52.98 |
維新 | osaka_ishin | 2627 | 13705 | 0.1917 | 49.09 |
幸実 | hr_party_TW | 1233 | 6753 | 0.1826 | 46.63 |
民進 | MinshintoNews | 4368 | 25333 | 0.1724 | 43.88 |
社民 | SDPJapan | 3721 | 21644 | 0.1719 | 43.75 |
自由 | seikatsu1pr | 4794 | 28240 | 0.1698 | 43.16 |
希望 | kibounotou | 1713 | 10606 | 0.1615 | 40.94 |
日本 | nipponkokoro | 5945 | 37905 | 0.1568 | 39.67 |
名称 | 値 |
---|---|
平均 | 0.195061020797349 |
標準偏差 | 0.0370112264916619 |
先ほどのdefault_profile
の結果から予想できるように公明党が群を抜いて卵アイコン率が高いことが分かります。自民共産維新等も前回偏差値50以上の政党ですね。ただ、プロフィール未設定の割合が低かった立憲民主党が、卵アイコン率ですとかなりの高い数値を出しているのが気になります。プロフィール未設定の時の偏差値は36と低いものでしたが、今回は55と高い数値を出しています。プロフィールを設定したが、卵アイコンを変えていないというユーザーが多いという事でしょうか?
profile_use_background_image
profile_use_background_image
はプロフィールの背景画像が有効であるかどうかを表しています。どうやら、現在廃止された値のようですね。
党名 | スクリーン名 | プロフィールの背景画像が有効 | フォロワー数 | 背景画像率 | 偏差値 |
---|---|---|---|---|---|
公明 | komei_koho | 69945 | 73702 | 0.949 | 72.82 |
自民 | jimin_koho | 115119 | 124317 | 0.926 | 61.92 |
幸実 | hr_party_TW | 6201 | 6753 | 0.9183 | 58.25 |
立民 | CDP2017 | 158656 | 174880 | 0.9072 | 53.03 |
維新 | osaka_ishin | 12228 | 13705 | 0.8922 | 45.93 |
日本 | nipponkokoro | 33769 | 37905 | 0.8909 | 45.29 |
共産 | jcp_cc | 32704 | 36727 | 0.8905 | 45.09 |
自由 | seikatsu1pr | 25124 | 28240 | 0.8897 | 44.71 |
希望 | kibounotou | 9433 | 10606 | 0.8894 | 44.59 |
民進 | MinshintoNews | 22338 | 25333 | 0.8818 | 40.98 |
社民 | SDPJapan | 18922 | 21644 | 0.8742 | 37.41 |
名称 | 値 |
---|---|
平均 | 0.9008 |
標準偏差 | 0.021121934 |
ほとんどのユーザーがtrueの様です。昔のプロパティを今も互換性のために残してあるという事でしょうか?
終わりに
今回は裏で分析中という事で、こんだけしか比較を出せませんでした。すみません!
頑張ってすべてのデータを出したいなと思います(選挙期間中に間に合うかなw)
またね('ω')ノ