Last active
November 1, 2021 14:08
-
-
Save wrongbyte/b47453e011fc478986372f07db76bbe7 to your computer and use it in GitHub Desktop.
Printe letrinhas bonitinhas com nodeJS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const L = parseInt(process.argv[2]); | |
const H = parseInt(process.argv[3]); | |
const T = process.argv[4]; | |
/* exemplo: node asciiArt.js 5 5 ESSE_CODIGO_TA_RUIM | |
##### #### #### ##### #### # #### ##### #### # ##### # #### # # ##### # # | |
# # # # # # # # # # # # # # # # # # # # # ## ## | |
#### # # #### # # # # # # # # # # # ##### #### # # # # # # | |
# # # # # # # # # # # # # # # # # # # # # # # # | |
##### #### #### ##### #### # #### ##### #### # # # # # # ##### ##### # # | |
OBSERVAÇÕES | |
O código tá uma bagunça pq eu fiz aleatoriamente isso aqui (OUTRA HORA EU ARRUMO), mas funciona, então se vc quiser testar.. | |
COMO USAR: | |
1 - Os dois primeiros argumentos são os tamanhos da largura e altura das letras. | |
Eu só testei com altura e largura iguais, com 5x5 e 7x7, respectivamente. Outros valores podem n funcionar | |
2 - Use letras maiúsculas, e divida as palavras com underscore (esse simbolo aqui _ ) | |
*/ | |
/* A LÓGICA Q EU USEI | |
Vamos definir a estrutura base de uma letra, que é a seguinte: | |
_ _ _ _ _ | |
| | | Para evitar 26 funções diferentes, nós vemos os pontos comuns entre essas linhas | |
| | | da estrutura em cada letra. Por ex, tanto E quanto F têm a primeira linha inteiramente | |
|- - - - -| preenchida. Tanto H quanto A tem a linha H/2 inteiramente preenchida, e por aí vai. | |
| | | Então, tomando por referência essas linhas principais que formam todas as 26 letras, | |
|_ _ | _ _| podemos escrever uma função que vai printar todas as letras de uma dada palavra. | |
Para montar uma palavra, printamos todos os char de uma linha. | |
A cada L char, adicionamos um espaço e começamos a printar a linha countH da próxima letra. | |
*/ | |
let countH = 0; | |
let char = '#'; | |
console.log(''); | |
writeLetters(); | |
// TODO: passar pra uppercase todas as letras | |
// TODO: ARRUMAR COISAS Q ENVOLVEM AS METADES (definir halfH e halfL separadamente) | |
// TODO: substituir por (se no conjunto) por (se fora do conjunto) | |
function writeLetters(){ | |
// cada linha | |
for (let j = 0; j < H; j++) { | |
let row = ''; | |
// vamos concatenando os caracteres de cada linha countH de cada letra i e no fim de cada iteração printamos a linha inteira | |
for (let i = 0; i < T.length; i++){ | |
// ================== LETRAS COM A PRIMEIRA LINHA TOTALMENTE PREENCHIDA ============================== | |
if (T[i] === 'E' || T[i] === 'F' || T[i] === 'I' || T[i] === 'N' || T[i] === 'T' || T[i] === 'Z'){ | |
// Primeira linha em comum e linha final inteira | |
if (countH === 0 || countH === H - 1 && (T[i] === 'E' || T[i] === 'Z' || T[i] === 'I')){ | |
row += char.repeat(L); | |
} | |
// Linha do meio | |
else if (countH === Math.round(H / 2) - 1 && (T[i] === 'E' || T[i] === 'F')){ | |
row = row + char.repeat(L - 1) + ' '; | |
} | |
// "Corpo" à esquerda | |
else { | |
if (T[i] === 'Z'){ | |
row += (' ').repeat(H - countH - 1) + char + (' ').repeat(countH); | |
} else if (T[i] === 'T' || T[i] === 'I'){ | |
// Linha central <========= | |
row += (' ').repeat(Math.round(H / 2) - 1) + char + (' ').repeat(Math.round(H / 2) - 1); | |
} else if(T[i] === 'N'){ | |
row += char + (' ').repeat(L - 2) + char; | |
} else { | |
row += char + (' ').repeat(L - 1); | |
} | |
} | |
} | |
// Letras com char nas extremidades da primeira: H, K, M, U, V, W, X, Y | |
else if (T[i] === 'H' || T[i] === 'K' || T[i] === 'M' || T[i] === 'U' || T[i] === 'V' || T[i] === 'W' || T[i] === 'X' || T[i] === 'Y'){ | |
// Pimeira e ultima linhas caso dois char nas extremidades | |
if (countH === 0 || countH === H - 1 && (T[i] === 'H' || T[i] === 'K' || T[i] === 'M' || T[i] === 'W' || T[i] === 'X')){ | |
row += char + (' ').repeat(L - 2) + char; | |
} | |
// ========== LINHA DO MEIO ============== | |
else if (countH === Math.round(H / 2) - 1 && T[i] === 'H') { | |
row += char.repeat(L); | |
} | |
// ========= CORPO DA LETRA =========== | |
else { | |
// ======= H E U | |
if (T[i] === 'H' || T[i] === 'U' || T[i] === 'V') { | |
if (countH === H - 1){ | |
T[i] === 'U' ? row += char.repeat(L): row += (' ').repeat(Math.round(H / 2) - 1) + char + (' ').repeat(Math.round(H / 2) - 1); | |
} else row += char + (' ').repeat(L - 2) + char; | |
} | |
else if (T[i] === 'Y' || T[i] === 'X'){ | |
if (T[i] === 'Y'){ | |
countH < Math.round(H / 2) - 1 ? row += char + (' ').repeat(L - 2) + char : row += (' ').repeat(Math.round(H / 2) - 1) + char + (' ').repeat(Math.round(H / 2) - 1); | |
} else { | |
countH === Math.round(H / 2) - 1 ? row += (' ').repeat(Math.round(H / 2) - 1) + char + (' ').repeat(Math.round(H / 2) - 1) : row += char + (' ').repeat(L - 2) + char; | |
} | |
} | |
if (T[i] === 'K'){ | |
if (countH === Math.round(H / 2) - 1){ | |
row += char.repeat(2) + (' ').repeat(L - 2) | |
} else { | |
countH < Math.round(H / 2) - 1 ? row += char + (' ').repeat(H - countH - 2) + char + (' ').repeat(countH) : row += char + (' ').repeat(countH - 1) + char + (' ').repeat(countH - 2); | |
} | |
} | |
else if (T[i] === 'M' || T[i] === 'W') { | |
if (T[i] === 'M') { | |
if (countH === Math.round(H / 2) - 1) { | |
row += char + (' ').repeat(Math.round((L - 3)/2)) + char + (' ').repeat(Math.round((L - 3)/2)) + char | |
} else { | |
countH < Math.round(H / 2) - 1 ? row += char.repeat(2) + (' ').repeat(L - 4) + char.repeat(2) : row += char + (' ').repeat(L - 2) + char; | |
} | |
} | |
// O oposto do acima p W | |
else { | |
if (countH === Math.round(H / 2) - 1) { | |
row += char + (' ').repeat(Math.round((L - 3)/2)) + char + (' ').repeat(Math.round((L - 3)/2)) + char | |
} else { | |
countH > Math.round(H / 2) - 1 ? row += char.repeat(2) + (' ').repeat(L - 4) + char.repeat(2) : row += char + (' ').repeat(L - 2) + char; | |
} | |
} | |
} | |
} | |
} | |
// Letras com um char central na primeira linha: A, O, Q | |
else if (T[i] === 'A' || T[i] === 'O' || T[i] === 'Q'){ | |
if (countH === 0 || (T[i] === 'O' && countH === H - 1)){ | |
row += (' ').repeat(Math.round(H / 2) - 1) + char + (' ').repeat(Math.round(H / 2) - 1); | |
} | |
else if (T[i] === 'O'){ row += char + (' ').repeat(L - 2) + char; } | |
else if (T[i] === 'A'){ countH === Math.round(H / 2) - 1 ? row += char.repeat(L) : row += char + (' ').repeat(L - 2) + char;} | |
else if (T[i] === 'Q') { countH < Math.round(H / 2) ? row += char + (' ').repeat(L - 2) + char : row += (' ').repeat(countH) + char.repeat(L - countH)} | |
} | |
// Letras com dois char à esquerda | |
else if (T[i] === 'B' || T[i] === 'D' || T[i] === 'P' || T[i] === 'R'){ | |
if (countH === 0 || (T[i] === 'B' || T[i] === 'D') && countH === H - 1) { | |
row += char.repeat(L - 1) + ' '; | |
} | |
else if (T[i] === 'D') { row += char + (' ').repeat(L - 2) + char } | |
else if (T[i] === 'B') { countH === Math.round(H / 2) - 1? row += char.repeat(L - 1) + (' ').repeat(1): row += char + (' ').repeat(L - 2) + char } | |
else if (T[i] === 'P') { | |
if (countH === Math.round(H / 2) - 1){ row += char.repeat(L - 1) + ' ' } | |
else {countH < Math.round(H / 2) - 1 ? row += char + (' ').repeat(L - 2) + char : row += char + (' ').repeat(L - 1)} | |
} | |
else if (T[i] == 'R') { countH === Math.round(H / 2) - 1 ? row += char.repeat(L - 1) + ' ' : row += char + (' ').repeat(L - 2) + char } | |
} | |
// Letras com dois char à direita | |
else if (T[i] === 'C' || T[i] === 'G' || T[i] === 'S') { | |
if (countH === 0 || (countH === H - 1 && T[i] !== 'S')){ | |
row += (' ').repeat(1) + char.repeat(L -1) | |
} | |
else if (T[i] === 'S') { | |
if (countH === H - 1) { row += char.repeat(L -1) + (' ').repeat(1) } | |
else {row += (' ').repeat(countH) + char + (' ').repeat(H - countH - 1)} | |
} | |
else if (T[i] === 'C') { row += char + (' ').repeat(L - 1) } | |
else if (T[i] === 'G') { countH < Math.round(H / 2) - 1 ? row += char + (' ').repeat(L - 1) : row += char + (' ').repeat(L - 2) + char} | |
} | |
else if (T[i] === 'L') { | |
countH === H - 1 ? row += char.repeat(L) : row += char + (' ').repeat(L - 1) | |
} | |
row += ' '; // espaço entre as letras | |
} | |
console.log(row); | |
countH += 1; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment