public class Main {
public static void main
( String [ ] args
) { Train train = new Train( 5000 , 5000 ) ;
Counter counter = new Counter( train) ;
counter.countNumberOfCars ( ) ;
}
}
class Car {
private boolean isLightOn;
Car( ) {
switch ( ( int ) ( Math .
random ( ) * 2 ) ) { case 0 :
setLightOn( false ) ;
break ;
case 1 :
setLightOn( true ) ;
break ;
}
}
void setLightOn( boolean isLightOn) {
this .isLightOn = isLightOn;
}
boolean isLightOn( ) {
return isLightOn;
}
}
public class Train {
private Car[ ] cars;
private int size;
Train( int minimalSize, int maximumSize) {
size
= minimalSize
+ ( int ) ( Math .
random ( ) * ( maximumSize
- minimalSize
+ 1 ) ) ;
cars = new Car[ size] ;
for ( int i = 0 ; i < size; i++ )
cars[ i] = new Car( ) ;
}
Car getCar( ) {
return cars[ 0 ] ;
}
void goToNextCar( ) {
Car temp = cars[ 0 ] ;
for ( int i = 0 ; i < size - 1 ; i++ )
cars[ i] = cars[ i + 1 ] ;
cars[ size - 1 ] = temp;
}
void goToPreviousCar( ) {
Car temp = cars[ size - 1 ] ;
for ( int i = size - 1 ; i > 0 ; i-- )
cars[ i] = cars[ i - 1 ] ;
cars[ 0 ] = temp;
}
}
public class Counter {
private Train train;
Counter( Train train) {
this .train = train;
}
private int minimalNumberOfCars;
void countNumberOfCars( ) {
int guess = guessNumberOfCars( ) ;
System .
out .
println ( "Number of cars where should stop: " + guess
) ;
int i = 0 ;
while ( true ) {
Car car = train.getCar ( ) ;
i++;
if ( i == guess) {
car.setLightOn ( true ) ;
break ;
} else {
car.setLightOn ( false ) ;
train.goToNextCar ( ) ;
}
}
int numberOfCars = 0 ;
while ( true ) {
train.goToPreviousCar ( ) ;
Car car = train.getCar ( ) ;
numberOfCars++;
if ( car.isLightOn ( ) )
break ;
if ( numberOfCars == guess && ! car.isLightOn ( ) ) {
minimalNumberOfCars = numberOfCars + 1 ;
countNumberOfCars( ) ;
}
}
System .
out .
println ( "Number of cars: " + numberOfCars
) ; }
private int guessNumberOfCars( ) {
int guess
= minimalNumberOfCars
+ ( int ) ( Math .
random ( ) * 10000 ) ;
return guess;
}
}
cHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFRyYWluIHRyYWluID0gbmV3IFRyYWluKDUwMDAsIDUwMDApOwoKICAgICAgICBDb3VudGVyIGNvdW50ZXIgPSBuZXcgQ291bnRlcih0cmFpbik7CgogICAgICAgIGNvdW50ZXIuY291bnROdW1iZXJPZkNhcnMoKTsKICAgIH0KfQoKY2xhc3MgQ2FyIHsKICAgIHByaXZhdGUgYm9vbGVhbiBpc0xpZ2h0T247CgogICAgQ2FyKCkgewogICAgICAgIHN3aXRjaCgoaW50KSAoTWF0aC5yYW5kb20oKSAqIDIpKSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIHNldExpZ2h0T24oZmFsc2UpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBzZXRMaWdodE9uKHRydWUpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIHNldExpZ2h0T24oYm9vbGVhbiBpc0xpZ2h0T24pIHsKICAgICAgICB0aGlzLmlzTGlnaHRPbiA9IGlzTGlnaHRPbjsKICAgIH0KCiAgICBib29sZWFuIGlzTGlnaHRPbigpIHsKICAgICAgICByZXR1cm4gaXNMaWdodE9uOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgVHJhaW4gewogICAgcHJpdmF0ZSBDYXJbXSBjYXJzOwoKICAgIHByaXZhdGUgaW50IHNpemU7CgogICAgVHJhaW4oaW50IG1pbmltYWxTaXplLCBpbnQgbWF4aW11bVNpemUpIHsKICAgICAgICBzaXplID0gbWluaW1hbFNpemUgKyAoaW50KSAoTWF0aC5yYW5kb20oKSAqIChtYXhpbXVtU2l6ZSAtIG1pbmltYWxTaXplICsgMSkpOwoKICAgICAgICBjYXJzID0gbmV3IENhcltzaXplXTsKCiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAgICAgY2Fyc1tpXSA9IG5ldyBDYXIoKTsKICAgIH0KCiAgICBDYXIgZ2V0Q2FyKCkgewogICAgICAgIHJldHVybiBjYXJzWzBdOwogICAgfQoKICAgIHZvaWQgZ29Ub05leHRDYXIoKSB7CiAgICAgICAgQ2FyIHRlbXAgPSBjYXJzWzBdOwoKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZSAtIDE7IGkrKykKICAgICAgICAgICAgY2Fyc1tpXSA9IGNhcnNbaSArIDFdOwoKICAgICAgICBjYXJzW3NpemUgLSAxXSA9IHRlbXA7CiAgICB9CgogICAgdm9pZCBnb1RvUHJldmlvdXNDYXIoKSB7CiAgICAgICAgQ2FyIHRlbXAgPSBjYXJzW3NpemUgLSAxXTsKCiAgICAgICAgZm9yKGludCBpID0gc2l6ZSAtIDE7IGkgPiAwOyBpLS0pCiAgICAgICAgICAgIGNhcnNbaV0gPSBjYXJzW2kgLSAxXTsKCiAgICAgICAgY2Fyc1swXSA9IHRlbXA7CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBDb3VudGVyIHsKICAgIHByaXZhdGUgVHJhaW4gdHJhaW47CgogICAgQ291bnRlcihUcmFpbiB0cmFpbikgewogICAgICAgIHRoaXMudHJhaW4gPSB0cmFpbjsKICAgIH0KCiAgICBwcml2YXRlIGludCBtaW5pbWFsTnVtYmVyT2ZDYXJzOwoKICAgIHZvaWQgY291bnROdW1iZXJPZkNhcnMoKSB7CiAgICAgICAgaW50IGd1ZXNzID0gZ3Vlc3NOdW1iZXJPZkNhcnMoKTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW1iZXIgb2YgY2FycyB3aGVyZSBzaG91bGQgc3RvcDogIiArIGd1ZXNzKTsKCiAgICAgICAgaW50IGkgPSAwOwoKICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgIENhciBjYXIgPSB0cmFpbi5nZXRDYXIoKTsKCiAgICAgICAgICAgIGkrKzsKCiAgICAgICAgICAgIGlmKGkgPT0gZ3Vlc3MpIHsKICAgICAgICAgICAgICAgIGNhci5zZXRMaWdodE9uKHRydWUpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY2FyLnNldExpZ2h0T24oZmFsc2UpOwoKICAgICAgICAgICAgICAgIHRyYWluLmdvVG9OZXh0Q2FyKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludCBudW1iZXJPZkNhcnMgPSAwOwoKICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgIHRyYWluLmdvVG9QcmV2aW91c0NhcigpOwoKICAgICAgICAgICAgQ2FyIGNhciA9IHRyYWluLmdldENhcigpOwoKICAgICAgICAgICAgbnVtYmVyT2ZDYXJzKys7CgogICAgICAgICAgICBpZihjYXIuaXNMaWdodE9uKCkpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGlmKG51bWJlck9mQ2FycyA9PSBndWVzcyAmJiAhY2FyLmlzTGlnaHRPbigpKSB7CiAgICAgICAgICAgICAgICBtaW5pbWFsTnVtYmVyT2ZDYXJzID0gbnVtYmVyT2ZDYXJzICsgMTsKCiAgICAgICAgICAgICAgICBjb3VudE51bWJlck9mQ2FycygpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bWJlciBvZiBjYXJzOiAiICsgbnVtYmVyT2ZDYXJzKTsKICAgIH0KCiAgICBwcml2YXRlIGludCBndWVzc051bWJlck9mQ2FycygpIHsKICAgICAgICBpbnQgZ3Vlc3MgPSBtaW5pbWFsTnVtYmVyT2ZDYXJzICsgKGludCkgKE1hdGgucmFuZG9tKCkgKiAxMDAwMCk7CgogICAgICAgIHJldHVybiBndWVzczsKICAgIH0KfQ==
compilation info
Main.java:36: error: class Train is public, should be declared in a file named Train.java
public class Train {
^
Main.java:73: error: class Counter is public, should be declared in a file named Counter.java
public class Counter {
^
2 errors
stdout