私はCodeWars Kata:ZerosとOnesを解決しようとしています。 私のコードは、1800を超える試行テストを解決し、100を超えて失敗します。 私の問題は、テストデータが大きすぎるために見ることができないことです。 他のkatasのテストデータを表示するには、console.logステートメントを使用できます。 しかし、このチャレンジのテストデータは大きすぎます。私は入力配列の最初の部分のリストを取得し、その後に "と400個以上の項目"を表示します。配列でJavaScriptコードが動作しないのはなぜですか?
以下は、いくつかのテストケースとともにkataとmy codeの説明です。 私のコード実行時に失敗するテストケースを作成しようとしました。しかし、私は失敗するものを作ることはできません。
- 私のロジックは鳴っていますか?私は論理に何かを欠いていますか?
- 失敗するテストケースを提供できますか? (それは私がそれを修正するために私のコードを分析しなければならないと私は学習に役立つ方が良いでしょう。)
のみ0と1を含む配列を指定して、変換した場合、 ゼロのインデックスを見つけます1つにすると、最も長いシーケンスが になります。例えば、配列が与えられた場合... [1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1]、 ... のインデックス10(0から数えて)でゼロを置き換えると、9個のシーケンスが形成されます。あなたの仕事は、 のゼロを最大長のサブシーケンスにするためにどこに置き換えるかを決定する関数replaceZero()を書くことです。 です。注: が複数の結果である場合、最後の[1,1,0,1,1,0,1,1] // => 5を返します。 配列には常に0と1が含まれます。よし
function replaceZero(arr){
var highestCt = 0;
var returnIdx = 0;
var onesCt = 0;
var currentHighOnesCt = 0;
function countOnes(currentIZ){ // The input should be the current index of the ZERO.
for(var j = currentIZ - 1; j >= 0; j--){ // Go backwards until a zero is found, or to the beginning of the array.
if(arr[j] === 1){
onesCt = onesCt + 1;
}
else { // if arr[j] === 0
break;
}
}
for(var k = currentIZ + 1; k < arr.length; k++){ // Go forwards to a zero or the end of the array.
if(arr[k] === 1){
onesCt = onesCt + 1;
}
else { // if arr[k] === 0
break;
}
}
if(onesCt >= currentHighOnesCt){
currentHighOnesCt = onesCt;
returnIdx = currentIZ;
}
onesCt = 0;
}
for(var i = 0; i < arr.length - 2; i++)
if(arr[i] === 1 && arr[i + 1] === 0 && arr[i + 2] === 1){
countOnes(i + 1); // Send the index of the ZERO.
}
// console.log("returnIdx: " + returnIdx);
return returnIdx;
}
/*
replaceZero([0,0,1,1,1,0,1,1,0,0,1,0]); // 5
replaceZero([0,0,0,1,1,1,0,1,1,0,0,0]); // 6
replaceZero([1,1,1,1,0,1]); // 4
*/
replaceZero([1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1]); // 9
replaceZero([1,0,0,0,1,0,1,1]); // 5
/*
replaceZero([0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,1,1]); // 6
replaceZero([0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0]); // 8
replaceZero([0,0,1,0,0,1,1,0,1,1,0,0,1,1,1,0,1,1,0]); // 15
replaceZero([1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,1]); // 10;
replaceZero([1,1,0,1,1,0,1,1]); // 5;
replaceZero([1,1,1,0,1,1,0,1,1,1]); // 6);
*/
この質問は、https://codereview.stackexchange.com/ – charlietfl
に適しています。コードレビューでルールを読みました。それはコードが機能している必要があると述べた。私のコードは動作していません。 – Janet
あなたはkataへのリンクを提供できますか? – randomguy04