Skip to content

Instantly share code, notes, and snippets.

@minoki
minoki / vararg.c
Created December 9, 2015 08:19
C言語でマクロを使った可変長引数っぽいことをやってみる
#include <stdio.h>
#include <math.h>
#define CHOOSE(a) CHOOSE2 a
#define CHOOSE2(a0,a1,a2,a3,a4,x,...) x
#define fmax_N(...) CHOOSE((__VA_ARGS__,fmax_5,fmax_4,fmax_3,fmax,fmax_1,~))(__VA_ARGS__)
double fmax_1(double a0) {
return a0;
@minoki
minoki / bits.c
Created March 20, 2016 04:49
なんちゃって2進リテラル
#define CONCAT2(x,y) x ## y
#define CONCAT(x,y) CONCAT2(x,y)
#define VAL_END 0)
#define VAL0_END 0) >> 1
#define VAL1_END 0) >> 2
#define VAL2_END 0) >> 3
#define VAL3_END 0) >> 4
#define VAL4_END 0) >> 5
#define VAL5_END 0) >> 6
#define VAL6_END 0) >> 7
@minoki
minoki / hiragana.lua
Last active April 7, 2016 17:31
ランダムなひらがな文字列を生成する。opensslコマンド使用。
local chars = (([[
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
やゆよ
らりるれろ
{-# LANGUAGE DataKinds, KindSignatures #-}
module FiniteField where
import GHC.TypeLits
data FiniteField (p :: Nat) = MkFF Integer deriving (Eq)
characteristic :: KnownNat p => FiniteField p -> Integer
characteristic = natVal
mkFF :: KnownNat p => Integer -> FiniteField p
@minoki
minoki / test-setmode.c
Last active January 20, 2017 10:14
Test programs for wide I/O functions
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
#if defined(_MSC_VER)
void handler(const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t reserved)
{
@minoki
minoki / console-dev.c
Created January 21, 2017 16:23
Test programs for Windows Console
#include <stdio.h>
#include <locale.h>
#include <io.h>
#include <fcntl.h>
#include <windows.h>
BOOL is_stream_console(FILE *stream)
{
DWORD mode;
// GetConsoleMode requires GENERIC_READ access on the handle
@minoki
minoki / test.c
Last active March 22, 2017 16:39
Test programs for complex numbers in various languages
#include <stdio.h>
#include <math.h>
#include <complex.h>
#if !defined(CMPLX)
# if defined(__clang__)
# define CMPLX(x,y) ((double _Complex){(x), (y)})
# elif defined(__GNUC__)
# define CMPLX(x,y) __builtin_complex((double)(x), (double)(y))
# endif
#include <string>
#include <vector>
#include <iostream>
#include <cstdlib>
#define __CL_ENABLE_EXCEPTIONS
#include <CL/cl.hpp>
int main(int argc, char *argv[])
{
@minoki
minoki / file0.txt
Created August 4, 2017 09:32
TypeScriptの正規表現にマシな型をつける ref: http://qiita.com/mod_poppo/items/4549dcfa16ae99ebf126
let m = str.match(/(a)(b)?/);
if (m) {
let a: string = m[1];
let b: string = m[2]; // 本当は string | undefined
}
@minoki
minoki / Main.hs
Created February 22, 2018 12:02
関数内ローカル変数に IORef を使うな
{-# LANGUAGE MagicHash #-}
module Main where
import Data.IORef
import Control.Monad (forM_)
import System.Environment (getArgs)
import Control.Monad.State.Class
import qualified Control.Monad.State.Strict as StateStrict
import qualified Control.Monad.State.Lazy as StateLazy
import Control.Monad.Writer.Strict as WriterStrict
import GHC.Prim