Làm phẳng CUBE


17

Bạn có bao giờ nhìn vào hình dạng 3D và nghĩ rằng chúng ta có 2 chiều. Vì vậy, hãy biến 3D thành 1D! (Xem những gì tôi đã làm ở đó?)

Bài tập

Đưa ra một biểu diễn 2D của một khối (bố trí bên dưới), làm phẳng nó thành một chuỗi, dựa trên các con trỏ.

CUBE

Đây là cách bố trí của khối lập phương chứa đầy no-ops ( ,) và con trỏ ở các góc ( <>v^/). Con trỏ Điều hướng (NP) bắt đầu chương trình được hiển thị.

         | NP begins here, moving right.
         V
         >,,,,,,,,,,,,,,,,,,v
        ,                  ,,
       ,                  , ,
      ,                  ,  ,
     ,                  ,   ,
    ,                  ,    ,
   ,                  ,     ,
  ,                  ,      ,
 ,                  ,       ,
/,,,,,,,,,,,,,,,,,,/        /
,                  ,       ,
,                  ,      ,
,                  ,     ,
,                  ,    ,
,                  ,   ,
,                  ,  ,
,                  , ,
,                  ,,
^,,,,,,,,,,,,,,,,,,<

NP tiếp tục di chuyển ngay từ đầu cho đến khi gặp một góc. Mỗi góc có một hướng mặc định, trừ khi được ghi đè ở góc bởi một con trỏ, sẽ trỏ NP theo hướng mới. Chúng được hiển thị trên sơ đồ trên. Các con trỏ trong chương trình là v^<>/(các /điểm đó xuống hoặc lên, do cách bố trí sẽ không bao giờ có bất kỳ sự nhầm lẫn nào giữa hai)

NP dừng di chuyển khi đến biểu tượng (Có tôi biết đây là ký tự nhiều byte, xử lý nó). Mỗi ký tự mà nó đi qua được thêm vào chuỗi đầu ra cuối cùng ngoại trừ các con trỏ, no-op ( ,) và ký hiệu.

Đầu vào

Đầu vào sẽ là một chuỗi nhiều dòng khớp với bố cục của CUBE với các ký tự không phải khoảng trắng được thay thế bằng bất kỳ ký tự nào trong phạm vi 0x21đến 0x7Eít nhất một phiên bản của EOF.

Bạn có thể lấy đầu vào là:

  • Một chuỗi nhiều dòng
  • Danh sách các chuỗi trong đó mỗi dòng là một thành phần mới trong danh sách
  • Danh sách các chuỗi 2D trong đó mỗi dòng được chia thành một danh sách

Đầu ra

Các khối lập phương, san phẳng thành một chuỗi dòng duy nhất.

Con trỏ có điều kiện

NP có giá trị boolean được sử dụng cho một thứ gọi là con trỏ "có điều kiện" bắt đầu từ true.

Con trỏ "có điều kiện" ( ?) là một con trỏ sẽ thay thế giá trị NP giữa truefalsemỗi lần nó được sử dụng. Con trỏ có điều kiện chỉ có hiệu ứng khi được sử dụng trên các góc nơi 3 rãnh (góc 3 điểm) gặp nhau. Nếu giá trị là truekhi NP đến con trỏ có điều kiện, NP sẽ di chuyển đến hướng mặc định trong hình ảnh CUBE và sau khi được hướng dẫn, giá trị NP được bật. Do đó, nếu nó bật false, NP theo hướng không mặc định.

Sẽ không bao giờ có trường hợp NP đi theo hướng có điều kiện và hướng mặc định là hướng mà nó vừa xuất phát. Hãy tưởng tượng rằng đây là góc bên trái của mặt trước và giá trị NP hiện tại là true:

      NP direction
      /
     ,
    ,
,,,?
   ,
   ,

Điều này sẽ không bao giờ xảy ra vì hướng mặc định sẽ phản chiếu nó trở lại như cũ.

Nếu con trỏ có điều kiện ở góc 3 điểm:

  • Nó không được thêm vào chuỗi cuối cùng
  • Giá trị NP được chuyển đổi giữa truefalse sau khi NP được định hướng.
  • Nếu giá trị NP là true, NP được chuyển hướng đến hướng mặc định . Mặt khác, nó được chuyển hướng đến hướng không mặc định .

Nếu nó nằm trên đường đua hoặc góc 2 điểm:

  • Nó được thêm vào chuỗi cuối cùng
  • giá trị được bật
  • IP không được định hướng

Một cái gì đó để coi chừng

