A place to share links to other websites and interesting articles
kenbrooker
Posts: 121
Joined: Mon Feb 19, 2018 3:05 am
Location: Oregon, USA

Thought I'd give UVa Online Judge a try but can't get to First Base because
I have received no reply to my online queries to UVa in almost a month...

I submitted the following code for the 3n+1 Problem #100:

Code: Select all

/*
THE 3N + 1 PROBLEM

Problems in Computer Science are often classified as belonging to a certain class of problems (e.g.,
NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose
classification is not known for all possible inputs.

Consider the following algorithm:

1. input n
2. print n
3. if n = 1 then STOP
4. if n is odd then n <- 3n + 1
5. else n <- n/2
6. GOTO 2

Given the input 22, the following sequence of numbers will be printed
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

It is conjectured that the algorithm above will terminate (when a 1 is printed) for any integral input
value. Despite the simplicity of the algorithm, it is unknown whether this conjecture is true. It has
been verified, however, for all integers n such that 0 < n < 1, 000, 000 (and, in fact, for many more
numbers than this.)

Given an input n, it is possible to determine the number of numbers printed before and including
the 1 is printed. For a given n this is called the cycle-length of n. In the example above, the cycle
length of 22 is 16.

For any two numbers i and j you are to determine the maximum cycle length over all numbers
between and including both i and j.

Input
The input will consist of a series of pairs of integers i and j, one pair of integers per line.
All integers will be less than 10,000 and greater than 0.
You should process all pairs of integers and for each pair determine the maximum cycle length over
all integers between and including i and j.
You can assume that no operation overflows a 32-bit integer.

Output
For each pair of input integers i and j you should output i, j, and the maximum cycle length for
integers between and including i and j. These three numbers should be separated by at least one space
with all three numbers on one line and with one line of output for each line of input. The integers i
and j must appear in the output in the same order in which they appeared in the input and should be
followed by the maximum cycle length (on the same line).

Sample Input
1 10
100 200
201 210
900 1000

Sample Output
1 10 20
100 200 125
201 210 89
900 1000 174
*/

class aUVa100
{
public static void main(String args [ ])
{
double start = System.currentTimeMillis();

int InputMinRay[] = {1, 100, 201, 900};
int InputMaxRay[] = {10, 200, 210, 1000};

for(int i = 0; i < 4; i++)
{
int MaxCycleLength = 0;

for(int j = InputMinRay[i]; j <= InputMaxRay[i]; j++)
{
float k = j;
int CycleLength = 1;

while(k != 1)
{
if(k % 2 == 1) k = 3*k+1;
else k = k/2;
CycleLength += 1;
if(CycleLength > MaxCycleLength) MaxCycleLength = CycleLength;
}
}

System.out.println(InputMinRay[i] + " " + InputMaxRay[i] + " " + MaxCycleLength);
}

double finish = System.currentTimeMillis();
System.out.println("RunTime = " + (finish - start)/1000 + " Secs");
}
}

and UVa reported the following:
Problem 100 - The 3n + 1 problem has received the verdict Runtime Error.
This means that the execution of your program didn't finish properly.
Remember to always terminate your code with the exit code 0.
(without "the exit code 0" the code runs fine on my laptop...)

So I added "System.exit(0);" at the end of my code as follows:
(which also runs fine on my laptop...)

Code: Select all

class aUVa100
{
public static void main(String args [ ])
{
double start = System.currentTimeMillis();

int InputMinRay[] = {1, 100, 201, 900};
int InputMaxRay[] = {10, 200, 210, 1000};

for(int i = 0; i < 4; i++)
{
int MaxCycleLength = 0;

for(int j = InputMinRay[i]; j <= InputMaxRay[i]; j++)
{
float k = j;
int CycleLength = 1;

while(k != 1)
{
if(k % 2 == 1) k = 3*k+1;
else k = k/2;
CycleLength += 1;
if(CycleLength > MaxCycleLength) MaxCycleLength = CycleLength;
}
}

System.out.println(InputMinRay[i] + " " + InputMaxRay[i] + " " + MaxCycleLength);
}

double finish = System.currentTimeMillis();
System.out.println("RunTime = " + (finish - start)/1000 + " Secs");
System.exit(0);		//<<<<<<<<<<<<<<<<<<<<<<<<
}
}

