내 Nullifiers 최적화


12

나는 게임 크리퍼 월드, 특히 속편의 큰 팬입니다. 이 게임이 질문에 대답하기 위해 어떻게 작동하는지 알 필요는 없습니다. 나는 단지 질문이 어디에서 시작되었는지 언급하고 싶었습니다.

게임에서 당신의 목표는 무기로 알려진 무기를 사용하여 크리퍼를 생성하는 이미 터를 파괴하는 것입니다.

Nullifier는이 반경에서 이미 터를 파괴 할 수 있습니다.

 eee
eeeee
eenee
eeeee
 eee

각 nullifier는 여러 이미 터를 대상으로 할 수 있습니다.

당신의 목표

배열로 구성된 2D지도 시뮬레이션을 감안할 때 아무것도방출 될 수있다, 당신이 원하는대로 문자를 공백전자 또는 번호 - 바로 확인가 구별 될 종결자를 최적의 양으로 출력 같은 맵은 N (또는 당신이 좋아하는 것이 무엇 )를 배치하여 방출기가 최소량의 nullifier로 파괴되도록합니다.

여러 가지 최적의 방법이 있다면 출력하는 것이 좋습니다. 그러나 작업을 해결할 수없는 경우 레이아웃이 너무 많아서 이미 터가 너무 적다고 말하면 구별 할 수있는 다른 것을 출력해야합니다. 널이 충분합니다.

빠른 규칙 :

  • 입력 : 다차원 배열
  • 입력에는 아무것도 없음이미 터를 의미하는 두 개의 문자가 포함 되며 답에 무엇이 포함되어 있는지 포함하십시오.
  • 출력 : 다차원 배열
  • 출력에는 3 개의 문자가 포함됩니다. 아무것도 의미 하지 않습니다 . 이미 터nullifier 또는 입력을 해결할 수없는 경우 구별 가능한 출력
  • 당신은 단지 대체 할 수 아무것도 nullifier로 문자를
  • nullifier는 여러 이미 터에 도달 할 수 있으며 항상 범위 내에있는 모든 항목에 적용됩니다.
  • 무효화 기는 위에서 지정한 영역에서 적중 할 수 있으며 항상 대상이 될 수있는 모든 이미 터에 적중합니다
  • 바이트 단위의 최단 답변
  • 금지 된 표준 허점

입력:

[[ , ,e, , ],
 [ , , , , ],
 [e, , , ,e],
 [ , , , , ],
 [ , ,e, , ]]

산출:

 [[ , ,e, , ],
  [ , , , , ],
  [e, ,n, ,e],
  [ , , , , ],
  [ , ,e, , ]]

입력:

[[e,e,e,e,e],
 [e, , , ,e],
 [e, , , ,e],
 [e, , , ,e],
 [e,e,e,e,e]]

산출:

[[e,e,e,e,e],
 [e, ,n, ,e],
 [e, , , ,e],
 [e, ,n, ,e],
 [e,e,e,e,e]]

입력:

