2015年03月19日

連絡用ページ

 こちらのブログへの今後の新規エントリの投稿はありません。
 
 Kawazoeへのご連絡は、riverplus@gmail.com にメールして下さい。

 CodeIQでコード公開された方からのご連絡については、コードの公開について をご覧下さい。

2011年09月30日

割り算と桁数のパズル(解答編)

 割り算と桁数のパズルの解答編です。

 真っ先に思いつくのは、A, B の組を一つ一つ選んで桁数を調べるという O(N2) のやり方です。しかし、A, B の組は全部で 1012 × 1012 = 1024 通りあるので、これを一つ一つ割り算してたしかめていくというのは到底不可能です。そこで、「A, B が一体どういう条件を満たしていれば小数点以下が D 桁になるか?」という条件を考えていきます。

■ O(N2) から O(N) へのアプローチ

 ポイントは、分数 A/B を約分したときの分母の形に注目することです。「約分後の分母に 2 または 5 以外の因数が含まれないこと」がまず必須の条件であることが分かります。もしそのような因数があれば A÷B は循環小数になってしまうからです。さらに、D の値は、「2 と 5 のべき指数のうち大きいほうの値」に一致することも分かります。すなわち、A÷B の小数点以下がちょうど D 桁となるための必要十分条件とは、「約分後の分母が 2p × 5q の形で書け、かつ max(p, q) = D」であるといえます。

 つまり、条件を満たす A と B は、約分後の分子を m、最大公約数を g とおいて、それぞれ次のように表せます。
 
 (ただし m と2p × 5q は互いに素で、かつ max(p, q) = D)

 結局のところ、本問は、上の条件を満たす4整数の組 (g, m, p, q) の個数を求めることと同値であるといえます。

 そのような組を数えるアルゴリズムを考えます。始めに p と q の値を固定し、次に m の値を固定するという順番で考えます。ある p, q を選んだとき、m はどのような値でしょうか。3通りに場合分けして考えます。① p = D, q = 0 の場合、m は 2 で割り切れない任意の数です。② p = 0, q = D の場合、m は 5 で割り切れない任意の数です。③ それ以外(p ≧ 1, q = D または p = D, q ≧ 1)の場合、m は 2 でも 5 でも割り切れない任意の数です。m を決めた後の g の選び方は単純です。ベクトル (m, 2p × 5q) を整数 g 倍したすべての組は上の条件を満たします。ですのでそのような g の個数は、N を m と 2p × 5q の大きい方で割れば求められます。

 公式化すると次のようになります。割り算は端数を落としていることに注意して下さい。これを単純に実装すれば、O(N) のプログラムができます。
 
 

■ O(N) から O(√N) へのアプローチ

 さて、本問は N = 1012 です。O(N) ではまだ時間がかかりすぎます。さらに計算時間を下げる必要があります。

 いちばん時間がかかっているのが、m に関する繰り返し計算です。ここを高速化します。max の大小で式を分解すると、前半部分は、シグマの中身が m の値に依存しないので、単純な掛け算で計算可能です。ただ m の値は 2 または 5 で割り切れない制約があるため、そうした数を除外します。

 後半部分は、単純化すると、m に対する ∑ ((定数) / m) を計算する問題です。これは一つ一つ計算すると時間がかかりますが、ある程度 m が大きいと (定数) / m は同じ値が続くという事実に着目すると、一気にオーダを落とせます。つまり、ある整数 k に対し、(定数) / m = k となるような m は何個存在するかを考えるということです。そのような m は (定数)/k - (定数)/(k+1) 個存在します。つまり、始めは m をだんだんと大きくしながら m に対する ∑ ((定数) / m) を繰り返し計算し、ある程度 m が大きくなったところで、ループ変数を m から k に切り替えて、∑ k × ((定数)/k - (定数)/(k+1)) を計算します。なお前半部分と同様、2 または 5 で割り切れない場合を除外しましょう(詳細は省略します)。
 
 m と k を切り替えるタイミングは m が √N に等しくなったときがベストです。これによりアルゴリズムは O(√N) になります。

 以上のコードをこちらに記します。上の説明では省いた細かなケースのバグを除去しています。

 実行させると、答えの 83566672035424 が得られます。実行時間は上のコードで1秒を切るはずです。

 なお、本問の正解者は、順に有為さん、triceps さん、stqn さんでした。Project Euler の Fastest Solvers によく登場する方々ですね。ありがとうございます!

