teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

訂正

2017/02/04 11:54

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37470

answer CHANGED
@@ -11,7 +11,7 @@
11
11
  ```javascript
12
12
  var f = n =>
13
13
  x => ( x =>
14
- (x + (( x & 0b1000000000000000000000000000000) >> 30)) - 0b1000000000000000000000000000000
14
+ x + (( x & 0b1000000000000000000000000000000) >> 30) - 0b1000000000000000000000000000000
15
15
  )( Math.floor( Math.random() * 2 * n + ( 0b1000000000000000000000000000000 - n ) ) );
16
16
  var v = f(3)();
17
17
  ```

2

追記

2017/02/04 11:53

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37470

answer CHANGED
@@ -4,4 +4,16 @@
4
4
  var v = ( x =>
5
5
  ( x & 0b11 ) ^ ( 0- ( ( x & 0b100 ) >> 2 ) )
6
6
  )( Math.random() * 6 + 1 )
7
- ```
7
+ ```
8
+
9
+ ##### 追記
10
+ think49さんの「汎用性が高いコードがエレガント」という言葉と、raccyさんのカリー化に刺激を受けまして、一般化してみました。
11
+ ```javascript
12
+ var f = n =>
13
+ x => ( x =>
14
+ (x + (( x & 0b1000000000000000000000000000000) >> 30)) - 0b1000000000000000000000000000000
15
+ )( Math.floor( Math.random() * 2 * n + ( 0b1000000000000000000000000000000 - n ) ) );
16
+ var v = f(3)();
17
+ ```
18
+ `f(n)`は[n, n-1, ... 1,-1, ... -(n-1), -n]の乱数を返す関数を返します。たぶん。
19
+ ただし、javascriptで扱える整数に上限があるため、nには上限があります。おそらく。

1

訂正

2017/02/04 11:46

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37470

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