Bir buz bulmaca jeneratörü + çözücü inşa et


13

In Twitch oynatır Pokémon , en sinir bozucu engellerden biri, atabilir yüzü size ya bir duvar ya da bir kayayı vurana kadar tek yönde tüm yol kaydırarak başka bir yerden bir yere seyahat etmeliyim bir buz bulmaca vardır.

Senin görevin rastgele bir zor buz bulmaca üretecek bir program oluşturmaktır.

Üç numaralarını kabul edecek Programınız, M, N, ve P, girdi olarak (ile 10 <= M <= 30, 15 <= N <= 40ve 0 <= P < 65536):

12 18

ve çıktı:

  • Bir Mgöre Nızgara oluşan .ve Osırasıyla buz ve bir kaya temsil.
  • Bulmacanın nereden girildiğini gösteren bir konum işaretleyicisi. Bu konum, işaretleyici bir harf oluşur L, R, Tya da B, sol, sağ, bu tarafında (sola veya üstünden) konumunu temsil eden bir sayı ile ve ardından üst ve alt gelen girilecek temsil eder.
  • Bulmacanın çıktığı yeri gösteren benzer bir konum işareti.
  • Bir dizisinden oluşan bir bulmaca en kısa çözüm L, R, Uve Dsırasıyla.

Örnek çıktı:

..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.)

Bir giriş için Mve N, bulmacanın çözümü en az olmalıdır min(M, N)adımlar ve en azından hareket 2 (M + N)toplam boşluk. (Referans için, yukarıda bulmaca 69 boşluk hareketli 12 adımlar toplam hareket eder.) Bulmaca jeneratör farklı bir oluşturmalıdır Mgöre Nfarklı bir çözüm yolu ile bulmaca (her çözelti için aşamaların yani farklı bir sekansı) her tohum P.

  • Farklı bir çözüm yolunun gerekliliğinin, burada Claudiu'nun çözümü gibi sistematik olarak kaya yolları oluşturmaya çalışan çözümlerden kaçınmak olduğunu unutmayın . Rastgele tuhaflıklar nedeniyle iki veya üç çift özdeş çözüm varsa, program kasıtlı olarak aynı hamle dizisiyle sistematik olarak bulmacalar üretmeye çalışmadığı sürece sorun olmaz .

Yukarıda belirtilen en kısa kod kazanır.


2
Hedefi anlayamıyorum: "Bir duvara ya da bir kayaya çarpana kadar bir yerden bir yöne doğru kaydırarak bir yerden bir yere seyahat etmelisiniz." Duvarlara ya da kayalara çarpmak iyi mi? En baştan nereye gitmeyi hedefliyorsunuz? Bir kayaya vurursanız oyun biter mi? Bir duvara çarptığınızda ne olur? Sadece ben miyim yoksa talimatlar belirsiz mi?
DavidC

3
Oh, burada Pokémon Gold ve Silver'ın eski anıları. Çıkışı bulun, HM07'yi alın ve Blackthorn City'ye gidin.
Victor Stafusa

3
Bu bana Chip's Challenge'daki buz seviyelerini hatırlatıyor .
luser droog

1
Neden giriş ve çıkış için >ve <(veya herhangi bir karakter) kullanmıyorsunuz ? Bulmacaları okumak daha kolay olacak.
AL

1
Aslında örnek çıktılarınız geçersiz - en kısa yol LDLDRULDsadece 8 adım uzunluğunda
Claudiu

Yanıtlar:


5

Python, 672554 karakter, daha ilginç bulmaca

Her ne kadar kesinlikle kurallara uysa da, diğer Python programım bunu yeniyor, yine de daha ilginç bulmacalar üretecek bir tane yazmaya karar verdim. İşte burada:

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

Girinti düzeyleri boşluk, sekme, sekme + boşluktur.

Örnekler :

$ 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

PBir tohum olarak kullanır , bu yüzden her biri Paynı bulmacayı oluşturur ve her bir farklılığın Pson derece farklı olması muhtemeldir:

$ 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

Boyutlarına kadar oldukça hızlı çalışır, M=25,N=40ancak geçmişte gerçekten yavaşlar. M=30, N=40Yeterince uzun süre çalışmasına izin verirseniz , teorik olarak çalışmalıdır . Ben burada zor takip çünkü burada iz yazdım - program sadece bulmaca çıktılar.

$ 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

Açıklama :

Program, üstte rastgele bir başlangıç ​​konumu, altta rastgele bir bitiş konumu ve 12.5%herhangi bir noktada bir kaya parçası için şanslı rastgele bir ızgara oluşturarak döngüler . Daha sonra bulmacayı ilk önce bir arama ile çözer ve çözüm varsa ve daha büyükse min(H,W), yazdırır ve çıkar.


