回答編集履歴
3
訂正
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
```javascript
|
12
12
|
var f = n =>
|
13
13
|
x => ( x =>
|
14
|
-
|
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
追記
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
訂正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
2ビットと符号ビットで足りることに着目し、`000`と`
|
1
|
+
2ビットと符号ビットで足りることに着目し、`000`と`100`を排除すればいいことに気づきました。
|
2
2
|
1~6をランダムに生成し、下位2ビットを残し、3桁目ビットで全ビットそろえて`XOR`取ってます。
|
3
3
|
```javascript
|
4
4
|
var v = ( x =>
|