Den WÜRFEL flachdrücken

17

Sehen Sie sich jemals 3D-Formen an und denken, dass wir zwei verschiedene Dimensionen haben? Lassen Sie uns 3D in 1D verwandeln! (Siehst du was ich dort gemacht habe?)

Aufgabe

Wenn Sie eine 2D-Darstellung eines Würfels (Layout unten) haben, reduzieren Sie diese auf der Grundlage von Zeigern in eine einzelne Zeichenfolge.

Der Würfel

Dies ist das Layout des Würfels, das mit No-Ops ( ,) und Zeigern an den Ecken ( <>v^/) gefüllt ist . Der Navigationszeiger (NP) startet das Programm an der angezeigten Stelle.

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

Der NP bewegt sich von Anfang an weiter, bis er auf eine Ecke trifft. Jede Ecke hat eine Standardrichtung, die den NP in eine neue Richtung weist, sofern sie nicht an der Ecke von einem Zeiger überschrieben wird. Sie sind im obigen Diagramm dargestellt. Die Zeiger im Programm sind v^<>/(die /Punkte entweder nach unten oder nach oben, aufgrund des Layouts wird es nie eine Verwechslung zwischen den beiden geben)

Der NP bleibt stehen, wenn er das Symbol erreicht (Ja, ich weiß, dass es sich um ein Mehrbyte-Zeichen handelt, gehen Sie damit um). Jedes Zeichen, über das es geht, wird bis auf die Zeiger, das no-op ( ,) und das Symbol zur endgültigen Ausgabezeichenfolge hinzugefügt .

Eingang

Bei der Eingabe handelt es sich um eine mehrzeilige Zeichenfolge, die dem Layout des CUBE entspricht, wobei die Nicht-Leerzeichen-Zeichen durch beliebige Zeichen im Bereich 0x21von 0x7Eund mindestens einer Instanz des EOF ersetzt werden.

Sie können Eingaben vornehmen als:

  • Eine mehrzeilige Zeichenfolge
  • Eine Liste von Zeichenfolgen, bei denen jede Zeile ein neues Element in der Liste ist
  • Eine 2D-Liste von Zeichenfolgen, in der jede Zeile in eine Liste unterteilt ist

Ausgabe

Der Würfel, abgeflacht zu einer einzigen Zeile.

Bedingter Zeiger

Der NP hat einen Booleschen Wert, der für einen so genannten "bedingten" Zeiger verwendet wird, der bei beginnt true.

Der "bedingte" Zeiger ( ?) ist ein Zeiger, der den NP-Wert zwischen trueund bei falsejeder Verwendung abwechselt . Bedingte Zeiger werden nur dann wirksam, wenn sie an den Ecken verwendet werden, an denen 3 Spuren (3-Punkt-Ecke) aufeinander treffen. Wenn der Wert ist, truewenn der NP den bedingten Zeiger erreicht, bewegt sich der NP im CUBE-Bild in die Standardrichtung und der NP-Wert wird umgeschaltet , nachdem er angewiesen wurde. Wenn diese falseOption aktiviert ist , folgt der NP der nicht standardmäßigen Richtung.

Es wird niemals einen Fall geben, in dem der NP in Richtung einer Bedingung geht und die Standardrichtung die Richtung ist, aus der er gerade gekommen ist. Stellen Sie sich vor, dass dies die linke Ecke der Vorderseite ist und der NP-Wert aktuell ist true:

      NP direction
      /
     ,
    ,
,,,?
   ,
   ,

Dies wird niemals passieren, da die Standardrichtung es wieder in den ursprünglichen Zustand zurückführt.

Wenn sich der bedingte Zeiger auf einer 3-Punkt-Ecke befindet:

  • Es wird nicht zur endgültigen Zeichenfolge hinzugefügt
  • Der NP-Wert wird zwischen trueund false nach dem Anweisen des NP umgeschaltet .
  • Wenn der NP-Wert gleich ist true, wird der NP in die Standardrichtung umgeleitet . Andernfalls wird es in die nicht standardmäßige Richtung umgeleitet .

Wenn es sich auf einer Strecke oder einer 2-Punkt-Kurve befindet:

  • Es wird zur letzten Zeichenfolge hinzugefügt
  • Der Wert wird umgeschaltet
  • Die IP wird nicht gerichtet