2011年09月25日

割り算と桁数のパズル

 久しぶりに、プロジェクトオイラーふうの問題を作ってみました。難易度は標準的です。ぜひトライしてみて下さい!

---
【問】
整数 N, D に対し、A÷B の小数点以下の桁数がちょうど D 桁となるような N 以下の正の整数の組 (A, B) の個数を C(N, D) と定義する。

例えば C(10, 2) = 8 である。小数点以下がちょうど 2 桁になるのは次の 8 通りである。

1÷4=0.25
2÷8=0.25
3÷4=0.75
5÷4=1.25
6÷8=0.75
7÷4=1.75
9÷4=2.25
10÷8=1.25

また、C(100, 3) = 216, C(10000, 4) = 137366 であることが確かめられる。
C(1012, 12) を求めよ。
---

 回答はこちら(回答終了しました)のページに行って、テキストボックスに答の数字を入力し「回答」を押して下さい。正解なら専用の掲示板ページに飛びます。不正解なら Not Found が表示されます。

 ご回答をお待ちしています!

2011年05月29日

デスクトップアプリケーション「ニコツイート」

 デスクトップアプリケーション「ニコツイート」を作成しました。
 ツイッターのハッシュタグの検索結果を、ニコニコ動画っぽくデスクトップに表示するソフトです。

 

 たとえば次のような使い方ができます。

  • 自宅の PC で、実況系のハッシュタグを流してぼんやり眺めてみる。
  • 勉強会やセミナーで、スライド発表にかぶせて勉強会専用のハッシュタグを流しておくと、聴講者がリアルタイムでコメントを入れられる。


特徴

  • 指定されたハッシュタグの検索を定期的に実行します。
  • 検索した結果を、流れるテロップとしてデスクトップに表示します。
  • テロップの色や大きさ、表示時間などは選択が可能です。

動作環境

 「Microsoft .NET Framework Version 2.0 再頒布可能パッケージ (x86) 」が必要です。
 PC の性能を要求します。
 動作を確認した環境: Windows 7(32bit)

ダウンロード

 ニコツイート Ver.1.1 (2011/6/3)

その他

 バグ報告など歓迎します。

2010年10月23日

文法ひとつで人の評価は大きく変わる


 Science NOW より。

■ 政治家よ、自分の文法に注意しよう
 Politicians, Watch Your Grammar

 政治家をはじめ、他人からの印象が重要な人にとって注目すべき報告です。自分を語るとき、何を述べるかは当然ながら非常に重要ですが、今後は文法ひとつひとつまで細かくチェックする必要があるかもしれません。新たな心理学の研究によると、文法のような微妙な表現が変化するだけで、聞き手の評価は大きく変わることが示されました。

 米国カリフォルニア大学の Teenie Matlock とインディアナ大学の Caitlin Fausey は、選挙の候補者のメッセージにて、文法など小さな差異が、聞き手の印象にどのような影響を及ぼすかを調査しました。

 彼女らは188名の学生を集め、架空の政治家に関するとあるテキストを読んでもらいました。この政治家の不倫と汚職の問題に関するテキストです。被験者は半分に分けられ、それぞれ異なるテキストを読みました。一方のテキストは、「Last year, Mark was having an affair with his assistant and was taking hush money from a prominent constituent.(昨年、マークは秘書と性的関係を持ってきていたうえ、また有力な有権者から口止め料を受け取ってきていた)」、もう一方は、「Last year, Mark had an affair with his assistant and took hush money from a prominent constituent.(昨年、マークは秘書と性的関係を持ったうえ、有力な有権者から口止め料を受け取った)」というものでした。

 二つはよく似ていますが、動詞の使い方が異なります。前者では「was having」「was taking」という表現が使われています。これは未完了相と呼ばれ、行為が現在まで継続しているニュアンスを持ちます。一方、後者では「had」「took」が使われています。これは完了相と呼ばれ、行為が過去に限定的であったニュアンスを持ちます。

 文章の差は微妙でしたが、これを読んだ被験者の印象は大きく異なっていました。前者の文章を読んだ被験者は、4分の3が、この政治家が再選する見込みはないだろうと答えたのに対し、後者の文章を読んだ被験者は、半分のみが同様の回答をしました。また、わいろの金額が10万ドル以上だと予想したのは、前者では58%でしたが、後者では37%でした。この傾向は、内容を少し複雑にしたテキストで試したときも同様でした。

 未完了相には、悪い行為が過去から現在まで長く継続しているというイメージを含んでいます。それが選挙の見込みに影響したものと考えられます。

 一方、この現象は悪い行為のみに見られることも分かりました。ある政治家がガンの研究の支援を行っている(または行っていた)、というテキストを、上とは別の166名に読ませたところ、当選の見込みについて、両方のグループで回答の傾向に違いは見られませんでした。

 研究者らは、私たちは言語に対してきわめて敏感であると述べています。このことを自覚すれば、政治家からの情報の受け手として、よりよい立場を取ることができるだろうと述べています。

 なるほど。今も悪いことをしているというニュアンスに対してネガティブな評価をするというのは直感的には納得できる結果ですが、ここまでがらっと違いが出るのはたいへん面白いです。今回のように架空の人物が対象だと、被験者はテキストの情報だけにもとづいて判断することになるので、実在の人物について同様のことをした場合はこれより差異は小さくなるのでしょう。このあたりの違いはどう出るのかな。


