タグ

セルクマに関するNabetaniのブックマーク (21)

  • オフラインリアルタイムどう書くE27の参考問題の実装例(go) - Qiita

    オフラインリアルタイムどう書く E27の参考問題「灯りと鏡」の実装例を、golang で。 問題 : http://nabetani.sakura.ne.jp/hena/orde27ligmir/ 実装リンク集 : https://qiita.com/Nabetani/items/0b2f459ec128c89948f4 番の会場で go を使う人は多くはないけど、たまにいる感じ。 計算量が多くなってしまったときに仕方なく go で攻めるとかで。 で。私の実装例は下記の通り: package e27r import ( "sort" "strings" ) const mapsize = 5 type xytype struct { x, y int } func (p xytype) inmap() bool { return 0 <= p.x && p.x < mapsize &&

    オフラインリアルタイムどう書くE27の参考問題の実装例(go) - Qiita
    Nabetani
    Nabetani 2018/09/11
    オフラインリアルタイムどう書くの参考問題です。楽しんでいただければ幸いです。
  • どう書くで見る ruby の便利機能 - Qiita

    この記事は Ruby Advent Calendar 2016の20日目の記事のつもりで書いている。 Advent Calendar というものに参加するのは初めてなので緊張している。 実務ではあまり ruby を使っていないので、私は自分が主催しているどう書く( https://yhpg.doorkeeper.jp/ )での ruby の使われ方を書こうと思う。 思いついた順なので、ごちゃごちゃするけど気にしない方向で。 Array#transpose 行列ではないものをtransposeできる言語が他にあるかどうか知らないんだけど、transposeは便利。 x方向で処理するプログラムだけを用意しておいて、y方向の処理は、データを transpose したものを渡すことで済ますとか。 あるいは、平面的なものを回転するときに役に立つ。 2次元配列をreverseしてからtranspose

    どう書くで見る ruby の便利機能 - Qiita
    Nabetani
    Nabetani 2016/12/25
    人生初のアドベントカレンダーで緊張した。
  • `Float::NAN` についての重箱の隅 - Qiita

    以下、ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] での調査結果。 Float::NAN について知っておくべきこと ruby の Float::NAN は、浮動小数点の非数なので、以下の様な動作になる。 nan=Float::NAN nan==nan #=> false nan==0 #=> false nan<0 #=> false nan<=0 #=> false 0<nan #=> false 0<=nan #=> false 事情を知らないとかなり思いがけない内容だけど、浮動小数点の非数とはそのようなものなので仕方がない。 この、 同じ値を比較しても false になる 大小比較をすると必ず false になる という性質は 浮動小数点の非数がもつ一般的な性質で、ruby に限ったことではない。 これが理由

    `Float::NAN` についての重箱の隅 - Qiita
    Nabetani
    Nabetani 2016/10/15
    非数の不思議。続編をそのうち書きたいと思っているけど未定。
  • 主要なプログラミング言語8種をぐったり解説 - 鍋あり谷あり

    主要なプログラミング言語8種をぐったり解説するよ。 C言語 「はじめてのC」( https://www.amazon.co.jp/dp/4774133345 )というで有名になった*1この言語は、「_Generic」という魔術が使えるためか、常人には理解不能なプログラムを書きたい人に、perl の次に愛されています。 C言語で書かれたプログラムは、大抵メモリリークしています。 C++ C言語と異なり、「C++言語」と呼ばれることは稀です。 テンプレートという魔界の扉を開いてしまったために人類には早過ぎる言語とも言われていますが、愛嬌のある文法とキュートでコンパクトなバイナリで、多くの人に愛されています。 C言語と違って、ちゃんと書けばメモリリークはかなり回避できますが、ちゃんと書ける人は稀だと言われています。 Java Java Tea ストレート よりやや遅れてリリースされたこの言語は

    主要なプログラミング言語8種をぐったり解説 - 鍋あり谷あり
    Nabetani
    Nabetani 2016/07/01
    セルクマ。APLキーボード、実物は見たことありません。すいません。
  • 0の0乗が1でないと困る - Qiita

    リンクしないけど、0の0乗がゼロ除算同様未定義であるというような記事がブクマを集めていてなんか困るよなぁと思って書いた。 前提として である。 $x^y$ は、$(0,0)$ で不連続になっているので、極限を根拠に $0^0$ を定めるとすると、不定とか定義されないとか、そういうことになる。 これは未定義のほうが好ましいかもしれない理由のひとつにはなるけれど、決して決定的ではない。 連続性を根拠にするのは、一見未定義であっても連続性を保つように定義できれば幸せになるからだと思う。 とはいえ。 $x^y$ の $(0,0)$ における連続性と、$0^0$ の値は、別の話だ。 どうやっても連続性が保てないからといって、よい定義が存在しないという事にはならない。 というわけで、$0^0$ が時折現れる世界をより住みやすくするためにはどうすればいいのかを考える。 ゼロ除算のように未定義にするのがよ

    0の0乗が1でないと困る - Qiita
    Nabetani
    Nabetani 2015/11/21
    0の0乗は1じゃないと困る。という記事を書いた。
  • ESM オフラインリアルタイムどう書くの問題を解いてみた - Qiita

    def try_sit( chairs, cus ) n=cus[0] pos = 8.times.find{ |x| (x...(x+n)).all?{ |y| chairs[y%8]==0 } } if pos (pos...(pos+n)).each{ |x| chairs[x%8]=1 } cus.shift end end def progress( chairs ) chairs.size.times do |ix| chairs[ix] = (chairs[ix]+1) % 4 if chairs[ix]!=0 end end def solve_impl( chairs, cus ) loop do try_sit( chairs, cus ) return chairs if cus.empty? progress(chairs) end end def solve(s)

    ESM オフラインリアルタイムどう書くの問題を解いてみた - Qiita
    Nabetani
    Nabetani 2015/10/24
    人が作った問題を解くのも楽しいものです。
  • 先制 hello, world のこと - Codeへの愛とCuriosity

    先日、CodeIQ に「先制hello, world」という問題を出した。 単純なプログラムのソースコード同士を戦わせるというコンセプトとしては二回目なんじゃないかと思うけどよく憶えていない。 いつもここに書いているような解説解題の記事は CodeIQ Magazine に掲載していただいたので、普通の解説解題については https://codeiq.jp/magazine/2015/10/30191/ の方をご覧頂きたい。 で。 こちらはサブノート。 今回のルール(ルールについては 前出の CodeIQ Magazine の方を御覧ください)に至る経緯を書いてみよう。 最初のアイディアは、一文字ずつ互いに闘うという、以前出した「対戦型hello, world」と同じようなコンセプトだった。勝敗は文字コードの大小。 「負けたほうが退場」をやめて、n 文字目同士が闘うことにしたらどうだろう。

    先制 hello, world のこと - Codeへの愛とCuriosity
    Nabetani
    Nabetani 2015/10/09
    hello, world を戦わせる問題のルールが出来るまでの流れを書いてみた。
  • CodeIQについてのお知らせ

    Nabetani
    Nabetani 2015/09/03
    hello, world で総当り戦をする遊びやってます。
  • JRuby は実行時最適化によって 50倍以上速くなり、CRuby を華麗に抜き去る場合がある。 - Qiita

    先日、 JRuby は JIT によって 10倍ぐらい速くなる場合がある。 という記事を書いたんだけど、測りなおしたらそんなもんじゃなかったことがわかった。 まずはグラフ。対数目盛に注意。 わけのわからないところに横線があるが、一2倍になっている。 今回は、【「とある無駄な計算」10回セット】を200回行った。 「とある無駄な計算」は、前回と同じ。 前回は「とある無駄な計算」を20回だったので、計算の規模は百倍になる。 前回は平均をとったが、今回は平均はとっていない。 という辺りが前回との違い。 グラフを見ると、あまり出入りのない CRuby に対し、JRuby は出入りが多い。 グラフが凸凹しているのは、測定しているのが生の時間だから、他のプロセスがCPUを専有していたのかもしれないんだけど、JRuby と CRuby の傾向の違いは読み取れると言っていいと思う。 横軸の回数は、【10

    JRuby は実行時最適化によって 50倍以上速くなり、CRuby を華麗に抜き去る場合がある。 - Qiita
    Nabetani
    Nabetani 2015/08/30
    しつこく測ったら、JRuby がruby を華麗に抜き去っていた。
  • JRuby は JIT によって 10倍ぐらい速くなる場合がある。 - Qiita

    昨日書いたベンチマークの記事 http://qiita.com/Nabetani/items/2d054512c45990dd1235 で、JRuby の場合の測定時間の変化が面白かったので、変化だけを調べてみた。 結論:JITすごい。 追記: もう少し調べた記事を書いた。 JRuby は実行時最適化によって 50倍以上速くなり、CRuby を華麗に抜き去る場合がある。を参照 やってみたことは、 「ちょっと時間がかかる処理を、時間を計りながら20回行う」というプログラムをJRubyで3回、CRuby で1回 動かす、という作業。 で。 まずはグラフ。 JRuby に注目すると。 どの trial も初回が一番遅い。 2回目はいきなり半分ぐらいの時間で処理が終わる。 5回目で遅くなり、6回目以降は大きな山はないもののどんどん速くなる。 10〜15回目ぐらいで落ち着く感じ。 5回目の山は、JI

    JRuby は JIT によって 10倍ぐらい速くなる場合がある。 - Qiita
    Nabetani
    Nabetani 2015/08/28
    JITによってどんどん速くなるさまをグラフにしてみた。
  • jruby9000 が ruby2.2.3 よりも3倍以上速いこともある。

    以前、 http://qiita.com/Nabetani/items/9776d99d09476d07c9e2 と http://qiita.com/Nabetani/items/47d357cc7f80f5c42f0d でベンチマークの記事を書いたんだけど、2.2.3 とか jruby9000 が出ているのでまた勝手なベンチマークをとってみた。 当初ここに書いた記事では JRuby が Java7 になっていたので、Java8で測りなおして追記した。 「3倍以上」より「4倍以上」が適切なようなので、タイトルも変えてみた。 まずはグラフ。 横軸は時間なので、長いほうが遅い。 simple_lambda の方は、jruby がやけに頑張っている。 jじゃないrubyでは、新しくなるほど速くなっていて、開発者の皆様ありがとうございますという感じ。 対照的に、complex_string では

    jruby9000 が ruby2.2.3 よりも3倍以上速いこともある。
    Nabetani
    Nabetani 2015/08/28
    JRuby が Java7 だったので、Java8 で測りなおして追記した。Java8 速い。
  • ruby の 文字列の連接 - Qiita

    p( "x" "Y" ) #=> "xY" p( "x" 'Y' ) #=> "xY" p( 'x' 'Y' ) #=> "xY" String#+ はどうあがいてもメソッド呼び出しになる(と思う)ので、実行時の効率という点で、文字列の連接は意味がある。その辺りは Java や(たぶん)perl とは事情が違う。 で。 連接の結果がリテラルになるのであって連接自体が何かの操作というわけではないので、括弧は書けない。

    ruby の 文字列の連接 - Qiita
    Nabetani
    Nabetani 2015/08/15
    文字列の連接のある言語緩募中。あと。D言語追加した。
  • 神奈川Ruby会議でペアプロ問題出した - Codeへの愛とCuriosity

    先日行われた神奈川Ruby会議01 http://regional.rubykaigi.org/kana01/ 。 ここで行われた最初のセッションがペアプロ大会 http://regional.rubykaigi.org/kana01/contents/02_pair_programing.html だったんだけど、ここで出す問題を作るという大役を仰せつかった。 いろいろ悩んだ結果、ひねりのない、ストレートなコンピュータサイエンス問題にした。 当日までと当日は、問題を用意したり、当日悩んでいる人にヒントを出したり、前に出て解説したり。 必死というほどでもないんだけど、あんまり周りは見えていなくて。 終わるまで気づかなかったんだけど、出題される側の方々のなかに、コミッタ様を始めとして数多くのスーパープレイヤーがいて、なんかすごい空間だったんだなと、畏れ多いなと、いう感じがした。 幸い。私の実

    神奈川Ruby会議でペアプロ問題出した - Codeへの愛とCuriosity
    Nabetani
    Nabetani 2015/01/26
    セルクマ。ペアプロ問題の解題とか。
  • 遠い世界の数式

    例えば。 4*5+6&7|8 は、ruby では (((4*5)+6)&7)|8 なので 10 だけど、この問題では 4*(5+(6&(7|8))) と評価するので、 44 となる。 入力 入力は「 4*5+6&7|8 」のような文字列。 各項は、すべて整数。全部十進数。 演算子は上の表にある *, +, &, | のいずれかしか現れない。 括弧もないし、単項プラスや単項マイナスもない。余分な空白もない。 出力 出力は、評価結果の十進数表現の文字列。 44 こんな感じ。 ヒント ヒント1 ヒント2 補足 不正な入力に対処する必要はない。 サンプルデータ # 入力 期待

    Nabetani
    Nabetani 2015/01/18
    実装例は ans.html にあるよ。
  • ruby の改行 - Qiita

    ruby は改行がどうなるのかが大変わかりにくい。 まあ、こうなるだろうと想像できる感じに書くと想像通りになるので普通は困らないんだけど、微妙なケースが結構あって、そういうときにはほんとうに全然わからない。 微妙だな、と思わないように書けばいいんだけど、他人のソースに微妙なパターンがあるとドキドキする。 私自身はほとんど利用したことがないけど、ruby にはバックスラッシュによる行継続がある。 あるんだけど、C/C++ の行継続とは異なり、文脈によって行継続したりしなかったりする。 というわけで、いろいろ試した。 全て、ruby 2.1.3p242 での動作結果。 + による結合 p(3+4) #=> 7 ※ 当たり前 p(3+ 4) #=> 7 ※ ここで改行してもよい p(3 +4)#=> エラー。なんでだかわからない。p(3;+4) で 4 が出ると思ってた。 p((3 +4))#=

    ruby の改行 - Qiita
    Nabetani
    Nabetani 2014/10/06
    ruby の改行の取り扱いを調べてみた。
  • C++ のソースに twenty one と書いたら 21 になるようにする - Qiita

    が面白かったので書いてみた。 目的は、 one や twenty one をソースコードに直接書けるようにすること。 twenty one / three を 21/3 と解釈すること。 辺り。 念の為に書いておくと、何の役にも立たない。 version 1 -- operator() #include <iostream> struct numbase { int m; numbase( int m_ ): m(m_){} int value() const { return m; } virtual ~numbase(){} }; struct num : public numbase { num( int m_ ): numbase(m_){} }; struct ten : public numbase { ten( int m_ ): numbase(m_){} num oper

    C++ のソースに twenty one と書いたら 21 になるようにする - Qiita
    Nabetani
    Nabetani 2014/08/25
    記事更新。printf に合法的に対応し「one hundred twenty four」にも対応しました。
  • http://atnd.org/events/45016

    http://atnd.org/events/45016
  • http://atnd.org/events/32191

    http://atnd.org/events/32191
  • 勉強会の参考問題の解答例。groovyで。 - Qiita

    7/6(金) に行われる予定の勉強会( http://atnd.org/events/30285 )の参考問題( http://qiita.com/items/cbc3af152ee3f50a822f )の解答例、もう一つ。 まだ出てない言語で書こうということで、groovy。 import java.util.regex.Pattern def hands=[ "14":"4K", "23":"FH", "113":"3K", "122":"2P", "1112":"1P", "11111":"--" ] def cardPattern=Pattern.compile( /[SHDC](\d+|J|Q|K|A)/ ) [ "DASAD10CAHA", "S10HJDJCJSJ", "S10HAD10DAC10", "HJDJC3SJS3", "S3S4H3D3DA", "S2HADKCK

    勉強会の参考問題の解答例。groovyで。 - Qiita
    Nabetani
    Nabetani 2012/06/26
    勉強会の参考問題の解答例。groovyで。
  • 第一回 オフラインリアルタイムどう書くの参考問題 - Qiita

    オフラインでリアルタイムに「どう書く」をやろうと http://atnd.org/events/30285 atnd を立てた。 で、問題の例を出しておく。難易度と分量はこれを目安に。 ポーカー 5枚のカードを示す文字列を入力とし、ポーカーの役を出力せよ。 ただし: 一枚のカードは、スートを表す文字+ランクを表す文字列 で構成される。 スートを表す文字は、S, H, D, C のいずれか ランクを表す文字列は、2, 3, ..., 9, 10, J, Q, K, A のいずれか 下表の役に対応すること。下表の役に該当しない場合は '--' を出力すること。 カードはジョーカーを含まない52枚から5枚が選ばれる。 不正な入力への対応は不要。 対応すべき役と、その役だった場合に出力する文字列は以下のとおり: フォーカード : 4K フルハウス : FH スリーカード : 3K ツーペア : 2

    第一回 オフラインリアルタイムどう書くの参考問題 - Qiita
    Nabetani
    Nabetani 2012/06/25
    勉強会に出す問題の難易度サンプル。一時間で解くとすると、難しい? 簡単?