ABC068-D Decrease (Contestant ver.)
https://atcoder.jp/contests/abc068/tasks/arc079_b
公式解説とは少しだけ違うやり方をしたので解説します。
問題
数列に対するある「操作」が定義されています。この操作は停止条件があります。
整数Kが与えられるので、ちょうどK回の操作で停止するような数列を作ってくださいという問題です。
sedやawkが覚えられないRubyistのための「rbコマンド」
この記事はRuby Advent Calendar 2018の21日目の記事です。
今年のある日、rubyweeklyで流れてきたのがこれ。どうやらsedやawkみたいなワンラインプログラムが、Rubyで簡単にできるようになるみたいだが…?
altjsにおけるstdinの実装:BiwaSchemeのreadの例
この記事は言語実装 Advent Calendar 2018の18日目の記事です。昨日の記事はC(のサブセット)コンパイラを書く上でハマった点:配列編 - hsjoihs’s diaryでした。
最近、BiwaScheme公式サイトのREPLでread
関数が使えるようになったので、その解説をします。(read)
は標準入力からS式を同期的に読み込むのですが、JavaScriptでキー入力を処理しようとすると必ず非同期処理になるので、read
のようなものを実装するには工夫が必要です。
本稿ではaltjs1上に同期的なsleepやreadを実装する方法について解説します。
altjsとsleep
-
死語になりかけてる気もしますが、alternative javascript(代替JavaScript)の略で、本稿ではJavaScriptで実装された言語処理系のことを指します(コンパイラかインタプリタかは問わない)。 ↩
BiwaScheme 0.6.9をリリースしました
JavaScriptによるSchemeインタプリタ、BiwaSchemeのリリースを行いました。バグ修正が主です。
最近修正したものとして、トップページのREPLで(read)
ができるようになりました。
これの詳しい話はまた別途書きます。
Shiika進捗(2018)
この記事は言語実装 Advent Calendar 2018 - Qiitaの3日目の記事です。
Shiikaはyharaが開発しているプログラミング言語です。
class Pair<S, T>
def initialize(@a: S, @b: T)
end
CHANGELOGからgitコミットログを自動生成する
最近はどのプロジェクトもCHANGELOG.mdを書くようにしているのだが、CHANGELOGとコミットログは基本的に同じ内容になるので、手間を省くために自動で記入するようにしてみた。
手順
以下を.git/hooks/prepare-commit-msgという名前で保存してchmod +xする。
#!/usr/bin/env ruby
CHANGELOG_PATH = "./CHANGELOG.md"
Ovto 0.2.0をリリースしました
Rubyで書けるクライアントサイドWebフレームワーク、Ovtoの0.2.0をリリースしました。
いろいろ機能が増えていますが、一番大きいのはAjax対応で、Ovto.fetch
というメソッドでサーバ側のAPIを簡単に叩けるようになりました。
これでだいぶ実用的になった、というか実際にVisionというTODOアプリを作って、実用しています。VPSに置いているのでPCでもスマホでも使えて便利です。
VisionはRails5.2.1 + Ovtoという構成で、このへんがクライアント側(Ovto)のコードです。実行時には、これがopal-sprocketsでJavaScriptに変換されてブラウザで動きます。
対戦型AIコンテスト Halite-IIIの始め方
10/16から始まった https://halite.io/ がけっこう面白かったので、始め方を解説します。
Halite-IIIとは
HaliteはTwo Sigmaという会社が開催しているプログラミングコンテストで、Halite-IIIはその第三回目になります。
Halite-IIIは2〜4人対戦型のゲームで、海に船を出して海中の"halite"を回収し、一定ターン後に一番たくさんhaliteを蓄えたプレイヤーが勝者となります。試合はAIを投稿するたびに自動的にサーバ側で行われ、勝率によってレーティングが変化します。
Gitのpost-checkoutフックを使ってみた
Gitのpost-checkoutフックを使って、ブランチを切り替えたときにWIPコミットがあればメッセージを出すようにしてみたという話。
WIPコミットとは
WIPコミットというのは個人的な名称だが、全ての変更を仮コミットにまとめたものをそう呼んでいる。例えばブランチで新機能を開発している最中にバグを見つけてmasterを触らないといけなくなった時は、git commit -am 'WIP'
でWIPコミットを作ったあとmasterに移動する。
バグ修正を終えてmasterから戻ってきたあとは、git reset HEAD^
とするとWIPコミットが削除され、作業中の状態に戻すことができる。
作業状態の保存はgit stash
でもできるが、stashの場合は「このブランチにはWIPがある」ということは自分で覚えておかないといけない。一方WIPコミットはブランチに紐づくので、ブランチをcheckoutしたあとgit logすればWIPがあったことを思い出せる。