Skip to content

Instantly share code, notes, and snippets.

View na2hiro's full-sized avatar
💽
Remix!

na2hiro na2hiro

💽
Remix!
View GitHub Profile
@na2hiro
na2hiro / gist:4053847
Created November 11, 2012 05:37
逆パスカル数
function pascal(arr){
console.log(arr);
if(arr.length==1) return arr;
var newarr = [];
for(var i=0; i<arr.length-1; i++){
newarr.push((Number(arr[i])+Number(arr[i+1]))%10)
}
return pascal(newarr);
}
var Iconv = require("iconv").Iconv, conv = new Iconv('shift_jis','UTF-8//TRANSLIT//IGNORE');
var fs = require("fs");
var filename = process.argv[2];
if(!filename) throw "need argument";
fs.readFile(filename, function (err, data) {
if (err) throw err;
var output="";
conv.convert(data).toString().split("¥n").forEach(function(line){
var elems = line.split('","');
@na2hiro
na2hiro / README.md
Last active December 17, 2015 18:49
"N個の異なる要素から構成される集合{0,1,...,N-1}をK個のグループに分割したい"

http://twitter.com/ken5a/status/338877331106050048 "N個の異なる要素から構成される集合{0,1,...,N-1}をK個のグループに分割したい。 注:グループ内での順序やグループ同士の順序はない(つまり{{0,1}, {2, 3}} == {{3,2}, {1, 0}})" "N=3なら [((0, 1, 2),), ((0,), (1, 2)), ((0, 2), (1,)), ((0, 1), (2,)), ((0,), (1,), (2,))]"

  • [[0,2],[1],[3]]という分割結果に対し,0→[0,2],1→[1],2→[3]という添字を付け,元の数字の順に添字を並べた0102を添字列と呼ぶ.
  • 再帰的に添字列を作る.
  • 先頭を0とし,振れる数字を0から(今まで振った数+1)までとすれば,結果の重複は除ける.
    • (例えば添字列0201([[0,2],[3],[1]])は生成されない)
  • これは,重複した分割結果[[0,2],[1],[3]]や[[3],[1],[0,2]]などの中で,それぞれの最小の数字が昇順になっている結果だけを生成していることになる.
@na2hiro
na2hiro / MediaWikiUserMerge
Created July 6, 2013 12:51
MediaWikiのUserMergeへのポスト関数
var script = document.createElement('script');
script.src = 'http://code.jquery.com/jquery-latest.js';
document.getElementsByTagName('head')[0].appendChild(script);
var sessid="~";
function del(name){
$.post("/index.php/%E7%89%B9%E5%88%A5:%E5%88%A9%E7%94%A8%E8%80%85%E3%81%AE%E7%B5%B1%E5%90%88",{
olduser:name,
newuser:"Anonymous",
@na2hiro
na2hiro / 1.js
Last active December 30, 2015 16:49
リクルートプログラミングコンテスト5完でアメリカを惜しくも逃しました. http://recruit-jinji.jp/procon/index.html 慣れなさの見える前ファイルコピペで補助関数が使いもしないのに増殖していっています.
var rl = require("readline");
var repl = rl.createInterface(process.stdin, process.stdout);
var input="";
repl.on("line", function(text){
input+=text;
});
repl.on("close", function(){
var texts = input.split("\n");
var t = parseInt(texts[0], 10);
// console.log(t)
@na2hiro
na2hiro / ticketgobble.hs
Last active August 29, 2015 14:01
チケットゴブル問題 当選しました https://codeiq.jp/ace/yuki_hiroshi/q863 DPしていません,分割したら総当りで終わりました.
import Data.List.Split(splitOn)
import Data.List(sort, tails, maximumBy)
type Date = (Int, Int)
type Ticket = (Date, Date, String)
parse :: String->Ticket
parse s = ((m1,d1), (m2,d2), name)
where [name, dates] = words s
[[m1,d1], [m2,d2]] = map(map read.splitOn "/")$ splitOn "-" dates
@na2hiro
na2hiro / Duality.hs
Last active August 29, 2015 14:01
dual foldr (:) [] == reverse
定義
(f. g) x = f (g x) -- .
(f. g. h) x = f (g (h x)) -- ..
dual f = dual. f. dual -- dual f
dual xs = reverse (map dual xs) -- dual list
foldr _ z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
reverse [] = []
reverse (x:xs) = reverse xs ++ [x]
map _ [] = []
// 20字(<=100字)
function yourCode() {
var arr = [];
for (var i = 1; i <= 100; i ++) {
arr.push([i, "fizz", "buzz", "fizzbuzz"][i%3?i%5?0:2:i%5?1:3]);
}
return arr;
}
import Data.List(sort, nub)
makeNumByN :: [[Integer]]
makeNumByN = [0..9] : map f [0..] -- memoize
where f k = nub$sort$ do
l<-[0..k]
a<-makeNumByN!!l
b<-makeNumByN!!(k-l)
[a*b, a+b, if a>b then a-b else b-a] -- negative value has no meaning
IFPH 3.1.4 m*nの評価に必要な評価ステップ数はいくつか.
ただし自然数及び加算,乗算は次の通り.
data Nat = Zero | Succ Nat
(+) :: Nat->Nat->Nat
m + Zero = m
m + Succ n = Succ (m+n)
(*) :: Nat->Nat->Nat
m * Zero = Zero
m * Succ n = (m*n)+m