Google Apps 스크립트로 C가 4이면 D : E, F : G, H : I, J : K를 랜덤 화하고 싶습니다.
현재이 비효율적이고 시간 소모적 인 코드를 사용합니다.
function shuffleAnswers() {
var arr = [0, 2, 4, 6];
for (var i = 2; i < lastRow()+1; i++)
{
var amount = sheet().getRange(i,3).getValue();
if (amount == 4)
{
var source = sheet().getRange(i,4,1,2);
var column = 4 + arr[(Math.random() * arr.length) | 0];
var destination = sheet().getRange(i,column,1,2);
var valuesSource = source.getValues();
var valuesDestination = destination.getValues();
source.setValues(valuesDestination);
destination.setValues(valuesSource);
}
}
arr = [-2, 0, 2, 4];
for (var i = 2; i < lastRow()+1; i++)
{
var amount = sheet().getRange(i,3).getValue();
if (amount == 4)
{
var source = sheet().getRange(i,6,1,2);
var column = 6 + arr[(Math.random() * arr.length) | 0];
var destination = sheet().getRange(i,column,1,2);
var valuesSource = source.getValues();
var valuesDestination = destination.getValues();
source.setValues(valuesDestination);
destination.setValues(valuesSource);
}
}
arr = [-4, -2, 0, 2];
for (var i = 2; i < lastRow()+1; i++)
{
var amount = sheet().getRange(i,3).getValue();
if (amount == 4)
{
var source = sheet().getRange(i,8,1,2);
var column = 8 + arr[(Math.random() * arr.length) | 0];
var destination = sheet().getRange(i,column,1,2);
var valuesSource = source.getValues();
var valuesDestination = destination.getValues();
source.setValues(valuesDestination);
destination.setValues(valuesSource);
}
}
arr = [-6, -4, -2, 0];
for (var i = 2; i < lastRow()+1; i++)
{
var amount = sheet().getRange(i,3).getValue();
if (amount == 4)
{
var source = sheet().getRange(i,10,1,2);
var column = 10 + arr[(Math.random() * arr.length) | 0];
var destination = sheet().getRange(i,column,1,2);
var valuesSource = source.getValues();
var valuesDestination = destination.getValues();
source.setValues(valuesDestination);
destination.setValues(valuesSource);
}
}
}
아이디어가 있습니까? 아마도 range.randomize ()? C = 4 인 모든 행은 무작위 화되어야합니다. 여러 행의 열을 같은 위치로 변경해서는 안됩니다.
/* Create a Random arrray of numbers from 1 to 8 with couples
* eg:[1,2,5,6,3,4,7,8]*/
const doubleShuffleFix = (n = 4) => {
const generator = function*() {//TODO: boilerplate- can be avoided
let i = 1;
yield i;
while (true) {
if (i < (n - 1) * 2) {
yield (i += 2);
} else {
break;
}
}
};
const available = [...generator()];
//Durstenfeld algo
for (let i = available.length - 1; i > 0; i--) {
let rand = Math.floor(Math.random() * i);
[available[i], available[rand]] = [available[rand], available[i]];
}
return available.map(num => [num, ++num]).flat();
};
function shuffleAnswer() {
const s = SpreadsheetApp.getActive().getSheetByName('Sheet1'),
rg = s.getRange(2, 3, s.getLastRow() - 1, 9),
values = rg.getValues();
rg.setValues(
values.map(row => {
if (row[0] === 4) {
return [4, ...doubleShuffleFix().map(num => row[num])];
}
return row;
})
);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다