プログラミング

PythonでクラスC内の型ヒントにC自身を指定するとNameErrorが発生する問題の対処法

問題 以下のようにあるクラスCのメソッドfの型ヒントにC自身を使いたいとします。 class C: def f(self) -> C: # causes NameError! return C() このコードをそのまま実行すると以下のようにNameErrorが発生します。 $ python foo.py Traceback (most recent…

最近の自分のC++スタイル

何だかんだでC++を書き続けています。今やC++20です。C++0xで騒いでいた頃が懐かしいです。 今回は最近自分がC++を書く時に気にしていることについて簡単に紹介していこうと思います。 基本方針 同じコードを触る開発者が多いため、実装者にとっての利便性よ…

pytype:型ヒントなしでも使えるPython用静的型検証ツール

github.com PytypeはGoogle製のPython用静的型検証ツールです。型ヒントなしのコードでも型推論を行って検証し、潜在的なバグを指摘してくれます。 インストール pip install pytype 使用例 例えば以下のようなfoo.pyというファイルがあったとします。 def i…

「a=10とb=5の平均は7.5です」をmain関数なしで表示する

発端 どなたかc言語プログラミングが得意な方、いらっしゃいましたら教えていただきたいです。簡単な問いでお恥ずかしいのですが、画像の問いの答えを教えていただきたいです。int型どうしの演算で少数の出し方が分からないです。#c言語 #プログラミング #プ…

Goのbufio.Scannerは入力データの1行の長さが一定以上になるとスキャンをやめてしまう

Goのbufio.Scannerの落とし穴について。 概要 Goのbufio.Scannerはio.Readerを一行ずつ読み込んで行く時に非常に便利なライブラリなのだけど、タイトルの通り、入力データ(io.Reader)の1行の長さがScannerのバッファサイズを超えるとスキャンをやめてしま…

オンラインで使えるコンパイラ&インタプリタのideoneが便利

ideoneはフリー(つまり無料)で使えるオンラインコンパイラ&インタプリタ. http://www.ideone.com/ソースコードをフォームに書いてsubmitするとそれの動作結果が表示され,submitしたコードのページへの固定リンクも用意される. 40以上ものプログラミング言…

C#でインクリメント/デクリメント演算子をオーバーロードする際の注意点

C++では前置・後置で++/--のオペレータオーバーロードを別々に行う必要があるけど、C#の場合前置と後置でメソッド定義を別々にすることができない。以下はMSDNライブラリからの引用。 operator ++ または operator -- の実装は、後置表記または前置表記のい…

C++でちょっと役に立つかもしれないコメントの小技

プログラムの修正・実行を繰り返しているときに、ある2ヶ所のコードのコメントアウトを切り替えたくなる時がたまにあったりする。そんなときに役立つ小技。 ↓のような感じで、コメントアウトの切り替えを行いたいコードを//*と/*/と//*/の3行ではさむ。 #inc…

C++で前置・後置インクリメント/デクリメント演算子をオーバーロードする

オーバーロードのやり方自体は他の演算子と同じだけど、前置と後置でどのように定義を書き分ければいいのか知らなかったので調べてみた。 前置と後置の違い 前置インクリメント/デクリメント 戻り値は*thisへのリファレンスにする ++(++t)のように、戻り値を…

mのn乗をO(log n)で計算する

ただしmは整数、nは非負の整数。 こんな感じでやればO(log n)でm^nが計算できる。 #include <iostream> using namespace std; int pow(int m, int n) { if (n == 0) { return 1; } if (n % 2 == 0) { return pow(m*m, n/2); } return pow(m, n-1) * m; } int main() { </iostream>…

gccでmath.hの関数を使うソースがコンパイルできない場合の対処法

例えばこんな感じでfloor()を使うCのプログラムtest.cがあったとして、 /* test.c */ #include <stdio.h> #include <math.h> int main() { printf("%d\n", (int)floor(1.5)); return 0; } そのままgccでコンパイルしようとするとエラーになる場合がある。 $ gcc test.c /tmp/c</math.h></stdio.h>…

Google Code Jam: Online Round 2敗退

負けました! Google Code JamのOnline Round 1、通過できませんでした。 Problem Dのsmallしか通せず1566位でした。 何とかRound 3までは進出したかったのですが、やはりそう簡単にはいかないようです。 また次の機会に頑張ろうと思います。 なお、Round 3…

GCJの問題をRで解いてみた

少し前に、Rの勉強をするべくGCJの問題をRで解いてみました。 問題概要 Online Round 1A: Problem A. Minimum Scalar Product二つのn次元ベクトルv1、v2が与えられる。 ベクトルの各要素は整数である。 v1とv2のそれぞれについて要素を並び替え、v1とv2の内…

Google Code Jam: Online Round 1通過

Google Code JamのOnline Round 1を通過できました! Round 1BはProblem Aのsmallしか通せず1130位で落ちてしまいましたが、Round 1CはProblem Aのsmall&largeとProblem Bのsmallを通して404位となり、840位以内に入れたのでRound 2の出場権を獲得できまし…

Google Code Jam: Online Round 1が始まります

いよいよGoogle Code JamのOnline Round 1が始まります! Round 1は3つのsub-roundに分かれていて、出場者はこのうち2つのsub-roundに出ることができます。 各sub-roundごとの上位840人が後日行われるRound 2に進むことができます。 要は、Round 2に勝ち進む…

Google Code Jam: Qualification Round

Google Code JamのQualification Roundに参加しました! Google Code Jam(GCJ)とはGoogleが主催するプログラミングの大会です。 http://code.google.com/codejam/contest/今回行われたQualification Roundの問題一覧はこちらです。 私はProblem AとProblem B…

ICFPコンテストお疲れ様でした

ICFPコンテストが終わりました! 関係者の方々はお疲れ様でした。 今年のICFPコンテストの課題は、「火星探査機を操作するプログラムを書く」でした。 火星探査機(のシミュレータ)とプログラムの間でTCP/IPによる通信を行い、探査機の周りにある岩やクレータ…

Twitterに(PDTの)時報を投稿するスクリプト

せっかく書いたので、上の記事で出ていた時報の送信に使っているスクリプトを公開します。 以下のPerlスクリプトを使って時報をTwitterに投稿しています。 実行にはNet::TwitterとJcodeが必要です。 cronを使ってこれを毎時0分に実行しています。 jihou_pdt.…

ICFPコンテストに参加しています

またプログラミングの話題です。笑 ただいま私はICFPコンテストというプログラミングの大会に参加しています。 ICFPコンテストのホームページはこちら。英語です。 http://www.icfpcontest.org/ 大会といっても出場者が何処かの会場に集まって競うわけではな…