【参考リンク】
・元論文:不明。Political Psychology 誌の10月号らしいですが。。

2010年08月06日

接点と円と三角形のパズル(解答編)

 接点と円と三角形のパズルの解答編です。

 この問題では、まず、三角形 OAB の面積 S を a, b, r を使って表します。

 A の x, y 座標をそれぞれ Ax, Ay とおきます。円の接線の方程式は公式としてよく知られており(ここなど)、これが (a,b) を通過することから下記の関係がいえます。

 また、A は円上にあるため、

 がいえます。この2つを連立して解くと Ax, Ay が求められます。

 また、B の x, y 座標をそれぞれ Bx, By とすると、同様にして、

 が得られます。さらにここに三角形の面積の公式を使い、整理すると、

 となります。つまり、本問は、S が整数となるような a,b,r の組は何個かを求めることになります。

 (追記) もっとスマートな導出法をコメント欄にて教えてもらいました。△AOB と △XOY はいずれも二等辺三角形で、かつ ∠AOB=∠XOY なので相似です。その面積比は、相似比を2乗した r2:a2+b2 となります。さらに △XOY の面積は公式を使って (b2-a2)/2 となりますので、結果、上記と同じ結果が得られます。

 さて、簡単に思いつく計算方法は、すべての a,b,r の組について、分子が分母を割り切るかをチェックし、割り切るものを数え上げるというやり方です。ですが、a2+b2<108 の条件ではチェックすべき範囲が大きすぎて莫大な時間がかかってしまいます。効率よく計算するにはし工夫が必要です。

 そこで計算量の節減のため、a,b についてのみ列挙を行います。S の式をよく見ると、a,b の値を1組固定すれば、S は (分数)×r2 の形で表すことができます。したがって、この分母を約分しきるような最小の r の値が計算できれば、この r を定数倍したものをすべて条件を満たす組としてカウントすることができます。1つ1つ r の値をチェックせずに済むのです。

 そのような r を求めるにはどうすればよいでしょうか。素直に考えれば、r2 が分母を割り切ればよいので、いったん分母を素因数分解し、各素因数のべき指数を半分にして(端数切り上げ)やればOKです。ですが、素因数分解はたいへん時間のかかる処理のため、結局長い時間がかかってしまいます。

 そこでさらにいくつかの改良を施します。まず、S の形をじっと見れば分かるように、a と b が公約数をもつ場合、公約数は分母と分子で約分し合います。ですので、a と b が互いに素の場合に限って r の計算を行い、公約数をもつケースをそのときにまとめて計算するようにすれば処理が省けます。また、a,b が互いに素であれば、b2+a2 と b2-a2 の公約数は、a, b がいずれも奇数のとき 2、それ以外のとき 1 になりますので、約分の計算が簡単化できます。

 さらに、分母を約分するような r の値を、あらかじめ様々な分母の値に対して計算しておきます。値を覚えておくために1で初期化した配列を用意し、各素数の1乗、3乗、5乗、・・・のそれぞれの整数倍に対しその素数を乗じていきます。

 以上のコードをこちらに記します。コードでは、上記の改良に加え、フェルマーの 4n+1 定理(参考)により、分母の b2+a2 の部分が必ず 4n+1 の形になる点に着目し、必要な配列のサイズを4分の1にコンパクト化しています。

 実行させると、答えの 14898922 が得られます。実行時間は、マシンの種類にもよりますが、例えば僕の5年前のマシンで約30秒。出題者の工夫ではこれが限界でしたが、もしかするとさらにずっと優れた方法があるかもしれません。もし見つかればコメント欄などで教えて頂けると大変うれしいです。

 なお、本問の正解者は、順に niino さん、kozima さん、chaemon さん、xsd さんでした。Project Euler の上位の常連の方々ですね。ありがとうございます!

