아이스 퍼즐 생성기 + 솔버 구축


13

에서 트 위치 재생 포켓 몬스터 , 가장 성가신 장애물 중 하나 일 캔면 당신이 중 하나를 벽이나 돌 맹을 칠 때까지 한 방향으로 끝까지 밀어 한 장소에서 다른 장소로 이동해야 얼음 퍼즐이다.

당신의 임무는 임의의 어려운 얼음 퍼즐을 생성하는 프로그램을 구축하는 것입니다.

세 개의 숫자를 받아 들일 것입니다 귀하의 프로그램 M, NP입력으로 (와 10 <= M <= 30, 15 <= N <= 40그리고 0 <= P < 65536) :

12 18

출력됩니다 :

  • M에 의해 N구성된 그리드. 하고 O각각 얼음과 돌 맹을 나타내는.
  • 퍼즐이 입력되는 위치를 나타내는 위치 마커. 이 위치 마커 편지로 구성 L, R,T , 또는 B, 왼쪽, 오른쪽, 즉 측면 (좌측 또는 상부)에서의 위치를 나타내는 숫자 뒤에 상단 및 하단에서 입력 할 나타내는,.
  • 퍼즐이 빠져 나간 위치를 나타내는 비슷한 위치 마커.
  • 의 순서로 이루어진 퍼즐 최단 용액, L, R, U, 및 D는 각각.

출력 예 :

..O...O...........
............O.....
..O...............
.......O..........
..................
...........O......
O..O...........O..
..........O.......
..O..........O....
........O.........
O....O.........O..
............O.....
R 4
B 5
LDLDRULD
(Note that this output is actually invalid because it is not actually long enough.)

입력 M및의 N경우 퍼즐에 대한 솔루션은 최소한 min(M, N)단계를 가져야하고 2 (M + N)전체 공간을 이동 해야 합니다. (참고로, 상기 퍼즐 (69 개) 공간을 이동하는 12 단계의 총 이동한다.) 퍼즐 발생기는 다른 생성해야 M의한 N상이한 용액 경로 퍼즐 (각 솔루션 단계 즉 다른 시퀀스) 각 시드 P.

  • 다른 솔루션 경로의 요구 사항은 Claudiu의 솔루션 과 같이 암석 경로를 체계적으로 생성하려는 솔루션을 피하는 것입니다 . 임의의 문제로 인해 동일한 솔루션의 두세 쌍이 있다면 프로그램이 의도적 으로 동일한 동작 순서로 퍼즐을 생성하려고 시도 하지 않는 한 괜찮습니다 .

위의 작업을 수행하는 가장 짧은 코드가 이깁니다.


2
목표를 이해할 수 없습니다. "벽이나 볼더에 부딪 칠 때까지 한 방향으로 미끄러 져 한 곳에서 다른 곳으로 이동해야합니다." 벽이나 바위를 치는 것이 좋습니까? 처음부터 어디로 가려고합니까? 볼더를 치면 게임이 종료됩니까? 벽에 부딪히면 어떻게됩니까? 그것은 단지 나입니까, 아니면 방향이 불분명합니까?
DavidC

3
오, 여기 포켓몬 골드와 실버에 대한 오래된 기억들. 출구를 찾아 HM07을 타서 Blackthorn City로 가십시오.
Victor Stafusa

3
이것은 Chip 's Challenge 의 얼음 레벨을 상기시킵니다 .
luser droog

1
입력 및 종료에 ><(또는 문자)를 사용하지 않는 이유는 무엇 입니까? 퍼즐을 쉽게 읽을 수 있습니다.
AL

1
실제로 샘플 출력이 유효하지 않습니다. 가장 짧은 경로는 LDLDRULD8 단계 길이입니다
Claudiu

답변:


5

파이썬, 672 문자, 더 재미있는 퍼즐

규칙에 따라 엄격하게 진행되지만 다른 Python 프로그램 이이 프로그램을 능가하지만 어쨌든 더 재미있는 퍼즐을 생성하는 프로그램을 작성하기로 결정했습니다. 여기있어:

