숨겨진 전력 계산기


15

내가 포켓몬을 항상 좋아했던 이유 중 하나는 단순한 게임처럼 복잡하기 때문에 많은 층이 있기 때문입니다. 숨은 힘의 움직임을 고려해 봅시다. 게임에서 숨겨진 힘의 유형과 힘 (적어도 VI 세대 이전)은 그것을 사용하는 모든 포켓몬마다 다릅니다! 꽤 멋지죠? 숨겨진 힘의 유형과 힘이 무작위로 생성되지 않는다고 말하면 놀랄까요?

모든 포켓몬 게임에서 모든 포켓몬 (파티에있는 것만이 아닌 모든 포켓몬)에는 내부에 저장된 6 개의 정수 (HP 통계, 공격 통계, 방어 통계, 특수 공격 통계, 하나는 특수 방어 통계와 속도 통계를위한 것입니다.)를 개별 값 또는 IV 라고합니다 . 이 값의 범위는 0에서 31 사이이며 본질적으로 포켓몬의 전체 통계에 영향을 미치는 몇 가지 요소 중 하나입니다. 그러나 그들은 또한 숨겨진 힘의 유형과 힘을 결정합니다!

Generation III to V (알고리즘을 구현할 세대)에서 Hidden Power의 유형은 다음 공식에 따라 결정됩니다 (즉, 대괄호에 유의하십시오. 결과를 반올림해야 함).

여기서 a, b, c, d, e 및 f는 HP, Attack, Defense, Speed, Sp의 최하위 비트입니다. 공격 및 Sp. 방어 IV. (최하위 비트는 IV 모드 2입니다.) 여기서 생성 된 숫자는이 차트를 사용하여 실제 유형으로 변환 될 수 있습니다.

0 Fighting
1 Flying
2 Poison
3 Ground
4 Rock
5 Bug
6 Ghost
7 Steel
8 Fire
9 Water
10 Grass
11 Electric
12 Psychic
13 Ice
14 Dragon
15 Dark

힘을 위해 비슷한 공식이 사용됩니다.

그러나 여기서 u, v, w, x, y 및 z는 HP, Attack, Defense, Speed, Sp. 공격과 Sp. 방어 IV (이 순서대로). (두 번째 최하위 비트는 더 복잡하고 최하위 비트는 더 복잡합니다. IV mod 4가 2 또는 3이면 비트는 1이고, 그렇지 않으면 0입니다. 언어에 내장 또는 최소한 더 영리한 방법이있는 경우 이렇게하려면 아마 사용해야합니다.)


따라서 이미 알아 낸 것처럼 여기서 과제는 HP, Attack, Defense, Speed, Sp. 공격과 Sp. 포켓몬의 IV를 방어하고 (순서대로) 그 포켓몬의 숨겨진 힘의 종류와 힘을 출력하십시오.

샘플 입력 :

30 31 31 31 30 31

샘플 출력 :

Grass 70

샘플 입력 :

16 18 25 13 30 22

샘플 출력 :

Poison 61

이것은 코드 골프이므로 가장 짧은 코드가 승리합니다. 행운을 빕니다!

(그리고 사람들이 묻기 전에, 6 세대가 전력 랜덤 화를 제거하고 항상 60 개로 만들기 때문에 여기에서 V 세대 알고리즘을 사용했습니다. 이것이 엄청나게 절름 발상이라고 생각할뿐만 아니라, 그것이 많은 관심을 끌게합니다. 그래서 도전의 목적으로 Gen V 게임을 진행하고 있습니다.)


죄송합니다. 실수로 샘플 입력 및 출력을 생략했습니다. 여기 요
스파게티

일부 추가 테스트 샘플은 좋을 것입니다 :).
Blackhole

그래, 내 나쁜 결정된.
스파게티

3
MissingNo에 대한 도전을보고 싶습니다.
mbomb007

다음에 일어날 수도 있습니다;)
스파게티

답변:


3

Pyth, 110 바이트

