将数字交替排列成两行
Alternate numbers into two rows
我想我脑子放屁了,因为我想不出一个简单的公式来将数字序列按特定顺序排序,因此每个 sheet 可以打印 2 个数字纸(一个数字在一半上,第二个数字在下一半上),所以当打印的一叠纸切成两半,将数字分开,然后将这两半放在一起时,数字将按顺序排列。
所以,假设我有 5 个数字:3、4、5、6、7,预期结果将是 3、6、4、7、5 或
0,1,2,3,4,5,6,7 会变成 0,4,1,5,2,6,3,7
我的思考过程是:
- 创建一个从 0 到数字总数的循环
- 如果当前步数是偶数,则将除以 2 的总数相加
显然,我在这里漏掉了一两步,或者有一个简单的数学公式可以解决这个问题,希望有人能在正确的方向上推动我。
这就是我目前所拥有的,如果起始编号设置为 1 或 3 则无法正常工作
function show()
{
console.clear();
for(let i = 0, count = end.value - start.value, half = Math.round(count/2); i <= count; i++)
{
let result = Math.round((+start.value + i) / 2);
if (i && i % 2)
result = result + half -1;
console.log(i, "result:", result);
}
}
//ignore below
for(let i = 0; i < 16; i++)
{
const o = document.createElement("option");
o.value = i;
o.label = i;
start.add(o);
end.add(o.cloneNode(true));
}
start.value = 0;
end.value = 7;
function change(el)
{
if (+start.value > +end.value)
{
if (el === start)
end.value = start.value;
else
start.value = end.value;
}
}
<select id="start" oninput="change(this)"></select> -
<select id="end" oninput="change(this)"></select>
<button onclick="show()">print</button>
P.S。抱歉,关于标题,想不出更好的总结。
您可以从索引中获取值
- 如果是奇数,则使用长度和索引向右移动一位(例如除以二并获得整数值),或者
- 如果指数除以二。
function order(array) {
return array.map((_, i, a) => a[(i % 2 * a.length + i) >> 1]);
}
console.log(...order([3, 4, 5, 6, 7]));
console.log(...order([0, 1, 2, 3, 4, 5, 6, 7]));
我想我脑子放屁了,因为我想不出一个简单的公式来将数字序列按特定顺序排序,因此每个 sheet 可以打印 2 个数字纸(一个数字在一半上,第二个数字在下一半上),所以当打印的一叠纸切成两半,将数字分开,然后将这两半放在一起时,数字将按顺序排列。
所以,假设我有 5 个数字:3、4、5、6、7,预期结果将是 3、6、4、7、5 或 0,1,2,3,4,5,6,7 会变成 0,4,1,5,2,6,3,7 我的思考过程是:
- 创建一个从 0 到数字总数的循环
- 如果当前步数是偶数,则将除以 2 的总数相加
显然,我在这里漏掉了一两步,或者有一个简单的数学公式可以解决这个问题,希望有人能在正确的方向上推动我。
这就是我目前所拥有的,如果起始编号设置为 1 或 3 则无法正常工作
function show()
{
console.clear();
for(let i = 0, count = end.value - start.value, half = Math.round(count/2); i <= count; i++)
{
let result = Math.round((+start.value + i) / 2);
if (i && i % 2)
result = result + half -1;
console.log(i, "result:", result);
}
}
//ignore below
for(let i = 0; i < 16; i++)
{
const o = document.createElement("option");
o.value = i;
o.label = i;
start.add(o);
end.add(o.cloneNode(true));
}
start.value = 0;
end.value = 7;
function change(el)
{
if (+start.value > +end.value)
{
if (el === start)
end.value = start.value;
else
start.value = end.value;
}
}
<select id="start" oninput="change(this)"></select> -
<select id="end" oninput="change(this)"></select>
<button onclick="show()">print</button>
P.S。抱歉,关于标题,想不出更好的总结。
您可以从索引中获取值
- 如果是奇数,则使用长度和索引向右移动一位(例如除以二并获得整数值),或者
- 如果指数除以二。
function order(array) {
return array.map((_, i, a) => a[(i % 2 * a.length + i) >> 1]);
}
console.log(...order([3, 4, 5, 6, 7]));
console.log(...order([0, 1, 2, 3, 4, 5, 6, 7]));