Hoje era o dia de inscrição para o exame de AP na minha escola e, enquanto eu estava meticulosamente borbulhando nas páginas e nas informações necessárias, a idéia para esse desafio me atingiu. Assim, dada uma sequência de letras e números, produza um gráfico de bolhas devidamente preenchido.
Regras:
- Para cada caractere na sequência de entrada, substitua esse caractere na coluna correspondente por um
#
ou@
outro símbolo razoável (se o seu idioma puder lidar com isso, o caractere Unicode 'full_block': █ parece realmente bom) - Um espaço é representado por uma coluna em branco (veja exemplos)
- A entrada válida será uma string composta apenas de letras maiúsculas, dígitos numéricos e espaços.
- A entrada terá um comprimento mínimo de 1 e máximo de 32 caracteres.
- A saída deve estar em MAIÚSCULAS
- Se o comprimento da entrada for menor que o comprimento máximo de 32, seu programa ainda deverá gerar as colunas em branco restantes
- Seu programa não precisa manipular as entradas em minúsculas da mesma forma que as maiúsculas, mas pontos de bônus, se puder.
Formato da placa:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999
Exemplos:
CODE GOLF ->
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
█CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DD█DDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEE█EEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFF█FFFFFFFFFFFFFFFFFFFFFFF
GGGGG█GGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLL█LLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
O█OOOO█OOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999
ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 ->
@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
B@BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CC@CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEE@EEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFF@FFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGG@GGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHH@HHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIII@IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJ@JJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKK@KKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLL@LLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMM@MMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNN@NNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPP@PPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQ@QQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRR@RRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSS@SSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTT@TTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUU@UUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVV@VVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWW@WWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX@XXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYY@YYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZ@ZZZZZZ
00000000000000000000000000@00000
111111111111111111111111111@1111
2222222222222222222222222222@222
33333333333333333333333333333@33
444444444444444444444444444444@4
5555555555555555555555555555555@
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ->^^^
E, claro, isso é código-golfe , então a resposta mais curta ganha
[A-Z0-9]{1,32}
e permitir qualquer comportamento para entradas que não correspondam a isso.$
não aparecerá em entradasRespostas:
Casca , 23 bytes
Experimente on-line ou tente com o caractere chique (mas um número inválido de conta)!
Infelizmente não consegui mesclar os dois
map
s em um (exceto com o uso de parênteses, custando 24 bytes) ..Explicação
fonte
Ruby , 62 bytes
Experimente online!
Retorna uma matriz de strings. Poderia ser jogado mais longe descartando junções de string e retornando uma matriz 2D de caracteres, como geralmente é a norma, mas não tenho certeza se é permitido aqui.
fonte
C (gcc) ,
132126 bytesExperimente online!
Agradecimentos a Jonathan Frech por salvar 6 bytes.
fonte
puts("")
é equivalente aputchar(10)
.++a)putchar((x[a-s]-*_)?*_:64);
->)putchar(x[a++-s]-*_?*_:64);
.64
para1
.putchar
chamada pode ser direcionada paraputchar(*_*(*_!=a[x-s]));
.Vermelho , 177 bytes
Experimente online!
Mais legível:
fonte
Carvão , 21 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Versão anterior com validação de entrada,
3432 bytes. Editar: salvou 2 bytes graças a @ ASCII-only.Experimente online! Link é a versão detalhada do código.
fonte
StringReplace
) Em uma nota lateral, a substituir builtin seria realmente útil para a direitaCast
R , 104 bytes
Experimente online!
fonte
Geléia ,
1817 bytesUsa um caractere de espaço. Para usar um
#
substituir⁶
com”#
um custo de um byte.Experimente online!
Quão?
fonte
³Ḣ,⁶yØA;ØD¤µ32СZY
aos 18 anos e acho que também pode ser improvável! Sair embora ...C ++ 14,
319 bytes237Esta é a primeira vez que faço isso, na pior linguagem possível do CodeGolf: P
Experimente Online!
fonte
Node.js, 85 bytes
Port to Node.js sugerida por @DanielIndie
Experimente online!
JavaScript (ES6),
10398 bytesExperimente online!
fonte
+""
, não é?)x/32
para salvar mais 2 bytes, uma vez queBuffer
é obrigatório para números inteiros.f=(s,x=561,c=Buffer([48+x/33%43]))=>x<1749?(s[x++%33]==c?'@':x%33?c:`\n`)+f(s,x):''
Perl 5
-F
, 47 bytesExperimente online!
fonte
Haskell , 86 bytes
Para uma abordagem muito mais agradável (e menos bytes), consulte a solução da Laikoni !
Experimente online!
Como alternativa, para a mesma contagem de bytes, poderíamos usar:
Experimente online!
Explicação / Ungolfed
O operador
(#)
é muito parecido comzipWith
o de que a função está codificada permanentemente, st. ele usa#
se dois caracteres são iguais e, caso contrário, mantém o segundo, não-destruído:Se a primeira lista estiver esgotada, basta adicionar os elementos restantes da segunda:
Com esse auxiliar, precisamos gerar apenas a string
"A..Z0..9"
, replicar cada elemento 32 vezes e compactar a entrada com cada string, sem o uso de luvas:fonte
max
. Eu acho que você deve postar isso como sua própria solução, pois é muito diferente da minha solução.Haskell , 74 bytes
Experimente online! Uma cadeia de entrada
x
é preenchida com espaços com um comprimento de 32 comtake 32$x++cycle" "
. Para cada caracterec
deA
paraZ
e0
para9
, examinamos os caracteresa
da cadeia de entrada preenchida e os substituímos por~
quandoa
ec
são iguais e porc
outros. Isso é alcançado pormax[c]['~'|a==c]
, que é, por exemplo ,max "A" "~" = "~"
quandoa = c = 'A'
, emax "A" "" = "A"
quandoc = 'A'
ea = 'B'
. Como isso gera uma sequência singleton em vez de um caractere,do
é usada a notação que concatena as seqüências singleton em uma sequência.Baseado na solução Haskell da BMO .
fonte
Python 2, 138 bytes
Suporta caracteres maiúsculos e minúsculos e deixa uma coluna não preenchida para espaços.
Se o bônus não valer a pena, eu irei para 125 bytes e suportarei apenas entradas em maiúsculas:
fonte
Stax , 15 bytes
Execute e depure
Utilizado
'#'
para indicar uma bolha cheia.Descompactado, não jogado e comentado, parece com isso.
Execute este
fonte
Pitão,
2320 bytesExperimente aqui
Explicação
fonte
APL + WIN, 56 bytes
Solicita a sequência de entrada e usa o caractere # como identificador:
Explicação:
fonte
C (gcc) , 124 bytes
Experimente online!
Em vez de uma matriz codificada, substituí-a por uma função de pesquisa. Felizmente, o conjunto de caracteres ASCII tem intervalos alfabéticos e numéricos contíguos (estou olhando para você, EBCDIC!) Além disso, certifiquei-me de manter a saída com exatamente 32 caracteres usando
sprintf()
: se isso não fosse um requisito da tarefa, o A função seria 97 bytes:Experimente online!
fonte
CJam , 31 bytes
Experimente online! Usa espaços como o caractere "buraco".
Se o espaço em branco à direita for permitido, isso funcionará para 29 bytes :
Experimente online!
Aqui está uma variação de 34 bytes que usa o bloco completo Unicode (
█
):Experimente online!
Explicação
fonte
Python 2 ,
1039694 bytes-7 bytes graças ao Mnemonic
-2 bytes graças a Jonathan Frech
Usa
'
como símboloExperimente online!
fonte
05AB1E , 19 bytes
Experimente online!
Explicação
fonte
a[b]
não funciona como você deseja aqui, funciona: P?MATL , 21 bytes
Usa um espaço como caractere marcador.
Experimente online!
Explicação
fonte
Lisp comum , 150 bytes
Experimente online!
Explicação
fonte
Java 10,
120118117 bytesExperimente on-line (para o TIO, usei '█' (em
9608
vez de35
) para obter melhor visibilidade).Explicação:
fonte
Retina , 64 bytes
Experimente online!
Protege a sequência de entradas à direita com espaços para 36 caracteres
Em seguida, coloque cada caractere em sua própria linha e adicione
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
antes dele.Combine um par do mesmo caractere na mesma linha, que existe se e somente se o caractere para essa linha corresponder a um dos
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
. Substitua o primeiro por@
e remova o segundo.As únicas linhas não correspondentes são aquelas com espaços, portanto, os caracteres não espaciais são um bloco quadrado de 36 × 36. Transponha.
Mantenha apenas os 32 primeiros caracteres em cada linha
fonte
Tcl ,
153145 bytesObrigado @sergiol por -8 bytes
Experimente online!
Explicação
fonte
SNOBOL4 (CSNOBOL4) ,
155150 bytesExperimente online!
Explicação:
fonte
Prolog (SWI) ,
235229228222214198173167165 bytes-6 bytes graças a @Vaca quack , -6 bytes graças a @ 0 '
Experimente online!
Explicação
fonte
SOGL V0.12 , 19 bytes
Experimente aqui!
fonte
Oitava , 61 bytes
Experimente online!
A função funciona da seguinte maneira:
fonte
Perl 6 , 57 bytes
Experimente online!
fonte