Aplatir le CUBE

17

Avez-vous déjà regardé des formes 3D et pensez que nous avons 2 nombreuses dimensions. Alors faisons de la 3D en 1D! (Regarde ce que j'ai fait là?)

Tâche

Étant donné une représentation 2D d'un cube (disposition ci-dessous), aplatissez-le en une seule chaîne, basée sur des pointeurs.

Le cube

Il s'agit de la disposition du cube rempli de no-ops ( ,) et de pointeurs aux coins ( <>v^/). Le pointeur de navigation (NP) démarre le programme à l'endroit indiqué.

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

Le NP continue de se déplacer dès le début jusqu'à ce qu'il rencontre un corner. Chaque coin a une direction par défaut qui, à moins d'être remplacée au coin par un pointeur, pointera le NP dans une nouvelle direction. Ils sont représentés sur le schéma ci-dessus. Les pointeurs du programme sont v^<>/(les /points vers le bas ou vers le haut, en raison de la disposition, il n'y aura jamais de confusion entre les deux)

Le NP s'arrête de bouger lorsqu'il atteint le symbole (Oui, je sais que c'est un caractère multi-octets, faites-le). Chaque caractère sur lequel il passe est ajouté à la chaîne de sortie finale à l'exception des pointeurs, du no-op ( ,) et du symbole.

Contribution

L'entrée sera une chaîne de plusieurs lignes qui correspond à la disposition du CUBE avec les caractères non blancs remplacés par n'importe quel caractère de la plage 0x21vers 0x7Eet au moins une instance de l'EOF.

Vous pouvez prendre des informations en tant que:

  • Une chaîne multiligne
  • Une liste de chaînes où chaque ligne est un nouvel élément de la liste
  • Une liste 2D de chaînes où chaque ligne est décomposée en une liste

Production

Le cube, aplati en une seule chaîne de ligne.

Pointeur conditionnel

Le NP a une valeur booléenne qui est utilisée pour quelque chose appelé un pointeur "conditionnel" qui commence à true.

Le pointeur "conditionnel" ( ?) est un pointeur qui alternera la valeur NP entretrue et falsechaque fois qu'il est utilisé. Les pointeurs conditionnels ne prennent effet que lorsqu'ils sont utilisés dans les coins où 3 pistes (coin à 3 points) se rencontrent. Si la valeur est truelorsque le NP atteint le pointeur conditionnel, le NP se déplace dans la direction par défaut dans l'image CUBE et, après avoir été dirigé, la valeur NP est basculée. Par conséquent, s'il est activé false, le NP suit la direction non définie par défaut.

Il n'y aura jamais d'instance où le NP va vers un conditionnel et la direction par défaut est la direction d'où il vient. Imaginez que c'est le coin gauche de la face avant et que la valeur NP est actuellement true:

      NP direction
      /
     ,
    ,
,,,?
   ,
   ,

Cela ne se produira jamais car la direction par défaut la ramènera à ce qu'elle était.

Si le pointeur conditionnel est sur un coin à 3 points:

  • Il n'est pas ajouté à la chaîne finale
  • La valeur NP est basculée entre trueet false après que le NP a été dirigé.
  • Si la valeur NP est true, le NP est redirigé dans la direction par défaut . Sinon, il est redirigé vers la direction non définie par défaut .

S'il se trouve sur une piste ou un virage à 2 points:

  • Il est ajouté à la chaîne finale
  • la valeur est basculée
  • L'IP n'est pas dirigée

Quelque chose à surveiller

Si un pointeur se trouve sur une piste et qu'il ne pointe pas vers des espaces, le NP est dirigé vers la nouvelle piste, ajoute le caractère suivant à la chaîne finale et fait pivoter le NP de 90 degrés vers la droite.

 abcd
   >e
  g f
 /
NP direction

s'aplatirait à

(...) gef (...)

NE PAS

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

Un /pointeur ne redirige pas le NP dans ce cas car il peut rediriger vers un espace afin

     f
     e
> ab/d

deviendrait ab/def

Règles

  • La largeur, la hauteur et la profondeur du cube peuvent changer
  • La hauteur et la profondeur du cube seront toujours les mêmes et seront la moitié de la largeur, donc la largeur sera toujours égale.
  • La largeur sera comprise entre (inclus) 6 et 60.
  • Il y aura toujours un EOF ( ) accessible par le NP. Par exemple, il n'y aura jamais quelque chose comme ça dans le cube:<¶> car le NP ne pourra jamais atteindre le cube.
  • Comme un espace ne peut pas être inséré dans les pistes du cube, la chaîne finale ne doit jamais contenir d'espace.
  • Si un pointeur est placé dans l'une des pistes (pas sur un coin) et qu'il dirigerait le NP dans des espaces, le NP reste constant et le caractère est ajouté à la chaîne finale.
  • Cependant, si le pointeur le maintient sur la piste, le NP est dirigé et le caractère du pointeur n'est pas ajouté
  • Comme no-ops ( ,) n'est pas ajouté à la chaîne finale, la chaîne finale ne doit pas en contenir ,.
  • Vous pouvez supposer que l'entrée sera correcte.
  • C'est un donc le code le plus court en octets gagne!

Exemples

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
caird coinheringaahing
la source
Pas de problème :) Très beau challenge btw! :)
HyperNeutrino
@HyperNeutrino Je me sens un peu coupable maintenant que la prime a commencé. C'était un projet sur lequel je travaillais mais j'ai abandonné et j'ai décidé de poster. Je peux donc simplement peaufiner mon ancienne solution et la publier pour la prime! Je ne le ferai que s'il n'y a pas de réponse d'ici la fin de la semaine, cependant
caird coinheringaahing
@RandomUser allez-y et postez une réponse maintenant, les gens seront plus enclins à répondre quand ils auront quelque chose à battre. Et ne nourrissez pas les coupables, c'est l'équivalent de 5 réponses positives.
programmer5000
@ programmer5000 Ce n'est pas fini et nulle part près du golf mais je devrais le faire dans quelques jours
caird coinheringaahing
@RandomUser derp
Stephen

Réponses:

8

Python 3 , 1558 1553 1419 1417 1347 1258 octets

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

Essayez-le en ligne!

5 octets enregistrés grâce à @sagiksp

20 octets enregistrés grâce à @ Mr.Xcoder et @totallyhuman dans le chat

128 octets enregistrés grâce à diverses astuces de golf

72 octets enregistrés grâce à @JonathanFrech

Encore 89 octets enregistrés grâce à @ Mr.Xcoder

caird coinheringaahing
la source
Bon golf, même si vous en avez manqué not(p[0] == 0), cela pourrait être juste p[0]!=0.
sagiksp
vous pouvez couper plusieurs octets en différant les niveaux d'indentation avec un seul octet uniquement
Uriel
@Uriel les onglets vont effectivement spaceensuite \t(onglet) puis space\tetc. C'est exactement la façon dont SE formate les messages
caird
@Ilikemydog oh great
Uriel
Pourquoi le mettre en retrait?
Shaggy