4

Java - 2632

Claudiu'nun cevabının teknik saflığına hayran kalırken , biraz daha zor bulmacalar yapmaya elimi denemeye karar verdim ;)

Temel adımlar (oldukça basit):

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

Kayarken her noktayı 'nogo' olarak işaretliyorum. Eğer bir nogo noktasına (ya da bir kayanın oraya gittiği anlamına gelen birinin önünde) bitirirsem, bu geçersiz bir adımdır.

Yani, temelde fikir rastgele bir çok harita oluşturmak ve ilk olanı geçerli tutmaktır. Bunu daha akıllı yapmayı planlıyorum (geri izleme vb.), Ancak şu anda iyi çalışıyor. Bazı gereksiz kodları da azaltabilir, göreceğiz.

Olduğu gibi, neredeyse anında küçük haritalar (15x10), birkaç saniyede orta (30x20) haritalar ve tohuma bağlı olarak 20 saniye ile 20 dakika arasında rastgele bir sürede büyük (40x30) haritalar üretir. Boyutuma bağlı olarak makinemde 300k-500k harita / saniye arasında test yapıyor.

Yan not: Bazen haritalar çok zor olmayabilir , çünkü sadece basamaklar kadar kayalar vardır ve adım sizi bir duvara götürmezse, gerçek bir kayaya çarpmak istiyorsanız çoğu zaman sadece bir seçenek vardır. Daha sonra tüm adımlar çizildikten sonra "rastgele" kayaları güvenli noktalara yerleştirerek düzeltirim. Nogo noktaları zaten işaretlendiğinden, bu oldukça basit olmalıdır. Şimdilik sadece bu örneklerin tadını çıkarın:

Farklı boyutları / tohumları gösteren çıktı:

$ 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

Maksimum boyut 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

golfed:

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);}}

Satır kesmeleri ile:

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);              
    }
}

Could while(o<3){...;o=...;}olmak for(;o<3;o=...){...;}bir bayt tasarruf?
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

Python, 235 206 185 176 karakter

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]

Kullanımı :

Girdi, formun stdin'i üzerinden yapılır [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

Haritaların her tohum için farklı olması gerektiğini söylediniz P... ve bunlar:

$ 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

Ve farklı boyutta bir örnek:

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

Sağlanan tüm objektif kriterleri karşılar:

  • Her biri Pfarklı bir bulmaca
  • Sadece bir çözüm var, bu yüzden en kısa
  • Çözüm N + N%2en azından adımlar atıyorN
  • Çözüm her zaman 2 (M + N)toplam alandan daha fazlasını alır

Açıklama :

Her bir sıra, belirli bir dizi elemanı tekrarlayarak yapılmıştır Wkez ve uzunluğunu sınırlamak W(kullanmak Hve Wyerine Mve N).

İlk iki sıra P, her bulmacayı benzersiz hale getirmeye bağlıdır . Temel olarak, P16 bit işaretsiz bir tamsayıya uyduğunu unutmayın . Ben 0 ve 1 için Pkullanarak, ikili dönüştürmek :.O

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

İlk satır öğesi son 15 bit, t[1:]ikinci satır öğesi 1. bittir t[0]. Hepsini bir sıraya koyamadım çünkü minimum genişlik 15, eğer P32767 ise 16 bitin hepsine uymayacaktı P.

Üçüncü sıra tam bir duvardır, böylece değeri değeri Pçözümü etkilemez.

Ardından gerçek labirent öğelerini takip edin. Bu çizgi hepsini bastırarak kapağa kadar tekrarlar. Sonuç, yukarıda gördüğünüz gibidir:

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

Geri kalanı, dinamik olarak oluşturulmuş labirentin nasıl çözüleceğini buluyordu. Bu sadece labirentin genişliğine bağlıdır. Belirli bir genişlik için çözümlerin:

  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

Böylece URDRdoğru yerde tekrarlanır ve kesilir W+W%2.

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

1
nasıl bir tamsayı 33. bit için çalışır?
masterX244

@ masterX244: Çok sayıda golf ... çıktının tekrarlayan doğasından faydalanmak ve her şeyin düzgün bir şekilde hizalandığından emin olmak için bazı matematik yapmak
Claudiu

çoğunlukla "rastgele" nasıl yapıldığını merak (PS aşağı oy benden değildi)
masterX244

@ masterX244: ah yakaladım. Bir açıklama ekleyeceğim
Claudiu

1
Olumsuz bir şekilde kastetmedim. Kesinlikle zekice, sadece umut
verici
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.