[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
 [ , ,e, , ,e, , , ,e,e, , , , ,e, , , , ],
 [ , ,e, , , ,e, ,e, ,e, ,e, ,e, ,e, , , ],
 [e, , , ,e, ,e, , , , , , , , , , , ,e, ],
 [e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
 [ , , ,e, ,e, ,e, , , , , , , , , ,e, , ],
 [ ,e,e, ,e, , , ,e, ,e,e, ,e, ,e, ,e, , ],
 [ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
 [ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
 [e, , , , , , ,e, , , ,e,e, ,e, , , , , ],
 [ ,e,e, , ,e, , , , ,e, , , , , , ,e, , ],
 [ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
 [e,e, , , , ,e, , , ,e, , , , , , , , , ],
 [ , , ,e, , , , , ,e, , ,e, ,e, ,e, ,e, ],
 [ , , , ,e, ,e, , , , , , , , , , , , , ],
 [e,e, , ,e,e, , ,e, , ,e, ,e, ,e, ,e, ,e],
 [e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
 [ , , , ,e, , , , , ,e, , , ,e, , , , , ],
 [ , ,e, , , ,e, ,e, , , ,e, , , , ,e, , ],
 [ , , ,e, ,e, ,e, , ,e,e, , ,e,e, , ,e, ]]

출력 (이 출력은 수동으로 만들어졌으며 최적의 출력이 아닐 수 있음) :

[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
 [ , ,e, , ,e, , ,n,e,e, , , ,n,e, , , , ],
 [ ,n,e, , ,n,e, ,e, ,e, ,e, ,e, ,e, ,n, ],
 [e, , , ,e, ,e, , , , , , , , , , , ,e, ],
 [e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
 [ , ,n,e, ,e, ,e, , , ,n, , , , , ,e, , ],
 [ ,e,e, ,e, ,n, ,e, ,e,e, ,e, ,e,n,e, , ],
 [ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
 [ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
 [e, ,n, , , , ,e, , , ,e,e, ,e, , , , , ],
 [ ,e,e, , ,e,n, , ,n,e, , , ,n, , ,e,e, ],
 [ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
 [e,e, , , , ,e, , , ,e, , , , , , , , , ],
 [ , , ,e, ,n, , , ,e, , ,e, ,e, ,e, ,e, ],
 [ ,n, , ,e, ,e, , , , , , , ,n, , , ,n, ],
 [e,e, , ,e,e, , ,e,n, ,e, ,e, ,e, ,e, ,e],
 [e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
 [ , , , ,e, , , , , ,e, ,n, ,e, , ,n, , ],
 [ , ,e, ,n, ,e, ,e, , , ,e, ,n, , ,e, , ],
 [ , , ,e, ,e, ,e, ,n,e,e, , ,e,e, , ,e, ]]

입력:

[[e,e],
 [e,e]]

산출:

null

내가 사용할 수 0, 12또는 유사한?
user202729 2016 년

@ user202729 예, 무엇을 지정하고 일관성을 유지하는 한 이미 터가 입력에서 1이면 IE는 출력에서 ​​1이어야합니다.
Troels MB Jensen

1
나는 크리퍼 월드를 좋아했습니다. 마침내 크리퍼의 마지막 흔적을 없애는 것이 항상 만족 스러웠습니다
Jo King

1
@ edc65 코드 골프의 요점 은 런타임에 신경 쓰지 않고 코드 크기를 최소화하는 것입니다.
user202729 2016 년

2
나는 기는 세상도 좋아합니다!
orlp

답변:


4

파이썬 3 , 558 511 509 바이트

from itertools import*
E=enumerate
L=len
def s(s):
 q=[(x,y)for y,r in E(s)for x,k in E(r)if k==w]
 for i in range(1,L(q)):
  for c in combinations(q,i):
   m=[l*1for l in s]
   for p in c:
    m[p[1]][p[0]]=n
    for y,r in E([list(r) for r in' xxx ,xxxxx,xxnxx,xxxxx, xxx '.split(',')]):
     for x,k in E(r):
      o=(p[0]-x+2,p[1]-y+2)
      if k==d and-1<o[0]<L(m[0])and-1<o[1]<L(m)and m[o[1]][o[0]]==e:
       m[p[1]-y+2][p[0]-x+2]=d
   if e not in ','.join([''.join(r)for r in m]):return(m)
print(s(m))

온라인으로 사용해보십시오!

매우 반복적이지만 파이썬에 대해 더 최적화하기에 충분하지 않습니다. ovs의 답변에서 몇 가지를 배웠으므로 재미있었습니다.

입력 ( 테스트 사례를보다 쉽게 ​​작성 하기 위해 수정 됨 ) 에는 ''또는 'e'가 필요하지만 출력에는 '', 'n'이 널 (nullifier)에, 'x'가 널 (null) 이미 터에 사용됩니다. 이 함수는 질문에 설명 된 예상 입력을받습니다.

e, w, n 및 d 변수를 숫자로 쉽게 바꿀 수 있기 때문에 외부 변수를 설정했습니다. 입력과 출력을 숫자를 사용하도록 수정하면 동일한 내용이 인쇄됩니다. 나는 그들이 작업하는 동안 글자를 더 읽기 쉽게 만들었 기 때문에 글자를 사용했습니다.

재미있는 질문, OP! Creeper World는 훌륭하고 질문에 대한 멋진 영감이었습니다. :)

편집 : Outgolfer Erik 덕분에 -47 바이트


8
죄송하지만이 항목이 심각하게 경쟁하는 항목이 아닌 것 같습니다. 최적화 할 시간이 될 때까지 삭제하는 것이 좋습니다.
Outgolfer Erik

2
죄송합니다. 내 능력을 최대한 발휘하여 편집 됨
GammaGames

1
실제로 각 들여 쓰기 수준에 2 개의 공백이 필요하지 않습니다. 1이면 충분합니다.
Outgolfer Erik

3

파이썬 2 , 267 263 바이트

from itertools import*
m=input()
E=enumerate
e=[(x,y)for y,a in E(m)for x,e in E(a)if e]
for n in count():
 for p in combinations(e,n):
	k=[l*1for l in m]
	for x,y in p:k[y][x]=2
	all(e+any(8>(y-Y)**2+(x-X)**2for X,Y in p)for y,a in E(m)for x,e in E(a))>0>exit(k)

온라인으로 사용해보십시오!

0이미 터, 2nullifier 및 1빈 공간.


1

Wolfram Language (Mathematica) , 173 168 바이트

t=ToExpression@$ScriptInputString
P=Position
p=t~P~0
q=t~P~2
Print@ReplacePart[t,Thread[p->LinearProgramming[1&/@p,(xBoole[Norm[x-#]^2<6]&/@p)/@q,1&/@q,0,Integers]]]

온라인으로 사용해보십시오!

1 초 만에 가장 큰 테스트 사례 해결합니다 .

전체 프로그램. 함수로서 짧아지고 130 바이트 만됩니다 .

사용 0을 위해  , 1위해 n2위해 e.

이 프로그램 은 챌린지에서 입력 형식을 변환하는 데 사용할 수 있습니다.

해결책이없는 경우 오류 메시지를 출력 할 것이다 lpdim처럼 나, lpsnf같은 .

Outer짧은 이름에도 불구하고 (더 읽기 쉬운) 버전을 사용하는 버전 은 2 바이트 더 깁니다 Outer. 온라인으로 사용해보십시오!


설명.

이것은 정수 선형 프로그래밍 문제로 줄일 수 있습니다.

e셀은 2로 고정되고, 비어있는 각 셀은 정수 변수이며 0(빈) 또는 1(널리 파이어) 가 될 수 있습니다 . 변수 좌표 목록은 variable에 저장됩니다 p. ( Position에서 S t0)

사용 된 nullifier 수를 최소화하는 것이 목표이므로 정수 변수의 합계를 최소화해야합니다. ( 1&/@p, 벡터는 모두 1길이와 길이가 같고 p목적 함수를 나타냄)

제약 조건은 각 이미 터 ( 2) (위치가에 저장 됨 q)의 주위에 적어도 nullifier가 있어야하거나 정확하게 유클리드 거리가 최대 이어야합니다.6

이것은 매트릭스 제형 m= (xBoole[Norm[x-#]^2<6]&/@p)/@q(각 요소에 대한 q요소가되고있는 행 만들 1경우 제곱 거리 ( Norm에 해당하는 좌표로) p미만이고 6상기 벡터) b=를 1&/@q.

그 후 ReplacePartThread의 변수 값을 "적용" t하고 인쇄 할 수 있습니다.


Echo대신 사용할 수 Print있지만 출력에 선행이 포함되어 있습니다 >>.
user202729 2016 년

불행히도 1^p(대신 1&/@p) 작동하지 않습니다 .
user202729 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.