Dado um número inteiro n ≥ 1, produza uma representação 2D † de um sinal de porcentagem da largura n . A construção é a seguinte:
- Criar um n por n matriz (ou lista de listas) preenchido com zeros.
- Insira os nos cantos superior esquerdo e inferior direito.
- Coloque os na diagonal do canto inferior esquerdo para o canto superior direito.
Para entrada n = 4, essa construção seria semelhante a:
1. 4x4 matrix of 0s
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2. 1s in TL and BR corners
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
3. 1s across BL-TR diagonal
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
Este é um código de golfe , portanto o programa mais curto em bytes vence.
† Uso uma matriz de 1s e 0s, mas também é aceitável usar uma sequência de caracteres e espaços que não sejam espaços em branco. Portanto, o exemplo acima pode ter a seguinte aparência:
# #
#
#
# #
ou
# #
#
#
# #
Casos de teste
n
output
1
1
2
1 1
1 1
3
1 0 1
0 1 0
1 0 1
4
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
10
1 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
Nota final
Adicionar uma explicação seria muito apreciado.
'1'+'0'*(n-2)
com espaços em branco inseridosRespostas:
Gelatina , 6 bytes
Experimente online!
Como funciona
fonte
²Ḷ%’¬s
ou+þ%’=2
²Ḷọ’s
está tão perto ...ḍ@
apenas dois bytes.⁼þµ+1¦Ṫṁ³UG
... até que uma²
solução de Dennis apareceu.JavaScript (ES6), 52 bytes
fonte
V , 15 bytes
Experimente online!
Explicação
fonte
Python 2 ,
5857 bytesExperimente online!
fonte
APL GNU,
1715 bytesEste é um dia estranho ... O GNU venceu o Dyalog APL ... uau.
O TIO não suporta GNU APL ...
Explicação (a entrada é
⍵
):fonte
1=⍵∨
e implementá-lo na minha soluçãoPython 2 , 46 bytes
Experimente online!
Saídas como
Python 2 , 48 bytes
Experimente online!
Saídas como
Python 3 , 48 bytes
Experimente online!
Uma abordagem de substituição de cadeia bastante diferente no Python 3. Resultados como:
fonte
10L
10
?L
no final para que eu possa cortar o mesmo número de caracteres no final de grandes e pequenos números.10
e10L
era diferente.Geléia , 9 bytes
Experimente online!
Como funciona
fonte
APL (Dyalog) , 18 bytes
Experimente online!
Fazer esse trabalho para a entrada 1 adicionou 6 bytes.
Olhando para o testcase 4, vemos que a saída é
Isso é basicamente 1 0 0 repetido em toda a matriz. Em outras palavras, 1 0 0 moldado em uma matriz 4 por 4. Portanto, nesta solução, primeiro geramos esse vetor com 1 e arrastando 0s usando
1=⍳⍵-1
e depois modelando-o usando⍵ ⍵⍴
. Mas isso atrapalha na entrada 1, então precisamos criar um condicional e ganhar 6 bytes ...fonte
Haskell , 55 bytes
Inicialmente, minha abordagem foi gerar recursivamente a matriz de identidade transposta, mas a correção da primeira e da última linha exigia algumas distinções feias / longas de casos. Então, procurei outra maneira de gerar a matriz de identidade, e foi assim que encontrei essa ideia.
Experimente online!
Explicação
gera esta matriz (para
n=4
):Como você pode ver, o elemento superior esquerdo é
2
(em geral), todos os elementos diagonais são5
(em geraln+1
) e o elemento inferior direito é8
(em geral2*n
). Então, tudo o que precisamos fazer é verificar sex+y
é um elemento do[2,n+1,2*n]
.fonte
R ,
54bytes 42-12 bytes graças a Jarko Dubbeldam
retorna uma matriz; lê de stdin. cria uma matriz de identidade
diag(n)
, vira-a de cima para baixo[,n:1]
, define a parte superior esquerda e a direita para1
e depois grava no console (''
) com larguran
.Experimente online!
fonte
pryr::f
).R+pryr
considerar um idioma separado; você é livre para enviar isso! Então você poderia usar a idéia da resposta do charlatão da Cows, que eu acho que seria ainda mais curta do que essa nesse contexto (uma linha).function(n)
provavelmente ainda seria menorfunction(n)matrix(rep(c(1,rep(0,n-2)),n+1),n,n)
MATL , 7 bytes
Experimente no MATL Online!
Explicação
Crie uma matriz de identidade (
Xy
), vire verticalmente (P
), escreva ((
) o valor 1 (l
) para a primeira e a última entrada (5L
), que são a parte superior esquerda e a parte inferior direita.fonte
Dyalog APL,
121110 bytesExperimente online
-1 byte graças a lstefano.
Quão?
fonte
,⍨⍴×,2↓⊢↑×
(10 bytes). Estou tentado a acrescentar: não use muitas comuta ... :-PC # (.NET Core) ,
121 9188 bytes-30 bytes porque o jeito antigo era estúpido.
-3 bytes movendo-se pela inicialização da variável
Experimente online!
Loops itera a matriz para preencher os 1s. Retorna uma matriz de 1 e 0.
fonte
b
comovar
salvar alguns bytes.05AB1E ,
14117 bytesExperimente online!
Explicação
fonte
Carvão ,
14127 bytes-5 bytes graças a Neil !
Experimente online!
fonte
Nν◨/ν←↙ν‖O↘
, mas depois eu apareço↗N⸿/‖O↘
!⸿
faz. Redefine para a posição original?⸿
é como¶
mover uma linha para baixo, mas sempre vai para a coluna zero (medida porJ
) em vez da coluna no início da string, por exemplo,J⁵¦⁵⸿
é a mesma queJ⁰¦⁶
.C ++, 144 bytes
Aproveita a diferença de um byte entre '#' e 35
fonte
'#'
e35
?Mathematica, 72 bytes
entrada
saída
fonte
Grid@s
pors
e salvar 5 bytes.Python 2 ,
8662 bytesExperimente online!
-24 bytes: Graças a uma ideia de Rod!
fonte
PowerShell , 67 bytes
Experimente online!
Leva a entrada
$n
e os loops de0
para--$n
(isto é,$n
pré-decrementado). A cada iteração, construímos uma sequência de1
seguidos por$n-1
0
s e multiplicamos esse3
tempo limite (por exemplo,100010001000
para entrada de5
). Em seguida, indexamos isso rotativamente a partir de0
para0 + $n
. Esses caracteres são-join
editados em uma string, que é deixada no pipeline. A saída está implícita.(NB - Isso requer 9 bytes adicionais para lidar com o caso especial de
n=1
. Abaixo está o código de 58 bytes, se estamos garantidosn>1
)fonte
Dyalog APL v16, 23 bytes
Experimente online!
Explicação:
fonte
Lua, 117 bytes
Tente
O código é bem simples. Ele define m para o primeiro argumento, depois adiciona 0 a ele para convertê-lo em um número, depois itera para trás para a coordenada Y, para a frente através da coordenada X e colocará um # se x == y ou se for os outros cantos.
Este programa nunca usa a palavra-chave "if".
fonte
Oitava, 37 bytes
Experimente online!
Gera uma matriz esparsa representando o sinal de porcentagem.
fonte
Japonês , 12 bytes
Retorna uma matriz / matriz 2D.
Experimente online! usando o
-Q
sinalizador para mostrar a saída formatada em matriz.Explicação
Implícito:
U
= número inteiro de entradaQuadrado
U
(²
), crie a matriz[0, U*U)
(o
) e mapeie cada item ...1
se é divisível (v
) porU-1
(UÉ
), mais0
.Defina o item (
h
) no índice 0 (T
) para1
.Divida a matriz em fatias (
ò
) de comprimentoU
.fonte
hT1
, como0
já é tecnicamente divisívelU
para todosU
. Fora isso, ótimo trabalho :-) #1
. Sem ele, ele retorna[[0]]
porque aparentemente zero não é divisível por zero.PHP, 53 bytes
O comprimento do lado da matriz é
$l
. Este código tem um aviso do PHP e até um aviso do PHP para divisão por 0 quando$l=0
, mas faz o trabalho!fonte
$l
). Infelizmente, essa não é uma das nossas maneiras aceitas de receber sugestões . No meta post vinculado, você encontrará alternativas, por exemplo, usando argumentos de linha de comando, como visto na resposta de ricdesi .while($i**.5<$n=$argn)echo$i++%~-$n?0:1,"\n"[$i%$n];
ouwhile($i**.5<$n=$argn)echo+!($i++%~-$n),"\n"[$i%$n];
(52 bytes cada)<?
no início.Python 2 , 93 bytes
Experimente online!
fonte
Ruby, 47 bytes
Retorna uma matriz de matrizes.
O código é bem direto.
n-1
matriz com1
o primeiro elemento e o restante é preenchido com0
s (por exemplo[1, 0, 0, 0]
)n
fatias den
elementosExperimente online!
fonte
J, 14 bytes
Ungolfed:
Experimente online!
fonte
0=<:|i.@,~
?Python 3, 97 bytes
Explicação
m=[[0+(j==n-i-1)for j in range(n)]for i in range(n)]
Essa é uma compreensão da lista,
0+(j==n-i-1)
é uma maneira mais curta de converterj==n-i-1
para um int (em oposição àint
função) e, em seguida,m[-1]=m[0]
é mais curta do que tornar o canto inferior direito 1, pois as linhas superior e inferior são idênticas.fonte
Quarto,
273 (sem comentários)170 (golfe)(Versão 273 para esclarecer a versão comentada:)
(Observe que, como o espaço em branco é o principal delimitador em Forth, remover todos os retornos de carro não faria diferença. O recuo, é claro, faz.)
(Comentado:)
(Exemplos de execução:)
(Nota final: funciona com um tamanho abaixo da largura do interpretador Forth. Executei o procedimento acima no gforth, AMD64. Um antigo Forth de 16 bits teria apenas 15 bits de largura e precisaria de algumas modificações.)
fonte
C # (.NET Core) , 65 bytes
Experimente online!
O algoritmo é significativamente diferente da outra resposta C #, então decidi publicá-lo separadamente, e não como uma melhoria. Inspirado pela resposta Jelly mais votada, na verdade, eu estava fazendo algo um pouco menos compacto antes. A saída é uma matriz linear, portanto, exigiria alguma lógica para envolvê-la em um 2D fora do método como está. Uma versão alternativa requer 6 bytes adicionais para produzir como uma matriz 2D verdadeira:
Eu também tenho uma versão interessante não competitiva.
Isso acaba com a saída quase correta, resultando em uma
IEnumerable<bool>
com true / false em vez de 1/0, e é uma estrutura linear em vez de 2D e, embora não seja necessária para essa linha exata de código,using System.Collections.Generic
é necessário fazer algo útil com o saída. Como eu disse, está muito perto de ser válido, mas não completamente.fonte
?1:0
obras e acredito que uma matriz do resultado deve ser boa. As coleções usando também não são necessárias para esse código.w*w
uma variável e mover aint
declaração para fora do loop pouparia alguma coisa?w*w
por uma variável de caractere economiza 4 bytes, mover paraint i=0
fora do loop requer um ponto-e-vírgula que custa 1 byte e, em seguida, adicionar,s=w*w
à declaração custa 6 bytes, portanto, na verdade, gera +3 bytes.