universato / ac-library-rb Goto Github PK
View Code? Open in Web Editor NEWa Ruby port of AtCoder Library (ACL).
License: Creative Commons Zero v1.0 Universal
a Ruby port of AtCoder Library (ACL).
License: Creative Commons Zero v1.0 Universal
他言語を見てsrc
ディレクトリにライブラリを入れてしまいましたが、改めて考えたところsrc
はコンパイル言語でのコンパイル前のコードを入れるイメージです。
bundle gem
でgemの雛形を作るときにlib
ディレクトリが作られるそうで、Ruby使う人にとってはlib
がわかりやすいのかなと思いました。本レポジトリの性質的にもlib
があっていると思いました。
なお、自分としては、本家AtCoderライブラリに合わせているものの、AtCoderに限らず一般的に競プロなどで使われるライブラリを置いているつもりなので、本家ライブラリに合わせてatcoderという名称を用いるのはわかりやすいですが美しくない気がするので反対です。
ディレクトリ名srcとかの謎と作法 - WebTecNote
srcディレクトリにソースを入れ、ビルド結果をbuildディレクトリに入れるのは「コンパイルする言語ではお馴染みの作法」でも、コンパイル不要だとそうでもない。
EclipseなんかでJavaの新規プロジェクト作るとデフォルトでsrcというフォルダが作られるがPythonやRubyでは作られない。
Aizu Online Judge: GRL_3_C
In the above problem, the current SCC causes error which says "stack level too deep".
It may be better to reimplement SCC without recursion.
Aizu Online Judge: GRL_3_C
AOJは再帰の制限がデフォルトか何かで厳しく、
上記の問題で stack level too deep となるので、再帰をやめる形で実装を変更した方がいいかもしれないです。
Rubyには、コードのスタイルをチェックや自動修正してくれるRuboCopというgemがあります。
レポジトリ全体でスタイルが強制されていた方が、書いたり読みやすかったりすることも多いと思います。
一方で、デフォルトで様々な点について修正を要求してくるため、嫌う人は嫌っています。
また、PRは気軽に送って欲しいという気持ちやスタイルを強制させたくないという気持ちもあり、慎重になっています。
他に、RuboCopを使える人が自動修正すればいいと考える一方で、自分が読みやすいと思って書いたコードを自動的に修正されたくないこともあると考えてます。
問題点が整理できてないのですが、
「みんなにも強制させたいスタイル」や「好きにさせて欲しいスタイル」があったら教えて欲しいです!
自分は、インデントの幅2は、基本的に強制させたいです。
一方で、文字列のリテラルはシングルクォートでもダブルクォートでもどちらでも良いと思っています。
絶対的にRuboCopのデフォルトルールを推奨するわけではないですが、使ってみていいなと思うこともあると思うのでPRを送って下さる向けにその旨をREADMEに書かなければと考えています。
src
ディレクトリの中にコードがあることを書く。(本家ライブラリのディレクトリはatcoder
で異なる)他の言語のACLライブラリが参考にできそう
Unofficial Portings of AtCoder Library (Googleスプレッドシート)
GitHub and Git have changed dedault branch name from master to main.
I want to do so in order to go ahead.
kuma_rbさんのコードを参考にして良いと言われたので、参考にして良さそうです。
https://twitter.com/kumakum10972549/status/1304427282056929285
最大流、最小費用流など実装()してPlactice Contestに提出したものがいくつかあります。
atcoderの名前はkuma_rbです。
私はコピペ改竄されても大丈夫ですので、よかったら確認してみてください。
また、実際のところわかりませんが、間違えやすいミスがあるらしいので貼っておきます。
https://twitter.com/Mi_Sawa/status/1303965974064889856
Dinic 法を実装/写経する際、1バイトのミスで、指数時間になることがあります。
よく見かけるミスなので、この実装を撃墜するケースを作りました。
https://gist.github.com/MiSawa/47b1d99c372daffb6891662db1a2b686
特に C++ に詳しくない人が他言語に移植するとやりがちだと思うので、テストするといいと思います。
ちなみに、正しい実装だと Θ(n)、間違った実装で Θ(2^(n/2)) になっていると思います。
https://twitter.com/takytank/status/1304273435695239169
正しいコードはループのカウンターが参照になっていて、ループが回る度に参照元のオブジェクトも同時に加算されるんですが、参照のための&を付け忘れると同時加算が無くなってしまいます。(多分ループが余計にむっちゃ回る)
I want to reduce the execution time of tests.
テストの実行時間を短くしたい。
まだどなたも取り組んでおられないようでしたら、やります。
リダイレクトされるので現状実害はないのですが、README.md および document_ja/index.md のリンクに含まれるブランチ名が main ではなく master のままなのでクリック後、以下の様なメッセージが表示されます。
現行版がAtCoder Library Practice Contestの練習問題で通らなくなってしまったようなので、過去版を復活させる。
現行版も残す形で両方あればいいと考えてますが、ファイル名をどうするかなど何も決まってない。
I want to delete frozen_string_literal: true
on files under src
dirctory.
frozen_string_literal: true
を削除したいです。特にsrc
ディレクトリ配下にあるものを削除したいです。
マナー的な感じで書いてましたが、書いても特に意味がなく邪魔なだけではないでしょうか。
RuboCopにもここの忠告は出さないようにさせるつもりです。
他の方がAtCoderで本ライブラリを使って、frozen_string_literal: true
が先頭にない旨の警告がでてるのを見て、削除しようと強く思いました。
雛形的な形でとりあえずあった方が良いのではと思い作ろうと思いました
やってることは全く同じなので、専用のメソッドがあるならそれを使うべきだと思いますが、どうですか
Segtree#min_left has a bug?
I am not confident that Segtree#min_left and Lazy#min_left do not have bugs.
遅延セグメントツリーの引数を変更する。
遅延セグメントツリーの引数を本家側に寄せた方がいいという意見があったため。
opとeは対応関係にあり、compositionとmappingとidが対応関係にあって、本家同様に並べた方がいいのかもしれない。
(1) lazy_segtree<S, op, e, F, mapping, composition, id> seg(int n);
(2) lazy_segtree<S, op, e, F, mapping, composition, id> seg(vector v);
現在のac-library-rb
def initialize(v, e, id, op, mapping, composition)
経緯的には、遅延セグ木は持たせたいブロック(Proc)が3つあって、参考にさせてもらったkuma-rbさんのRuby遅延セグ木は初期化後にProcをsetするためのインスタンスメソッドを別に定義してて、初期化時のProcの引数は省略できてもいいかもと思いながら作るも、理由はどうあれsetterメソッドは作られずに放置されてしまった状況。
LazySegTree(op, e, mapping, composition, id_, a)
配列や配列のサイズの引数のa
が右端に来ている。ac-library-rbは左端。
単位元などを直接引数にとらないで、間接的に配列などで埋めているパターン?
https://github.com/google/ac-library.cr/blob/a5fe3c46c76497e26eabc08ee52bdc0aed45509e/atcoder/LazySegTree.cr#L40
いくつかのデータ構造では、コンストラクタのサイズのデフォルト引数が0です。
しかし、動的にサイズが変化しない場合、サイズを0で作りたいケースは稀にもかかわらず、引数の書き漏れがあったときに気がつきにくいと思います。
引数がないときに、エラーにさせた方がいいのではないでしょうか
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.