J+dGA.b/*iN2CY63Cm_+0jd2_Q"("r@cs@LJjC"!�W��Zm�����A�zB0i��ȏ\"���?wC�ǀ�-#ך
?ЫܦO@�J/m���#"26)G3+30H

인쇄 할 수없는 문자가 포함되어 있습니다. 다음은 16 진수 덤프입니다.

00000000: 4a 2b 64 47 41 2e 62 2f 2a 69 4e 32 43 59 36 33  J+dGA.b/*iN2CY63
00000010: 43 6d 5f 2b 30 6a 64 32 5f 51 22 0f 28 22 72 40  Cm_+0jd2_Q".("r@
00000020: 63 73 40 4c 4a 6a 43 22 10 21 de 57 ad c8 5a 1c  cs@LJjC".!.W..Z.
00000030: 10 6d e0 d6 12 f6 80 bc 41 85 7a 42 30 69 ae 80  .m......A.zB0i..
00000040: c8 8f 5c 22 a0 84 ab 3f 77 43 01 ca c7 80 d0 1d  ..\"...?wC......
00000050: 2d 23 d7 9a 0a 3f d0 ab dc a6 4f 40 b9 4a 2f 6d  -#...?....O@.J/m
00000060: d2 ca c6 23 22 32 36 29 47 33 2b 33 30 48        ...#"26)G3+30H

pokemon.pyth 파일을 다운로드하여 실행할 수도 있습니다python3 pyth.py pokemon.pyth

입력이 30, 31, 31, 31, 30, 31인쇄됩니다

Grass
70

설명:

J+dGA.b/*iN2CY63Cm_+0jd2_Q".("
J+dG                            store the string " abc...xyz" in J
                 m      _Q      map each number d in reverse(input list) to:
                     jd2          convert d to base 2
                   +0             add a zero (list must have >= 2 items)
                  _               reverse the list
                C               zip
                          ".("  string with the ascii values 15 and 40
     .b                         map each N of ^^ and Y of ^ to:
         iN2                       convert N from base 2 to base 10
        *   CY                     multiply with the ascii value of Y
       /      63                   and divide by 63
    A                           G, H = ^

r@cs@LJjC"longstring"26)G3+30H
        C"longstring"           interpret the string as bytes and convert 
                                from base 256 to base 10
       j             26         convert to base 26
   s@LJ                         lookup their value in J and create a string
                                this gives "fighting flying ... dark"
  c                    )        split by spaces
 @                      G       take the Gth element
r                        3      make the first letter upper-case and print
                          +30H  print 30 + H

3
나는 오히려 pyth 파일의 파일 확장자는 파이썬의 파일 확장자보다 더 자세한 것을 즐겁게 찾을 수 있습니다 : ^)
FryAmTheEggman

5

루비, 210

a=$*.map.with_index{|a,i|[a.to_i%2<<i,a.to_i[1]<<i]}.transpose.map{|a|a.inject &:+}
$><<"#{%w(Fighting
Flying
Poison
Ground
Rock
Bug
Ghost
Steel
Fire
Water
Grass
Electric
Psychic
Ice
Dragon
Dark)[a[0]*15/63]} #{a[1]*40/63+30}"

처음 골프를 치기 때문에 이것이 명백한 해결책이라고 생각합니다.


3

CJam, 140 115 바이트

q~]W%_1f&2bF*63/"GMÿD>BÙl½}YÛöí6P¶;óKs¯¿/·dǯã®Å[YÑÌÞ%HJ9¹G4Àv"256b25b'af+'j/=(euooSo2f/1f&2b40*63/30+

코드에는 인쇄 할 수없는 문자가 포함되어 있습니다.

CJam 인터프리터에서 온라인으로 사용해보십시오. Chrome | Firefox


와우, 그것은 빠르다. 좋은 작업!
스파게티

2

자바 스크립트 (ES6), 251 바이트

적어도 지금은 오래갑니다. 유형 목록과 복잡한 수학은 거의 같은 공간을 차지합니다. 둘 중 하나를 줄이는 방법을 찾고 있습니다.

x=>([a,b,c,d,e,f]=x.split` `,`Fighting
Flying
Poison
Ground
Rock
Bug
Ghost
Steel
Fire
Water
Grass
Electric
Psychic
Ice
Dragon
Dark`.split`
`[(a%2+b%2*2+c%2*4+d%2*8+e%2*16+f%2*32)*5/21|0]+' '+((a/2%2+(b&2)+(c&2)*2+(d&2)*4+(e&2)*8+(f&2)*16)*40/63+30|0))

평소와 같이 제안을 환영합니다!


1

자바 스크립트 (ES6), 203 바이트

f=(...l)=>(q=(b,m)=>~~(l.reduce((p,c,x)=>p+(!!(c&b)<<x),0)*m/63),'Fighting0Flying0Poison0Ground0Rock0Bug0Ghost0Steel0Fire0Water0Grass0Electric0Psychic0Ice0Dragon0Dark'.split(0)[q(1,15)]+' '+(q(2,40)+30))

예제 실행 :

f(30,31,31,31,30,31)
> "Grass 70"

f(16,18,25,13,30,22)
> "Poison 61"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.