メモ。そもそもモノが実験段階にあるネタなので、あまり参考にはならなげ。あと"ソースは2ちゃんねる"。ところでアレはBe番号と呼ぶべきなのかBeIDと呼ぶべきなのか。
Be-2ちゃんねる 人柱募集中。。。Part5の924 (現在はdat落ち) にあった、1つのBe番号から識別番号を算出し、さらに識別番号から存在しうるBe番号を列挙するperlのスクリプトは以下。perlはわからないけど、インデントはしてみた。
#! /usr/bin/perl
my $be = shift
or die "usage: $0 BE_NUMBER\n";
my $x = int($be/10) % 10;
my $y = $be % 10;
die "$0: illegal be-number: $be\n" if $x < 2 || $x > 9 || $y < 2 || $y > 9;
my $k = $x * $y * 3;
my $n = int($be/100) + $x - $y - 5;
die "$0: illegal be-number: $be\n" if $n % $k != 0;
my $id = $n / $k;
my @list = ();
for my $y (2..9) {
for my $x (2..9) {
my $be = ($id * 3 * $x * $y - $x + $y + 5) * 100 + $x*10 + $y;
push(@list, $be);
}
}
for my $be (sort {$a<=>$b} @list) {
print "http://be.2ch.net/test/p.php?i=$be\n";
}
bbs2chreaderで使いたいので、javascriptで識別番号を算出するところを書き出してみた。
function(origBe) {
var be, x, y, k, n;
if (typeof origBe == 'undefined') {
throw new Error('missing be-number');
}
be = parseInt(origBe, 10);
if (!be) {
throw new Error('illegal be-number: ' + origBe.toString());
}
x = Math.floor(be / 10) % 10;
y = be % 10;
if (x < 2 || x > 9 || y < 2 || y > 9) {
throw new Error('illegal be-number: ' + origBe.toString());
}
k = x * y * 3;
n = Math.floor(be / 100) + x - y - 5;
if (n % k) {
throw new Error('illegal be-number: ' + origBe.toString());
}
return n / k;
}