Você não sabe nada As coisas que faço para " Chaos is a ladder " são uma frase memorável da série de televisão Game of Thrones .
O objetivo deste desafio é construir uma escada do caos, na arte ASCII.
O desafio
Entrada
- Largura da escada,
W >= 3
(inteiro) - Altura do passo,
H >= 2
(inteiro) - Número de linhas,
N >= 2
(inteiro).
Resultado
Uma escada com degraus horizontais e trilhos verticais , com 1 caractere de largura. A largura da escada ( W
) inclui os dois trilhos e a altura do degrau ( H
) inclui o degrau correspondente.
Todos os degraus, incluindo o superior e o inferior, terão um trilho vertical de comprimento H-1
diretamente acima e abaixo. O exemplo tornará isso mais claro.
A escada será feita de caracteres ASCII imprimíveis e sem espaço em branco , ou seja, o intervalo inclusivo de !
(ponto de código 33
) a ~
(ponto de código 126
). Os caracteres reais serão escolhidos aleatoriamente . Dadas as entradas, cada uma das opções aleatórias de caracteres deve ter probabilidade diferente de zero. Fora isso, a distribuição de probabilidade é arbitrária.
Espaços em branco à esquerda ou à direita , horizontais ou verticais, são permitidos.
Exemplo
Dado W=5, H=3, N=2
, uma saída possível é a seguinte.
x :
g h
q$UO{
t T
6 <
bUZXP
8 T
5 g
Observe que a altura total é H*(N+1)-1
, pois existem N
degraus e N+1
seções verticais.
Regras adicionais
Os meios e o formato de entrada são flexíveis, como de costume. Por exemplo, você pode inserir os três números em qualquer ordem ou em uma matriz que os contenha.
A saída pode ser através de STDOUT ou um argumento retornado por uma função. Nesse caso, pode ser uma sequência com novas linhas, uma matriz de caracteres 2D ou uma matriz de cadeias.
Um programa ou uma função pode ser fornecida.
As brechas padrão são proibidas.
O menor código em bytes vence.
Casos de teste
Para cada W, H, N
uma, uma saída possível é mostrada.
W=5, H=3, N=2:
\ ~
: K
ke:[E
5 u
0 _
8Fr.D
# r
7 X
W=3, H=2, N=2:
$ X
Mb)
0 ]
(T}
j 9
W=12, H=4, N=5:
d Y
P `
5 3
p$t$Ow7~kcNX
D x
` O
* H
LB|QX1'.[:[F
p p
x (
2 ^
ic%KL^z:KI"^
C p
( 7
7 h
TSj^E!tI&TN8
| [
< >
= Q
ffl`^,tBHk?~
O +
p e
n j
W=20, H=5, N=3:
G %
o y
% 3
- 7
U'F?Vml&rVch7{).fLDF
o }
U I
h y
a g
;W.58bl'.iHm\8v?bIn&
, U
N S
4 c
5 r
F3(R|<BP}C'$=}xK$F]^
' h
h u
x $
6 5
Respostas:
Gelatina ,
24 2322 bytesUm programa completo de tomar os três argumentos
W
,H
,N
e imprimir o resultado.Experimente online!
Quão?
Constrói uma máscara de matriz 2D de uma única linha e suas seções verticais abaixo, repete-a
N+1
vezes e remove a linha superior e coloca caracteres ou espaços aleatórios, dependendo do valor da máscara.fonte
Linguagem de script da operação Flashpoint ,
643624 bytesRidiculamente longo, porque não há como criar os caracteres a partir dos códigos de caracteres.
Ligue para:
Resultado:
A escada é extremamente caótica porque a fonte não é monoespaçada.
Desenrolado:
fonte
"\n"
funciona,"\xa3"
para obter algo como£
não funciona? se você puder usar escapes unicode, poderá cortar essa sua matriz.\n
é a única saída reconhecida. (E""
dentro de aspas para representar um"
)05AB1E , 29 bytes
Entrada feita na ordem
N, H, W
Experimente online!
Explicação
fonte
C, 95 bytes
fonte
R ,
1381291119893 bytes-13 bytes graças a Neal Fultz!
-1 byte graças a Robin Ryder
Experimente online!
Função anônima; retorna o resultado como uma matriz.
Graças a essa pergunta do Word Grids , estive pensando em matrizes muito mais do que o habitual. Observei que os degraus estão nessas linhas da matriz que são um múltiplo da altura do degrau
H
(R é indexado em 1) e que os trilhos são a primeira e a última coluna,1
eW
. Portanto, crio uma matriz de caracteres ASCII aleatórios, substituo as letras que não correspondem a esses critérios por espaços e retorno a matriz. O link TIO imprime bem.Neal Fultz sugeriu uma indexação diferente para os caracteres de espaço
[-H*(1:N),3:W-1]
, que substitui todos os caracteres, exceto aqueles em linhas de múltiplos deH
:-H*(1:N)
e não na borda,3:W-1
<==>2:(W-1)
.R , 121 bytes
Experimente online!
Uma melhoria em relação à abordagem original baseada em matriz com a qual comecei; é o mesmo algoritmo, mas os
for
loops são mais curtos do que construir e imprimir uma matriz (mas não se eu não imprimi-lo!)fonte
m[-H*(1:N),3:W-1]=" "
parece um pouco mais curto - você sempre pode substituir os testesrow
ecol
por uma fatia 2-d.sample(33:126,...)
por32+sample(94,...)
.Perl 5 , 81 bytes
Código de 80 bytes + 1 para
-p
.Experimente online!
fonte
Carvão ,
3432 bytesExperimente online! Toma entrada na ordem N, H, W. Aproximação detalhada (
Plus(InputNumber(), 1)
atualmente está interrompida no TIO). Explicação:Mapa acima do intervalo
1..H*(N+1)
. Isso significa que as linhas aparecem quandoi
é múltiplo deH
.Junte-se ao resultado de:
mapeamento sobre o intervalo implícito
0..W
:se a coluna não é
0
ouW-1
e a linha não é um múltiplo, emH
seguida, gera um espaço;caso contrário, pegue a variável de caractere ASCII predefinida, inverta-a (colocando o espaço em 94º lugar) e imprima um caractere aleatório do que agora é o primeiro 94. (Porque
Slice
é uma merda.)Associe-se usando a string vazia. O resultado final é impresso implicitamente.
fonte
NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«
? Bem, eu fiz uma divisão e cometi aa0a6316
quebra.Map
local em que era usadonot is_command
quando queriais_command
. Então você deveria escreverNθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴
se não fosse por esse bug.C (gcc) ,
141131114109107 107 bytesDeve ser capaz de jogar isso um pouco ...
Experimente online!
fonte
i=1
na declaração global?Perl 6 ,
7673 bytesExperimente online!
Toma (h, n, w) como argumentos. Retorna uma lista de strings.
Explicação:
fonte
xx
e em++$
vez demap
. Talvez você possa encontrar um lugar para jogar golfe com bytes?PowerShell ,
132124 bytesExperimente online!
Construímos uma escada composta de apenas
#
primeiro ( exemplo ), então circuito|%{...}
através de cada personagem eif
que de-eq
ual a35
, nós retiramos um novoRandom
personagem a partir do intervalo apropriado. Caso contrário, produzimos (ou seja, um espaço ou nova linha).fonte
JavaScript (ES6),
117115 bytesUma função recursiva que cria o caractere de saída por caractere.
"Olhe Ma, sem alimentação literal de linha!"
Demo
Mostrar snippet de código
fonte
String.fromCharCode
, pois não podia dizer honestamente que iria inventar isso depois de ver isso. Deixe-me saber se você sente que o meu agora é muito semelhante ao seu.Python 2 , 142 bytes
Experimente online!
Bytes salvos graças a ovs!
fonte
1
na frente> _>Pitão, 33 bytes
Experimente online: Demonstração
fonte
Python 2 , 114 bytes
Experimente online!
fonte
SOGL V0.12 ,
3231 bytesExperimente aqui!
Entrada na ordem N, W, H.
Explicação:
18 bytes sem os caracteres aleatórios: /
fonte
Java 8,
203188168133133130130126 126 bytesExperimente online!
fonte
W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->0;c=i%H<1|j>W-2|j<2?(char)(Math.random()*94+33):32)System.out.print(c);}}
W-1
, o loop interno precisa fazer uma iteração adicional (>=0
+1 byte).W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->=0;c=i%H*j<1|j>W-2?(char)(Math.random()*94+33):32)System.out.print(c);}}
;++i<H*N+H;
: -2 bytes.Haskell ,
226220211190 bytesExperimente online!
Guardado 9 bytes graças a Laikoni
Economizou 21 bytes graças a wchargin
Deve ser jogável (
b$(s w)<$[2..h]
eb$((s w)<$[2..h])++[r w]
). Não me sinto confortável com IO e golfe.fonte
t w h n= ...
:(w#h)n= ...
.pure
pode ser usado em vez dereturn
. Você pode soltar os parênteses em torno de(d ' ')<$
e(s w)<$
.c=randomRIO('!','~')
, o que também permite incorporard=return
. Além disso,mapM id
é um byte menor quesequence
.JavaScript (ES6), 144 bytes
Cria a escada de
#
caracteres e substitui cada um por um caractere ASCII aleatório.Snippet de teste
Mostrar snippet de código
fonte
String.fromCharCode
eMath.random
em uma solução - por que o JavaScript nos odeia ?! Criamos isso com 137 bytes, que é muito semelhante ao seu, apenas sem a matriz. Gostaria de saber agora se uma solução recursiva pode ser ainda mais curta; investigará mais tarde.JavaScript (ES6),
129117 bytesInfelizmente, enquanto eu estava jogando golfe, Arnauld me derrotou em uma solução semelhante, mas mais curta . Ao combinar nossas 2 soluções, isso pode ter 113 bytes
Inclui uma nova linha à direita.
Tente
fonte
Japt
-R
,42414037342825 bytesRecebe entrada na ordem
H,W,N
.Tente
fonte
QBIC , 76 bytes
Explicação
Amostra de execução
fonte
MATL ,
6350 bytes-13 bytes graças a Luis Mendo
Experimente online!
Ainda sou novo no golfe no MATL (e não sou muito bom no MATLAB), então sei que isso provavelmente não está próximo do ideal. Dicas são bem vindas. Leva a entrada em ordem
N,H,W
.Aqui vamos nós:
Agora temos uma matriz de caracteres aleatórios.
Agora também há uma matriz lógica para os trilhos.
Agora temos 3 matrizes na pilha:
Então, fazemos o seguinte:
fonte
X"
é3$
por padrão.6Y2
pode ser útil em vez de13:106
...20+
.~~
ég
.J3G&Ol5LZ(
pode ser usado em vez de1F3G2-Y"h1hJT3$X"
X"
. Na última dica,5L
é ,[1 0]
mas não tenho certeza de como isso é usado em conjunto comZ(
- entendo que está atribuindo1
à primeira e à última coluna, mas não entendo como5LZ(
isso é realizado. Provavelmente, eu vou fazer o ping no MATL CHATL algum tempo depois sobre isso, então não se preocupe com isso por enquanto.0
como o "fim".Z(
atribui a colunas. Claro, sinta-se à vontade para me enviar um ping no chat!Powershell, 102 bytes
Script de teste com menos golfe:
Resultado:
fonte
Ruby , 71 bytes
Edição: Opa, eu pensei que este era um novo desafio por causa da edição recente para corrigir um erro de digitação lol. Ainda estou deixando isso para lá porque ainda não há resposta para Ruby.
Experimente online!
fonte