+ 1
I'm not able to pass Test Case #2 (YouTube ID Challenge)
I'm not able to pass Test Case #2, although my code is working perfectly with any youtube video url. Pleass help me :( Also, I'm trying it on C language. https://code.sololearn.com/c4uqeYk73KKD/?ref=app https://code.sololearn.com/c4uqeYk73KKD/?ref=app
15 Answers
+ 1
What is your logic of using indexes from 17 to 28 ? I don't understand, but you printing extra charecter there, so use i<28 instead of I<=28
+ 1
Tushar Kumar For passing all the SL test cases, this code is enough:
#include <stdio.h>
int main() {
char a[100];
fgets(a, 100, stdin);
puts(a + 17 + 15 * (a[8] == 'w'));
}
// Hope this helps
+ 1
Calvin Thomas please explain this part a + 17 + 15 * (a[8] == 'w')
+ 1
Tushar Kumar The 'puts()' function takes a char pointer as its argument. From this character pointer onwards, the function writes every character to the stdout file (the operating system prints every single character to the screen) until a null character is encountered. In my code, whenever the ninth character of the input text contains a 'w' (i.e., the www format), the video id starts from the 33rd position onwards, all the way to the last position. In this case, "17 + 15 * (a[8] == 'w')" evaluates to "17 + 15 * (1)" {since C doesn't have a boolean type, '1' means true and '0' means false in boolean expressions} which finally evaluates to "32". This offset is added to the char pointer, thereby, making it point to the 32nd element from the first letter (i.e., the 33rd character, which is actually the starting point of the video id). Note that pointer arithmetic works like this:
Pointer + offset ==> ptr + n * sizeof(ptr)
+ 1
Now, whenever the input is of the second form, the ninth character isn't 'w'. So, "17 + 15 * (a[8] == 'w')" evaluates to "17 + 15 * (0)" (as '0' means 'false' in C), which in turn evaluates to "17", meaning that the id starts from the 18th character onwards. I hope that this explanation helps.
+ 1
Calvin Thomas Great explanation! This means a lot, thank you.
+ 1
//Why this has to be too much complex
#include <stdio.h>
#include <string.h>
int main() {
int index;
char url[40];
scanf("%s", url);
index = strlen(url) - 11;
puts(url + index);
}
+ 1
🌀 Shail Murtaza شعیل مرتضیٰ Well ya not in challenge but this case may arise when user open a video link using shortened youtu.be link.
+ 1
Tushar Kumar Here's another way to do this without the need to store all the elements of the array:
for (char i=0,j=0,k;(k=getchar())>0;i++) {
if (i == 8 && k == 'w') j++;
else if (i > 16 + 15 * j) putchar(k);
}
// Max. memory used = 3 bytes
// Hope this helps
0
Jayakrishna🇮🇳 Omg Thank you So much! It worked and I passed the both cases.
Actually here when condition is true I'm trying to print next 11 character from current index cos it contains youtube video ID.
0
Oh. I have no idea of fixed length 11 charecters. I think it may vary.. and problem contains 1st,3rd type of input only.. so 2nd,4th if blocks not useful here. Anyways its done.👍 You're welcome...
0
Calvin Thomas Thank you Sir, it's really helpful. Just wondering how arguments inside puts is working. Please explain that part.
0
Tushar Kumar You're welcome.
0
🌀 Shail Murtaza شعیل مرتضیٰ Well maybe becaus of this case where video ID is somewhere at the middle like
https://m.youtube.com/watch?v=bWLgA4jUkuw&feature=youtu.be
(this case not included in challenge)
0
Tushar Kumar
Ok
But! There is not any case like that