タグ

アルゴリズムに関するgiassのブックマーク (65)

  • Windows 95のプロダクトキーは「111-1111111」や「000-0000000」でも突破できる超単純アルゴリズムで実装されていた

    1995年に登場した「Windows 95」のインストール時にはプロダクトキーの入力を求められるのですが、プロダクトキーは「111-1111111」や「000-0000000」といった単純な数字の羅列でも認証されてしまいます。このような単純なプロダクトキーでも認証可能な理由について、セキュリティ研究者のstacksmashing氏が解説しています。 Why 111-1111111 is a valid Windows 95 key - YouTube これが、Windows 95のプロダクトキー入力画面です。不正なプロダクトキーを入力するとインストールを続行できなくなるのですが、「111-1111111」という単純なプロダクトキーでも「正しいプロダクトキー」として認識され、インストールを続行できます。 また、先頭の3桁を「000-1111111」「001-1111111」「567-1111

    Windows 95のプロダクトキーは「111-1111111」や「000-0000000」でも突破できる超単純アルゴリズムで実装されていた
  • Python初心者、天和シミュレーターを作成する。 - Qiita

    タイトルの通り、Python初心者の自分が天和シミュレーターを作成してみました。麻雀に詳しくない方も、設計上の工夫や制作上の小話など楽しんで読んで頂けると嬉しいです。 導入 ~悪魔の囁き~ みなさん麻雀は好きですか?はい、好きですね。よかったです。 僕も麻雀が好きです。麻雀に初めて触れたのは去年ですが、この半年ほどで時にマウスやスマホを投げつつも雀魂段位戦を約700半荘打っています。 そんな麻雀が好きな僕とみなさんですが、もう一つ質問です。 天和を和了ったことはありますか? はい、ありませんね。僕もありません(そもそも天和の経験があるならこんなシミュレーターなど作らない)。 麻雀に詳しくない方に説明すると、天和とは「局の開始時、親に配られた14枚の牌が既に和了形になっている時に発生する役満」です。その発生確率は33万分の1と言われ、映像に残っているものはこの1回しかありません。↓一応リンク

    Python初心者、天和シミュレーターを作成する。 - Qiita
  • 数学好きに迷路を解く方法を聞いてみた結果→目からウロコの解き方が色々集まる→「なにこれすごい」

    数学を愛する会 @mathlava 【が出ます!】 『数学クラスタが集まって気で大喜利してみた』 会長の著書がKADOKAWAより発売!あのヨビノリたくみさんが認めた爆笑不可避の数学選手権と、会長の書き下ろしネタを多数掲載しています。ぜひご一読ください! 8/16(月) 発売 ↓限定特典付きAmazon予約↓ amazon.co.jp/dp/4046048883 pic.twitter.com/P4pf9XOSIX 2021-07-16 19:01:19 数学を愛する会 @mathlava 【が出ます!】 『数学クラスタが集まって気で大喜利してみた』 会長の著書がKADOKAWAより発売!あのヨビノリたくみさんが認めた爆笑不可避の数学選手権と、会長の書き下ろしネタを多数掲載しています。ぜひご一読ください! 8/16(月) 発売 ↓限定特典付きAmazon予約↓ amazon.co.

    数学好きに迷路を解く方法を聞いてみた結果→目からウロコの解き方が色々集まる→「なにこれすごい」
  • 女王しか開けられない宝箱を誰もがつくれる、RSA暗号の仕組み

    DH鍵交換アルゴリズムが提唱されて間もなく考案されたのが、RSAアルゴリズムである。この名前は、発明者であるロナルド・リベスト(Ronald Rivest)、アディ・シャミア(Adi Shamir)、レオナルド・エーデルマン(Leonard Adleman)の頭文字に由来する。 RSAには、2つのプリミティブが使われている。公開鍵暗号アルゴリズム(非対称暗号)と、デジタル署名方式である。どちらも、暗号アルゴリズムとしては非対称暗号に分類される。これらのプリミティブのしくみと、それが有益な理由について説明する。 非対称暗号化と対称暗号化の違い まず、非対称暗号は、目的だけを見れば前述した対称暗号アルゴリズムと似ている。秘密を守るためにメッセージを暗号化するという目的だ。だが、対称暗号では2人の参加者が共通の対称鍵を使ってメッセージの暗号化と復号を行ったのに対して、非対称暗号は次の点でまったく

    女王しか開けられない宝箱を誰もがつくれる、RSA暗号の仕組み
  • Let’s 競技プログラミング! E8さんが教える アルゴリズム発想のキホン(12) アルゴリズムの基本用語 - 「グラフ」とは?

    皆さんは「グラフ」という言葉を聞いて何を思い浮かべますか。Excel の折れ線グラフや棒グラフを想像する方が多いことでしょう。しかしアルゴリズムの文脈では、グラフは「モノとモノを繋ぐ関係」のことを指します。今回は、グラフの基について整理した上で、どんな問題をグラフで表すことができるのかを紹介します。 グラフとは グラフは、モノとモノを繋ぐ関係を表すネットワーク構造のようなものです。グラフは頂点と辺からなり、頂点はモノを、辺は繋がりを表します。イメージしづらい場合は、鉄道路線図の駅を頂点、線路を辺と考えると良いでしょう。なお、頂点同士を識別するため、各頂点には 1、2、3…… と番号が付けられることが多いです。 無向グラフと有向グラフ 下図左側のように、辺に向きが付いていないグラフを「無向グラフ」と言い、下図右側のように、辺に向きが付いているグラフを「有向グラフ」と言います。例えば、一方通

    Let’s 競技プログラミング! E8さんが教える アルゴリズム発想のキホン(12) アルゴリズムの基本用語 - 「グラフ」とは?
  • WebGPUとRustでネコチャンを点描した話

    はじめに 昨年12月にこんなツイートを見かけました。 かわいいですね。幸いにして論文と実装が公開されていたので、自分でもやってみようと思って、その結果を書いたのが前回の記事です。 読んでいただければわかるとおり、前回の記事の中ではGPUを使わずにアルゴリズムやデータ構造を工夫して近似的に計算しています。結果の画像についてはそんなに悪くないと思っていますが、限界もありました。パーティクルの数も少ないし、一部の画像ではうまく行きませんでした。 やっぱり、もっとちゃんとネコチャンを点描してみたいですよね。 なので、今回の記事ではGPUを使ってアルゴリズムを再現し、よりヴィヴィッドなネコチャンの点描を作成しようと思います。GPUを使って計算するために、WebGPURust実装であるwgpuを使用します。ネコチャンの画像を点描にしたい人と、WebGPUに入門してcompute shaderで何か計

    WebGPUとRustでネコチャンを点描した話
  • ハッシュ関数「SHA-256」の計算プロセスをわかりやすく視覚化してくれる「Sha256 Algorithm Explained」

    アメリカの国家安全保障局(NSA)によって開発された「SHA-2」は電子署名やブロックチェーンに応用される暗号学的ハッシュ関数の1つです。そのSHA-2の中でも特に使われているSHA-256でハッシュを生成するための計算プロセスがよくわかるサイト「Sha256 Algorithm Explained」を、Domingo Martin氏が公開しています。 Sha256 Algorithm Explained https://sha256algorithm.com/ Sha256 Algorithm Explainedにアクセスするとこんな感じ。 上部にある入力欄に、好きな文字列を入力します。今回はGIGAZINEのURLである「https://gigazine.net/」を入力してみました。すると、入力したURLをバイナリに変換したメッセージブロックが表示されます。メッセージブロックは32b

    ハッシュ関数「SHA-256」の計算プロセスをわかりやすく視覚化してくれる「Sha256 Algorithm Explained」
  • AIに絶対に勝てない戦いを挑める「6x6リバーシの神」に徹底的にボコられてみた

    「オセロ」とも呼ばれるリバーシは8×8の盤面でプレイするものですが、盤面を6×6に縮小した場合は「後手必勝」となることで知られています。「6x6リバーシの神」は6x6における後手必勝を体現したAIに挑めるウェブアプリとのことで、実際にプレイしてみました。 絶対に勝てない6x6リバーシを作りました! ぜひ挑戦してみてくださいhttps://t.co/Ul5n3q9jMp— Yusuke Endoh (@mametter) December 30, 2021 公式ページにアクセスすると、こんな感じで中央に大きくリバーシの盤が表示されています。6x6リバーシは「後手必勝」であることが知られており、今回の6x6リバーシの神は後手必勝を体現したAIに対戦を挑むというコンセプト。そのため、人間が先手(黒番)、AIが後手(白番)という順で固定されています。 リバーシのルール上、石を打つときは必ず相手の色

    AIに絶対に勝てない戦いを挑める「6x6リバーシの神」に徹底的にボコられてみた
  • 解析不能!30年以上前のレトロゲームから謎の「自動生成アルゴリズム」が見つかる - ナゾロジー

    Point ■レトロゲームには容量不足や技術的制約を解決するため、現代の我々から見ても解析できない謎の技術が使われていることがある ■今回、ATARI2600から82年に発売されたゲーム『Entombed』に、全くロジックが不明の迷路自動生成プログラムのコードが発見された ■迷路の壁を完全ランダムに配置すればクリア不能になってしまうが、このプログラムがなぜ通行可能なパターンで迷路を生成しているかは、まったくの謎だという ほんの数十年前、コンピュータ関連の技術が飛躍的に向上しました。 特にデータ容量の向上はめざましく、現代の若い人たちにとって容量の単位は「ギガ」が標準になっています。 しかし初代のスーパーマリオの全ゲーム容量は40KB、初代ドラゴンクエストの全容量は64KBでした。 これはこの記事のトップに貼られている画像の容量よりも遥かに小さい容量です。 レトロゲームの開発は、そんな小さな

    解析不能!30年以上前のレトロゲームから謎の「自動生成アルゴリズム」が見つかる - ナゾロジー
  • 「無限に都市が生成されるアルゴリズム」で生成された都市を自由に歩き回ってみた - GIGAZINE

    波動関数とは「物体の状態そのもの」が波動で表されるという関数であり、時にはゲーム内の物理シミュレーションなどに利用されることもあります。そんな波動関数がある1つの固有の状態に収縮することを波動関数の崩壊と呼び、そんな波動関数の崩壊を用いた「無限に都市が生成されるアルゴリズム」を作り出す猛者が登場。実際にどのような都市生成ツールになっているのか、実際にダウンロードして試してみました。 Wave Function Collapse by marian42 https://marian42.itch.io/wfc GitHub - mxgmn/WaveFunctionCollapse: Bitmap & tilemap generation from a single example with the help of ideas from quantum mechanics. https://g

    「無限に都市が生成されるアルゴリズム」で生成された都市を自由に歩き回ってみた - GIGAZINE
  • Webブラウザの作り方 - Qiita

    この記事は何? ほとんどタイトル通りです。 順番に読み進めていけば簡単なWebページが表示できるレベルのWebブラウザを作ることができるように執筆していく予定です。 またアルゴリズムだけをなるべくわかり易く解説していきたいので、記事内で紹介するコードは誰でも読める程度の擬似コードです。 自分で実装したい方は、面倒かもしれませんがそれぞれの言語に翻訳してください。 必要な知識としては: HTML/CSSが困らない程度に読める やる気 これだけです。 (あとこれはただの宣伝ですが、個人的にWeb ブラウザを作ってるので(http://github.com/maekawatoshiki/naglfar) スターをつけてもらえると喜びます) いろいろとパースする Webページは基的にHTMLで書かれていますね。あとCSSも。 HTMLCSSもそのままではただの文字列であって扱いづらいので、パー

    Webブラウザの作り方 - Qiita
  • 【図解】暗号通貨の合意形成アルゴリズム|Keita.T

    暗号通貨のおもしろいところの一つとして合意形成アルゴリズムにあると思っているのですが、PoWやらPoSやら横文字が多くてとっつきづらいので自分なりに図解してみました。 PoWとは ビットコインなどで採用されているPoW。 「強きものが利益を得る」という人の欲望をうまく刺激してるが、設備投資費や電気代がかかりすぎるので、相場が急落したり、マイニング量の半減などで成り立たなくなる恐れがあり、個人的には持続可能で健康的な仕組みではない気がしています。 PoSとは イーサリアムは今はPoWですが、将来的にはPoSに移行するといわれています。こちらも人の欲をうまく利用していますが、富がある箇所に、より富が集中していく仕組みなので、後参入にはうまみがなく、若干ねずみ講的な印象があるので個人的には好きではありません。 PoIとは 個人的に今の暗号通貨の中で最も平等で将来性を感じる仕組みはPoIです。暗号

    【図解】暗号通貨の合意形成アルゴリズム|Keita.T
  • Bing検索の裏側―BitFunnelのアルゴリズム - Hatena Developer Blog

    はてなアプリケーションエンジニアの id:takuya-a です。 この記事では、Microsoft の検索エンジン Bing で採用された BitFunnel アルゴリズムを紹介します。 昨年のエンジニアアドベントカレンダーでは、文字列検索のアルゴリズム全般について紹介しました(文字列アルゴリズムの学びかた - Hatena Developer Blog)。今年はそのなかでも、インデックス(索引)を使った全文検索アルゴリズムについてのお話になります。 この記事の前半は全文検索の入門にもなっていますので、検索技術になじみがない方にも楽しんでいただけるのではないでしょうか。 逆に、「そんなのもう知ってるよ!」という方は、題である「BitFunnel アルゴリズムの詳細」から目を通していただければと思います。 この記事は、はてなエンジニア Advent Calendar 2017の21日目の

    Bing検索の裏側―BitFunnelのアルゴリズム - Hatena Developer Blog
  • ID生成大全 - Qiita

    セッションIDやアクセストークン、はたまた業務上で使う一意の識別子など、いろんなところで一意のIDを生成しなきゃいけないケースが存在します。 そこで世間で使われているIDの生成方法について調べてみました。 選択基準 ID生成における要求として、以下の観点が上げられるかと思います。 生成の速度 大量にデータを短期間で処理し、それらにIDを付与する場合、ID生成そのものがボトルネックとなることがあります。 推測困難性 IDを機密情報と結びつける場合、IDを改ざんされても、機密データが見れないようにできている必要があります。 順序性 採番した順にデータをソートする必要がある場合は、IDがソートキーとして使えないといけません。 それぞれについて各生成手段を評価します。 ID生成の手段 データベースの採番テーブル 採番用のテーブルを作り、そこで番号をUPDATEしながら取得していくやりかたです。古い

    ID生成大全 - Qiita
  • 今度こそ絶対あなたに理解させるPaxos - Qiita

    Paxosとは何か 分散システムの金字塔とも呼ばれ、Leslie Lamport大先生の輝かしい成果の一つとして知られる分散合意アルゴリズムPaxos。 既存の解説 実はすでに存在するPaxosの解説は充分に質が高い Wikipediaの項目にも結構長々と書かれていて、これを読んで理解できた人はもう僕の記事を読む必要はない。 同様にPFIの久保田さんによる解説スライドもあり、これも良く書けているし、これを読んで理解できた人もこれ以上記事を読む必要はない。 minghai氏によるブログ記事のこれとか特にこっちなんかはかなり納得感があり、これらを読んで理解できた人も(中略) tyonekura氏によるスライドも良くかけていて(中略) この記事はこれらの説明に目を通してもなお理解できなかった人、もしくはこれらの説明をこれから読もうと思っている人に向けて書き、Paxosアルゴリズムの詳細な説明自体

    今度こそ絶対あなたに理解させるPaxos - Qiita
  • エレベータアルゴリズムとエレベータのアルゴリズム - ksmakotoのhatenadiary

    ちょっと検索してみたところウィキペディアに英語記事はあるけど( http://en.wikipedia.org/wiki/Elevator_algorithm )日語版の記事はまだのようだし、ジャストな解説も検索したところ出てこないようなので、そう難しいものでもないしちょっと書いてみる。 エレベータアルゴリズム 「エレベータアルゴリズム」というのは、特定のアルゴリズムのことであり、一般のエレベータのアルゴリズムのこと(特に、多数のエレベータがあるビルでは、連携させて複雑な制御がされる。後述)ではない。 コンピュータのディスクドライブのヘッドのシークへの応用が特に知られている。 原理は簡単で、次のようなものである(ここではディスクドライブではなくエレベータの用語で説明する)。 上の階へ行く要求(乗客の要求、および、上の階からの呼)がある限り、上昇して要求に応える。上の階への要求が無くなった

    エレベータアルゴリズムとエレベータのアルゴリズム - ksmakotoのhatenadiary
  • エレベータに見るアルゴリズムの性能と公平性のバランス|Rui Ueyama

    現実世界でもコンピュータの中でも、何らかの性能指標だけを追求すると参加者にとって極端に不公平になってしまうことがある。例えばエレベータとHDDは共通点がありそうに思えないが、この2つは性能特性的にとてもよく似ていて、リーズナブルな性能と公平性を両立させるために同じ制御方法が使われている。これについてちょっと説明してみよう。 1基しかない場合のエレベータの動き方は単純だ。一度上に動き出すと、上で待ってる人や降りる人がいる限り上昇し続ける。同じように、一度下に動き出すと、下で待っている人や降りる人がいる限り下降し続ける。これ以外の動き方をするエレベータはまず存在しないので、これが唯一の制御方法のように思えるけど、別にこうしなければいけないというルールはない。 エレベータの平均待ち時間を最適化することを考えてみよう。そうすると、一方向に動き続ける代わりに、エレベータが現在存在する階に一番近い人の

    エレベータに見るアルゴリズムの性能と公平性のバランス|Rui Ueyama
  • 差分検出アルゴリズム三種盛り - Object.create(null)

    こんばんは. 気がつけばもうずいぶんと涼しくなってきました. 勢い余って凍ってしまったりせぬよう, くれぐれも普段の言動にはお気をつけください. はじめに さて, 我々人類にはどうしても二つの文字列 (あるいは行ごとに区切られたテキスト) 間の差分を求めなければいけない瞬間が発生します. 先人たちはそういった時のために diff のようなツールを開発し, それを利用することで文明はめざましい発展を遂げてきました. しかしながら, 使用するアルゴリズムを比較検討したい場合, 「差分」の定義を変えるなどして既存のアルゴリズムに変更を加えたい場合, diff のない異世界に飛ばされて自分で実装しなければいけない時などにおいては, 差分検出アルゴリズムについての理解が必要不可欠です. というわけで, この記事では文字列間の差分検出とは何かということと, 差分を求める三種類のアルゴリズムの紹介・解説

    差分検出アルゴリズム三種盛り - Object.create(null)
  • 文字列アルゴリズムの学びかた - Hatena Developer Blog

    こんにちは!はてなアプリケーションエンジニアの id:takuya-a です。 みなさんは、このような疑問をもったことはありませんか? grep はどのように文字列を検索しているのか? MeCab はどうやって辞書を高速にルックアップしているのか? パーサやコンパイラを作りたいけど、何から始めればいいのか? 稿では、「文字列アルゴリズムとはどんなものなのか?」「なぜ重要なのか?」「何を知っておくべきか?」「どうやって勉強すればいいのか?」といった疑問にお答えしていこうと思います。 文字列アルゴリズムの意外な応用や、モチベーションを保ちやすい勉強のしかた、文字列アルゴリズムを勉強するために行った社内での取り組み、実装するときのコツといったトピックについても触れています。 このエントリは、はてなエンジニアアドベントカレンダー2016の22日目の記事です。昨日は id:syou6162 さんに

    文字列アルゴリズムの学びかた - Hatena Developer Blog
  • 音楽プレイヤーのシャッフル再生、実はランダムではなかった? | sign

    日頃生活していると、音楽は自然と耳に入ってくるものです。通勤通学時や寝るまえのひとときなど、日常的に音楽をおともにしている方もきっと多いことでしょう。特定の曲を選ぶのではなく、シャッフル再生モードにしておいて、次々流れてくる音楽に身を委ねる……そんなふうに音楽を楽しむのも普通のことになりました。 しかしどうやら、シャッフル再生モードではランダムに選曲が行われていなかったようです。音楽ストリーミング配信サービス『Spotify』のユーザのクレームをきっかけに、この事実は明らかになりました。 While some dismiss this as a coincidence, others claim that so-called ‘random’ playlists aren’t random at all. Instead, they say, music services are cons

    音楽プレイヤーのシャッフル再生、実はランダムではなかった? | sign