Tarea
Dada una cadena no vacía de letras minúsculas ASCII a
- z
, tome su primer carácter, y:
- Rodéalo con un cuadrado de copias del segundo personaje,
- Rodea eso con un diamante de copias del tercer personaje,
- Rodea eso con un cuadrado de copias del cuarto personaje ...
… Alternando entre bordes cuadrados y de diamante hasta el final de la cuerda. El espacio vacío entre los bordes debe estar representado por espacios ASCII ( ).
Para agregar un borde cuadrado , dibuje un cuadrado exactamente alrededor de toda la "matriz de trabajo" actual:
sssssssssss
t s t s
t t s t t s
t t s t t s
t aaa t s t aaa t s
t aca t => st aca ts
t aaa t s t aaa t s
t t s t t s
t t s t t s
t s t s
sssssssssss
Para agregar un borde de diamante , dibuje una forma de diamante centrada que toque el cuadrado más externo diagonalmente , pero no ortogonalmente :
s
s s
s s
s s
s s
s s
s s
wwwwwwwwwww s wwwwwwwwwww s
w o w s w o w s
w o o w s w o o w s
w o o w s w o o w s
w o eee o w s w o eee o w s
wo eme ow => s wo eme ow s
w o eee o w s w o eee o w s
w o o w s w o o w s
w o o w s w o o w s
w o w s w o w s
wwwwwwwwwww s wwwwwwwwwww s
s s
s s
s s
s s
s s
s s
s
Su programa debe generar la matriz final.
- Cada línea puede contener cualquier cantidad de espacios finales.
- Puede generar una lista de cadenas que representan líneas, o una sola cadena separada por una nueva línea con una nueva línea final opcional.
- Las líneas en blanco iniciales / finales no están permitidas.
- Las columnas principales de espacios también están prohibidas.
Este es el código de golf . El código más corto en bytes gana.
Casos de prueba
Los ejemplos anteriores se supone que las producciones de cat
, cats
, meow
, y meows
, en el orden de lectura. Algunos otros casos que vale la pena manejar:
Para la entrada
a
, su programa debería generar:a
Para la entrada
ab
, su programa debería generar:bbb bab bbb
Para la entrada
codegolf
, su programa debería generar:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff f l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l ooooooooooooooooooooooooooo l f f l o g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g eeeeeeeeeee g o l f f l o g e d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d ooo d e g o l f fl og ed oco de go lf f l o g e d ooo d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d e g o l f f l o g eeeeeeeeeee g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g o l f f l ooooooooooooooooooooooooooo l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Implementación de referencia
Escribí un código de Julia que la salida de su programa debe coincidir (al menos visualmente). Pruébalo en línea!
\r\n
) en lugar de una (\n
)?prompt
yconsole.log
. También puede usar cadenas de plantilla que le ahorran 2 bytes por llamada de función en cadenas (como sefill(' ')
conviertefill` `
)S-i-1
aS+~i
, yi%2||o--
ao-=~i&1
.a=Array(D*2+1).fill
.map((_,$,a)=>[...a])
te ahorra 10 bytes.Haskell,
138137136 bytesDefine una función
f
que devuelve el resultado como una lista de líneas.-1 byte gracias a @Lynn
fuente
C ++ -
373 366 362359 bytes-1 por @TuukkaX, -6 por @Kevin Cruijssen, -4 por importaciones, -3 por @Baum mit Augen
http://ideone.com/5y54mx
Nota: Esta solución usa el punto ('.') Como carácter "espacio" para hacer que los espacios vacíos sean más visibles. Para usar un espacio, uno tiene que cambiar
S(s,46)
aS(s,32)
. La puntuación sigue siendo la misma.Sin golf:
Prueba sin golf en línea
Cómo utilizar:
Salida:
fuente
std::vector<S> V
tiene un espacio en blanco inútil.if(A(i)<=R(k)&&A(j)<=R(k)&&k%2?A(i)==R(k)||A(j)==R(k)
el&&
y||
puede ser&
y|
para -3 bytes; yint r=R(w.size()-1),...
puede convertirseint l=w.size(),r=R(l-1),...
yfor(k=0;k<w.size();++k)
luego puede convertirsefor(k=0;k<l;++k)
para otros -3 bytes.using S=std::string;
para proteger dos bytes portypedef
.Mathematica, 167 bytes
La entrada debe ser una lista de caracteres.
p.ej
fuente
JavaScript (ES6), 252 bytes
Donde
\n
representa el carácter literal de nueva línea.fuente
JavaScript (ES6), 204
229 238Una función anónima que devuelve una serie de cadenas.
Menos golf
Prueba
fuente
Java -
429417 bytesEl crédito va a @Anedar ya que fue una influencia en la estructura de esta respuesta
Sin golf:
fuente
JavaScript (ES6), 322 bytes
No competitivo
Menos golpeado
Prueba con
Ganancias fáciles al omitir el enunciado inicial
var L=
y.join("\n")
de retorno para -17 bytes, pero escríbalos nuevamente para probar el código : DEs una respuesta de dos pasadas, que evalúa el ancho (
w
) requerido para trazar una gráfica cuadrada o de diamante, antes de trazar puntosP
en la segunda pasada usando rotación y traslación.d
es la dimensión (alto o ancho) de un cuadrado sin rotar antes de la traslación o rotación.Rotación y escala por √2 detalles de la respuesta de Mathematica . Uso de la plantilla de cadena etiquetada desde la primera respuesta en este hilo . Gracias a ambos por el aprendizaje. Votos por la pregunta y las respuestas.
fuente
Powershell,
269245238 bytesSin golf, explicado y probado con guión:
fuente