Appiattire il CUBO


17

Hai mai visto forme 3D e pensi che abbiamo 2 molte dimensioni. Quindi trasformiamo il 3D in 1D! (Vedi cosa ho fatto lì?)

Compito

Data una rappresentazione 2D di un cubo (layout sotto), appiattiscilo in una singola stringa, sulla base di puntatori.

Il cubo

Questo è il layout del cubo riempito con no-ops ( ,) e puntatori agli angoli ( <>v^/). Il puntatore di navigazione (NP) avvia il programma dove mostrato.

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

L'NP continua a muoversi dall'inizio fino a quando non incontra un angolo. Ogni angolo ha una direzione predefinita che, a meno che non venga sovrascritta nell'angolo da un puntatore, punterà NP in una nuova direzione. Sono mostrati nel diagramma sopra. I puntatori nel programma sono v^<>/(i /punti in basso o in alto, a causa del layout non ci sarà mai confusione tra i due)

L'NP smette di muoversi quando raggiunge il simbolo (Sì, lo so che si tratta di un carattere multi-byte, trattalo). Ogni carattere che passa viene aggiunto alla stringa di output finale ad eccezione dei puntatori, del no-op ( ,) e del simbolo.

Ingresso

Ingresso sarà una stringa multi linea che corrisponde al layout del CUBE con i caratteri non di spaziatura sostituiti con qualsiasi carattere nell'intervallo 0x21di 0x7Ee almeno un'istanza del EOF.

Puoi inserire input come:

  • Una stringa multilinea
  • Un elenco di stringhe in cui ogni riga è un nuovo elemento nell'elenco
  • Un elenco 2D di stringhe in cui ciascuna riga è suddivisa in un elenco

Produzione

Il cubo, appiattito in una stringa a riga singola.

Puntatore condizionale

NP ha un valore booleano che viene utilizzato per qualcosa chiamato un puntatore "condizionale" che inizia a true.

Il puntatore "condizionale" ( ?) è un puntatore che alternerà il valore NP tra truee falseogni volta che viene utilizzato. I puntatori condizionali hanno effetto solo se utilizzati negli angoli in cui si incontrano 3 tracce (angolo a 3 punti). Se il valore è truequando NP raggiunge il puntatore condizionale, NP si sposta nella direzione predefinita nell'immagine CUBE e, dopo essere stato diretto, il valore NP viene commutato. Pertanto, se è attivo false, NP segue la direzione non predefinita.

Non ci sarà mai un caso in cui NP va verso un condizionale e la direzione di default è la direzione da cui è appena arrivata. Immagina che questo sia l'angolo sinistro della faccia anteriore e che il valore NP sia attualmente true:

      NP direction
      /
     ,
    ,
,,,?
   ,
   ,

Ciò non accadrà mai, poiché la direzione predefinita lo rispecchierà com'era.

Se il puntatore condizionale si trova su un angolo di 3 punti:

  • Non viene aggiunto alla stringa finale
  • Il valore NP viene commutato tra truee false dopo che NP è stato diretto.
  • Se il valore NP è true, NP viene reindirizzato alla direzione predefinita . Altrimenti, viene reindirizzato alla direzione non predefinita .

Se si trova su una pista o un angolo a 2 punti:

  • Viene aggiunto alla stringa finale
  • il valore è attivato / disattivato
  • L'IP non è diretto

Qualcosa a cui fare attenzione

Se un puntatore si trova su una traccia e non punta negli spazi, NP viene diretto nella nuova traccia, aggiunge il carattere successivo alla stringa finale e ruota l'NP di 90 gradi a destra.

 abcd
   >e
  g f
 /
NP direction

si appiattirebbe

(...) gef (...)

NON

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

Un /puntatore non reindirizza NP in questo caso in quanto potrebbe reindirizzare in uno spazio così

     f
     e
> ab/d

potrebbe diventare ab/def

Regole

  • La larghezza, l'altezza e la profondità del cubo possono variare
  • L'altezza e la profondità del cubo saranno sempre le stesse e saranno dimezzate, quindi la larghezza sarà sempre uniforme.
  • La larghezza sarà compresa (compresa) tra 6 e 60.
  • Ci sarà sempre un EOF ( ) che può essere raggiunto da NP. Ad esempio non ci sarà mai qualcosa del genere nel cubo: <¶>poiché NP non sarebbe mai in grado di raggiungere il cubo.
  • Poiché uno spazio non può essere inserito nelle tracce del cubo, la stringa finale non dovrebbe mai avere uno spazio al suo interno.
  • Se un puntatore viene posizionato in una delle tracce (non su un angolo) e dirige NP negli spazi, NP rimane costante e il carattere viene aggiunto alla stringa finale.
  • Tuttavia, se il puntatore lo mantiene sulla traccia, NP viene diretto e il carattere del puntatore non viene aggiunto
  • Dato che no-ops ( ,) non viene aggiunto alla stringa finale, la stringa finale non deve contenere alcuna stringa ,al suo interno.
  • Si può presumere che l'input sarà corretto.
  • Questo è un quindi vince il codice più breve in byte !

Esempi

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

Nessun problema :) Sfida davvero bella a proposito! :)
HyperNeutrino,

@HyperNeutrino Mi sento in qualche modo in colpa ora che la generosità è iniziata. Questo era un progetto a cui stavo lavorando, ma ho rinunciato e ho deciso di pubblicare. Quindi posso solo lucidare la mia vecchia soluzione e pubblicarla per la generosità! Lo farò solo se entro la fine della settimana non ci saranno risposte
caird coinheringaahing

@RandomUser vai avanti e pubblica una risposta ora, le persone saranno più propense a rispondere quando hanno qualcosa da battere. E non nutrirti in colpa, è l'equivalente di 5 voti di risposta.
programmatore

@ programmer5000 Non è finito e per nulla vicino al golf ma dovrei farlo in pochi giorni
caird coinheringaahing

@RandomUser derp
Stephen

Risposte:


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

Provalo online!

5 byte salvati grazie a @sagiksp

Risparmiato 20 byte grazie a @ Mr.Xcoder e @totallyhuman in chat

Risparmiato 128 byte grazie a vari trucchi per il golf

Risparmiato 72 byte grazie a @JonathanFrech

Salvati altri 89 byte grazie a @ Mr.Xcoder


Bel golf, anche se ti sei perso un po ' not(p[0] == 0), potrebbe essere giusto p[0]!=0.
sagiksp,

puoi tagliare molti byte differendo i livelli di rientro con un solo byte
Uriel,

@Uriel le schede in realtà vanno spacequindi \t(tab) quindi space\tecc. È solo il modo in cui i formati SE vengono pubblicati
caird coinheringaahing

@Ilikemydog oh great
Uriel,

Perché indentarlo?
Shaggy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.