Google Apps Scriptで範囲から欠けた数を列挙する
今回もまたみらい研究室実行委員会の3/19に行ったイベントのアンケート解析をしています。
で、委員みんなでアンケートの内容を私が作ったGoogleFormに打ち込んでデータ化して、それを私がいい感じにまとめて「解析は任せた」の投げつけるお仕事をしているわけです
GoogleFormで打ち込むためにアンケートに通し番号を付けてそれを入力してもらうんですが、順番ばらばらでみんな打ち込むので、どれが欠けてるかわかりにくくて仕方ないです。
というわけで、欠けた数をカンマ区切りの文字列で返すlist_missing_num
関数を作りました。
function list_missing_num(numbers) { if( "undefined" !== typeof(numbers) && Array.isArray(numbers) && "object" === typeof(numbers[0]) && Array.isArray(numbers[0]) && "number" === typeof(numbers[0][0]) ){ var arr = []; var i; for(i = 0; i < numbers.length; ++i) arr.push(numbers[i][0]);//convert arr.sort(function(a, b){ return a - b; });//sort arr = arr.filter(function (x, i, self) { return self.indexOf(x) === i; });//unique var re = []; var push_back = function(min, max){ for(var i = min; i <= max; ++i) re.push(i); } var j; for(i = 1, j = arr[0]; i < arr.length; j = arr[i], ++i){ if(1 !== arr[i] - j){ push_back(j + 1, arr[i] - 1);//push missing nums } } return (re.length === 0) ? "nothing" : re.join(); } else{ throw new TypeError("unexpected input. numbers:" + typeof(numbers) + " min:" + typeof(min) + " max:" + typeof(max)); } }
まあ特に説明することは無いですね。重複はfilter
で無視してます。