Me faça um cobertor!


16

Eu quero um cobertor que se parece com isso. Cada faixa passa por cima, por baixo, por cima, por baixo. Você pode imprimi-lo?

\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\

Espaços à direita no final de cada linha e novas linhas à direita são aceitáveis.

Lembre-se, isso é , então o código com o menor número de bytes vence.

Classificação

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

# Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

# Perl, 43 + 2 (-p flag) = 45 bytes

Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


A borda direita parece desalinhada.
— Magic Octopus Urn

A borda esquerda não se sobrepõe?
— Xnor

@ xnor Desculpe, meu mal.
— Oliver Ni

@carusocomputing Fixed.
— Oliver Ni

10
Se você tivesse usado o Sandbox, esses problemas poderiam ter sido evitados antes que isso acontecesse.
— Mego

Respostas:


8

Python 2, 84 bytes

R=range(24)
for i in R:print''.join(" \// \/\\"[i+~j>>2&1^i+j>>1&2^i&4]for j in R*2)

Graças ao Sp3000 por 6 bytes, transformou as operações aritméticas em operações bit a bit.


Whoa ... como ????
— Oliver Ni

1
i+~j>>2&1^i+j>>1&2^i&4, possivelmente?
— Sp3000 10/11/16

@ Sp3000 Essa é uma boa precedência bit a bit. Vou ter que lembrar que, ao combinar booleanos derivados aritmeticamente em um índice.
— Xnor

5

Pitão, 36 bytes

V24sm@" \// \/\\"im<3%k8++BNdt-NdT48

Experimente online: Demonstração

Explicação:

Podemos determinar o símbolo verificando 3 condições:

A := row % 8 > 3
B := (row + column) % 8 > 3
C := (row - column - 1) % 8 > 3

Se interpretarmos [A,B,C]como um número binário, obteremos o seguinte mapeamento:

01234567
 \// \/\

Também podemos interpretar [A,B,C]como número decimal e executar uma pesquisa indexada modular na string. Isso não faz diferença porque10 mod 8 = 2 .

Agora para o código:

V24itera N(row-idx) sobre [0, 1, ..., 23].

sm...48mapeia os números d(column-idx) [0, 1, ..., 47]para chars e imprime a string combinada.

++BNdgera a lista [N, N+d], +...t-Ndacrescenta N-d-1. Então, nós temos a lista [N, N+d, N-d-1]. m<3%k8verifica cada número calculado k, se 3 < k % 8, portanto, isso fornece a lista com as condições [A, B, C].

i...Tconventa isso para um número decimal e, em seguida, @" \// \/\\"faz a pesquisa na string.

Mais ou menos o mesmo código em Python2: 98 bytes :

R=range(8)
for r in R*3:print''.join(" \// \/\\"[4*(r>3)+2*((r+c)%8>3)+((r-c-1)%8>3)]for c in R*6)

Apenas tentando entender Pyth para que qualquer resposta decente com uma boa explicação receba um voto positivo de mim. ia tentar Pyth depois da minha experiência base 3 :)
— ElPedro

Você deve publicar a resposta python2 bem ...
— Jerry Jeremias

3

Perl, 209 + 17 = 226 bytes

Corra com -mList::Util=max -M5.010(o segundo sinalizador é gratuito). Não está ganhando nenhuma competição de contagem de bytes, mas aqui está a minha solução.

for(0..7){@b=(1)x8;@b[$_+3..$_+7]=(3)x4;@b[7-$_..10-$_]=(2)x4;for$c(0..2){$b[$c+8]=max$b[$c+8],$b[$c];$b[5-$c]=max$b[5-$c],$b[13-$c];}push@a,sprintf("%-8s",join("",@b[3..10])=~tr[123][ /\\]r)x6;}say for@a,@a,@a

Legível:

for(0..7){
    @b=(1)x8;
    @b[$_+3..$_+7]=(3)x4;
    @b[7-$_..10-$_]=(2)x4;
    for$c(0..2){
        $b[$c+8]=max$b[$c+8],$b[$c];
        $b[5-$c]=max$b[5-$c],$b[13-$c];
    }
    push@a,sprintf("%-8s",join("",@b[3..10])=~tr[123][ /\\]r)x6
}
say for@a,@a,@a

Gera processualmente cada segmento, repete o padrão 6 vezes e, em seguida, gera o resultado total 3 vezes.


Woah, eu não sou mais o answe mais :) +1 por fazê-lo em Perl de qualquer maneira.
— ElPedro 9/11

Eu poderia ter feito da mesma maneira que todos os outros (apenas imprimindo várias linhas), mas decidi fazer as coisas algoritmicamente, em vez de explicitamente, porque achei que era mais legal.
— Gabriel Benamy

Legal pelos meus padrões. Eu adotei uma abordagem que nunca havia tentado antes, porque era um desafio interessante. Como eu disse, +1. Nenhum insulto pretendido pelo meu comentário. É por isso que eu votei.
— ElPedro

3

Python 3, 174 172 138 bytes

print("\n".join(o*6for o in("bbbb////"," bb//// ","  ////  "," ////bb ","////bbbb","b//  bbb","bb    bb","bbb  //b")*3).replace("b","\\"))

Encontrei o menor padrão que encontrei no cobertor (o padrão "abaixo" e "acima"), coloquei-o em uma lista e adicionei alguma compreensão da lista e manipulação de cordas para desempacotar tudo. Substituiu todas as barras invertidas escapadas por "b" e as substituiu mais tarde para economizar alguns bytes.

Agradecimentos a Oliver por jogar fora 2 bytes!

Retirou 34 bytes alterando o padrão - todo o padrão para o cobertor agora está em uma única lista, portanto, apenas um loop for é necessário para desembrulhar o padrão.


1
Bem-vindo ao PPCG! bom primeiro post! Você pode raspar um byte no python 2, eu acho que não precisa dos parâmetros para impressão.
— Rɪᴋᴇʀ

1
Obrigado Easterly Irk, estou espreitando no código de golfe há muito tempo, então decidi participar. :)
— TheCrazyInventor

1
Você pode economizar dois bytes removendo o espaço após 0*6eu*6
— Oliver Ni

1
Você poderia salvar 4 bytes utilizando o "b" para barras invertidas duplas e em qualquer lugar você precisa de uma única barra invertida apenas usar escapar: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","\\\\"))
— dzaima

dzaima: seu código não parece gerar uma cobertura válida.
— TheCrazyInventor

3

Python 2, 171 170 168 bytes

a,b,c=r"\\","/"*4," "
f,g=c*2,c+a+b+c
d=(a*2+b)*6,g*6,(f+b+f)*6,g[::-1]*6,(b+a*2)*6,('\\//'+f+a+"\\")*6,(a+f*2+a)*6,(a+"\\"+f+'//\\')*6
for e in 0,1,2:print'\n'.join(d)

Não é bonito nem inteligente. Apenas define variáveis ​​para os grupos de strings mais frequentemente usados, depois as combina e imprime o resultado 3 vezes. Pode tentar jogar mais tarde se não encontrar uma abordagem melhor.

1 byte salvo usando a entrada bruta na atribuição a. Obrigado @ nedla2004

-2 atribuindo algumas variáveis, mas ainda não sendo um concorrente sério


1
Você pode definir a como r "\\"
— nedla2004 09/11

Obrigado @ nedla2004 Bom ponto. Reunimos isso muito rapidamente e veríamos mais tarde. Isso é um bom começo :)
— ElPedro

*6Porém, o mais interessado em encontrar uma maneira de contornar cada elemento da tupla. Alguma ideia?
— ElPedro 9/11

1
Não sei como você poderia fazer isso, mas a última linha pode ser exec r"print'\n'.join(d);"*3.
— precisa saber é o seguinte