2010年08月02日

マッチ棒の並べ方パズル(解答編)

 以前に出題したマッチ棒の並べ方パズルの解答編です。

 この問題は N(120,12) を 108 で割った余り、つまり下8桁を求める問題です。ちょっと考えれば分かりますが、いわゆる単純な総当りでは決して解けません。並べ方は全部で 22*120*12+120+12 ≒ 5×10906 通りもありますので、これらを全て列挙して数えるというのはあまりに非現実的です。

 ではどうするか? プロジェクトオイラーを遊び倒すガイド(上級編)で説明した、大きすぎる問題を小さな問題に分割するアプローチが必要になります。今回の場合は、一回り小さいサイズの問題を考えることで目的のパターン数が表せないかを考えます。

 W=3, H=2 の場合を例にします。これより一回りサイズの小さい問題、2×2 の図形に対し、下図のように、右側にヨの形の数本のマッチ棒を足してやれば、新たに 3×2 の図形を得ることができます。このとき、もし 2×2 が条件を満たしているとすると、くっつけるマッチ棒の向きを適切に選んでやれば、3×2 でも条件を満たすことが可能になります。ですので、2×2 でのパターン数が既に分かっているならば、そこに可能なヨ型のパターン数を掛け合わせることで 3×2 のパターン数が分かるのではと期待されます。さらにこの手順を繰り返せば、4×2、5×2、・・・ のパターン数も分かるのではと期待されます。

 しかし、この考えはうまくいきません。下の例を見てください。2×2 から 3×2 を作る例を示していますが、もともとの 2×2 は、右列に頭のない格子点(青丸)があり、条件を満たしていません。ですが、ここに適切なマッチ棒を足せば、条件を満たす 3×2 を作ることが可能です。このように、条件を満たす並べ方だけに着目したのでは、うまく計算できません。

 ではどうすればいいか。条件を満たす並べ方だけを追うのでなく、頭のない格子点を右列に含む並べ方も一緒に求めるという考え方が必要になってきます。右列の格子点の頭のあるなしを1つの状態とみなして、可能な状態をすべて列挙します。右列以外の格子点はすべて条件を満たします。H=2 の場合、可能な状態は下記の5つです。なお H=2 なら手書きで十分列挙できますが、H=20 の場合は、列挙の手続きもプログラミングして自動化する必要があります。

 状態の列挙ができれば、次は、横 W-1 における各状態のパターン数が与えられたもとでの、横 W における各状態のパターン数を計算します。別の言い方をすると、横 W-1 における状態1~5のパターン数を P(W-1,状態1),・・・, P(W-1,状態5) と書くとき、これらの値から P(W,状態1),・・・, P(W,状態5) を得る変換行列を考え、この各要素の値を計算します。

 この行列が作られたら、あとは初期状態に相当する P(0,状態1),・・・, P(0,状態5) を別の手段で求めて、ここに行列を W 回作用させることで、P(W,状態1),・・・, P(W,状態5) が得られます。

 以上の手続きをまとめます。

