Desafio
Dado um número inteiro n
(onde 4<=n<=10**6
) como entrada, crie uma "porta da prisão" de arte ASCII *, medindo n-1
caracteres largos e n
altos, usando os símbolos do exemplo abaixo.
Exemplo
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Os caracteres usados são os seguintes:
┌───────────────┬─────────┬───────┐
│ Position │ Symbol │ Char │
├───────────────┼─────────┼───────┤
│ Top Left │ ╔ │ 9556 │
├───────────────┼─────────┼───────┤
│ Top │ ╦ │ 9574 │
├───────────────┼─────────┼───────┤
│ Top Right │ ╗ │ 9559 │
├───────────────┼─────────┼───────┤
│ Right │ ╣ │ 9571 │
├───────────────┼─────────┼───────┤
│ Bottom Right │ ╝ │ 9565 │
├───────────────┼─────────┼───────┤
│ Bottom │ ╩ │ 9577 │
├───────────────┼─────────┼───────┤
│ Bottom Left │ ╚ │ 9562 │
├───────────────┼─────────┼───────┤
│ Left │ ╠ │ 9568 │
├───────────────┼─────────┼───────┤
│ Inner │ ╬ │ 9580 │
└───────────────┴─────────┴───────┘
Regras
- Você pode receber informações por qualquer meio razoável e conveniente, desde que permitido pelas regras de E / S padrão .
- Para os propósitos deste desafio, nos idiomas em que os símbolos usados para criar a "porta" são caracteres de vários bytes, eles podem ser contados na sua pontuação como um único byte cada.
- Todos os outros caracteres (um ou vários bytes) devem ser contados normalmente.
- A saída pode não conter espaços à direita, mas uma nova linha à direita é permitida se for absolutamente necessário.
- Isso é código-golfe, e a menor contagem de bytes ganha.
Casos de teste
Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝
Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝
* Sim, eu sei que quanto maior fica, menos parece uma porta de prisão! : D
╬
ainda que╬
não esteja em sua página de códigos? Caso contrário, é"'Z“ζ
permitido o custo de um byte (ou 2)? (pressione 9580, converta para unicode)?"'Z“ζ
igual a um byte seria como em javascript"╬"
custando 1 byteRespostas:
Java 8,
156151148118 bytes-30 bytes, criando uma porta de resposta @raznagul C # (.NET Core) , depois que eu jogava 5 bytes.
Experimente online.
Resposta antiga de 148 bytes:
-5 bytes graças a @raznagul .
Explicação:
Experimente aqui.
fonte
-->
operador vai para ( ).i-->3
,i-->2
ej-->3´ you can save 5 bytes by removing the
n- = 3` en+1
.Carvão , 34 - 5 = 29 bytes
Experimente online! Link é a versão detalhada do código. A redução de 5 bytes é para caracteres de desenho de caixa.
ReflectOverlapOverlap(0)
deve ser equivalente a,ReflectMirror()
mas, em vez disso, o carvão vegetal faz apenas umaReflectTransform()
substituição; caso contrário, essa solução também funcionarian=3
. Aqui está uma solução alternativa que mostra o que aconteceria comn=3
para 38 - 5 = 33 bytes:Melhor ainda, se
ReflectOverlapOverlap(0)
funcionou, mas eu não me incomodei em dar suporten=3
, então eu poderia fazer isso por 31 - 4 = 27 bytes:fonte
╠
para╣
e tais. “ O contador de bytes do carvão vegetal não está funcionando por algum motivo. ” Talvez o contador de bytes do carvão vegetal não esteja funcionando porque esses caracteres não fazem parte de sua página de códigos? Você pode contar-los como 1 byte cada um de acordo com as regras do desafio, porém, assim que este é, de facto 27.Carvão ,
4442 bytesRiscado 44 ainda é regular 44
Experimente online!
fonte
Haskell, 75 bytes
Experimente online!
A função
w
pega um número inteiroi
e uma lista ondea
está o primeiro,b
o segundo elemento ec
o restante da lista e faz uma nova listaa
, seguida pori-3
cópias deb
, seguidas porc
. Apliquew
primeiro em cada elemento da lista["╔╦╗\n","╠╬╣\n","╚╩╝"]
e depois novamente (comi
aumento de1
) na lista resultante. Concatene em uma única lista.fonte
<$
é originalmente deData.Functor
e foi colocado emPrelude
. É quase o mesmo que>>
.a <$ b
substitui cada elementob
pora
, enquantob >> a
esperaa
ser uma lista e concatena o comprimento dasb
cópias dea
.[1,2] >> "aa"
->"aaaa"
,"aa" <$ [1,2]
->["aa","aa"]
. Nota:'x' <$ [1,2]
é igual a[1,2] >> "x"
.Vim, 29 bytes
Como existem caracteres de controle, aqui está um despejo do xxd:
Experimente online! (O intérprete V parece ter problemas com caracteres exóticos, de modo que o link usa caracteres mais mundanos.)
Explicação
fonte
GNU sed, 74 + 1 = 75 bytes
+1 byte para
-r
sinalizador. Recebe a entrada como um número unário.Experimente online!
Explicação
Isso é bem simples. Suponha que a entrada seja 6 (111111 unário). A primeira linha descarta quatro se
1
transforma a entrada restante nela:A terceira linha, em um loop, substitui todos
1
pelos caracteres que a precedem. Isso cria nossas colunas:Observe que isso também duplicou o
;
caractere. Finalmente, a quinta linha, em um loop, substitui cada;
caractere por uma cópia da linha a seguir:fonte
Gelatina , 33 bytes
... é 33? - custa 5 para converter de literais de string de um byte (índices da página de códigos) em caracteres Unicode.
Um programa completo imprimindo o resultado.
Experimente online!
Quão?
fonte
Y
ao final+⁽"7Ọ
adicionam 9556 a eles e convertem para caracteres. Eles (os 5) são grátis? Eu sinto que isso seria o mesmo como se eu pudesse usar os caracteres Unicode diretamente. (Eu também poderia usar caracteres reais em vez de índices de página de código e usar um mapeamento para mais bytes).Python 3 , 75 bytes
Experimente online!
fonte
n-3
:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
n+1
é equivalente a-~n
.Dyalog APL, 71 bytes
Experimente online!
fonte
(some expr)f Y
porY f⍨ some expr
.Japt ,
60 52 49 4836 bytesExperimente online!
Outra versão (47 bytes +
-R
sinalizador)Precisa do
-R
sinalizador (adicionado ao campo de entrada). Experimente online!Como funciona?
Como originalmente assumi que os 'caracteres da porta' custam mais de um byte, achei que poderia economizar alguns bytes codificando-os. Subtraí 9500 dos códigos de caracteres, o que me deixou com os caracteres
8J; DPG >MA
, que custam apenas um byte cada. Então, eu poderia adicionar 9500 a cada código de caractere e tudo ficaria bem.fonte
05AB1E , 29 bytes
Experimente online!
fonte
Rápido, 161 bytes
Sem golfe:
Você pode tentar esta resposta aqui
fonte
QBIC , 78 bytes
Felizmente, todos os símbolos usados na porta da célula estão na página de códigos QBasic.
Explicação
Saída de amostra
fonte
PHP , 131 bytes, 113 caracteres
Experimente online!
PHP , 133 bytes, 115 caracteres
Experimente online!
fonte
JavaScript (ES6), 86 bytes
Isso é significativamente mais longo que a outra resposta JS , mas eu queria tentar com um método alternativo.
Quão?
Atribuímos um peso a cada extremidade da grade: 1 para a direita, 2 para a esquerda, 3 para a parte inferior e 6 para a parte superior. A soma dos pesos fornece o índice do caractere a ser usado.
Demo
Mostrar snippet de código
fonte
JavaScript (ES6),
8074 bytesfonte
Ruby,
5452 bytes-2 bytes graças a ymbirtt.
Experimente online!
Ungolfed
Isso é super chato:
fonte
(n+1)
um pouco escrevendo-~n
- a precedência do operador também poupará os colchetes.Java 8, 102 + 101 bytes
Este é outro repetidor de cadeia do mesmo comprimento:
Experimente online!
fonte
BiFunction
:n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}
eString r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);}
Experimente on-line. E o segundo método também pode ser alterado paraString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
(63 bytes), para que se torne 141 bytes no totaln->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"
eString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
Experimente online.C # (.NET Core) ,
Pontuação 123 (141 bytes)Pontuação 118 (136 bytes)Experimente online!
-5 bytes graças a @KevinCruijssen
Explicação:
fonte
b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};
parafor(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}
Experimente online.Stax , 23 bytes
Execute e depure
Aqui está a versão não destruída. Divertidamente, é realmente menor para stax não usar os caracteres literais porque incluí-los como literal impediria o empacotamento da fonte.
Execute este
fonte
Mathematica, 106 bytes
fonte
OK, 38 caracteres
Experimente online.
O k parece não querer lidar bem com o unicode, então fui com o ok.
fonte
Lote, 126 bytes
Funciona no CP437 ou CP850. É assim nas páginas de código:
fonte
Retina ,
5650 bytesExperimente online! Funciona construindo um quadrado de ╬s e depois fixando as bordas (em particular, três colunas são excluídas quando os lados são adicionados).
fonte
PowerShell , 67 bytes
Pega entrada
$args[0]
, subtrai3
, salva isso em$x
, usa isso na construção da parte superior da porta para gerar o número apropriado de seções do meio. Então estamos produzindo as linhas do meio, das quais temos$x+1
. Finalmente, a linha inferior é semelhante à linha superior. Tudo isso é deixado no pipeline e o implícitoWrite-Output
insere uma nova linha entre os elementos gratuitamente.Experimente online!
fonte
Perl 5 , 61
60 caracteres de código (90 incluindo os caracteres de porta multibyte) + 1 para
-p
Experimente online!
fonte
C # (.NET Core), 130 bytes
Porta da resposta Java 8 de @RobertoGraham , depois de jogar cerca de 70 bytes.
Experimente online.
fonte
J ,
4137 bytesExperimente online!
O desenho padrão da caixa ocupa 13 bytes , infelizmente a melhor maneira de substituir os caracteres que eu pude encontrar custa 28.
fonte