Skip to content

Instantly share code, notes, and snippets.

@nenono
nenono / StringExtension.cs
Created October 4, 2019 10:46
(.NET)How to convert string to bytes array that is encoded UTF-8 with BOM.
using System.IO;
namespace Sample
{
public static class EncodingExtension
{
public static byte[] GetUtf8WithBomBytes(this string str)
{
var encoding = new UTF8Encoding(true)
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream, encoding))
type subject = {point: int}
type student = {subjects: subject list}
type classroom = {students: student list}
let data = {students = [
{subjects = [{point = 10}; {point = 20}]}
{subjects = [{point = 20}; {point = 30}]}
{subjects = [{point = 30}; {point = 40}]}
{subjects = [{point = 40}; {point = 50}]}
  • 私のF# → しごとちゅうに書いた小さなコード晒す
  • neno
  • 2016/6/28 #nagoyakaeru

ファイルバージョンを一括で取得してcsvに吐くやつ

exeファイルとかdllファイルを右クリック→プロパティ→詳細情報で見れる「ファイルバージョン」とかを一括で取得したい!という要望にこたえる。

.NET1.1しかインストールされてない環境でも動きます。そういう要件だったのです。 C# のコンソールアプリケーションです。

@nenono
nenono / config.py
Last active July 22, 2022 13:17
keyhacの設定 ref http://www49.atwiki.jp/ntemacs/pages/25.html / redoの追加くらいしかしてないはず
# -*- mode: python; coding: utf-8-dos -*-
##
## Windows の操作を emacs のキーバインドで行うための設定(keyhac版)ver.20151104_02
##
# このスクリプトは、keyhac で動作します。
# https://sites.google.com/site/craftware/keyhac
# スクリプトですので、使いやすいようにカスタマイズしてご利用ください。
#
@nenono
nenono / join2.fsx
Created July 14, 2015 09:30
任意型リストのjoin(その2 by id:htid46)
let join2 (elem: 'a) (lis: 'a list) =
lis
|> List.fold (fun a x -> match a with | [] -> [ x ] | _ -> x :: elem :: a ) []
|> List.rev
let test1 = join2 0 [1;2;3;4;5;6] = [1;0;2;0;3;0;4;0;5;0;6] // -> true
let test2 = join2 0 [] = [] // -> true
@nenono
nenono / splitBy2.fsx
Created July 14, 2015 09:29
任意型リストのsplit(その2 by id:htid46)
let splitBy2 sep xs =
let a, b = List.foldBack (fun x (a, b) ->
if x = sep then (b :: a, []) else (a, x :: b)) xs ([], [])
b :: a
let test1 = splitBy2 0 [1;2;3;0;4;5;0;6] = [[1;2;3];[4;5];[6]] // -> true
let test2 = splitBy2 0 [] = [[]] // -> true
let test3 = splitBy2 0 [1;0;2;0] = [[1];[2];[]] // -> true
@nenono
nenono / join.fsx
Last active August 29, 2015 14:24
任意型リストのjoin
let join (elm:'a) (lis:'a list) =
lis
|> List.fold (fun a x -> elm::x::a) [] // a=処理済みリスト x=現在の要素
|> (function
| x::xs -> xs
| xs -> xs) // 要素数2以上なら1つスキップ もう少し簡潔に書けないものか
|> List.rev
let test1 = join 0 [1;2;3;4;5;6] = [1;0;2;0;3;0;4;0;5;0;6] // -> true
let test2 = join 0 [] = [] // -> true
@nenono
nenono / splitBy.fsx
Last active August 29, 2015 14:24
任意型リストのsplit
let splitBy (elm:'a) (lis:'a list) =
lis
|> (Seq.fold (fun (a,b) x->if x=elm then (b::a,[]) else (a,x::b)) ([],[])) // a=処理済みリスト b=処理中リスト x=現在の要素
|> (fun (a,b)-> b::a) // 最後の要素だけTuple右辺に残ってしまっているのでリストに結合
|> List.fold (fun s xs -> (List.rev xs)::s) [] // 個別リストの反転と全体の反転
let test1 = splitBy 0 [1;2;3;0;4;5;0;6] = [[1;2;3];[4;5];[6]] // -> true
let test2 = splitBy 0 [] = [[]] // -> true
let test3 = splitBy 0 [1;0;2;0] = [[1];[2];[]] // -> true
@nenono
nenono / withRanking.fsx
Last active August 29, 2015 14:20
シーケンスのソート後の順番を、元の順番を保ったまま取得したい
(*
お題:
https://ideone.com/gtRf08
*)
(*
rankBy 関数 (renameしました withRanking → rankBy)
シーケンスを、指定されたkeySelectorで取得したキーを使用してソートした結果のインデックスとのペアに変換します。
*)
let rankBy (keySelector: 'a -> 'b when 'b : comparison) (source:'a seq) =
@nenono
nenono / fizzbuzz.scm
Created April 21, 2015 08:32
Schemeによるリスト処理関数のサンプル
;; 整数値からfizzbuzz結果の値に変換します。
(define (int->fizzbuzz x)
(let ((is-fizz (= (modulo x 3) 0)); 3で割り切れたらFizz
(is-buzz (= (modulo x 5) 0))); 5で割り切れたらBuzz
(let ((is-fizzbuzz (and is-fizz is-buzz))); FizzかつBuzzならFizzBuzz
(cond
(is-fizzbuzz "FizzBuzz")
(is-fizz "Fizz")
(is-buzz "Buzz")
(else x)))))