[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 144
  • Last Modified:

scoreUp challenge

Hi,

I am working on below challenge
http://codingbat.com/prob/p180365



The "key" array is an array containing the correct answers to an exam, like {"a", "a", "b", "b"}. the "answers" array contains a student's answers, with "?" representing a question left blank. The two arrays are not empty and are the same length. Return the score for this array of answers, giving +4 for each correct answer, -1 for each incorrect answer, and +0 for each blank answer.


i was not clear on above description.

i was not clear how below result is 6 etc. please advise
scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "c"]) → 11
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "b"]) → 16
0
gudii9
Asked:
gudii9
  • 7
  • 4
  • 3
2 Solutions
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
sorry, but I wonder what is not clear about this exercice.
simply looping the array, comparing the values at the same indices, and depending on the values, sum up the scores...
0
 
gudii9Author Commented:
giving +4 for each correct answer, -1 for each incorrect answer, and +0 for each blank answer.

simply looping the array, comparing the values at the same indices, and depending on the values, sum up the scores...
i think i got it now


scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6

as 'a' is same in both array give +4
then a not same as c so -1
then b same as b +4
then b not same as c -1

total is 6

let me think on pseudo code and code now
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
yes, exactly
don't forget to code for the "blank" answers
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
gudii9Author Commented:
public int scoreUp(String[] key, String[] answers) {
  int count=0;
  for(int i=0;i<key.length;i++){
    if(( (!key[i].equals("?")) &&(!answers.equals("?")) &&(key[i]==answers[i]))){
      count=count+4;
    }else{
      count=count-1;
    }
  }
  return count;
}

Open in new window


above failing below tests. please advise
Expected      Run            
scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6      6      OK      
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "c"]) → 11      11      OK      
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "b"]) → 16      16      OK      
scoreUp(["a", "a", "b", "b"], ["?", "c", "b", "?"]) → 3      1      X      
scoreUp(["a", "a", "b", "b"], ["?", "c", "?", "?"]) → -1      -4      X      
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "b"]) → 7      6      X      
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "?"]) → 3      1      X      
scoreUp(["a", "b", "c"], ["a", "c", "b"]) → 2      2      OK      
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "a", "c", "a", "c"]) → 4      4      OK      
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "a", "c"]) → 6      4      X      
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "c", "c"]) → 11      9      X      
scoreUp(["a", "b", "c"], ["a", "b", "c"]) → 12      12      OK      
other tests
X
0
 
rrzCommented:
The challenge states  
"?" representing a question left blank.
this will appear in the "answers" array. Therefore the following  
(!key[i].equals("?"))

Open in new window

is not necessary. Your errors occur when there is a "?" in the answers. When it is found you add -1. That is wrong.
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
I confirm, and that is what I meant by:

don't forget to code for the "blank" answers
0
 
gudii9Author Commented:
The challenge states  
"?" representing a question left blank.
this will appear in the "answers" array. Therefore the following  
(!key[i].equals("?"))


is not necessary. Your errors occur when there is a "?" in the answers. When it is found you add -1. That is wrong.

Open in new window



what i supposed to do when i see question mark(?)
0
 
gudii9Author Commented:
public int scoreUp(String[] key, String[] answers) {
  int count=0;
  for(int i=0;i<key.length;i++){
    if(( (!key[i].equals("?")) &&(!answers.equals("?")) &&(key[i]==answers[i]))){
      count=count+4;
    }else if(key[i].equals("?")){
      count=0;
    }else if(answers[i].equals("?")){
      count=0;
    }else{
      count=count-1;
    }
  }
  return count;
}

Open in new window


something like above?
I am failing some tests. please advise
Expected      Run            
scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6      6      OK      
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "c"]) → 11      11      OK      
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "b"]) → 16      16      OK      
scoreUp(["a", "a", "b", "b"], ["?", "c", "b", "?"]) → 3      0      X      
scoreUp(["a", "a", "b", "b"], ["?", "c", "?", "?"]) → -1      0      X      
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "b"]) → 7      8      X      
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "?"]) → 3      0      X      
scoreUp(["a", "b", "c"], ["a", "c", "b"]) → 2      2      OK      
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "a", "c", "a", "c"]) → 4      4      OK      
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "a", "c"]) → 6      3      X      
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "c", "c"]) → 11      8      X      
scoreUp(["a", "b", "c"], ["a", "b", "c"]) → 12      12      OK      
other tests
X
0
 
gudii9Author Commented:
public int scoreUp(String[] key, String[] answers) {
  int count=0;
  for(int i=0;i<key.length;i++){
    if(( (!key[i].equals("?")) &&(!answers.equals("?")) &&(key[i]==answers[i]))){
      count=count+4;
    }else if(key[i].equals("?")){
      count=0;
    }else if(answers[i].equals("?")){
      count=count+0;
    }else if(!answers[i].equals(key[i])){
      count=count-1;
    }
  }
  return count;
}

Open in new window

something like above.
Above passes all tests.
any improvements or alternate approaches? please advise
0
 
rrzCommented:
That code works. But, the challenge states
"key" array is an array containing the correct answers to an exam
Therefore a "?" will  never be found in the key array.     So,
(!key[i].equals("?"))

Open in new window

and
else if(key[i].equals("?")){
      count=0;

Open in new window

are not necessary.

count=count+0;

Open in new window

That is confusing for the reader. You could just use
 continue;

Open in new window

0
 
gudii9Author Commented:
i see your point.

public int scoreUp(String[] key, String[] answers) {
  int count=0;
  for(int i=0;i<key.length;i++){
    if(( (!answers.equals("?")) &&(key[i]==answers[i]))){
      count=count+4;
    }/*else if(key[i].equals("?")){
      continue;
    }*/else if(answers[i].equals("?")){
      count=count+0;
    }else if(!answers[i].equals(key[i])){
      count=count-1;
    }
  }
  return count;
}

Open in new window


above looks ok? any improvements, alternate approaches?
0
 
rrzCommented:
above looks ok?
It looks ok, but you could clean it up to improve readability.
public int scoreUp(String[] key, String[] answers) {
  int count = 0;
  for(int i=0;i<key.length;i++){
    if(answers[i].equals("?"))continue;
    if(key[i]==answers[i]){
      count = count + 4;
    }else count--;
  }
  return count;
}

Open in new window

0
 
gudii9Author Commented:
why you chose if with if then else approach rather than
if with else if with else approach as i did ?
any specific advantage or disadvantage?
0
 
rrzCommented:
any specific advantage or disadvantage?
I just thought it was clearer.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 7
  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now