R=range;import random as J;X=J.randint
x=(0,1,-1,0);y=x[2:]+x
g=lambda r,c:(0<=r<H)+(0<=c<W)>1and f[r][c]or x[(r,c)in(A,E)]
l=lambda r,c:g(r+y[d],c+x[d])<1and(r,c)or l(r+y[d],c+x[d])
H,W,P=input();J.seed(P)
while 1:
 A=(-1,X(0,W));E=(H,X(0,W));f=[[X(0,7)for _ in R(W)]for _ in R(H)]
 q=[(A,'')];n=z={}
 while q and n!=E:
    n,O=q.pop()
    for d in R(4):
     N=l(*n)
     if g(n[0]+y[d],n[1]+x[d])and N not in z:q[:0]=[(N,O+"URLD"[d])];z[N]=1
 if(n==E)*len(O)>min(H,W):print"\n".join(''.join('O.'[c>0]for c in T)for T in f),"\nT",A[1],"\nB",E[1],"\n",O;break

들여 쓰기 레벨은 스페이스, 탭, 탭 + 스페이스입니다.

샘플 :

$ echo [10,15,0] | python ice2.py
.....OO........
...............
...O....O.OO..O
...........O...
..O....O.......
.......O....O..
....O..........
.............O.
..............O
...............
T 1
B 10
DLURDRURULDRD

그것은 P시드로 사용 되므로 각각 P동일한 퍼즐을 생성하고 각각의 퍼즐 P은 매우 다를 수 있습니다.

$ echo [10,15,1] | python ice2.py
.OOO.O.........
...O......O.O.O
.......O.......
..O..........OO
.....O.........
.............O.
.O.............
.O............O
O....O.........
......O........
T 14
B 8
DLDRDLURULD

그것은 크기까지 합리적으로 빠르게 작동 M=25,N=40하지만 실제로는 느려집니다. M=30, N=40충분히 오래두면 이론적으로 효과 가 있습니다. 추적하기가 어렵 기 때문에 여기에 수동으로 작성했습니다. 프로그램은 퍼즐을 출력합니다.

$ echo [25,40,0] | python ice2.py
                   *
...................dO....urrrO..O..O....
....O.....O........dO....u..dO..........
..........O.....O..d....Ou.Odrrrrrrrrrrr
...........O.......d.O..Ou..O.....OOllld
.O....O.OO.........drrrrrrO....Olllud..O
O......O...O.O.....O............dO.ud...
O........OO..........O.........Od..ud..O
.........O......................d..ud...
....O.....O.O....O.....O........d..ud.O.
.....O..O...................O...d..udO..
.........O.........O..O.........d..ud...
.......O.O...O..O.OO....O...OOlldOOld...
........Olllllllllu....OO.OO..dOO...O...
.O.O....Od........u......O....d..O...O..
..O....O.d........u..O........d..O..O...
....O....d..O.....uO.....O....d.........
.........d........u...........d.........
.........d....O...u.O..O.....Od.O.......
........Od...O....u...........d.........
.O.....OuxrrrrO...u...OOOO..O.d.........
........udO..dO.O.u...........d.........
O..O.O..ud...d..urrO..........d.O...O...
........ud...d..u.O.O........Od..O...O..
..OO....ud..Od..u......OllllludO.....O..
..O....OldO..dOOlllllllld...Old...O..O..
             *
T 19
B 13
DRURDRDLDLULDLDLULDLURULDLURD

설명 :

프로그램이 반복되어 상단에 임의의 시작 위치, 하단에 임의의 끝 위치 및 12.5%임의의 특정 지점에서 볼더 가 발생할 수 있는 임의의 그리드가 생성 됩니다. 그런 다음 너비 우선 탐색으로 퍼즐을 풀고 솔루션이 존재하고보다 큰 경우 min(H,W)인쇄하고 종료합니다.


4

자바-2632

Claudiu의 답변 의 기술적 순수성을 감탄 하면서 조금 더 어려운 퍼즐 을 만들기 위해 손을 decided기로 결정했습니다 .)

기본 단계 (꽤 간단) :

Randomize entry location
Step forward
For min(m,n)-1 steps:
    Rotate left or right
    Slide until I hit something or go a random distance
    Place a rock in front of stopping location
If I can slide straight to any wall:
    Slide to exit
Else
    Create another step and try again

If at any step I get trapped, start over
If BFS finds shorter path, start over

또한 슬라이딩하면서 각 지점을 'nogo'로 표시합니다. 내가 nogo spot (또는 바위가 거기에 가고 있다는 것을 의미하는 것의 바로 앞)에 오면, 그것은 잘못된 단계입니다.

따라서 기본적으로 아이디어는 무작위로 많은 맵을 생성하고 유효한 첫 번째 맵을 유지하는 것입니다. 나는 이것을 더 똑똑하게 만들려고하지만 (역 추적 등) 지금은 잘 작동합니다. 중복 코드를 줄일 수도 있습니다.

