 # ERROR - Editorial

### PROBLEM LINK:

Author: Vivek Hamirwasia
Tester: Mahbub
Editorialist: Jingbo Shang

Cakewalk

### PREREQUISITES:

Programming Language.

### PROBLEM:

Determine whether the given binary string contains the substring (consecutive) “010” or “101”.

### EXPLANATION:

You can use a loop and condition clauses to check directly. Also, you can use some built-in functions to solve this problem too.

For example, C++, we can use

``````int position = strstr(s, "010") - s;
``````

to get the first occurrence of “010” and check whether this position is in range. Or, if string is used in C++, then

``````int position = s.find("010");
``````

will work for string.

Similarly, Java, Python, etc… a lot of languages have such functions. Post your accepted solution and let’s find which one is the shortest! I think it will be interesting ### AUTHOR’S AND TESTER’S SOLUTIONS:

Author’s solution can be found here.
Tester’s solution can be found here.

1 Like

Using Python’s elegance
http://www.codechef.com/viewsolution/3250941

``````for _ in xrange(input()):
s = raw_input()
if "010" in s or "101" in s: print "Good"
else:                        print "Bad"
``````

P.S.: Waiting for a one liner in Perl or GolfScript UPDATE: If that’s the case @shangjingbo, then how about a Perl regex check

``\$s =~ m/"101"/``
1 Like

Well, when I’m good with Monads I can return and fully solve this one in Haskell, but, the built-in functions sure are a charm:

``````isInfixOf "010" "10010"
`````` 1 Like

@all:

May i know what is wrong with this approach. http://www.codechef.com/viewsolution/3177973

I was checking characters at i, i-1, i-2 in a loop.

Thanks what is wrong wid this…
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{
int t;
char a , b , c ,d ,count ;
scanf("%d" , &t);
while(t–)
{
count = 0;
a = getchar();
b = getchar();
c = getchar();
while( (d = getchar()) != ’
')
( (a==‘0’ && b==‘1’ && c==‘0’) || (a == ‘1’ && b==‘0’ && c==‘1’)) ? ( (count++) , (a = b) , ( b = c) , (c = d )): ((a = b) , ( b = c), (c = d ));
(count > 0)?(printf("Good
")):(printf("Bad
"));
}
getch();
return 0;
}

@ rd13123013
When 010 or 101 comes at the last of the string …then d==’
’ .Therefore ,it doesn’t enters into While loop…so the count doesn’t increasing …and there lies the bug.

`` So , you can overcome this by using "do() ...while()..loop" :)``
2 Likes

int main()
{
int t;
cin>>t;
while(t–) {
std::string str("");
cin>>str;
if((str.find(“010”)==!std::string::npos) || (str.find(“101”)==!std::string::npos))
{
cout<<endl<<“Good”<<endl;
}
else
{
cout<<endl<<“Bad”<<endl;
}
}
system(“pause”);
return 0;
}

What is wrong with this code? Similar code accepted in java but this is not working.

class Sample7

@t=0
@str

def initialize
t=gets.to_i

``````for i in 0...t
str=gets
if str.include?"101"||"010"
puts "Good"
else puts "Bad"
end
end
``````

end
end

obj=Sample7.new

WHAT IS WRONG IN MY CODE?
#include
#include<string.h>
using namespace std;
int main()
{
int t;
long int l,i,c,d,j,e;
cin>>t;
while(t–)
{
char s;
cin>>s;
l=strlen(s);
for(i=0;i<l-2;i++)
{
e=2;
c=0;
j=i;
while(e–)
{
if(s[j]!=s[j+1])
c++;
else
break;
j++;
}
if(c==2)
{
cout<<“good”<<endl;
break;
}
}
if(c!=2)
cout<<“bad”<<endl;
}
return 0;
}

``````Guys can anyone tell what is wrong with this python code for the problem, according to me it is correct.....

lst=[]
a=int(input())
i=0
while i<a:
str1=input()
lst.append(str1)
i=i+1

i=0

for j in lst:
if '010' in j and '101' in j:
print("Good")
else:
print("Bad")
``````

Guys can anyone tell what is wrong with this python code for the problem, according to me it is correct…

``````lst=[]
a=int(input())
i=0
while i<a:
str1=input()
lst.append(str1)
i=i+1

i=0

for j in lst:
if '010' in j and '101' in j:
print("Good")
else:
print("Bad")``````

#include
#include
using namespace std;
int main(){
int a;
cin>>a;
while(a–){
string s;int c=0;
cin>>s;
for(int i=0;i<(s.length()-1)&&c<2;i++){
if(s*!=s[i+1])c++;
else c=0;
}
if(c==2)cout<<“Good”<<endl;
else cout<<“Bad”<<endl;
}
return 0;
}

link text

@s_pandey01
It is in the checking stage. if ‘010’ in j and ‘101’ in j:
it should use ‘or’ instead of ‘and’. If ‘and’ is used, then ‘Good’ will only print out when both ‘010’ and ‘101’ are in the line.

1 Like

import java.util.Scanner;
class untitled
{
public static void main(String[] args)
{
Scanner kb=new Scanner(System.in);
int test=kb.nextInt();
while(test–>0)
{
String s1=kb.next();
String s2=“010”;
String s3=“101”;
if(s1.contains(s2)||s1.contains(s3))
System.out.println(“Good”);
else
System.out.println(“Bad”);
}
}
}
benefit of java!.. I think it may be the shortest one sound great, but you have benn beaten by @kuruma, have another try 1 Like

@shangjingbo >> I was not trying to enter any competition for shortest code. I was just demonstrating Python’s elegance. The problem with this check is that it doesn’t receive input and produce output, instead, it can be used in an interactive fashion, but, I’m loving Haskell so far Wow, great!

I foolishly tried to implement “Z- algo”… :P. Someone kick me on my ass…

4 Likes