1.可能な状態を列挙する。
2.W-1 に対する各状態のパターン数から W に対する各状態のパターン数を得る変換行列を計算する。
3.W=0 に対する各状態のパターン数を計算する。
4.3に2の行列を W 回作用させる。

 この後、右列のすべての格子点が頭を含む状態の値を見れば、それが求めるべき N(W,H) の値になります。

 以下、各ステップの処理を少し詳しく見ていきます。

 可能な状態というのは、もういちど書くと、W×H のうち右列以外の格子点がすべて頭を含む状態です。右列の頭のあるなしに応じて、状態を分類します。

 実際に紙に書いてみると容易にわかりますが、隣り合う2点は必ず少なくとも一方が頭を含むため、可能な状態の数はそれほど多くはありません下記のコードでは EnumerateState() 関数で、再帰的に計算しています。なお本コードでは、各状態を表現するために、右列の書く格子点の頭のあるなしを、std::bitset を用いて上から順に1または0で表しています。もちろん好きなデータ構造で表現して構いません。

 横 W-1 の各状態から横 W の各状態へ推移するパターン数を求めます。これは少々プログラミングが複雑です。頭を含まない格子点にくっつくマッチ棒は、向きが一意に定まりますが、そうでないマッチ棒は、どちらの向きでも構わないため、可能なパターン数は増えます。下記のコードでは GetNext() 関数で計算しています。詳細は省きますが、再帰呼び出しを用いて、上から下へ、推移の前後の bitset の並びを見比べながら可能なパターン数を計算していきます。可能なマッチ棒の向きは直前に置いたマッチ棒の向きに依存するため、この情報を下位に伝えるためのフラグ f を設けています。また、計算時間の節約のため、いちど算出した数値をキャッシュしておいて再利用しています。これをすべての状態×状態の組み合わせについて行います。

 初期状態、すなわち W=0 における並び方を調べます。W=0 というのはつまりは H 本のマッチ棒が縦1列に並んだ形です。本問の H=20 の場合、総数は 220≒106 にすぎないので、すべての並び方を網羅して対応する状態のカウントを1ずつ増やすやり方で十分です。

 最後に、初期状態に対し、2で求めた行列を作用させます。これはちょうどベクトルに行列を掛け算するのに等しいです。

 先に挙げた H=2 を再び例にします。5つの各状態から各状態へ推移するパターン数は次の通り表されます。横 W に置ける状態iのパターン数を P(W,状態i) と表しています。初期状態は状態1~4がそれぞれ1つずつですので、ベクトル (1,1,1,1,0) に下の行列を繰り返し作用させると任意の W に対する各状態のパターン数が分かります。実際 W=3 では (1977,4603,3031,4603,7618) になります。状態5の数がたしかに 7618 になっていることが分かります。

 以上の処理を書いたコードをこちらに示します。走らせると、数秒程度で正解の 59942368 が出てきます。もちろんコードの書き方やアルゴリズムの組み方は人それぞれですし、今回紹介したものよりずっと簡潔な方法があるかもしれません。今回の解き方はあくまで一例いうことで。。。

 ちなみに完全な形の答えは N(120,12) =
17268157720477448259243004642083272767058997861064539380548157646
33971465843490790094653847489451623670371334807715010826881954216
81518396262143363955934295105735894303039445053069663558074250869
71127010260826397810760477040616285745335811808026930999091677122
36805752608974117681035771110869541626782209001481564264373963313
39838762704623389687564055706386321430111296854386558533084209538
14340043982473734048668990820611548322915560216458700736569321496
70391027855602024022416850165800817096410887071327241158229355795
83929217390134709480431524138275991128496503121774907338471997857
24138028609176030496280078858249167414757118968829723052086617843
77839890128387810174960169017474650667064878746786424853688716591
77929646402110533795992955207959809188783443567703722824428780526
9494241230319482006866744324939170288791240823607240834559942368 です。

 なお、本問は xsd さんと niino さんのお二人に正答いただきました。出題した翌日には正解という早さでした。多謝!

 

2010年07月30日

接点と円と三角形のパズル

 前回に引き続き、ふたたびオリジナル問題を作ってみました。今回は前回よりすこし数学寄りです。ぜひチャレンジしてみて下さい!

---
【問】
xy 平面上で、原点 O を中心とする整数の半径 r>0 をもつ円に対し、正の整数の座標をもつ円の外部の2点 X(a, b), Y(b, a) (0<a<b) から接線を引く。2点ずつできる接点のうち、x 座標の小さい方をそれぞれ A, B とする。

a2+b2<n のとき、三角形 OAB の面積が整数となる3数の組 (a,b,r) の個数を M(n) とする。
例えば、M(102)=3, M(104)=1043 である。
M(108) を求めよ。
---

 回答はこちら(受付終了しました)のページに行って、テキストボックスに答の数字を入力し「回答」を押して下さい。正解なら専用の掲示板ページに飛びます。不正解なら Not Found が表示されます。

 ふたたび、ご回答をお待ちしています!

2010年07月18日

