回答編集履歴

3

訂正

2017/02/04 11:54

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36072

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  x => ( x =>
26
26
 
27
- (x + (( x & 0b1000000000000000000000000000000) >> 30)) - 0b1000000000000000000000000000000
27
+ x + (( x & 0b1000000000000000000000000000000) >> 30) - 0b1000000000000000000000000000000
28
28
 
29
29
  )( Math.floor( Math.random() * 2 * n + ( 0b1000000000000000000000000000000 - n ) ) );
30
30
 

2

追記

2017/02/04 11:53

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36072

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

訂正

2017/02/04 11:46

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36072

test CHANGED
@@ -1,4 +1,4 @@
1
- 2ビットと符号ビットで足りることに着目し、`000`と`111`を排除すればいいことに気づきました。
1
+ 2ビットと符号ビットで足りることに着目し、`000`と`100`を排除すればいいことに気づきました。
2
2
 
3
3
  1~6をランダムに生成し、下位2ビットを残し、3桁目ビットで全ビットそろえて`XOR`取ってます。
4
4