Nếu một con trỏ nằm trên rãnh và nó không trỏ vào khoảng trắng, NP sẽ được dẫn vào rãnh mới, thêm ký tự tiếp theo vào chuỗi cuối cùng và xoay NP 90 độ sang phải.

 abcd
   >e
  g f
 /
NP direction

sẽ san phẳng để

(...) gef (...)

KHÔNG PHẢI

(...) g>def (...)

Một /con trỏ không chuyển hướng NP trong trường hợp này vì nó có thể chuyển hướng vào một không gian vì vậy

     f
     e
> ab/d

sẽ trở thành ab/def

Quy tắc

  • Chiều rộng, chiều cao và chiều sâu của khối có thể thay đổi
  • Chiều cao và chiều sâu của khối sẽ luôn giống nhau và sẽ bằng một nửa chiều rộng, vì vậy chiều rộng sẽ luôn bằng nhau.
  • Chiều rộng sẽ nằm trong khoảng (bao gồm) 6 đến 60.
  • Sẽ luôn có một EOF ( ) mà NP có thể đạt được. Ví dụ, sẽ không bao giờ có một cái gì đó như thế này trong khối: <¶>vì NP sẽ không bao giờ có thể tiếp cận khối.
  • Vì một không gian không thể được chèn vào các rãnh của khối, chuỗi cuối cùng không bao giờ có khoảng trắng trong đó.
  • Nếu một con trỏ được đặt vào một trong các rãnh (không nằm trên một góc) và nó sẽ hướng NP vào khoảng trắng, NP không đổi và ký tự được thêm vào chuỗi cuối cùng.
  • Tuy nhiên, nếu con trỏ giữ nó trên đường đua, NP được điều hướng và ký tự con trỏ không được thêm vào
  • Vì no-ops ( ,) không được thêm vào chuỗi cuối cùng, chuỗi cuối cùng không nên chứa bất kỳ chuỗi nào ,trong chuỗi đó.
  • Bạn có thể giả định rằng đầu vào sẽ chính xác.
  • Đây là một để mã ngắn nhất trong byte thắng!

Ví dụ

Input
Output
-----
Input
Output

  abcdef
 ¶    ,g
q,,,,, h
p    ,i
onmlkj

abcdefghijklmnopq

-----

         >,,,,,,,,,,,,,,,,,,v
        ¶                  ,,
       ,                  , ,
      ,                  ,  ,
     ,                  ,   ,
    ,                  ,    ,
   ,                  ,     ,
  ,                  ,      ,
 ,                  ,       ,
/,,,,,,,,,,,,,,,,,,/        /
,                  ,       ,
,                  ,      ,
,                  ,     ,
,                  ,    ,
,                  ,   ,
,                  ,  ,
,                  , ,
,                  ,,
^,,,,,,,,,,,,,,,,,,<

nothing

-----

                   Mr/~gm,Vc!r,0cbmPC@Zg9jb)7=m^ppwN*Nuk){r
                  c                                      ¶Z
                 J                                      ; #
                e                                      j  8
               ]                                      b   "
              #                                      `    4
             h                                      $     -
            p                                      n      2
           L                                      S       P
          B                                      ;        R
         @                                      J         D
        E                                      N          <
       O                                      \           p
      B                                      y            =
     |                                      9             ;
    T                                      x              [
   6                                      o               k
  !                                      L                =
 E                                      K                 ~
>mjmz6,?A*Q)^.a:IpGP"^bK}DSXL)2F!BV|"m6/                  T
a                                      A                 6
5                                      =                p
1                                      i               R
4                                      /              ?
-                                      Z             (
1                                      "            `
'                                      0           {
N                                      p          M
O                                      *         K
Z                                      J        $
"                                      (       d
4                                      +      o
f                                      U     g
i                                      v    b
U                                      ~   L
U                                      M  h
g                                      ^ D
2                                      (g
5]u*n<Ldn</9/XQyC444Va\m}W3Rf,rp"a@5cZB0

