본문 바로가기
Programming/Contest

[codingame] The Descent

by NAMP 2014. 12. 13.

The Descent

SOLVE IT



비행선이 위험에 처해있다. 알수없는 힘에 의해 행성 표면으로 끌려가고 있다. 솟구친 산악에 충돌할 위험에 직면했다.

Kirk 와 Spock 을 도와 산악을 파괴하라…. 비행선을 구조하라

주제 : 배열 검색

이 퍼즐은 “커스의 모함”이라는 과거 대회에 제안되었던 두개의 연습 문제 시리즈중의 첫번째 이다. 모험에 대해 더 알고 싶은가? 상급 레벨 퍼즐인 “The Labyrinth”로 이동하라.

시작화면



테스트 케이스

버튼을 눌러 실행하니, 정찰기만 좌우로 반복하다가 멈춘다.

입력 데이터를 출력해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
while (1) {
    chomp($tokens=<STDIN>);
    ($SX, $SY) = split(/ /,$tokens);
    print STDERR "SX:",$SX,"\tSY",$SY,"\n";
    for(my $i=0; $i<8; $i++) {
        chomp($MH = <STDIN>); # 9에서 0까지 각각의 산의 높이를 나타낸다. 산의 높이는 왼쪽에서 오른쪽으로 제공된다.
        print STDERR "MH:",$MH,"\n";
    }
    # Write an action using print
    # To debug: print STDERR "Debug messages...\n";
 
    print "HOLD\n"; # 발사할 경우에는 FIRE, 그냥 지나갈 경우에는 HOLD
}

Let's destroy those mountains to secure our landing...
 
Height of mountain 0 : 0
Height of mountain 1 : 0
Height of mountain 2 : 0
Height of mountain 3 : 9
Height of mountain 4 : 0
Height of mountain 5 : 0
Height of mountain 6 : 0
Height of mountain 7 : 0

Standard Error Stream:

SX:0 SY10

MH:0

MH:0

MH:0

MH:9

MH:0

MH:0

MH:0

MH:0
Standard Output Stream:
HOLD

각 산들의 높이가 주어지고, 정찰기가 해당 산의 위치에 있을때에 “FIRE”를 외쳐야 한다.

풀기

처음에 받은 산들의 위치들을 모두 저장한다음에, 가장 높은 산의 위치로 움직였을 때에 “FIRE”를 외친다.

  1. 배열저장
  2. 가장 높은 산 찾기
  3. 위치 확인 후 맞으면 발사, 아니면 대기

프로그램

당신의 미션은 당신의 우주선이 충돌하기 전에 산악들을 파괴하는 것이다.

8개의 산이 있다. 비행선은 왼쪽에서 오른쪽으로, 오른쪽에서 왼쪽으로 계속해서 모든 산들 위로 순회한다. 각각의 방향으로 이동했다면 비행선은 알수 없는 힘에 의해서 표면으로 1Km씩 끌려간다.

8턴이 무사히 종료되면 끝난다.

비행선이 한방향으로 이동할 때에 한번만 발사할 수 있다. 발사하는 것은 산악의 일부분을 파괴하는 것으로써, 임의의 Km을 가라앉힐 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
select(STDOUT); $| = 1; # DO NOT REMOVE
 
# Auto-generated code below aims at helping you parse
# the standard input according to the problem statement.
 
 
# game loop
while (1) {
    chomp($tokens=<STDIN>);
    ($SX, $SY) = split(/ /,$tokens);
    print STDERR "SX:",$SX,"\tSY",$SY,"\n";
    @m = ();
    
    for(my $i=0; $i<8; $i++) {
        chomp($MH = <STDIN>); # represents the height of one mountain, from 9 to 0. Mountain heights are provided from left to right.
        print STDERR "MH:",$MH,"\n";
        
        push@m,$MH;
    }
    
    $highest_idx = 7;
    
    for ($i=0; $i < $#m; $i++){
        if ($m[$i] > $MH) {
            $highest_idx = $i;
            $MH = $m[$i];
        }
    }
    
    print STDERR "HIGHEST idx:",$highest_idx,"\n";
    
    # Write an action using print
    # To debug: print STDERR "Debug messages...\n";
    if ($SX == $highest_idx) {
        print "FIRE\n";
    }
    else{
        print "HOLD\n"; # either:  FIRE (ship is firing its phase cannons) or HOLD (ship is not firing).
    }
}





'Programming > Contest' 카테고리의 다른 글

[checkio] Median  (0) 2016.04.06
[checkio] Non-unique Elements  (0) 2016.04.05
[codingame] Power of Thor  (0) 2014.12.13
[codingame] Onboarding  (0) 2014.12.13
=dovelet 블럭 색칠하기/paintblock  (0) 2014.08.19

댓글