Skip to content

Instantly share code, notes, and snippets.

@cooldaemon
cooldaemon / gumimaze.md
Last active June 18, 2018 03:07
gumi Inc. が Erlang & Elixir Fest 2018 の会場で配布しているクイズを掲載しています。

本記事について

gumi Inc. が Erlang & Elixir Fest 2018 の会場で配布しているクイズを掲載しています。

Story

あなたはプログラマーとして、とあるゲーム開発プロジェクトに配属された。 プロジェクトに配属され、はじめに与えられた業務は、次のような ASCII アートで記述された迷路を入力として受け取り、点数を出力するコマンドを作成することだった。 この業務には前任者がいたようだが、現在は連絡がとれない。幸いなことにコードは残されているようだ。

Input

maze.txt:

@cooldaemon
cooldaemon / gumimaze.md
Last active March 16, 2018 07:47
gumi Inc. が Developers Summit 2018 の会場で配布しているクイズを掲載しています。

本記事について

gumi Inc. が Developers Summit 2018 の会場で配布しているクイズを掲載しています。

Story

あなたはプログラマーとして、とあるゲーム開発プロジェクトに配属された。 プロジェクトに配属され、はじめに与えられた業務は、次のような ASCII アートで記述された迷路を入力として受け取り、点数を出力するコマンドを作成することだった。 この業務には前任者がいたようだが、現在は連絡がとれない。幸いなことにコードは残されているようだ。

Input

maze.txt:

@cooldaemon
cooldaemon / auth.coffee
Created March 27, 2014 15:11
Hubot に権限管理機能を追加し, より安全に使用する ref: http://qiita.com/cooldaemon/items/5b846423b788e037881a
# Description:
# Auth allows you to assign roles to users which can be used by other scripts
# to restrict access to Hubot commands
#
# Dependencies:
# None
#
# Configuration:
# HUBOT_AUTH_ADMIN - A comma separate list of user IDs
# HUBOT_AUTH_ROOM - A comma separate list of room IDs
@cooldaemon
cooldaemon / file2.txt
Created March 21, 2014 11:35
Redis Sorted Set を用いた, 同点を加味したランキング処理を Python で実装する ref: http://qiita.com/cooldaemon/items/eea31a1733f44a914401
>>> from redis import Redis
>>> from ranking import Ranking
>>>
>>> ranking = Ranking(Redis(), 'event1')
>>>
>>> ranking.push('p1', 200)
>>> ranking.push('p2', 100)
>>> ranking.push('p3', 300)
>>> ranking.push('p1', 1000)
>>> ranking.push('p4', 1000)
class MutexError(Exception):
pass
class DuplicateLockError(MutexError):
"""
既に lock() 実行済みの Mutex オブジェクトで lock() を再実行すると発生.
一度, unlock() を実行するか, 別の Mutex オブジェクトを作成する必要がある.
"""
@cooldaemon
cooldaemon / generate.py
Created March 15, 2014 04:06
Python で整数を可逆スクランブルする ref: http://qiita.com/cooldaemon/items/d168b452c976b9dedba6
import random
class InverseDoesNotExist(Exception):
pass
def generate_salt():
"""
@cooldaemon
cooldaemon / inproc_vs_message.erl
Created July 28, 2012 12:29
"Erlang Process Message" vs "0MQ Erlang Binding inproc (NIF)"
-module(inproc_vs_message).
-author('cooldaemon@gmail.com').
-export([run/2]).
run(TryCount, SRCount) ->
MPid = spawn_link(fun message_server/0),
RPid = self(),
C = start_zmq(),
@cooldaemon
cooldaemon / dirty_read_and_transactional_write.erl
Created April 7, 2012 15:17
Dirty read and Transactional write
-module(dirty_read_and_transactional_write).
-author('cooldaemon@gmail.com').
-export([run/3]).
-record(store, {key, value}).
run(TryCount, ProcessCount, ReadWriteCount) ->
WriterPids = spawn_runner(ProcessCount),
ReaderPids = spawn_runner(ProcessCount),
@cooldaemon
cooldaemon / sticky_write_vs_write.erl
Created April 6, 2012 16:46
Sticky Write Lock vs Write Lock.
-module(sticky_write_vs_write).
-author('cooldaemon@gmail.com').
-export([init_primary/0, init_secondary/0, run/3]).
-record(store, {key, value}).
init_primary() ->
{ok, _} = net_kernel:start(['primary@localhost', shortnames]),
true = erlang:set_cookie(node(), 'secret_cookie'),
@cooldaemon
cooldaemon / process_vs_ets_vs_mnesia.erl
Created March 31, 2012 16:28
Process vs ETS vs Mnesia
-module(process_vs_ets_vs_mnesia).
-author('cooldaemon@gmail.com').
-export([run/3]).
-record(store, {key, value}).
run(TryCount, ProcessCount, ReadCount) ->
Pids = lists:map(
fun (_) -> spawn_link(fun reader_process/0) end,