시드에 따라 20 초에서 20 분 사이의 임의의 시간에 작은 맵 (15x10)을 거의 즉시 생성하고, 중간 (30x20) 맵을 몇 초 내에 생성하고, 큰 (40x30)을 생성합니다. 크기에 따라 내 컴퓨터에서 초당 300k-500k 맵을 테스트합니다.

참고 사항 : 때로는 계단만큼 많은 암석이 있기 때문에 지도가 너무 어렵지 않고 계단이 벽으로 이동하지 않는 한 대부분의 경우 실제 암석을 치고 싶을 때 옵션이 하나만 있습니다. 모든 단계가 끝나면 안전한 지점에 "무작위"바위를 배치하여 나중에 수정하겠습니다. 노고 스팟은 이미 표시되어 있기 때문에 매우 간단합니다. 지금은 다음 예제를 즐기십시오.

다른 크기 / 씨앗을 보여주는 출력 :

$ java I 30 20 6851              $ java I 15 10 1     $ java I 15 10 65513  

............................O.      .......O.......     ....O..........     
..............................      ...............     ...............     
..............................      .........O.....     .........O.....     
..........O......O............      .............O.     ..............O     
...............O...........O..      ...............     ...............     
..............................      .......O.......     .....O.O.......     
..............................      O..............     ...............     
........................O.....      ...............     ..........O....     
..............................      ...............     O..............     
...O.......................O..      ......O........     ...............     
O...............O.OO..........          
..............O..........O....          
...........O..................      T 14                R 6         
....O.........................      T 7                 T 14            
..............................      DLDLULURU           LULDLDRURU
..............................
..............................
.................O............
.O............................
..............................


B 28
R 9
ULURDLDLDRURDLDRURUR

최대 크기 40x30 :

$ java I 40 30 2

........................................
........................................
........................................
........................................
................O.......................
..........O.............................
........................................
.......O................................
.....................O..........O.......
......................O.................
.................................O......
......................................O.
........................................
........................................
..............................O.........
...........O............................
........................................
.......................................O
.........O...................O..........
....................O...................
...............................O........
............O..O......................O.
......O...........O.....................
..................O....O................
..................................O.....
........................................
..............................O.........
.....................................O..
...........O............................
...................O....................

B 19
B 11
URURDLULULDRDRDLULDLDLULURDLD

골프 :

