バンド名並べ替えツール
以下のフォームにバンド名と所属メンバーを入力して、「計算する」ボタンを押してください。
バンド名が並べ替えられた結果が以下に表示されます。
【注意事項】
・入力されたバンド名は必ずユニークである必要があります。
・同じメンバーが所属するバンド同士は、換気行を含めて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>