KÜP'ü düzleştirin


17

Hiç 3D şekillere bakıp 2 boyutumuz olduğunu düşünüyor musunuz? Şimdi 3D'yi 1D haline getirelim! (Orada ne yaptığımı gördün mü?)

Görev

Bir küpün 2B temsili verildiğinde (aşağıdaki düzen), işaretçileri temel alarak tek bir dize haline getirin.

Küp

Bu, op-op ( ,) ve köşelerde ( <>v^/) işaretçilerle dolu küpün yerleşim düzeni . Navigasyon İşaretçisi (NP) gösterilen yerde programı başlatır.

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

NP, başlangıçtan köşeye gelene kadar hareket etmeye devam ediyor. Her köşede, köşede bir işaretçi tarafından geçersiz kılınmadıkça NP'yi yeni bir yöne yönlendirecek varsayılan bir yön bulunur. Yukarıdaki diyagramda gösterilmiştir. Programdaki işaretçiler v^<>/( /aşağı veya yukarı noktalar, düzen nedeniyle ikisi arasında asla karışıklık olmayacaktır)

NP sembole ulaştığında durur (Evet, bunun çok baytlık bir karakter olduğunu biliyorum, onunla başa çık). Üzerinde ilerlediği her karakter, işaretçiler, no-op ( ,) ve sembolü hariç son çıktı dizesine eklenir .

Giriş

Girdi düzenini eşleşen bir çok satırlı dize olacaktır CUBE aralığında herhangi bir karakter ile değiştirilir boşluk olmayan karakterler ile 0x21karşı 0x7Eve en azından EOF bir örneğini.

Girişi şu şekilde alabilirsiniz:

  • Çok satırlı bir dize
  • Her satırın listede yeni bir öğe olduğu dizelerin listesi
  • Her satırın bir listeye ayrıldığı 2B dizeler listesi

Çıktı

Küp, tek bir satıra dizildi.

Koşullu İşaretçi

NP, "koşullu" işaretçi adı verilen bir şey için kullanılan bir boole değerine sahiptir. true .

"Koşullu" işaretçi ( ?) arasında NP değeri, diğer bir işaretçidir trueve falsekullanıldığı zaman, her. Koşullu işaretçiler yalnızca 3 parçanın (3 nokta köşe) birleştiği köşelerde kullanıldığında etkilidir. Eğer değer trueNP koşullu göstergeye ulaştığında ise, NP KÜP görüntüsünde varsayılan yöne hareket eder ve yönlendirildikten sonra NP değeri değiştirilir. Bu nedenle, açıksafalse , NP varsayılan olmayan yönü izler.

Hiçbir zaman NP'nin koşullu bir duruma geçtiği bir örnek olmayacaktır ve varsayılan yön, henüz geldiği yöndür. Bunun ön yüzün sol köşesi olduğunu ve NP değerinin şu anda olduğunu düşünün true:

      NP direction
      /
     ,
    ,
,,,?
   ,
   ,

Bu asla gerçekleşmeyecektir, çünkü varsayılan yön onu önceki haline geri yansıtır.

Koşullu işaretçi 3 noktalı bir köşedeyse:

  • Son dizeye eklenmez
  • NP değeri, NP yönlendirildikten sonratrue ve false sonra değiştirilir .
  • NP değeri ise true, NP varsayılan yöne yönlendirilir. Aksi takdirde, varsayılan olmayan yöne yönlendirilir.

Bir parkurda veya 2 noktalı bir köşedeyse:

  • Son dizeye eklenir
  • değeri bir konum değiştirir
  • IP değildir yönlendirilmiş

Dikkat edilecek bir şey

İşaretçi bir iz üzerindeyse ve boşluklara işaret etmiyorsa , NP yeni parçaya yönlendirilir, son karaktere bir sonraki karakteri ekler ve NP'yi 90 derece sağa döndürür.

 abcd
   >e
  g f
 /
NP direction

yassılaşır

(...) gef (...)

DEĞİL

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

Bir /işaretçi bu örnekte NP'yi bir alana yönlendiremeyeceği için yönlendirmez.

     f
     e
> ab/d

olacaktı ab/def

kurallar

  • Küpün genişliği, yüksekliği ve derinliği değişebilir
  • Küpün yüksekliği ve derinliği her zaman aynı olacak ve genişliğin yarısı olacaktır, bu nedenle genişlik her zaman eşit olacaktır.
  • Genişlik (dahil) 6 ile 60 arasında olacaktır.
  • Her zaman NP tarafından ulaşılabilen bir EOF ( ) olacaktır. Örneğin, küpte asla böyle bir şey olmayacak: <¶>çünkü NP asla küpe ulaşamayacaktır.
  • Küpün izlerine boşluk eklenemeyeceğinden, son dizgide hiç boşluk olmamalıdır.
  • Eğer işaretçilerden birine (köşeye değil) bir işaretçi yerleştirilirse ve NP'yi boşluklara yönlendirirse, NP sabit kalır ve karakter son dizgiye eklenir.
  • Ancak, işaretçi onu yolda tutuyorsa, NP yönlendirilir ve işaretçi karakteri eklenmez
  • ,Son dizeye no-ops ( ) eklenmediğinden, son dize herhangi bir karakter içermemelidir, .
  • Girişin doğru olacağını varsayabilirsiniz.
  • Bu bir bayt kazanır çok kısa kod kazanır!

Örnekler

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

Sorun değil :) Gerçekten güzel bir meydan okuma btw! :)
HyperNeutrino

@HyperNeutrino Ödül başladığı için kendimi biraz suçlu hissediyorum. Bu, üzerinde çalıştığım ancak vazgeçtiğim ve göndermeye karar verdiğim bir projeydi. Böylece eski çözümümü cilalayabilir ve ödül için gönderebilirim! Bunu sadece hafta sonuna kadar cevap yoksa yapacağım
caird coinheringaahing

@RandomUser şimdi devam et ve bir cevap gönder, insanlar yenecek bir şeyleri olduğunda cevap vermeye daha meyilli olacaklar. Ve suçlu olmayın, bu 5 cevap upvotes eşdeğerdir.
programcı5000

@ programmer5000 Bitmedi ve hiçbir yere yakın golf yok ama birkaç gün içinde yapmalıyım
caird coinheringaahing

@RandomUser derp
Stephen

Yanıtlar:


8

Python 3 , 1558 1553 1419 1417 1347 1258 bayt

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

Çevrimiçi deneyin!

@Sagiksp sayesinde 5 bayt kaydedildi

@ Mr.Xcoder ve @totallyhuman sayesinde 20 bayt kurtarıldı

Çeşitli golf hileleri sayesinde 128 bayt tasarruf

@JonathanFrech sayesinde 72 bayt kaydedildi

@ Mr.Xcoder sayesinde 89 bayt kurtardı


Güzel golf, bazı cevapsız olsa da not(p[0] == 0), sadece olabilir p[0]!=0.
sagiksp

yalnızca tek bir baytla farklı girinti düzeylerini ayırarak birçok bayt kesebilirsiniz
Uriel

@Iriel sekmeler aslında spaceo zaman gitmek \t(sekme) space\tvb. Bu SE
yazı

@Ilikemydog oh great
Uriel

Neden girintili?
Shaggy
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.