(PHP) Tous les tests passent dans la page de code à 100%. et seulement 85 % après soumission sur question 2 et 3.

(PHP) all code example passed in dev hud. but after submiting only 85 % . any clue ?

# Temperatures puzzle discussion

**jpboudet**#694

**rahulthaker**#695

```
int CT=abs(temp[0]);
int j=sizeof(temp);
for(int i=0;i<n;i++)
{
if(CT>abs(temp[i]))
{
CT=abs(temp[i]);
p=i;
}
}
for(int i=0;i<n;i++)
{
if(CT==abs(temp[i]))
{
if(temp[p]<temp[i])
{
CT=temp[i];
}
}
else
{
CT=temp[p];
}
}
```

whats the problem with this code i cant get through the the 3 test case everything else does work

**_CG_Thibaud**#696

I advise you to add “error prints” to your algorithm to know the values of CT and p for example. You’ll quickly see the mistake in your code. Good luck!

**RickGladwin**#697

Thanks! That did it. My code has a section that tests if the input is numeric, and sets the output to zero if that’s the case. The initial input values are string values, not integers. I ran intval() on the input value first, and it works now.

**sojib-bd**#698

I am stuck… I don’t know where is the bug.Can anyone help me out?

/**

* Auto-generated code below aims at helping you parse

* the standard input according to the problem statement.

**/

```
const n = parseInt(readline()); // the number of temperatures to analyse
var inputs = readline().split(' ');
var arr=[];
for (let i = 0; i < n; i++) {
var t = parseInt(inputs[i]); // a temperature expressed as an integer ranging from -273 to 5526
if(t<0){return 1}
arr.push(t);
}
var closeToZero=Math.min(...arr);
// if(closeToZero<0){return 1}
// Write an action using print()
// To debug: printErr('Debug messages...');
print('closeToZero');
```

**Sarah19**#700

Please help me.

I dont understant the input of this programm.

We have n = nmbrs of temperature : n = int(raw_input()) ok

And we must have a string with the n temperatures, where is it ?

do we have to write it ?

Also I dont understant that line

for i in raw_input().split():

# t: a temperature expressed as an integer ranging from -273 to 5526

t = int(i)

because in this case t will be 1, 2 ,3, 4 , …

Why is it to be a string ? will not be better a list ?

So after we can take the min, of abs of the values in this list.

Thanks for your help

**BryanCampos**#701

Hey there I need some help in this,

I will revisit this later in the day that i am writing this but some tips or subtle hints would be greatly appreciated. This is logic that i have in the standard loop for the problem.

```
if(i >= 1){
if(Math.abs(pastNum) < Math.abs(t)){
result = String.valueOf(pastNum);
}
else if (Math.abs(t) < Math.abs(pastNum)) {
result = String.valueOf(t);
}
else if (Math.abs(pastNum) == Math.abs(t)){
if(pastNum > 0){
result = String.valueOf(pastNum);
}
else if (t > 0){
result = String.valueOf(t);
}
else{
result = String.valueOf(t);
}
}
}
else{
pastNum = t;
}
```

Thanks again.

**JustQ**#702

So guys, I’m a total noob and trying to solve this… I’ve managed to get through most of the tests with the code I wrote (though it’s probably not the most convenient way) But I don’t see how I can pick the positive temperature instead of the negative one, any help on this?

my code:

```
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
/**
* Auto-generated code below aims at helping you parse
* the standard input according to the problem statement.
**/
int main()
{
int zero = 0;
int result = 0 ;
int n; // the number of temperatures to analyse
cin >> n; cin.ignore();
//loop temperatures on row
for (int i = 0; i < n; i++) {
int t; // a temperature expressed as an integer ranging from -273 to 5526
cin >> t; cin.ignore();
if(i == 0 || (t < zero && ((zero - result) > (zero - t))) || ((t > zero && (zero + result) > (zero + t)))) {
result = t;}
}
// Write an action using cout. DON'T FORGET THE "<< endl"
// To debug: cerr << "Debug messages..." << endl;
cout << result << endl;
```

**JustQ**#704

Many thanks, did not know about the sqrt() function. Had to include the <math.h> library though. I’ve changed my if statement to the following and now it’s working!

```
if(sqrt(t*t) == sqrt(result*result)){
result = sqrt(result*result);
}
else if(i == 0 || (t < zero && ((zero - result) > (zero - t))) || ((t > zero && (zero + result) > (zero + t)))) {
result = t;}
```

**_CG_SaiksyApo**#705

If you solved it to 100%, you have now access to published solutions (https://www.codingame.com/training/easy/temperatures/solution). I’m sure you will find more tricks to learn.

**JustQ**#706

Thanks, did not know about that yet. I now managed to get the abs() function in, instead of calculating the absolute integer myself. However, many of the functions I see in the solutions I haven’t familiarized myself yet, so I guess I’ll have to learn a little more before I can fully understand them, thanks again!

**12944qwerty**#707

Hi, I am using python3.

I haven’t been able to do any of the test case with any of the codes I have written. It always returns the furthest number. This is what I have.

```
import sys
import math
# Auto-generated code below aims at helping you parse
# the standard input according to the problem statement.
n = int(input()) # the number of temperatures to analyse
# print(type(input())) # String
if n == 0:
closest=0
else:
for i in (input().split()):
# t: a temperature expressed as an integer ranging from -273 to 5526
t = int(i)
closest = 5527
if abs(t)<int(closest):
closest = t
# Write an action using print
# print("Debug messages...", file=sys.stderr)
print(closest)
```

**nicola1**#708

You can initialize closest with float(“inf”).

Moreover, “-5 5” will fail but “5 -5” will succeed.

**ebidna**#709

My code works well on any other website, but it’s not working on CodinGame. It works for 1,2,4, but it tells me it returns “12” for #3 and “-4” for #5. Any thoughts?

My code:

```
n = int(input()) # the number of temperatures to analyse
templist = {}
realtemp = []
abstemp = []
newlist =[]
for i in input().split():
# t: a temperature expressed as an integer ranging from -273 to 5526
a = int(i) # log the
t = (abs(int(i)))
realtemp.append(a)
abstemp.append(t)
def dedupe(list):
for m in list:
if (list.count(m)+list.count(-m))>1:
list[m]=abs(m)
return list
newtemp = dedupe(realtemp)
templist= dict(zip(newtemp,abstemp))
answer = min(templist, key=templist.get)
```

**_CG_Thibaud**#710

it seems you just need to implement the following rule to validate all test cases:

If two numbers are equally close to zero, positive integer has to be considered closest to zero(for instance, if the temperatures are -5 and 5, then display 5).

**scml**#712

does any one know why (b) keep sending 0 as output ?

where and how to declare b to prevent this from happening?

```
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/**
* Auto-generated code below aims at helping you parse
* the standard input according to the problem statement.
**/
int main()
{
int n; // the number of temperatures to analyse
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int t;
// a temperature expressed as an integer ranging from -273 to 5526
scanf("%d",&t);
printf("t=%d\n",t);// just for debugging
if (abs(t)<b){b=t;}
printf("b=%d\n",b);
if (n==i) {printf("%d\n",b);}
}
// Write an action using printf(). DON'T FORGET THE TRAILING \n
// To debug: fprintf(stderr, "Debug messages...\n");
//printf("%d\n",b);
return 0;
}
```

the output

```
### Standard Output Stream:
t=1
b=0
t=-2
b=0
t=-8
b=0
t=4
b=0
t=5
b=0
### Failure
Found:
t=...
Expected:
1
```

**OptiPanda**#714

B equals 0, everything is greater than it. you should initialise b to 9999 at the same place you initialise n.