Etwas, auf das man achten muss

Wenn sich ein Zeiger auf einer Spur befindet und nicht auf Leerzeichen zeigt, wird der NP in die neue Spur geleitet, fügt der letzten Zeichenfolge das nächste Zeichen hinzu und dreht den NP um 90 Grad nach rechts.

 abcd
   >e
  g f
 /
NP direction

würde abflachen

(...) gef (...)

NICHT

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

Ein /Zeiger leitet den NP in diesem Fall nicht um, da er möglicherweise in ein Leerzeichen umleitet

     f
     e
> ab/d

würde werden ab/def

Regeln

  • Die Breite, Höhe und Tiefe des Würfels können sich ändern
  • Die Höhe und Tiefe des Würfels ist immer gleich und halb so breit, sodass die Breite immer gleichmäßig ist.
  • Die Breite liegt zwischen (einschließlich) 6 und 60.
  • Es wird immer eine EOF ( ) geben, die vom NP erreicht werden kann. <¶>Zum Beispiel wird es niemals so etwas im Würfel geben: Der NP würde niemals in der Lage sein, den Würfel zu erreichen.
  • Da ein Leerzeichen nicht in die Spuren des Cubes eingefügt werden kann, sollte die letzte Zeichenfolge niemals ein Leerzeichen enthalten.
  • Wenn sich ein Zeiger in einer der Spuren befindet (nicht an einer Ecke) und den NP in Leerzeichen lenken würde, bleibt der NP konstant und das Zeichen wird zur endgültigen Zeichenfolge hinzugefügt.
  • Wenn der Zeiger ihn jedoch auf der Spur hält, wird der NP gerichtet und das Zeigerzeichen wird nicht hinzugefügt
  • Da ,der endgültigen Zeichenfolge keine no-ops ( ) hinzugefügt werden, sollte die endgültige Zeichenfolge keine enthalten ,.
  • Sie können davon ausgehen, dass die Eingabe korrekt ist.
  • Dies ist ein so dass der kürzeste Code in Bytes gewinnt!

Beispiele

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
quelle
Kein Problem :) Wirklich schöne Herausforderung übrigens! :)
HyperNeutrino
@HyperNeutrino Ich fühle mich jetzt irgendwie schuldig, da die Bounty begonnen hat. Dies war ein Projekt, an dem ich gearbeitet habe, das ich aber aufgegeben habe und das ich gepostet habe. Also kann ich einfach meine alte Lösung aufpolieren und sie für das Kopfgeld bereitstellen! Das mache ich aber nur, wenn bis zum Ende der Woche keine Antwort
vorliegt
@RandomUser schreibe jetzt eine Antwort, die Leute sind eher geneigt zu antworten, wenn sie etwas zu schlagen haben. Und füttere nicht schuldig, es ist das Äquivalent von 5 Antwort-Upvotes.
programmer5000
@ programmer5000 Es ist noch nicht fertig und nicht annähernd golfen, aber ich sollte es in ein paar Tagen schaffen
caird coinheringaahing
@ RandomUser derp
Stephen

Antworten:

8

Python 3 , 1558 1553 1419 1417 1347 1258 Bytes

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

Probieren Sie es online!

5 Bytes dank @sagiksp gespeichert

Dank @ Mr.Xcoder und @totallyhuman im Chat wurden 20 Byte gespeichert

128 Bytes gespart dank verschiedener Golftricks

Dank @JonathanFrech 72 Byte gespeichert

Weitere 89 Bytes dank @ Mr.Xcoder gespeichert

Caird Coinheringaahing
quelle
Nizza Golf, obwohl Sie einige mit verpasst haben not(p[0] == 0), könnte es einfach sein p[0]!=0.
Sagiksp
Sie können viele Bytes durch unterschiedliche Einrückungsstufen mit nur einem Byte schneiden
Uriel
@Uriel die Tabs gehen spacedann tatsächlich \t(Tab) dann space\tusw. Es ist genau so, wie SE Beiträge formatiert
Caird Coinheringaahing
@Ilikemydog oh great
Uriel
Warum überhaupt einrücken?
Shaggy