Quiero una manta que se vea así. Cada tira va encima, debajo, encima, debajo. ¿Puedes imprimirlo?
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
Los espacios finales al final de cada línea y las nuevas líneas finales son aceptables.
Recuerde, este es el código de golf , por lo que gana el código con la menor cantidad de bytes.
Tablas de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
fuente
Respuestas:
Python 2, 84 bytes
Gracias a Sp3000 por 6 bytes de convertir las operaciones aritméticas en bit a bit.
fuente
i+~j>>2&1^i+j>>1&2^i&4
, ¿quizás?Pyth, 36 bytes
Pruébalo en línea: demostración
Explicación:
Podemos determinar el símbolo marcando 3 condiciones:
Si interpretamos
[A,B,C]
como un número binario, obtenemos la siguiente asignación:También podemos interpretar
[A,B,C]
como número decimal y realizar una búsqueda indexada modular en la cadena. Esto no hace la diferencia porque10 mod 8 = 2
.Ahora al código:
V24
iteraN
(row-idx) encima[0, 1, ..., 23]
.sm...48
asigna los númerosd
(column-idx)[0, 1, ..., 47]
a los caracteres e imprime la cadena combinada.++BNd
genera la lista[N, N+d]
,+...t-Nd
agregaN-d-1
. Entonces tenemos la lista[N, N+d, N-d-1]
.m<3%k8
comprueba cada número calculadok
, si3 < k % 8
, entonces esto le da a la lista las condiciones[A, B, C]
.i...T
convence esto a un número decimal y luego@" \// \/\\"
realiza la búsqueda en la cadena.Más o menos el mismo código en Python2: 98 bytes :
fuente
Perl, 209 + 17 = 226 bytes
Ejecutar con
-mList::Util=max -M5.010
(la segunda bandera es gratis). No está ganando ninguna competencia de conteo de bytes, pero esta es mi solución.Legible:
Genera procesalmente cada segmento, luego repite el patrón 6 veces, luego genera el resultado total 3 veces.
fuente
Python 3,
174172138 bytesEncontré el patrón más pequeño que pude encontrar en la manta (el patrón "debajo" y "sobre"), lo pegué en una lista y agregué algo de comprensión de la lista y manipulación de cadenas para desempaquetarlo todo. Sustituyó todas las barras invertidas escapadas por "b" y las reemplazó más tarde para guardar algunos bytes.
¡Gracias a Oliver por jugar 2 bytes!
Se eliminaron 34 bytes cambiando el patrón: todo el patrón para la mantilla ahora está en una sola lista, por lo que solo se necesita uno para el bucle para desenvolver el patrón.
fuente
0*6
yu*6
print((("\n".join(o*6 for o in("bb////"," b//// "," //// "," ////b ",""))+"\n".join(u*6 for u in("////bb","\\// b\\","b b","b\\ //\\","")))*3).replace("b","\\\\"))
Python 2,
171170168 bytesNo es bonita ni inteligente. Simplemente establece variables para los grupos de cadenas más utilizados, luego las combina e imprime el resultado 3 veces. Puede intentar jugarlo más tarde si no encuentro un mejor enfoque.
1 byte guardado mediante el uso de entrada sin formato en una asignación. Gracias @ nedla2004
-2 asignando un par de variables pero aún no un competidor serio
fuente
*6
embargo, está más interesado en encontrar una forma de evitar el elemento de cada tupla. ¿Algunas ideas?exec r"print'\n'.join(d);"*3
.SOML , 106 bytes
una versión no competitiva que utiliza una función que agregué recientemente: (
836766 bytes)explicación:
fuente
Ruby, 75 bytes
Mejor golf, usando una sola búsqueda de cadena de 8 bytes indexada por j & 4 además de los otros parámetros, en lugar de una cadena de 4 bytes modificable.
Ruby, 81 bytes
Imprime las rayas diagonales carácter por carácter. El carácter correcto se selecciona de una cadena de 4 caracteres dependiendo de la presencia / ausencia de cada cadena. El carácter de superposición varía según el filamento que se encuentre en la parte superior.
Comentado
fuente
Perl,
132131113 bytesSin golf:
fuente
05AB1E , 37 bytes
Utiliza la codificación CP-1252 .
Pruébalo en línea!
Explicación
Utiliza el mod-8 truco explicado por expertos en respuesta Pyth de Jakube .
fuente
Python,
245236234233230216212198195 bytesOK, más largo que mi última (y cualquier otra) respuesta, pero estaría interesado en recibir comentarios sobre el enfoque.
Editar
-9 debido a que @ nedla2004 está más en la pelota que yo
-2 tomando la lambda fuera del bucle y perdiendo 2 espacios de sangría
-1 usando en
in' '*3
lugar dein 0,1,2
ya que no uso deh
todos modos. Es solo un mostrador.-3 ¿Por qué, por qué, por qué dejé una nueva línea y 2 sangrías entre el segundo para y la impresión? Ya es tarde. Volveremos mañana.
-14 Realmente puede perder el lambda por completo e incluir el decodificador de base 3 directamente después de la declaración de impresión. Parece desordenado, pero después de todo, este es el código de golf :)
-4 No tiene sentido establecer una variable para la lista entera. Solo úsalo directamente en el segundo bucle for.
-14 y ningún punto usando el bucle externo. Simplemente multiplique la tupla entera por 3 (robada descaradamente de @ nedla2004 para obtener menos de 200 :))
-3 Guardado 3 haciendo \ = 0, / = 1 y espacio = 2. Esto hace que la lista entera sea más corta ya que tres de los números de base 3 ahora tienen ceros a la izquierda
Cómo funciona (y lo hace)
Como solo se usan 3 caracteres:
l es una lista de los 8 patrones repetitivos como equivalentes enteros de su representación de base 3 suponiendo que "" = 0, "\" = 1 y "/" = 2
El lambdaEl primer código después de la declaración de impresión es un convertidor ligero de entero a una cadena de base 3El primer bucle se repite 3 veces y el segundo imprime cada línea con los caracteres de base 3 multiplicados por 6 y reemplazados por /, \ o espacio.
Estoy seguro de que podría usar una expresión regular en lugar del reemplazo anidado (), pero estoy demasiado cansado para intentarlo en este momento. Esto fue solo un experimento y más largo que mi esfuerzo anterior con Python, pero he publicado solo para cualquier comentario sobre el enfoque (y también porque nunca antes había trabajado en la base 3 y disfruté mucho trabajando en el convertidor).
fuente
Ruby, 135 bytes
puts [3320,1212,720,2172,6520,4144,2920,3184].map{|e|(e.to_s(3).rjust(8,"0").gsub("0"," ").gsub("1","\\").gsub("2","/"))*6+"\n"}.join*3
La matriz numérica corresponde a cada componente de cada línea, traducida a la base 3:
= 0,
\
= 1,/
= 2, luego convertida a decimal. Sin embargo, las llamadas a gsub () son demasiado grandes.Y, justo ahora, vi la respuesta de @ ElPedro. :-( Solo coincidencia.
fuente
e.to_s(3).rjust(8,"0")
→("%8s"%e.to_s(3))
;gsub("0"," ").gsub("1","\\")..gsub("2","/")
→tr("013"," \\/")
;"\n"
→$/
;.join
→*""
. También puede guardar un byte dividiendo todos los números en la matriz por 4 y reemplazándolose
por(e*4)
.tr("021"," /\\")
.PHP
157126bytesTomando los cambios en las listas de @Titus en los comentarios ... Estoy molesto, me perdí el punto 1 que debería haber captado, pero no sabía que existía strtr (), que es de donde proviene la mayoría de los ahorros: ¡buen trabajo Titus!
NUEVO:
ANTIGUO:
Debido a que todas las barras invertidas necesitan escapar, ahorra bastante espacio para empaquetarlas como caracteres diferentes y reemplazarlas para la salida, y luego, una vez que llamo a str_replace (), tiene sentido usarlo con la mayor frecuencia posible.
fuente
-r
. Use estos cinco pasos para guardar otros 30 bytes: ideone.com/wt4HGB 1) use$a[...]
directamente comostr_replace
parámetro en lugar de asignarlo. 2) enstrtr
lugar destr_replace
. 3) Use dígitos en lugar de letras. 4) Incluir la asignación en el eco. 5) No asignes$a
, solo úsalo.Pitón 2,
169161165160155154152Basado en la respuesta de @ ElPedro, con pequeñas mejoras. Para ver la explicación, vea su respuesta . Este es Python 2, aunque parece haber paréntesis cerca del
print
.Se guardaron 8 bytes usando una variable paraEso funciona solo para cadenas, y usar una función para ello sería más largo.replace
.Ahorré 4 bytes al ver que @ElPedro se dio cuenta de que no lo necesitaban, y yo tampoco.
Ahorró 5 bytes al no voltear el
range(8)
, y en lugar de usar+=
para agregar a r, agregando r al final del nuevo dígito. Pruébalo usando repl.itAhorró 5 bytes al robar la nueva lista de valores de @ ElPedro.
Se guardó 1 byte al eliminar el espacio entre el
in
y(
.Se guardaron 2 bytes al eliminar la variable a.
fuente
in
y(
en el primero paraa=3**i
. Solo usafor i in range(8):r=
x / 3 ** i% 3+r
para salvar un par. la prioridad del operador se encarga del resto :)PHP, 184 bytes
Salida:
fuente
Lote, 152 bytes
El procesamiento de cadenas en Batch apesta, por lo que este es probablemente el mejor enfoque. La llamada y caída es muy ligeramente más corta que un
for
bucle anidado . ¡Al menos no tengo que citar mis barras invertidas!fuente
APL, 110 bytes
Soy nuevo en APL, así que esta es una solución simplista.
Aquí está mi enfoque: tenga en cuenta que después de las primeras 8 líneas de la manta, el patrón se repite. Por lo tanto, solo necesito definir las primeras 8 líneas, y luego puedo repetirlas 3 veces. También tenga en cuenta que cada línea se repite después de los primeros 8 caracteres. Por lo tanto, para definir una sola línea solo necesito definir los primeros 8 caracteres y luego repetirlos 8 veces.
Aquí hay una solución sin golf:
Observé anteriormente que D es el reverso de B, E es el reverso de A y H es el reverso de F. En mi código real, aprovecho esto al no definir D, F o H y usar la función inversa
⊖
:24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F
fuente
Rubí, 132 bytes
Respuesta muy simple.
fuente
Haskell, 96 bytes
fuente