(Newlines added for readability)
Mr/~gmVc!r0cbmPC@Zg9jb)7=m^ppwN*Nuk){rZ#8"4-2PRD<p=;[k=~T
6pR?(`{MK$dogbLhDg0BZc5@a"prfR3W}m\aV444CyQX/9/ndLn*u]52g
UUif4"ZON'1-415amjmz6?A*Q)^.a:IpGP"^bK}DSXL)2F!BV|"m6KLox9
y\NJ;Sn$`bj;

-----

       NEWYORKCITYBABY!
      ¶              ,,
     ,              , ,
    ,              ,  ,
   ,              ,   ,
  ,              ,    ,
 ,              ,     ,
,,,,,,,,,,,,,,,,      ,
,              ,     ,
,              ,    ,
,              ,   ,
,              ,  ,
,              , ,
,              ,,
,,,,,,,,,,,,,,,,

NEWYORKCITYBABY!

-----

                          /{Y!_(=-)s<e!D^<+<+1o30d>QOx9kfu?3X2I:8],t>Ye~,Y9/6;u@
                         ]                                                    >Y
                        !                                                    1 )
                       c                                                    7  8
                      ^                                                    K   &
                     f                                                    K    9
                    M                                                    }     O
                   s                                                    _      ?
                  h                                                    N       e
                 ?                                                    u        ,
                g                                                    =         s
               >                                                    Q          M
              a                                                    0           9
             b                                                    c            (
            h                                                    {             c
           [                                                    m              *
          I                                                    R               %
         K                                                    E                >
        u                                                    5                 n
       W                                                    f                  ]
      }                                                    |                   y
     F                                                    E                    q
    )                                                    <                     ;
   X                                                    L                      S
  F                                                    M                       |
 u                                                    *                        Z
>XZpJ=L`+8ONRk?T7$qVr6-U^f14{>>ABEEP`Mjx&T[/&o*F=*qq{/                         e
¶                                                    <                        ^
+                                                    P                       C
.                                                    x                      m
;                                                    ^                     >
y                                                    4                    b
5                                                    v                   `
Q                                                    B                  c
2                                                    e                 r
a                                                    x                I
3                                                    1               Y
Q                                                    v              `
w                                                    ;             o
*                                                    S            h
E                                                    b           S
r                                                    6          P
M                                                    `         l
%                                                    M        A
-                                                    `       "
j                                                    \      s
}                                                    ~     J
$                                                    h    c
%                                                    p   O
I                                                    Z  Z
]                                                    N E
`                                                    3<
x^}}SI"-a3[%7U5EV}"UM?Aov|E_yjrMt<HAQ@}QAABO&y//R0$\2p

(Newlines added for readability)
]!c^fMsh?g>abh[IKuW}F)XFuXZpJ=L`+8ONRk?T7$qVr6-U^f14{ABEE
P`Mjx&T[/&o*F=*qq{*ML<E|f5ERm{c0Q=uN_}KK71Y)8&9O?esM9(c*%
>n]yq;S|Ze^Cm>b`crIY`ohSPlA"sJcOZE3NZph~\`M`6bS;;Sb6`M`\~
hpZN3p2\$0R//y&OBAAQ}@QAHtMrjy_E|voA?MU"}VE5U7%[3a-"IS}}^
x`]I%$}j-%MrE*wQ3a2Q5y;.+

-----

   %:biv+|?
  ¶      \+
 T      c ,
?{yX<//v  "
i      [ @
Q      Tj
U8sUNl.?

%:biv+|+"@jT[[T.lNUs8UQi{yXXy{T

-----

     FCf2hoYA)&*j
    F          ¶#
   3          p (
  &          ~  w
 ;          *   t
39Hq{F'MmmO/    9
5          \   D
-          |  }
8          c l
a          25
GKa"<0/7MG[?

FCf2hoYA)&*j#(wt9D}l5[GM7/0"aKGa8-53;&3FFCf2hoYA)&*j#(wt9D}l52c|\*~p

-----

           #S^[WNk3;9v;e2\h!@CI#Il?
          G                      g`
         $                      2 \
        V                      9  S
       m                      Y   b
      6                      )    *
     U                      '     V
    [                      g      V
   I                      8       X
  <                      T        U
 K                      ¶         C
?ozMt+xxxxutvQgkx&D9I/<v          '
w                      K         p
V                      y        h
(                      R       y
e                      P      i
]                      !     x
Z                      /    s
y                      w   '
#                      X  4
c                      ~ W
Z                      E,
~IdXPYS.Lc49lC~vjULUBv.?

(Newlines added for readability)    
#S^[WNk3;9v;e2\h!@CI#Il`\Sb*VVXUC'phyixs'4WE~Xw/!PRyKKyRP!/wX~E
.vBULUjv~Cl94cL.SYPXdI~Zc#yZ]e(VwozMt+xxxxutvQgkx&D9I//I9D&xkgQ
vtuxxxx+tMzoK<I[U6mV$G#S^[WNk3;9v;e2\h!@CI#Ilg29Y)'g8T

Không có vấn đề :) btw thử thách thực sự tốt đẹp! :)
HyperNeutrino