マッチ棒の並べ方パズル

 以前にこのブログにて、プログラミングで解く数学の問題集のサイト「プロジェクトオイラー」をご紹介しました。(参考:「プロジェクトオイラーを遊び倒すガイド」 導入編初級編中級編上級編

 さて、今回、出された問題を解くだけでは飽き足らず、オリジナル問題を作ってみました。興味のある方はぜひチャレンジしてみて下さい。

---
【問】
正の整数 W, H に対し、長さ 1 のマッチ棒を 2*W*H+W+H 本ならべて、横 W × 縦 H の格子状の図形を作る。
各マッチ棒の頭の向きに応じて様々な並べ方が可能である。
W=3, H=2 の場合、並べ方は全部で 22*3*2+3+2 = 131072 通りある(図形全体の回転や反転は考慮しない)。このうちの 2 つを下に示す。

ここで、次の条件を満たす並べ方に着目する:すべての格子点は、少なくとも 1 個のマッチ棒の頭を含む。
左の例は、12 個の格子点の全てが少なくとも 1 個のマッチ棒の頭を含んでおり条件を満たしているが、右の例は、青丸で囲った格子点が頭を含んでおらず条件を満たしていない。

N(W, H) をこの条件を満たす並べ方の数とする。
例えば、N(1,1)=2、N(2,1)=14, N(3,2)=7618 である。
N(120,12) mod 108 を求めよ。
---

 回答は こちら(受付終了しました)のページに行って、テキストボックスに答の8桁の数字を入力してから「回答」を押して下さい。正解なら専用の掲示板ページに飛びます。不正解なら 404 Not Found が表示されます。

 チャレンジをお待ちしています!

2010年04月10日

世界最速のプログレスバーを探す試み


 New Scientist より。

■ 視覚のトリックはダウンロードを速く見せられる
 Visual tricks can make downloads seem quicker

 プログレスバーと言えば、ウェブコンテンツのダウンロードのときなどによく目にするものです。完了するまでの間、バーを見つめてジット待っているのは苛立たしいものです。そこで、バーの外観をうまく工夫して、せめて体感速度だけでも縮めようという研究が行われています。

 今回、米国・カーネギーメロン大学の Chris Harrison、Zhiqaun Yeo、Scott Hu らは、点滅や縞模様のアニメーションを使って目の錯覚を引き起こす方法を提案しています。

 彼らは、いくつかの種類のプログレスバーを作成しました。その一つは、バーが青白に点滅するもので、満タンに近づくについて点滅の時間時間が長くor短くなるようになっていました。また別のものは、青白の縞模様が左右いずれかに動くものでした。いずれも5秒かけて満タンになります。実物をリンク先の動画で見ることができます。

 効果を調べるべく、20名の被験者が集められ、2つのプログレスバーを見てどちらが早いかを答えるというテストを受けました。

 結果はこうでした。点滅するバーを見たとき、多くの被験者が、点滅が次第にゆっくりになるときよりも、次第に速くなるときの方が、ダウンロード時間は短いと判断しました。また、縞模様の動きが右向きよりも左向きのほうが、ダウンロード時間は短いと回答しました。

 さらに研究者らは、満タンに近づくにつれ縞模様の(左向きの)動きがだんだん遅くなるバージョンも用意しました。多くの被験者は、一定速度の縞模様よりも、このような次第に減速するアニメーションの方が短いと感じました。現行の多くのプログレスバー(例えば Mac OS X もそう)にも改良の余地があることを示しています。

 では、このような縞模様のアニメーションの効果はどのぐらいなのでしょうか? 彼らは今回の結果を定量的に評価すべく、点滅も縞模様もないバーと、縞模様が減速する今回のバーとの体感速度を比較しました。前者(点滅・縞模様なし)の所要時間を5秒に固定して、後者(減速する縞模様)の所要時間をさまざまに変えて被験者に見てもらいました。結果、5.61秒に設定した後者のバーが、5秒に設定した前者のバーと同時間と認識されることが分かりました。つまり、約10.9%のスピード向上の効果が見られたことになります。

 なるほど。縞模様をだんだん減速させたほうが速く感じられるというのは面白いですね。どういう原理が働いているのでしょう。「がんばってダウンロードしてる感」が最初にユーザに示されるのがよいんですかね(超適当に言ってます)。仕掛けひとつで、人間の目で分かる違いが出てくるのはよいですね。実装も簡単そうですし。減速ありとなしの場合の比較もやってみて欲しいところです。

【参考リンク】
・元論文:不明。2010 Conference on Human Factors in Computing Systems という学会で発表されるそうです。

1|2345678910 次のページへ>>

アーカイブ