import java.util.*;import java.awt.*;class I{int m,n,p,g,a[][],b[][];Random r;Point s,e,c;ArrayList<Integer>z;void Q(String q,int l){if(l>0)System.out.println(q);else System.out.print(q);}void G(String[]y){m=Integer.valueOf(y[0]);n=Integer.valueOf(y[1]);p=Integer.valueOf(y[2]);r=new Random(p);Q("",1);int o=0,i,j,u=0;char t,f[]={85,76,68,82};while(o<3){if(++u%20000==0)Q("\r#"+u,0);a=new int[m+2][n+2];b=new int[m+2][n+2];for(i=0;i<m+2;i++)for(j=0;j<n+2;j++)if(i==0||i==m+1||j==0||j==n+1)a[i][j]=2;s=new Point();int e=r.nextInt(m*2+n*2);if(e<m*2){s.x=e%m+1;s.y=e<m?0:n+1;}else{s.y=(e-m*2)%n+1;s.x=(e-m*2)<n?0:m+1;}if(s.x<1)g=3;else if(s.x>m)g=1;else if(s.y<1)g=2;else if(s.y>n)g=0;a[s.x][s.y]=0;c=new Point(s);z=new ArrayList<Integer>();z.add(g);for(i=0;i++<Math.min(m,n)-1;)if(N()<1&&N()<1)break;o=((z.size()>=Math.min(m,n)-1)?1:0)+F()+((V()==z.size())?1:0);}Q("\r",0);for(j=1;j<n+1;j++){for(i=1;i<m+1;i++)Q(String.valueOf(a[i][j]>0?'O':'.'),0);Q("",1);}Q("\n\n",0);if(s.x<1||s.x>m){t=s.x<1?'L':'R';u=s.y;}else{t=s.y<1?'T':'B';u=s.x;}Q(t+" "+u,1);if(e.x<1||e.x>m){t=e.x<1?'L':'R';u=e.y;}else{t=e.y<1?'T':'B';u=e.x;}Q(t+" "+u,1);for(i=0;i<z.size();)Q(String.valueOf(f[z.get(i++)]),0);Q("",1);}public static void main(String[]a){new I().G(a);}int F(){int c=0;while(C()<1&&c++<10)if(N()<1)return 0;return e==null?0:1;}int C(){int d=g<2?-1:1;if(g%2<1){int y=c.y;while(y>0&&y<n+1){y+=d;if(a[c.x][y]==1)return 0;}e=new Point(c.x,y);}else{int x=c.x;while(x>0&&x<m+1){x+=d;if(a[x][c.y]==1)return 0;}e=new Point(x,c.y);}a[e.x][e.y]=0;return 1;}int V(){if((s.x-e.x)+(s.y-e.y)<2)return 0;Queue<Point>q=new ArrayDeque<Point>();Queue<Integer>d=new ArrayDeque<Integer>();a[s.x][s.y]=-2;q.add(s);d.add(0);while(q.size()>0){Point t=q.poll();int h=d.poll(),i=0;if(t.equals(e))return h;for(;i<4;i++){Point n=S(a,t,i<2?0:1,i%2<1?-1:1,99,1);if(a[n.x][n.y]==-2)continue;a[n.x][n.y]=-2;q.add(n);d.add(h+1);}}return 0;}int N(){Point q;int d=g<2?-1:1,x,y;System.arraycopy(a,0,b,0,a.length);q=S(b,c,g,d,r.nextInt((g%2<1?n:m)/2)+2,0);if(q.x<1||q.y<1||q.x>m||q.y>n||q.equals(c)||b[q.x][q.y]!=0)return 0;x=q.x;y=q.y;if(g%2<1)y+=d;else x+=d;if(b[x][y]<0)return 0;b[q.x][q.y]=-1;b[x][y]=1;int f=r.nextInt(2)<1?-1:1;g=g%2<1?(f<0?1:3):(g=f<0?0:2);c=q;System.arraycopy(b,0,a,0,a.length);z.add(g);return 1;}Point S(int[][]u,Point f,int w,int d,int q,int s){int i=1,x=f.x,y=f.y;for(;i<=q;i++){if(w%2<1)y=f.y+i*d;else x=f.x+i*d;if(e!=null&&e.x==x&&e.y==y)return e;if(y<0||y>n+1||x<0||x>m+1)return f;if(s<1&&u[x][y]<1)u[x][y]=-1;if(u[x][y]>0){if(w%2<1)y-=d;else x-=d;return new Point(x,y);}}if(w%2<1)return new Point(f.x,f.y+i*d);else return new Point(f.x+i*d,f.y);}}

줄 바꿈으로 :

import java.util.*;
import java.awt.*;

class I{
    int m,n,p,g,a[][],b[][];
    Random r;
    Point s,e,c;
    ArrayList<Integer>z;

    void Q(String q,int l){if(l>0)System.out.println(q);else System.out.print(q);}

    void G(String[]y){
        m=Integer.valueOf(y[0]);
        n=Integer.valueOf(y[1]);
        p=Integer.valueOf(y[2]);
        r=new Random(p);
        Q("",1);

        int o=0,i,j,u=0;
        char t,f[]={85,76,68,82};
        while(o<3){
            if(++u%20000==0)
                Q("\r#"+u,0);

            a=new int[m+2][n+2];
            b=new int[m+2][n+2];
            for(i=0;i<m+2;i++)
                for(j=0;j<n+2;j++)
                    if(i==0||i==m+1||j==0||j==n+1)
                        a[i][j]=2;

            s=new Point(); 
            int e=r.nextInt(m*2+n*2);
            if(e<m*2){
                s.x=e%m+1;
                s.y=e<m?0:n+1;
            }else{
                s.y=(e-m*2)%n+1;
                s.x=(e-m*2)<n?0:m+1;
            }
            if(s.x<1)g=3;
            else if(s.x>m)g=1;
            else if(s.y<1)g=2;
            else if(s.y>n)g=0;

            a[s.x][s.y]=0;
            c=new Point(s);
            z=new ArrayList<Integer>();
            z.add(g);

            for(i=0;i++<Math.min(m,n)-1;)
                if(N()<1&&N()<1)
                        break;
            o=((z.size()>=Math.min(m,n)-1)?1:0)+F()+((V()==z.size())?1:0);
        }

        Q("\r",0);
        for(j=1;j<n+1;j++){
            for(i=1;i<m+1;i++)
                Q(String.valueOf(a[i][j]>0?'O':'.'),0);
            Q("",1);
        }
        Q("\n\n",0);
        if(s.x<1||s.x>m){
            t=s.x<1?'L':'R';
            u=s.y;
        }else{
            t=s.y<1?'T':'B';
            u=s.x;
        }
        Q(t+" "+u,1);
        if(e.x<1||e.x>m){
            t=e.x<1?'L':'R';
            u=e.y;
        } else {
            t=e.y<1?'T':'B';
            u=e.x;
        }
        Q(t+" "+u,1);
        for(i=0;i<z.size();)
            Q(String.valueOf(f[z.get(i++)]),0);
        Q("",1);
    }

