バンド名並べ替えツール
以下のフォームにバンド名と所属メンバーを入力して、「計算する」ボタンを押してください。
バンド名が並べ替えられた結果が以下に表示されます。
【注意事項】
・入力されたバンド名は必ずユニークである必要があります。
・同じメンバーが所属するバンド同士は、換気行を含めて3行以上離れるようになっています。
・データにエラーがある場合、エラーメッセージが表示されます。
【ジョーク】
Q. ギタリストが楽器をなくしたらどうなるか?
A.「ギ」と「タリスト」になる。
<!DOCTYPE html> <html> <head> <title>バンド名並べ替えツール</title> <meta charset="utf-8"> <script type="text/javascript"> function sortBands() { var input = document.getElementById("input").value.trim(); // inputフィールドからJSONデータを取得し、トリミングする if (input === "") { // データが空の場合はエラーメッセージを表示 document.getElementById("output").innerHTML = "バンド名が入力されていません。"; return; } var bands = JSON.parse(input); // JSONデータをオブジェクトに変換する var members = {}; // メンバー名が含まれるバンドのリストを格納するオブジェクトを初期化 var sortedBands = []; // 所属メンバー同士が3行以上離れているバンド名のリストを初期化 for (var band in bands) { // バンドごとに処理を行う if (bands.hasOwnProperty(band)) { var bandMembers = bands[band]; for (var i = 0; i < bandMembers.length; i++) { if (!members[bandMembers[i]]) { // メンバー名が初めて登場する場合は、バンドのリストを新規作成する members[bandMembers[i]] = [band]; } else { // 既に他のバンドに登場している場合は、既存のバンドのリストに追加する members[bandMembers[i]].push(band); } } var sorted = false; // 並べ替えを行ったかどうかを示すフラグを初期化 for (var j = 0; j < sortedBands.length; j++) { // ソート済みバンドリストを走査する var flag = true; // 連続する3つのバンドに同じメンバーがいない場合にtrueになるフラグを初期化 for (var k = 0; k < 3; k++) { // 3つ以上離れているかどうかを判断するためのループ if (!sortedBands[j + k]) { // リストの長さが足りない場合はフラグを下げる flag = false; break; } var otherBandMembers = bands[sortedBands[j + k]]; for (var l = 0; l < otherBandMembers.length; l++) { if (bandMembers.indexOf(otherBandMembers[l]) > -1) { // 重複するメンバーがいた場合はフラグを下げる flag = false; break; } } } if (flag) { // 連続する3つのバンドに同じメンバーがいない場合は、換気行を含めて挿入する sortedBands.splice(j + 3, 0, "~換気~"); sortedBands.splice(j + 3, 0, band); sorted = true; break; } } if (!sorted) { // 両隣が同じメンバーを含むバンドでない場合は、ソート済みリストにバンド名を追加 sortedBands.push(band); } } } var output = sortedBands.join("\n"); // ソート済みバンドリストを文字列に変換 document.getElementById("output").innerHTML = output; // 出力フィールドに表示する } </script> </head> <body> <h1>バンド名並べ替えツール</h1> <p>以下のフォームにバンド名と所属メンバーを入力して、「計算する」ボタンを押してください。</p> <textarea id="input" rows="10" cols="50"></textarea> <br> <button onclick="sortBands()">計算する</button> <br> <p>バンド名が並べ替えられた結果が以下に表示されます。</p> <pre id="output"></pre> <p>【注意事項】<br> ・入力されたバンド名は必ずユニークである必要があります。<br> ・同じメンバーが所属するバンド同士は、換気行を含めて3行以上離れるようになっています。<br> ・データにエラーがある場合、エラーメッセージが表示されます。</p> <p>【ジョーク】<br> Q. ギタリストが楽器をなくしたらどうなるか?<br> A.「ギ」と「タリスト」になる。</p> </body> </html>