標準エラーへの出力(Swift)

特にAHCでバグってしまった場合など、競プロに参加していると、標準エラーに文字列を出力したくなる場合があります。 以下のエクステンションを使うことで、print関数のto:パラメータに直接stderrを渡せるようになります。 extension UnsafeMutablePointer: …

茶色になりました。

AtCoderで茶色になりました。使用言語は主にSwiftです。ABC324から、ABC332までの、約2ヶ月ほどでの入茶でした。 きっかけは同僚の「すぐ緑になれそう」という一言です。その後、どちらが少ない出場回数で緑になれるか競争しています。 ここでは、課題に感じ…

UnitTestで標準入力の差し替え

過去問やってると、(Command+Uが染みついてて)UnitTestつかいたくなるし、かといって入力をいちいち手作業でリテラルにするのはおっくうで。 そこで! struct AtCoderRunner { typealias Print = (String) -> Void typealias Solver = (Print) -> Void let…

lowerBound

★3の過去問やった際に書いた、SwiftのlowerBoundを今後も使いそうなのでメモ extension RandomAccessCollection where Element: Comparable { func lowerBound(of element: Element) -> Index { guard first! < element else { return startIndex } var (lef…

seq

たまーに使いたくなるけど、さっと書けないので、メモ。 func sequence<T>(_ xxx: [[T]]) -> [[T]] { xxx.reduce([[]]) { xx, x in xx.flatMap{ xx in x.map{ x in xx + [x] } } } }</t>

Implementing Graham Scan in Swift

'ConvexHull' 'Swift'でぐぐってみたら、なんだか物足りなかったので、なんとなく。 import simd public struct Graham { var target: [SIMD2<Float>] = [] public func scan() -> [SIMD2<Float>] { guard let lowestPoint = target.most(in: lower) else { return [] } re</float></float>…

Auto-Increment Build Number in Xcode 13

久しぶりにビルドナンバーの自動更新などしようかと思っていたら、Xcode13でInfo.plistがなくなっており、以前から使っていたやり方が使えなくなっていました。ぐぐっても直接的な解答がみつからなかったので、メモ。要点は、agvtoolコマンドを使うというこ…

CGPointとSIMD

CGPointを触り出すと、いつもelementwiseな四則演算が使いたくなる。 演算子オーバーロードはお行儀が悪い気がして、SIMDプロトコルで解決した例をメモ。 extension CGPoint: SIMD { public typealias MaskStorage = SIMD2<CGFloat.NativeType>.MaskStorage public subscript(ind</cgfloat.nativetype>…

RWHのCH18

モナド変換子を作ってみるやつのMaybeT、写経してみたけどうまく動かなくて四苦八苦した結果のメモ書き {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-} module MaybeT where import Control.Monad.Trans import Control.…

SwiftのFailable Initializerで、初期化するメンバーが多いとき

ぱっと検索できる範囲でinit?のサンプルを眺めていると、 初期化するメンバー変数が少なく、楽な感じなので不自由なさそうだったけれど、 メンバーが増えてくると煩わしさが倍々で増えていく気がして嫌だった。 例えば以下 class Test { let member0: Int le…

hackageのuploadでつまづいたこと

以下のサイトを参考にhackageへデビューしました。 https://www.ishiy.xyz/posts/2017-01-29-haskell-hackage.htmlしかし、一回目のuploadでつまづきました。 stack upload . としたとこころ、usernameとpasswordを聞かれたところで固まってずっと無反応に。…

SwiftでfilterM

すごいH本最大の難所と僕が勝手に思っているfilterM Swiftで同じ事出来ないかなと模索してみたところ、できちゃったので、ここに記録。 func filterM<T>(_ p: (T)->[Bool],_ array: [T]) -> [[T]] { return array.first.map { x in let xs = Array( array.suffi</t>…

tensorFlow+OSX+GPUのメモ

tensor flowをDownload and Setupに従ってGPU版のインストールをしたところ、test your installationの最初の一行でつまづきました。このtest your installationを動くようにしたときのメモです。 OS X 10.11、 Xcode 7.3、 CUDA toolkitは8.0、 cuDNNは5.1…

SwiftでLet Over Lambda

SwiftのBlocksに関してググってみるたび、変数キャプチャの簡潔な例がぱっとみつからないので、備忘録として。 let letOverLambda: ()->Int = { var i = 0; return { i += 1; return i } }() letOverLambda() -> 1 letOverLambda() -> 2 letOverLambda() -> 3

Swiftの配列で重複を削除する

純粋な言語のオマージュ func nub<T:Equatable>(_ array: [T] ) -> [T] { return array.reduce([]) { $0.contains($1) ? $0 : $0 + [$1] } } func nub<T>(_ array: [T], isEquivalent: (T,T) -> Bool ) -> [T] { return array.reduce([]) { ( xs: [T], x: T ) -> [T] in xs.f</t></t:equatable>…

Swiftで行列の積

前回は幼稚な感動を記事にしたわけですが、今回も引き続きそんなノリです。 protocol VectorProtocol { typealias ComponentType init( _ component : ( index : UInt ) ->ComponentType ) static func dot( lhs: Self , _ rhs: Self ) -> ComponentType } p…

protocolにextensionが書けるって素敵

個人的にGLSLやOpenCLなんかのswizzeringが好きで、オレオレのベクタ型にはそれっぽいのを必ず用意してたりします。 SwiftはずーっとTLの狼狽を眺めてばかりでやり過ごしてたのですが、このswizzeringを一番そっくりに使えそうなのに気づいてすこし格闘して…

+stringWithFormat:

+stringWithFormat:って、大量に使うとソースコードが読みにくくて仕方ないことしばしば。そこで最近は以下のようなマクロをよく使っています。 #define FORMAT( ... ) [NSString stringWithFormat:__VA_ARGS__] [NSString stringWithFormat:@"HOGEHOGE %@ %…

ろっく

Mac OS XのOpenGL contextがマルチスレッド対応になりまっせと発表があって久しいわけですが、 どうマルチスレッド対応してるのかなんとなく不思議ではありました。 使う側の注意としては、コンテキストをロックするべしっていうのが正解みたいです。とりあ…

color wellっぽいcell

NSColorWellみたいなNSCellがほしいなーと探せどもみつからず。 で、つくってみた。 単に色を表示するだけです。 #import <Foundation/Foundation.h> @interface NJColorCell : NSCell { @private } @end@implementation NJColorCell - (id)init { self = [super init]; if (self) { /</foundation/foundation.h>…

ただのメモ

忘れやすいので。 +(NSSet*)keyPathsForValuesAffecting<Key>;</key>

btGeneric6DofSpringConstraint

bullet physicsのbtGeneric6DofSpringConstraint。 最近バネっぽい動きが欲しくてこいつと数日格闘しておりました。 六自由度でバネをもつ拘束ということのようです。btGeneric6DofConstraintのサブクラスで、メンバ関数がいくつか追加されており、追加のも…

consが欲しい

ということでobjc用のコンテナっぽいもの書いてみました。 https://gist.github.com/783682 単に眠れなかっただけですが。 NSLog(@"%@",CONS( nil, nil )); NSLog(@"%@",CONS( @"hoge", nil )); NSLog(@"%@",CONS( @"hoge", @"hogehoge" )); NSLog(@"%@",CON…

(this->*hoge)() が気になって気になって。

こういう事なのかなと。 #include <iostream> using namespace std; class Test { public: void Func1() { cout << "Func1" << endl; } void Func2() { cout << "Func2" << endl; } void Exec( void (Test::*hoge)() ) { (this->*hoge)(); } }; void TestFunc() { Test</iostream>…

lis.pyをobjcで書いてみる。

http://www.aoky.net/articles/peter_norvig/lispy.htm を参考にObjective-Cで書いてみました。https://github.com/narumij/Lispective-C Lispective.c>(define fact (lambda (n) (if (zerop n) 1 (* n (fact (- n 1)))))) Lispective.c>(fact 5)) => 120 Li…

Blocksのちょっとしたこと

試しにnilを返すだけのBlocksでハマリ。 id (^aBlock)(NSArray *); aBlock = ^(NSArray *args){id result=nil;return result;}; // OK aBlock = ^(NSArray *args){return nil;}; // NG なんか型に厳しくてC++覚えはじめの頃みたいだ。return value typeをexp…

おれおれForth

あるとき、某Yさんと話していて、postscriptについて調べてるうちにForthにたどり着き、LOLを思い出して久しぶりに読んでみたところ、ふっとCっぽいもので書けそうな気がしたのと、いろいろYさんに豪語した証明しないといけない気がしたことから、Forth書い…

ES20Log

最近、自分が思いっきり専門用語を使える相手とお話する機会があり、そのときは非常に楽しい時間をすごせました。 そのなかで、いろいろパフォーマンスに関する質問や、それらを表示出来ないのかと言われましたが、準備していなかったため応えることができま…

制限を調べるなど。

シェーダーがうまく動かなくて、気になって調べてみた。 使ったのははこんなコード。 #define LOG_GL_INTEGER( target ) {int num;glGetIntegerv(target, &num);printf("%s : %d\n",#target,num);} LOG_GL_INTEGER(GL_MAX_VERTEX_ATTRIBS); LOG_GL_INTEGER(G…

今日ほんとはやりたかったこと

睡眠不足オーラふりまきまくった上にがっつり寝てしまってすんません。やりかけていたことができたのでとりあえず。 (defparameter test-node '(:node (:node (:node) (:node) (:node)) (:node (:node)))) (defun node-children(node) (cdr node)) (defun bf…