and UVa reported the following:
Problem 100 - The 3n + 1 problem has received the verdict Compilation Error.
Our compiler was not able to properly proccess[sic] your submitted code.
This is the error returned:

Main.java:35: error: expected
System.exit(0);
..............^
Main.java:35: error: illegal start of type
System.exit(0);
...............^
2 errors
I must be doing something fundamentally wrong (or...

All Of The Above surely reinforces my
Project Euler!!

(I was expecting trouble with
how to handle "Input" data,
internally or externally,
but
I can't even get to
First Base ;(
"Good Judgment comes from Experience;
..."

jaap
Posts: 538
Joined: Tue Mar 25, 2008 3:57 pm
Contact:

Maybe you need to make the class public for it to run:

Code: Select all

public class aUVa100

kenbrooker
Posts: 121
Joined: Mon Feb 19, 2018 3:05 am
Location: Oregon, USA

Excellent Idea jaap...

I experienced that very same "public" embarrassment in trying to use
Oracle's Java SE Development Kit...

But UVa still isn't satisfied:
Compilation error for submission 22058779

Main.java:2: error: class aUVa100 is public, should be declared in a file named aUVa100.java
public class aUVa100
........^
1 error
It IS "declared in a file named aUVa100.java" but...
At least it's a different error!!
Let's "class"ify that as...
Progress?
"Good Judgment comes from Experience;
..."

jaap
Posts: 538
Joined: Tue Mar 25, 2008 3:57 pm
Contact:

kenbrooker wrote:
Mon Oct 01, 2018 7:49 pm
Main.java:2: error: class aUVa100 is public, should be declared in a file named aUVa100.java
It IS "declared in a file named aUVa100.java" but...
I don't know the online IDE/compiler this site uses, and I don't think I can access it without becoming a member.

It clearly thinks it is in a file called Main.java. If you can't change what it thinks the file is called, then maybe as a workaround you should call the class Main. [Edit: Apparently this is what you should do. I saw it mentioned in the chatbox on the site.]

Surely somewhere on that site there is some kind of documentation or help file that tells you about what it expects of the code you want it to run?

hk
Posts: 10403
Joined: Sun Mar 26, 2006 9:34 am
Location: Haren, Netherlands

Here is a sample JAVA code from the site itself:
https://uva.onlinejudge.org/data/p100.java.html

kenbrooker
Posts: 121
Joined: Mon Feb 19, 2018 3:05 am
Location: Oregon, USA

Thankyou Both,
hk and jaap,

As you said jaap,
(I) should call the class Main. (and) Surely somewhere on that site there is some kind of documentation or
help file that tells you about what it expects of the code you want it to run?
And hk dug out that documentation/help file
from the site itself(!!)
under Additional Information/Submission Specification, which I was too blind to see,
and in the form of a sample Java submission
which is... PURE GOLD to me...

There's even an "About Numerical Difficulties" PDF written by
another Netherlander : )

THANKS
AGAIN!!
Ken
"Good Judgment comes from Experience;
..."

hk
Posts: 10403
Joined: Sun Mar 26, 2006 9:34 am
Location: Haren, Netherlands

The only thing I did was enter in Google's search field: "uva online judge java".
Then the first few results gave what you needed.
Have fun.

kenbrooker
Posts: 121
Joined: Mon Feb 19, 2018 3:05 am
Location: Oregon, USA

The only thing I did was enter in Google's search field: "uva online judge java".
DERN... I Googled on "uva online judge," not thinking to add "java," and
carefully searched through 6 or 7 pages without finding any such
PURE GOLD... Let that be a lesson to me...

But any happy ending is...
Fun enough for me...

Thanks
Again!!
"Good Judgment comes from Experience;