    public static void main(String[]a){
        new I().G(a);
    }

    int F(){
        int c=0;
        while(C()<1&&c++<10)
            if(N()<1)
                return 0;
        return e==null?0:1;
    }

    int C(){
        int d=g<2?-1:1;
        if(g%2<1){
            int y=c.y;
            while(y>0&&y<n+1){
                y+=d;
                if(a[c.x][y]==1)
                    return 0;
            }
            e=new Point(c.x,y);
        }else{
            int x=c.x;
            while(x>0&&x<m+1){
                x+=d;
                if(a[x][c.y]==1)
                    return 0;
            }
            e=new Point(x,c.y);
        }
        a[e.x][e.y]=0;
        return 1;
    }


    int V(){
        if((s.x-e.x)+(s.y-e.y)<2)
            return 0;
        Queue<Point>q=new ArrayDeque<Point>();
        Queue<Integer>d=new ArrayDeque<Integer>();
        a[s.x][s.y]=-2;

        q.add(s);
        d.add(0);
        while(q.size()>0){
            Point t=q.poll();
            int h=d.poll(),i=0;
            if(t.equals(e))
                return h;
            for(;i<4;i++){
                Point n=S(a,t,i<2?0:1,i%2<1?-1:1,99,1);
                if(a[n.x][n.y]==-2)
                    continue;
                a[n.x][n.y]=-2;
                q.add(n);d.add(h+1);
            }
        }
        return 0;
    }


    int N(){
        Point q;
        int d=g<2?-1:1,x,y;
        System.arraycopy(a,0,b,0,a.length);
        q=S(b,c,g,d,r.nextInt((g%2<1?n:m)/2)+2,0);      
        if(q.x<1||q.y<1||q.x>m||q.y>n||q.equals(c)||b[q.x][q.y]!=0)
            return 0;
        x=q.x;
        y=q.y;
        if(g%2<1)
            y+=d;
        else
            x+=d;
        if(b[x][y]<0)
            return 0;
        b[q.x][q.y]=-1;
        b[x][y]=1;
        int f=r.nextInt(2)<1?-1:1;          
        g=g%2<1?(f<0?1:3):(g=f<0?0:2);
        c=q;
        System.arraycopy(b,0,a,0,a.length);
        z.add(g);
        return 1;
    }

    Point S(int[][]u,Point f,int w,int d,int q,int s){
        int i=1,x=f.x,y=f.y;
        for(;i<=q;i++){
            if(w%2<1)
                y=f.y+i*d;
            else
                x=f.x+i*d;
            if(e!=null&&e.x==x&&e.y==y)
                return e;
            if(y<0||y>n+1||x<0||x>m+1)
                return f;
            if(s<1&&u[x][y]<1)
                u[x][y]=-1;
            if(u[x][y]>0){
                if(w%2<1)
                    y-=d;
                else
                    x-=d;
                return new Point(x,y);
            }
        }
        if(w%2<1)
            return new Point(f.x,f.y+i*d);
        else
            return new Point(f.x+i*d,f.y);              
    }
}

할 수 없습니다 while(o<3){...;o=...;}for(;o<3;o=...){...;}한 바이트를 저장?
Jonathan Frech

if(w%2<1)return new Point(f.x,f.y+i*d);else return new Point(f.x+i*d,f.y);-> return new Point(f.x+(w%2<1?0:i*d),f.y+(w%2<1?f.y:0));.
Jonathan Frech

3

파이썬 235 개 206 185 176 문자

H,W,P=input()
t=''
for x in range(16):t+=".O"[(P>>x)%2]
for n in[t[1:],t[0],"O","...O"]+["."]*(H-5)+[".O.."]:print(n*W)[:W]
print"B 1\nR",(H,3)[-W%4/2],"\n",("URDR"*W)[:W+W%2]

