/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
( String [ ] args
) { Player p = new Player( ) ;
NPC other = new NPC( ) ;
for ( int turn = 0 ; turn < 10 ; turn++ ) {
System .
out .
printf ( "turn %d%n" , turn
) ; for ( LevelCrawler current : new LevelCrawler[ ] { p, other} ) {
move( current) ;
}
}
}
private static void move( LevelCrawler crawler) {
GameObject go = RANDOM.nextBoolean ( ) ? new Chest( ) : new NPC( ) ;
go.accept ( crawler) ;
}
}
interface LevelCrawler {
void handle( Chest c) ;
void handle( NPC npc) ;
}
class Player implements LevelCrawler {
public void handle( Chest c) {
System .
out .
println ( "opening a chest" ) ; }
public void handle( NPC npc) {
System .
out .
println ( "meeting NPC" ) ; }
}
abstract class GameObject {
abstract void accept( LevelCrawler p) ;
}
class Chest extends GameObject {
@Override
void accept( LevelCrawler p) {
p.handle ( this ) ;
}
}
class NPC extends GameObject implements LevelCrawler {
@Override
void accept( LevelCrawler p) {
p.handle ( this ) ;
}
@Override
public void handle( Chest c) {
System .
out .
println ( "chests are for the players, leaving it alone" ) ; }
@Override
public void handle( NPC npc) {
System .
out .
println ( "forming group with other npc" ) ; }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFJhbmRvbSBSQU5ET00gPSBuZXcgUmFuZG9tKCk7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgUGxheWVyIHAgPSBuZXcgUGxheWVyKCk7CiAgICAgICAgTlBDIG90aGVyID0gbmV3IE5QQygpOwoKICAgICAgICBmb3IgKGludCB0dXJuID0gMDsgdHVybiA8IDEwOyB0dXJuKyspIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoInR1cm4gJWQlbiIsIHR1cm4pOwogICAgICAgICAgICBmb3IgKExldmVsQ3Jhd2xlciBjdXJyZW50IDogbmV3IExldmVsQ3Jhd2xlcltde3AsIG90aGVyfSkgewogICAgICAgICAgICAgICAgbW92ZShjdXJyZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG1vdmUoTGV2ZWxDcmF3bGVyIGNyYXdsZXIpIHsKICAgICAgICBHYW1lT2JqZWN0IGdvID0gUkFORE9NLm5leHRCb29sZWFuKCkgPyBuZXcgQ2hlc3QoKSA6IG5ldyBOUEMoKTsKICAgICAgICBnby5hY2NlcHQoY3Jhd2xlcik7CiAgICB9Cn0KCmludGVyZmFjZSBMZXZlbENyYXdsZXIgewogICAgdm9pZCBoYW5kbGUoQ2hlc3QgYyk7CgogICAgdm9pZCBoYW5kbGUoTlBDIG5wYyk7Cn0KCmNsYXNzIFBsYXllciBpbXBsZW1lbnRzIExldmVsQ3Jhd2xlciB7CiAgICBwdWJsaWMgdm9pZCBoYW5kbGUoQ2hlc3QgYykgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBhIGNoZXN0Iik7CiAgICB9CgogICAgcHVibGljIHZvaWQgaGFuZGxlKE5QQyBucGMpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1lZXRpbmcgTlBDIik7CiAgICB9Cn0KCmFic3RyYWN0IGNsYXNzIEdhbWVPYmplY3QgewogICAgYWJzdHJhY3Qgdm9pZCBhY2NlcHQoTGV2ZWxDcmF3bGVyIHApOwp9CgpjbGFzcyBDaGVzdCBleHRlbmRzIEdhbWVPYmplY3QgewogICAgQE92ZXJyaWRlCiAgICB2b2lkIGFjY2VwdChMZXZlbENyYXdsZXIgcCkgewogICAgICAgIHAuaGFuZGxlKHRoaXMpOwogICAgfQp9CgpjbGFzcyBOUEMgZXh0ZW5kcyBHYW1lT2JqZWN0IGltcGxlbWVudHMgTGV2ZWxDcmF3bGVyIHsKICAgIEBPdmVycmlkZQogICAgdm9pZCBhY2NlcHQoTGV2ZWxDcmF3bGVyIHApIHsKICAgICAgICBwLmhhbmRsZSh0aGlzKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyB2b2lkIGhhbmRsZShDaGVzdCBjKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjaGVzdHMgYXJlIGZvciB0aGUgcGxheWVycywgbGVhdmluZyBpdCBhbG9uZSIpOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIHZvaWQgaGFuZGxlKE5QQyBucGMpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvcm1pbmcgZ3JvdXAgd2l0aCBvdGhlciBucGMiKTsKICAgIH0KfQ==
stdout
turn 0
meeting NPC
chests are for the players, leaving it alone
turn 1
meeting NPC
forming group with other npc
turn 2
meeting NPC
forming group with other npc
turn 3
opening a chest
chests are for the players, leaving it alone
turn 4
meeting NPC
chests are for the players, leaving it alone
turn 5
opening a chest
chests are for the players, leaving it alone
turn 6
opening a chest
forming group with other npc
turn 7
meeting NPC
chests are for the players, leaving it alone
turn 8
opening a chest
chests are for the players, leaving it alone
turn 9
opening a chest
chests are for the players, leaving it alone