2009年2月アーカイブ

ツンデレ実装 の改造をしていて妙な壁にぶち当たってしまった。

# やばっ 普通に答えたらイカんのかな、これ(ビクビク

επιστημηさんの 祭りの仕掛け に 引っかかってみました。

use strict;
use warnings;
use encoding q/utf-8/, Filter => 1, STDOUT => q/cp932/;
use utf8;
use Scalar::Util;

package ツンデレ;

sub new {
	my $pkg = shift;
	my %arg = @_;
	die "失格" if !exists $arg{デレに変わる条件};
	bless \%arg, $pkg;
}

sub 態度 { shift->きっかけ || print "ツン" }

sub きっかけ {
	my $self = $_[0];
	if ( $self->{デレに変わる条件}->($self) )
	{
		no strict qw/refs/;
		my $pkg = 'ツンデレ::_' . Scalar::Util::refaddr($self);
		eval "package $pkg; our \@ISA = (q/ツンデレ/);";
		die $@ if $@;
		*{$pkg . '::態度'} = sub { print "デレ" };
		$self = bless $self, $pkg;
		$self->態度;
		$self;
	}
}

sub 相手 {
	my $self = shift;
	$self->{相手} = shift;
	print "\n相手は " . $self->{相手} . "\t";
	$self;
}
package main;
srand(time);

sub 突発的事項 { int rand 20 }
sub 発生した { 0 };

my $あの子 = ツンデレ->new(
	デレに変わる条件 => sub {
		my $self = shift;
		$self->{$self->{相手}}{訪問回数}++ > 5;
	});

$あの子->相手(("scott", "andrei", "epi")[int rand 3])->態度 for 1 .. 20;
print "\n";

my $その子 = ツンデレ->new(
	デレに変わる条件 => sub {
		突発的事項 == 発生した
	});
$その子->態度 for 1 .. 20;
print "\n";

my $ビッチ = ツンデレ->new(
	デレに変わる条件 => sub { 1 });
$ビッチ->態度 for 1 .. 5;
print "\n";

eval {
	my $普通の子 = ツンデレ->new(); # エラー
};
print $@ if $@;

最初は「ツンツン」した態度だけどある条件をクリアすると「デレ」に移行するというタイプのツンデレの実装になります。なお、デレに変わる条件がない場合はツンデレとは認められません。

ツンデレ移行判定はStrategyパターンで。ツンからデレに移行するのは、インスタンス毎にツンデレのサブクラスを動的に生成して、インスタンスをそのサブクラスに所属替え(rebless)して"態度"を変える という多少強引な事をやってます。

use encodingSTDOUT => q/cp932/ は、Windows上で動かしてるからなだけです。

http://floralcompany.jp/archives/2009/02/obsolete.html のおまけ。

perlならone-linerでいけるよね っと。

perl -e 'print join q/ /, grep { grep /^Tag:.*special::obsolete/, qx/apt-cache show $_/ } map { (split /\s+/)[1] } grep /^.i/, split qq/\n/, qx/dpkg -l/'

元ネタは http://code.nanigac.com/forum/view/422 かな。

なんか流行ってるみたいなんでやってみた

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
#include <cstring>

char convert(char c, int flg)
{
	return flg ? std::toupper(c) : std::tolower(c);
}

int main(int c, char** v)
{
	if ( c < 2 ) {
		std::cerr << "usage: " << v[0] << " <target string>\n";
		return 0;
	}

	std::string target(v[1]);
	std::vector<int> flg;
	flg.resize(target.size());

	for (int i = 0; i <= target.size(); ++i )
	{
		std::fill_n(flg.rbegin(), i, 1);

		do {
			std::string res;
			std::transform(
					target.begin(), target.end(),
					flg.begin(),
					std::back_inserter(res),
					convert);
			std::cout << res << "\n";
		} while ( std::next_permutation(flg.begin(), flg.end()) );
	}
}
#/bin/sh

for i in `dpkg -l | egrep ^.i | awk '{print $2}'`
do
  apt-cache show $i | grep Tag: | grep special::obsolete > /dev/null 2>&1
  if [ $? == 0 ]; then
    echo $i
  fi
done

後は apt-get remove なり aptitude purge なり

前回から色々パワーアップ

なんと、IEにも対応しました :D (FirefoxとGoogleChromeでは動いてたけど、ためしにIEでやったら動かなかったので色々直した

SkyDriveに置いておきましたのでよろしければどうぞ。基本的に自分用なんで不親切この上ないですが :p

2009-03-04 こっそり機能追加。倉庫溢れ計算機能を追加しました。

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic