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 é código-golfe , 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 N
está 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
fonte
Respostas:
Python 2, 84 bytes
Graças ao Sp3000 por 6 bytes, transformou as operações aritméticas em operações bit a bit.
fonte
i+~j>>2&1^i+j>>1&2^i&4
, possivelmente?Pitão, 36 bytes
Experimente online: Demonstração
Explicação:
Podemos determinar o símbolo verificando 3 condições:
Se interpretarmos
[A,B,C]
como um número binário, obteremos o seguinte mapeamento: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:
V24
iteraN
(row-idx) sobre[0, 1, ..., 23]
.sm...48
mapeia os númerosd
(column-idx)[0, 1, ..., 47]
para chars e imprime a string combinada.++BNd
gera a lista[N, N+d]
,+...t-Nd
acrescentaN-d-1
. Então, nós temos a lista[N, N+d, N-d-1]
.m<3%k8
verifica cada número calculadok
, se3 < k % 8
, portanto, isso fornece a lista com as condições[A, B, C]
.i...T
conventa 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 :
fonte
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.Legível:
Gera processualmente cada segmento, repete o padrão 6 vezes e, em seguida, gera o resultado total 3 vezes.
fonte
Python 3,
174172138 bytesEncontrei 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.
fonte
0*6
eu*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 bytesNã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
fonte
*6
Porém, o mais interessado em encontrar uma maneira de contornar cada elemento da tupla. Alguma ideia?exec r"print'\n'.join(d);"*3
.SOML , 106 bytes
uma versão não concorrente usando uma função que eu adicionei recentemente: (
836766 bytes)explicação:
fonte
Ruby, 75 bytes
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
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
fonte
Perl,
132131113 bytesUngolfed:
fonte
05AB1E , 37 bytes
Usa a codificação CP-1252 .
Experimente online!
Explicação
Usa o truque mod-8 habilmente explicado na resposta pyth de Jakube .
fonte
Python,
245236234233230216212198195 bytesOK, mais do que a minha última (e qualquer outra) resposta, mas estaria interessado em comentários sobre a abordagem.
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' '*3
vez dein 0,1,2
desde que eu não uso deh
qualquer 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:
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
O lambdaO primeiro código após a declaração de impressão é um conversor leve de número inteiro para uma sequência base 3O 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).
fonte
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.
fonte
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 substituindoe
por(e*4)
.tr("021"," /\\")
.PHP
157126 bytesTomando 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:
VELHO:
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.
fonte
-r
. Siga estas cinco etapas para salvar outros 30 bytes: ideone.com/wt4HGB 1) use$a[...]
diretamente comostr_replace
parâmetro em vez de atribuí-lo. 2) emstrtr
vez destr_replace
. 3) Use dígitos em vez de letras. 4) Inclua a atribuição no eco. 5) Não atribua$a
, apenas use.Python 2,
169161165160155154152Baseado 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 paraIsso funciona apenas para strings e o uso de uma função seria mais longo.replace
.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.itEconomizou 5 bytes roubando a nova lista de valores do @ ElPedro.
Economizou 1 byte removendo o espaço entre
in
e(
.Salva 2 bytes removendo a variável a.
fonte
in
e(
o primeiro dea=3**i
. Basta usarfor i in range(8):r=
x / 3 ** i% 3+r
para salvar um casal. precedência do operador cuida do resto :)PHP, 184 bytes
Resultado:
fonte
Lote, 152 bytes
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
for
loop aninhado . Pelo menos não preciso citar minhas barras invertidas!fonte
APL, 110 bytes
Eu sou novo na APL, então essa é uma solução simplista.
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:
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
fonte
Ruby, 132 bytes
resposta muito simples.
fonte
Haskell, 96 bytes
fonte