Acabei de publicar uma alternativa apenas por interesse. Gostaria de valorizar seus comentários sobre isso também.
— ElPedro

2

SOML , 106 bytes

3{"\\\\////”6*p" \\//// ”6*p"  ////  ”6*p" ////\\ ”6*p"////\\\\”6*p"\//  \\\”6*p"\\    \\”6*p"\\\  //\”6*p

uma versão não concorrente usando uma função que eu adicionei recentemente: ( 83 67 66 bytes)

explicação:

  →$\\→#////→@”6*p"→~3{"##@~ #@ ~$@$~ @# ~@##~\//$#\~#$$#~#\$//\~”
  →$                                                                in the further code replace "$" with "  "
    \\→#                                                            replace "#" with "\\"
        ////→@                                                      replace "@" with "////"
              ”6*p"→~3{"##@~ #@ ~$@$~ @# ~@##~\//$#\~#$$#~#\$//\~” the code to exchange stuff in

so that results in:
”6*p"→~3{"\\\\////~ \\//// ~  ////  ~ ////\\ ~////\\\\~\//  \\\~\\    \\~\\\  //\~”
”6*p"→~3{"A~B~C~D~E~F~G~H~”  modified version of the program (removing "/","\" and " " and replaced with A,B,C,ect.)
”6*p"→~                      replace in the further program "~" with ”6*p" which is:
”                            end string
 6*                          repeat the last thing in stack 6 times
   p                         output the result
    "                        start a string
resulting program: 
3{"A”6*p"B”6*p"C”6*p"D”6*p"E”6*p"F”6*p"G”6*p"H”6*p"”
shortened example:
3{"A”6*p"B”6*p"H”6*p"”
3{                      repeat 3 times
  "A”                   push "A" (original: "\\\\////")
     6*p                output it multiplied by 6
        "B”             push "B" (original: " \\//// ")
           6*p          output it multiplied by 6
              "H”       push "H" (original: "\\\  //\")
                 6*p    output it multiplied by 6
                    "”  push an empty string (shorter to do ~” than ”6*p)

2

Ruby, 75 bytes

1152.times{|i|$><<"\\/ /\\\\ /"[(i+j=i/48)/4&1|(i-j)/2&2|j&4]+$/*(i%48/47)}

Melhor golfe, usando uma única pesquisa de string de 8 bytes indexada por j & 4, além dos outros parâmetros, em vez de uma string de 4 bytes modificável.

Ruby, 81 bytes

1152.times{|i|j=i/48%8;$><<"\\#{'/\\'[j/4]} /"[(i+j)/4&1|(i-j)/2&2]+$/*(i%48/47)}

Imprime as listras diagonais, caractere por caractere. O caractere correto é selecionado a partir de uma sequência de 4 caracteres, dependendo da presença / ausência de cada sequência. O caractere de sobreposição varia de acordo com o fio que está no topo.

Comentado

1152.times{|i|j=i/48%8;        #Iterate through all printable chars. j is line number.
  $><<"\\#{'/\\'[j/4]} /"[     #Print a char from "\/ /" if j/4 even or "\\ /" if odd. character changes depending which strand on top.
   (i+j)/4&1|(i-j)/2&2]+       #Print \ if (i+j)/4==0, / if (i-j)/2&2 >0, space if both false. As above if both true. 
   $/*(i%48/47)                #If on column 47, print a newline.
}

2

Perl, 132 131 113 bytes

@a=((0)x4,1..4);map{say+(map$a[7-$_]?$a[$_]*$r?'/':'\\':$a[$_]?'/':$",0..7)x6;push@a,shift@a;$_%4||($r=!$r)}0..23

Ungolfed:

use strict;
use warnings;
use feature 'say';

my @a = ((1) x 4, (0) x 4);  # print '\' if true
my @b = ((0) x 4, (1) x 4);  # print '/' if true
my $r = 0;                   # print '\' over '/' if true

for (0 .. 23) {
    say((map { $a[$_] ? ($b[$_] * $r ? '/' : '\\') : ($b[$_] ? '/' : ' ') } 0 .. 7) x 6);
    unshift(@a, pop(@a));    # circular shift to left
    push(@b, shift(@b));     # circular shift to right
    $r = !$r if !($_ % 4);   # change print priority
}

2

05AB1E , 37 bytes

Usa a codificação CP-1252 .

24FNU48FXXN+XN-<)8%3›J" \// \/\"è?}¶?

Experimente online!

Explicação

Usa o truque mod-8 habilmente explicado na resposta pyth de Jakube .

24F                                    # for N in [0 ... 23] do:
   NU                                  # save N in X
     48F                               # for N in [0 ... 48] do:
        XXN+XN-<)                      # push [X,X+N,X-N-1]
                 8%                    # mod each by 8
                   3›                  # compare with 3
                     J                 # join
                      " \// \/\"è?     # index into string and print
                                  }    # end inner loop
                                   ¶?  # print newline

2

Python, 245 236 234 233 230 216 212 198 195 bytes

OK, mais do que a minha última (e qualquer outra) resposta, mas estaria interessado em comentários sobre a abordagem.

for a in(40,4496,6200,5456,3240,1188,720,228)*3:print((`a%6561/2178`+`a%2178/729`+`a%729/243`+`a%243/81`+`a%81/27`+`a%27/9`+`a%9/3`+`a%3/1`)*6).replace('0','\\').replace('1','/').replace('2',' ')

Editar

-9 devido a @ nedla2004 estar mais na bola do que eu

-2 tirando o lambda para fora do loop e perdendo 2 espaços de recuo

-1 usando em in' '*3vez de in 0,1,2desde que eu não uso de hqualquer maneira. é apenas um balcão.

-3 Por que, por que, por que deixei uma nova linha e 2 travessões entre o segundo para e a impressão ??? Está tarde. Irá revisitar amanhã.

-14 Pode realmente perder completamente o lambda e incluir apenas o decodificador base 3 diretamente após a declaração de impressão. Parece confuso, mas, afinal, este é o código de golfe :)

-4 Nenhum ponto configurando uma variável para a lista inteira. Basta usá-lo diretamente no segundo for loop.

-14 e nenhum ponto usando o loop externo. Apenas multiplique a tupla inteira por 3 (roubado descaradamente de @ nedla2004 para obter menos de 200 :))

-3 Salva 3 criando \ = 0, / = 1 e espaço = 2. Isso torna a lista inteira mais curta, já que três dos números da base 3 agora têm zeros à esquerda

Como funciona (e funciona)

Como apenas 3 caracteres são usados:

  1. l é uma lista dos 8 padrões de repetição como equivalentes inteiros de sua representação base 3, assumindo que "" = 0, "\" = 1 e "/" = 2

  2. O lambda O primeiro código após a declaração de impressão é um conversor leve de número inteiro para uma sequência base 3

  3. O primeiro loop faz um loop 3 vezes e o segundo imprime cada linha com os 3 caracteres base multiplicados por 6 e substituídos por /, \ ou espaço.

Tenho certeza de que poderia usar uma regex em vez da substituição aninhada (), mas estou cansada demais para tentar agora. Este foi apenas um experimento e foi mais longo que o meu esforço anterior em Python, mas postou apenas quaisquer comentários sobre a abordagem (e também porque nunca trabalhei na base 3 antes e gostei muito de trabalhar no conversor).


1
Você pode remover a primeira divisão na conversão base 3.
— precisa saber é o seguinte

Por alguma razão, isso estava me causando problemas mais cedo, mas tentei e funciona agora. muito obrigado por estar mais acordado do que eu. Eu vou re-editar a minha resposta (e você acabou de me salvou 9 bytes :))
— ElPedro

1
Reescrevi a conversão da base 3, ela não é mais um lambda, tive que transformá-lo em uma função, mas pode ser convertida novamente em um lambda. Você pode encontrar a função aqui .
— precisa saber é o seguinte

Obrigado. Acho que uma combinação dos dois pode funcionar, mas provavelmente é um trabalho para amanhã à noite :) Obrigado novamente por seus comentários.
— ElPedro

1
Eu reduzi para 169 aqui .
— precisa saber é o seguinte

2

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

A matriz numérica corresponde a cada componente de cada linha, convertida na base 3: = 0, \= 1, /= 2 e depois convertida em decimal. As chamadas gsub () são muito grandes, no entanto.

E, agora mesmo, vi a resposta da @ ElPedro. :-( Apenas coincidência.


e.to_s(3).rjust(8,"0")→ ("%8s"%e.to_s(3)); gsub("0"," ").gsub("1","\\")..gsub("2","/")→ tr("013"," \\/"); "\n"→ $/; .join→ *"". Você também pode salvar um byte dividindo todos os números na matriz por 4 e substituindo epor (e*4).
— Jordan

Opa, acho que deveria ser tr("021"," /\\").
— Jordan


2

PHP 157 126 bytes

Tomando as alterações nas listas @Titus nos comentários ... Estou chateado por ter perdido o ponto 1, que eu deveria ter pego, mas não sabia que existia strtr (), que é onde a maioria das economias ocorre - bom trabalho Titus!

NOVO:

while($i<32)echo$b=strtr([3322,' 322 ','0220',' 223 ',2233,12013,3003,13021][$i++%8],['  ','\\','//','\\\\']),"$b$b$b$b$b\n";

VELHO:

<?$a=[zzyy,' zyy ',syys,' yyz ',yyzz,xysxz,zssz,xzsyx];while($i<32){$b=$a[$i++%8];$b=str_replace([z,x,y,s],['\\\\','\\','//','  '],$b);echo"$b$b$b$b$b$b
";}

Como todas as barras invertidas precisam escapar, economiza bastante espaço para empacotá-las como caracteres diferentes e substituí-las pela saída, e quando chamo str_replace (), faz sentido usá-lo o mais rápido possível.


1
Você pode remover a marca aberta se você usar -r. Siga estas cinco etapas para salvar outros 30 bytes: ideone.com/wt4HGB 1) use $a[...]diretamente como str_replaceparâmetro em vez de atribuí-lo. 2) em strtrvez de str_replace. 3) Use dígitos em vez de letras. 4) Inclua a atribuição no eco. 5) Não atribua $a, apenas use.
— Titus

1

Python 2, 169 161 165 160 155 154 152

Baseado na resposta do @ ElPedro, com pequenas melhorias. Para ver a explicação, veja a resposta deles . Este é o Python 2, embora pareça haver parênteses perto do print.

Economizou 8 bytes usando uma variável para replace.Isso funciona apenas para strings e o uso de uma função seria mais longo.

Economizei 4 bytes ao ver que o @ElPedro percebeu que eles não precisavam de l, e eu também não.

Salva 5 bytes não invertendo range(8)e, em vez de usar +=para acrescentar r, adicionando r ao final do novo dígito. Experimente usando repl.it

Economizou 5 bytes roubando a nova lista de valores do @ ElPedro.

Economizou 1 byte removendo o espaço entre ine( .

Salva 2 bytes removendo a variável a.

for x in(40,4496,6200,5456,3240,1188,720,228)*3:
 r=''
 for i in range(8):r=`x/3**i%3`+r
 print(r*6).replace('0','\\').replace('1','/').replace('2',' ')

Você pode salvar 1 removendo o espaço entre ine (o primeiro de
— ElPedro 10/11

Também perdi três bytes reordenando a sequência de quais números representam cada caractere na lista base 3. Veja minha resposta para explicação. sinta-se livre para copiar. Tanto quanto eu estou em causa este é um esforço conjunto e eu estou feliz de ver que a minha idéia original tinha pelo menos algum potencial :)
— ElPedro

Você não precisa a=3**i. Basta usar for i in range(8):r=x / 3 ** i% 3 +rpara salvar um casal. precedência do operador cuida do resto :)
— ElPedro

Não sabe ao certo como delimitar os caracteres de conversão de string. O analisador removido-los no meu último comentário por isso não basta copiar e colar de minha sugestão ou ele vai quebrar :)
— ElPedro

Bom ponto, eu entendi.
— nedla2004

1

PHP, 184 bytes

<?$p=['1111////',' 11//// ','  ////  ',' ////11 ','////1111','1//  111','11    11','111  //1'];for($j=0;$j<3;$j++)for($i=0;$i<8;$i++)echo str_replace(1,'\\',str_repeat($p[$i],6))."\n";

Resultado:

C:\PHP>php make-me-a-blanket.php
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\

0

Lote, 152 bytes

@call:l
@call:l
:l
@for %%s in (\\\\//// " \\//// " "  ////  " " ////\\ " ////\\\\ "\//  \\\" "\\    \\" "\\\  //\")do @echo %%~s%%~s%%~s%%~s%%~s%%~s

O processamento de strings no Lote é péssimo, portanto essa é provavelmente a melhor abordagem. O call-and-fall-through é muito ligeiramente mais curto que um forloop aninhado . Pelo menos não preciso citar minhas barras invertidas!


0

APL, 110 bytes

Eu sou novo na APL, então essa é uma solução simplista.

A←48⍴'\\\\////'⋄B←48⍴' \\//// '⋄C←48⍴'  ////  '⋄F←48⍴'\//  \\\'⋄G←48⍴'\\    \\'⋄24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F  

Aqui está minha abordagem: observe que, após as primeiras 8 linhas do cobertor, o padrão se repete. Portanto, eu só preciso definir as 8 primeiras linhas e depois posso repeti-las 3 vezes. Observe também que cada linha se repete após os 8 primeiros caracteres. Portanto, para definir uma única linha, só preciso definir os 8 primeiros caracteres e depois repeti-los 8 vezes.

Aqui está uma solução não destruída:

A←48⍴'\\\\////'⋄ ⍝ set A to a 48 element vector (48⍴) of repeated '\\\\////'s
B←48⍴' \\//// '⋄ ⍝ set B to a 48 element vector (48⍴) of repeated ' \\//// 's
C←48⍴'  ////  '⋄ ⍝ ...
D←48⍴' ////\\ '⋄ ⍝ Note that this is actually the reverse of vector B
E←48⍴'////\\\\'⋄ ⍝ Note that this is actually the reverse of vector A
F←48⍴'\//  \\\'⋄
G←48⍴'\\    \\'⋄
H←48⍴'\\\  //\'⋄ ⍝ Note that this is actually the reverse of vector F

24 48 ⍴ A,B,C,D,E,F,G,H ⍝ Make a 24 by 48 character matrix (24 48⍴) by concatenating A,B...H
                        ⍝ and repeating the string until the matrix is full

Observei acima que D é o inverso de B, E é o inverso de A e H é o inverso de F. No meu código real, aproveito isso não definindo D, F ou H e usando a função reversa ⊖:

24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F


0

Ruby, 132 bytes

puts Zlib.inflate Base64.decode64 "eJzt0bENADAMAsGeKdggC/3+cyQRC+A2ipuT3RgJgHWGUjm6VXb2Vjn/3KpJ/qtIPlp1v+XSKZKPVk3y/x5+D6/3sAEUXQ+Q"

resposta muito simples.


0

Haskell, 96 bytes

f n=n`mod`8`div`4
putStr$unlines[["\\ //\\ \\/"!!(f(x-y)+2*f(x+y)+4*f y)|x<-[0..47]]|y<-[0..23]]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.