@HyperNeutrino Bây giờ tôi cảm thấy có lỗi vì tiền thưởng đã bắt đầu. Đây là một dự án mà tôi đang thực hiện nhưng đã từ bỏ và quyết định đăng. Vì vậy, tôi chỉ có thể đánh bóng giải pháp cũ của tôi và đăng nó cho tiền thưởng! Tuy nhiên, tôi sẽ chỉ làm điều đó nếu không có câu trả lời vào cuối tuần
caird coinheringaahing

@RandomUser hãy tiếp tục và đăng câu trả lời ngay bây giờ, mọi người sẽ có xu hướng trả lời nhiều hơn khi họ có thứ gì đó để đánh bại. Và đừng cho tội lỗi, nó tương đương với 5 câu trả lời.
lập trình

@ lập trình viên5000 Nó chưa hoàn thành và không có nơi nào gần sân gôn nhưng tôi sẽ hoàn thành nó trong vài ngày
caird coinheringaahing

@RandomUser derp
Stephen

Câu trả lời:


8

Python 3 , 1558 1553 1419 1417 1347 1258 byte

L=list
M=map
Q=len
m=~0
G,H,J,K,Y,I=[0,1],[0,m],[1,0],[m,0],[m,1],[1,m]
def U(p,c,u,a):
 global F;F+=c*a
 try:u=[G,J,I,I,Y,K,H][[[0,h],[0,w],[h,w],[h,e],[h,0],[l,0],[l,e]].index(p)]
 except:0
 p=L(M(sum,zip(p,u)));return F,p,u
def f(a):
 global w,h,e,l,F;a=L(M(L,a.split('\n')));p=0,0
 for(i)in range(Q(a[0])):
  if' '<a[0][i]:p=0,~-i,;break
 c,P,F,w,h,e,l,t=a[p[0]][p[1]],'><^v/','',~-Q(a[0]),Q(a)//2,~-Q(a[m]),~-Q(a),{'v':J,'^':K,'>':G,'<':H}
 C,u,s,r,E=[[0,w],[0,h],[h,w],[h,e],[h,0],[l,0],[l,e]],[G,t.get(c,I)][c in P],0,1,[[0,w-1],[1,w-1],[1,w],[~-h,1],[h,1],[e-2,-~e],[e-2,e]]
 while'¶'!=c:
  k=p,c,u
  g=L(M(sum,zip(p,u)))
  if s:s=0;u=u[::m]
  if(c)in' ,':F,p,u=U(*k,0)
  elif(c)in P:
   if(p)in C:u=[t[c],[Y,I][p[1]==w]][c=='/'];p=g
   elif(p)in E:F,p,u,s=[(F,g,t[c],1),U(*k,1)+s][c=='/']
   else:
    o=t.get(c,u)
    try:n=a[p[0]+o[0]][p[1]+o[1]];u=[u,o][(' '<n)*~(p[0]<1<'^'==c)]
    except:0
    if u!=t.get(c):F,p,u=U(*k,1)
    else:p=g
  elif'?'==c:
   F+=c*-~(p in C!=F[m]!=c);r=~r
   if~r<1and(p)in[[0,w],[h,e],[h,0],[l,e]]:u=[[I,H][u!=G],[H,J][u!=K],[G,J][u!=K],[K,Y][u!=I]][[[0,w],[h,e],[h,0],[l,e]].index(p)];p=L(M(sum,zip(p,u)))
   elif-1>r:F,p,u=U(*k,0)
  else:F,p,u=U(*k,1)
  c=a[p[0]][p[1]]
 for(c)in'?, ':F=F.replace(c,'')
 return F

Hãy thử trực tuyến!

Đã lưu 5 byte nhờ @sagiksp

Đã lưu 20 byte nhờ @ Mr.Xcoder và @totallyhuman khi trò chuyện

Đã lưu 128 byte nhờ các thủ thuật chơi gôn khác nhau

Đã lưu 72 byte nhờ @JonathanFrech

Đã lưu thêm 89 byte nhờ @ Mr.Xcoder


Chơi golf tốt, mặc dù bạn đã bỏ lỡ một số với not(p[0] == 0), nó có thể chỉ là p[0]!=0.
sagiksp

bạn có thể cắt nhiều byte bằng cách khác nhau các mức thụt đầu dòng chỉ với một byte duy nhất
Uriel

@Uriel các tab thực sự đi spacerồi \t(tab) sau đó, space\tv.v ... Đó chỉ là cách SE định dạng bài đăng
caird coinheringaahing

@Ilikemydog oh tuyệt vời
Uriel

Tại sao lại thụt lề?
Xù xì
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.