사용법 :

입력은 stdin 형식을 통해 이루어 [M, N, P]집니다.

$ echo [14, 17, 2] | python ice.py
O..............O.
.................
OOOOOOOOOOOOOOOOO
...O...O...O...O.
.................
.................
.................
.................
.................
.................
.................
.................
.................
.O...O...O...O...
B 1
R 3
URDRURDRURDRURDRUR

당신은지도가 각 씨앗마다 달라야한다고 말했고 P...

$ echo [14, 17, 233] | python ice.py
..O.OOO..........
OOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOO
...O...O...O...O.
.................
.................
.................
.................
.................
.................
.................
.................
.................
.O...O...O...O...
B 1
R 3
URDRURDRURDRURDRUR
$ echo [14, 17, 65133] | python ice.py
.OO.OO..OOOOOOO.O
OOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOO
...O...O...O...O.
.................
.................
.................
.................
.................
.................
.................
.................
.................
.O...O...O...O...
B 1
R 3
URDRURDRURDRURDRUR

그리고 다른 크기의 예 :

$ echo [10, 15, 65133] | python ice.py
.OO.OO..OOOOOOO
OOOOOOOOOOOOOOO
OOOOOOOOOOOOOOO
...O...O...O...
...............
...............
...............
...............
...............
.O...O...O...O.
B 1
R 10
URDRURDRURDRURDR

제공된 모든 객관적인 기준을 충족합니다.

  • 각각 P다른 퍼즐로 연결
  • 하나의 솔루션 만 있으므로 가장 짧습니다.
  • 해결책은 N + N%2적어도 단계를 취 합니다.N
  • 이 솔루션은 항상 2 (M + N)총 공간 보다 많은 공간을 차지합니다

설명 :

각 행은 특정 문자열 요소 W시간 을 반복 하고 길이를 W( HW대신 M및로 사용)으로 제한하여 구성됩니다 N.

처음 두 행은 P각 퍼즐을 독특하게 만드는 데 달려 있습니다. 기본적으로 P16 비트 부호없는 정수에 맞습니다. 0과 1을 P사용하여 이진으로 변환 합니다 ..O

t=''
for x in range(16):t+=".O"[(P>>x)%2]

첫 번째 행 요소는 마지막 15 비트이며 t[1:]두 번째 행 요소는 첫 번째 비트 t[0]입니다. 최소 너비가 15이기 때문에 한 행에 모두 넣을 수는 없었으며 P32767보다 크면 16 비트 모두에 맞지 않습니다 . 따라서 처음 두 행은 가능한 각 값을 고유하게 나타냅니다.P .

세 번째 행은 벽 전체이므로 값 P이 솔루션에 영향을 미치지 않습니다.

그런 다음 실제 미로 요소를 따르십시오. 이 줄은 모두 인쇄하여 캡까지 반복합니다. 결과는 위와 같습니다.

for n in[t[1:],t[0],"O","O..."]+["."]*(H-5)+["..O."]:print(n*W)[:W]

나머지는 동적으로 생성 된 미로를 해결하는 방법을 알아내는 중이었습니다. 이것은 미로의 너비에만 달려 있습니다. 주어진 너비에 대한 솔루션은 다음과 같습니다.

  W  | solution 
-----+---------
  1  | UR
  2  | UR
  3  | UR DR
  4  | UR DR 
  5  | UR DR UR
  6  | UR DR UR
  7  | UR DR UR DR
  8  | UR DR UR DR

그래서 그것은 단지 URDR반복되고 올바른 장소에서 잘 W+W%2립니다.

print"B 1\nR",(H,3,3,H)[W%4],"\n",("URDR"*W)[:W+W%2]

1
정수의 33 비트에 어떻게 작동합니까?
masterX244

@ masterX244 : 많은 골프가 ... 기본적으로 출력의 반복적 인 특성을 이용하고 모든 것이 올바르게 정렬되도록 몇 가지 수학을 수행
Claudiu

대부분 "무작위"가 어떻게 만들어 졌는지 궁금해 (PS
공감이

@ masterX244 : 아있어. 설명을 추가하겠습니다
Claudiu

1
나는 부정적인 방식으로 그것을 의미하지 않았다. 영리한 게임 개발자들이 실제 퍼즐에 이것을 사용하지 않기를 바랍니다. p
Geobits
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.