回答編集履歴
3
訂正
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
x => ( x =>
|
26
26
|
|
27
|
-
|
27
|
+
x + (( x & 0b1000000000000000000000000000000) >> 30) - 0b1000000000000000000000000000000
|
28
28
|
|
29
29
|
)( Math.floor( Math.random() * 2 * n + ( 0b1000000000000000000000000000000 - n ) ) );
|
30
30
|
|
2
追記
test
CHANGED
@@ -11,3 +11,27 @@
|
|
11
11
|
)( Math.random() * 6 + 1 )
|
12
12
|
|
13
13
|
```
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
##### 追記
|
18
|
+
|
19
|
+
think49さんの「汎用性が高いコードがエレガント」という言葉と、raccyさんのカリー化に刺激を受けまして、一般化してみました。
|
20
|
+
|
21
|
+
```javascript
|
22
|
+
|
23
|
+
var f = n =>
|
24
|
+
|
25
|
+
x => ( x =>
|
26
|
+
|
27
|
+
(x + (( x & 0b1000000000000000000000000000000) >> 30)) - 0b1000000000000000000000000000000
|
28
|
+
|
29
|
+
)( Math.floor( Math.random() * 2 * n + ( 0b1000000000000000000000000000000 - n ) ) );
|
30
|
+
|
31
|
+
var v = f(3)();
|
32
|
+
|
33
|
+
```
|
34
|
+
|
35
|
+
`f(n)`は[n, n-1, ... 1,-1, ... -(n-1), -n]の乱数を返す関数を返します。たぶん。
|
36
|
+
|
37
|
+
ただし、javascriptで扱える整数に上限があるため、nには上限があります。おそらく。
|
1
訂正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
2ビットと符号ビットで足りることに着目し、`000`と`1
|
1
|
+
2ビットと符号ビットで足りることに着目し、`000`と`100`を排除すればいいことに気づきました。
|
2
2
|
|
3
3
|
1~6をランダムに生成し、下位2ビットを残し、3桁目ビットで全ビットそろえて`XOR`取ってます。
|
4
4
|
|