サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
qiita.com/tanakh
Rustで競技プログラミングの入力をスッキリ記述するマクロ の続編的なやつです。 モチベーション AtCoderのRust環境も新しくなって、バージョンが新しくなったり一部の外部のcrateが使えるようになったり、ずいぶんいろいろできるようになりました。前回の記事では、コピペして使えるようなコンパクトで効果的なものを目指していましたが、そういう制約がない状況でならもっといろいろできるのではないかと考えていました。 もうちょっとだけ便利にできそうな気がしたので、とりあえずアイデアを形にしてみるかという感じで書いてみました。 アイデア 一般的に、人は標準入出力とやり取りをするのは苦手だけれども、関数の引数と返り値を扱うのは呼吸をするように容易に行えるものです。そして一般的に、競技プログラミングのタスクというのは入力が与えられて答えを出力するという自然に関数として表現できるものです。実際にTop
前書き サイゼリヤ1000円ガチャをつくってみた(Heroku + Flask + LINEbot) 「サイゼリヤで1000円あれば最大何kcal摂れるのか」を量子アニーリング計算(Wildqat)で解いてみた。 完全に二番煎じですが、古典コンピューターが好きなので、個人的に古典コンピューター最強のなんだかよく分からないけどよく分からないものをよく分からないうちに解いてくれるソフト、z3を使ってサイゼリア問題を解いてみました。 問題 サイゼリヤのメニューを重複無しで合計1000円以下になるように選んだときに、最大の総カロリーになるようなメニューの組み合わせを求めよ。 サイゼリヤのメニューは https://github.com/marushosummers/Saizeriya_1000yen こちらを使わせて使わせて頂きました。メニューは100種類ぐらいみたいで、カロリーは整数値で、プロコ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
$$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}} $$ ちょっと前の話ですが、Codeforces というプロコンサイトで Microsoft Q# Coding Contest というのをやっていたので、面白そうなので参加してみました。量子コンピューターのプログラムは、日ごろから書いてみたい書いてみたいと思いつつ、なかなか腰が重かったのですが、こうタスクが与えられて、競い合えといわれるとなんとなくモチベが出てきて、ようやく入門することができました。 この年になっても新しい概念のプログラムを書くという経験をす
今までいまいちモチベが上がらなかったHaskellでスクリプトを書くというのが、急に現実的になってしまったので、紹介します。 Haskellでスクリプティングする上での問題点 Haskellはもともと簡単なテキスト処理を書きやすいプログラミング言語ではあるのですが、標準で提供されているライブラリはあまり多くないので、必要に応じてコミュニティーパッケージを導入しなければその力を存分に発揮することができません。 通常のパッケージなら、cabalに依存関係を書けばパッケージマネージャで自動的に(コケることもありますが、理想的には)管理できるのですが、シェルスクリプトやPerl、あるいは最近ならPythonでやるような、コードを直接インタプリタで実行するような形のコードでは、そのような依存関係を自動で解決することは難しく、その上、仮にやろうとしたところで、いつまでもその依存パッケージが新しいコンパ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Stackとは? つい先日のことですが、Stackage界隈からstackというツールがリリースされました。リリースされたとはいえ、開発され始めたのがちょっと前のことですし、現在も盛んに機能が追加されているので、絶賛開発中であるとかそういったほうがいいかもしれません。 まだ開発の始まったばかりのツールなのに、なぜこんな紹介記事を書こうと思ったのかというと、このツールがHaskellの開発において極めて有用になることが確定的に明らかであって、すでに荒削りながらも、大変便利に使えているからなのです。そしてここで紹介することで、多くの読者の方
使いやすさを目指したコマンドラインパーザー、optparse-declarativeというのを作りました。 これは何ですか? コマンドラインオプションを解析して、しかるべき処理を呼び出すためのライブラリです。ちゃんとした機能を備えたコマンドラインパーザーを、とにかく書きやすい形のAPIで提供することを目指して作っています。 コマンドラインパーザーっていうのは、プログラム全体のライフライクルから考えると、いじっている時間は決して長いわけではないので、新しいプログラムをつくろうかとなった時に、はてどうやってライブラリを使うのだったんだろうかと毎回忘れてしまいます。それでもって、それがわかりづらいものだと、その思い出すという事自体がわりと心理的障壁になってしまったりしていけないと思って、そういうところを目指したものを作りました。宣言的で型レベルとタイトルに入っていますが、簡単さを目指していたら勝
継続モナドって何に使うんだ問題に対する一つの例。 リソース管理の問題 プログラミングをやっていると必ずまとわり付いてくるのがリソース管理の問題です。ここで指すリソースというのは、ファイルのハンドルだとか、ソケットだとか、排他処理のためのロックだとか、グラフィックのハンドルだとかそういう話で、GCのない言語だとメモリの管理もこれに含まれるでしょうか。 言うまでもなく、リソースを確保した後はしかるべきタイミングで確実に解放してやる必要があります。しかし往々にして、現実のプログラムではリソースの解放漏れが発生してしまいます。単に解放するコードを書き忘れると言うのが一番単純でしょうもない理由ですが、それでも、C言語のようにリソース解放のための特別な仕組みを持たない言語では、これを徹底するのも結構骨の折れることだったりします。それはともかく、もう少し高尚な悩みとしては、例外との組み合わせで発生する解
{-# LANGUAGE QuasiQuotes #-} import qualified Language.C.Inline as C sigma :: C.CInt -> IO C.CInt sigma x = [C.block| int { int i, ret = 0; for (i = 1; i <= $(int x); i++) ret += i; return ret; }|] main :: IO () main = print =<< sigma 10 inline-cでは、QuasiQuoteでCのコードをHaskellに埋め込むので、LANGUAGEプラグマでこれを使えるようにしないといけません。sigmaという関数は、ご覧のとおり、引数xに対して、1からxまでの和を計算する関数です。基本的にCで普通に書けばいいのですが、$(<型名> <変数名>)などのunquote
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? SurfacePro3買いました。なかなか面白いデバイスですね。 こころがぴょんぴょんするんじゃ~~ SurfacePro3を機に久しぶりにWindowsを触るという方もいらっしゃるかと思うので、Windowsでの開発環境構築まとめを書いてみます。タイミング的にタイトルにSurfacePro3を入れましたが、SurfacePro3特有の話はありません。 アカウント作成 いきなりですが、アカウント作成のときに注意点があります。ユーザー名に日本語を使ってはいけません。GNUツールの中には日本語パスやスペースを含むパスを考慮していないものが割
症状 cabal install で、 dist/ ディレクトリを含むパッケージをインストール仕様とするとコケる。 (Issueがある https://github.com/haskell/cabal/issues/1698) 原因 cabal sdistコマンドを既にdistディレクトリがある状態で実行すると、それをtarballに含めてしまう。この状態で build を行うとうまく行かない場合があるので、現在のcabal installでは、 dist/ を dist-tmp/ にリネーム dist/ を新しく作る dist-tmp を $distpref (パラメータ) にリネーム という手順を踏んでから、buildを行っているようである。 しかし、 $distpref はデフォルトでは "dist" になっているため、結局同じ名前にリネームしているどころか、Windowsのディレク
import Control.Lens import Control.Monad import Control.Monad.State import Data.List import qualified Data.Map as M paint :: M.Map (Int, Int) Char -> (Int, Int) -> Int paint mm pos = evalState (go pos) mm where go (i, j) = do b <- use $ at (i, j) if b == M.lookup pos mm then do at (i, j) ?= 'x' vs <- forM [(1, 0), (-1, 0), (0, 1), (0, -1)] $ \(di, dj) -> go (i + di, j + dj) return $ 1 + sum vs els
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-} import Control.Applicative import Control.Monad import qualified Data.ByteString.Lazy.Char8 as B import Network.HTTP.Conduit import System.Cmd import System.Environment import System.Process.QQ import Text.HTML.TagSoup import Text.HTML.TagSoup.Tree import Text.Printf import Text.Regex.TDFA baseUrl = "http://dumps.wikimedia.org/" extractLinks url rege
このページを最初にブックマークしてみませんか?
『@tanakhのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く