O desafio
Dadas duas seqüências de caracteres, cada uma com comprimento de até 30, consistindo em caracteres ASCII imprimíveis (códigos ), coloque-as em uma escala de equilíbrio no menor número de bytes de código! Isso consiste nas seguintes etapas:
- Calcular e comparar os pesos das cordas
- Escolha a escala de arte ASCII inclinada adequadamente
- Coloque as duas cordas na balança
As strings podem ser passadas como uma matriz, dois argumentos ou qualquer outro método razoável.
O peso de uma sequência é definido como a soma dos pesos dos caracteres dessa sequência, em que:
- Os espaços têm um peso de 0 (
)
- Letras minúsculas têm peso 2 (
abcdefghijklmnopqrstuvwxyz
) - Letras maiúsculas têm peso 4 (
ABCDEFGHIJKLMNOPQRSTUVWXYZ
) - Todos os outros símbolos têm um peso de 3 (
!"#$%&'()*+,-./0123456789:;<=>?@[\]^_`{|}~
)
As escalas são assim:
. _ | _- * / \ | - * / \ _- * | / \ _- * | / \ / \ | * ------ * / \ | / \ | / \ | * ------ * | ______ | ______
_. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ | / \ | / \ | / \ | * ------ * ______ | ______
. | ______ | ______ / \ | / \ / \ | / \ / \ | / \ / \ | / \ * ------ * | * ------ * | | ______ | ______
Se a primeira corda for mais pesada, use o primeiro desenho como base da sua saída; se a segunda corda for mais pesada, use o segundo desenho; se as cordas tiverem o mesmo peso, use a terceira. Espaço em branco à direita é permitido.
Usarei um segmento do terceiro desenho como base para todos os exemplos a seguir.
A primeira corda deve ser colocada na panela esquerda e a segunda corda na panela direita.
Coloque uma corda em uma panela colocando seus caracteres não espaciais dentro da área 6x5 imediatamente acima dos traços, conforme marcado por #
s aqui (você pode substituir parte da balança - isso é bom):
###### _ ###### ###### ###### / ###### \ * ------ *
Todos esses caracteres devem ser "resolvidos", ie. acima de um -
caractere ou outro caractere da string:
ERRADO ERRADO CORRETO ____ ____ ____ f / \ / \ / \ eu \ / \ / \ / \ / hov \ / s \ / oating \ / eri ng \ / ettled \ * ------ * * ------ * * ------ *
Além disso, toda a pilha deve ser a mais plana possível, o que significa que das seis colunas de 1 largura, a altura da mais alta e a altura da mais curta não devem diferir em mais de 1:
ERRADO ERRADO CORRETO CORRETO [mais alto: 5] [mais alto: 4] [mais alto: 5] [mais alto: 2] [menor: 0] [menor: 2] [menor: 4] [menor: 2] 5__5_ ____ 5_5__ ____ 45445 & / \ 445454 / \ 45445 $% e $ @ 445454 / \ / 45445 &% @% $ & 445454% & $ @% & / 45445 \ / & $ @ $ &% \ / 445454 \ / $ @ $% $$ \ * ------ * * ------ * * ------ * * ------ *
A ordem / disposição exata dos personagens não importa. A seguir, são apresentados todos os arranjos válidos para a sequência "Pese suas palavras!":
____ ____ ____ ____ / \ / \ / \ / \ ds! \ / owd oe \ u! Wd \ ourwor Wihuos yoiwgr eghioo / Pesagem \ / egyrr! \ / Wrhd! S \ / rrsuwy \ * ------ * * ------ * * ------ * * ------ *
Casos de teste
ENTRADA: "GOLFE DE CÓDIGO", "desafios de codificação" PESOS: 32, 32 EXEMPLO DE SAÍDA: . | ______ | ______ / \ | / \ / \ | nge \ s / OO \ | challe / CFGLED \ | /codificação\ * ------ * | * ------ * | | ______ | ______
ENTRADA: "", "$" PESOS: 0, 3 EXEMPLO DE SAÍDA: _. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ | / \ | / \ | / $ \ | * ------ * ______ | ______
ENTRADA: "VOCÊ SABE O QUE DIZEM!", "There_always_a_relevant_xkcd" PESOS: 75, 65 EXEMPLO DE SAÍDA: . tr_a_s | _hekx_y | - * elcdta _- * | revanw _- * | / e's_al \ T / \ | * ------ * AUYOHY A! HWYK / OTSMEW \ | * ------ * | ______ | ______
+1
. Primeiro: se os espaços não "pesam" nada e não são incluídos na obra de arte, por que incluí-los? É apenas uma sobrecarga desnecessária filtrá-los primeiro. Em segundo lugar: isso parece um desafio "2 em 1" / camaleão para mim - Desafio 1: Determine qual corda é "mais pesada", Desafio 2: Gere alguma arte ASCII.Respostas:
Carvão , 110 bytes
Experimente online! Link é a versão detalhada do código. Recebe a entrada como uma matriz de duas seqüências. Explicação:
Remova os espaços das duas cadeias.
Assuma o equilíbrio de pesos.
Passe pelas duas cordas.
Subtraia a diferença de execução do peso da string.
Imprima a base da balança.
Suponha que ambas as panelas estejam 3 fora do chão.
Se os pesos não equilibrassem ...
... calcular a altura da panela esquerda ...
... desenhe a balança inclinando-se para a direita ...
... e reflita se a panela esquerda estava mais pesada.
Caso contrário, desenhe um equilíbrio de nível.
Pule para a primeira escala de escala.
Loop sobre as entradas.
Desenhe o prato da balança.
Corte a entrada em substrings de comprimento 6 e imprima-os de cabeça para baixo para que encham a panela para cima.
Salte para o segundo prato da balança.
fonte
Python 2 ,
11011071855837 bytes-216 bytes com compactação de string
-18 bytes, reduzindo algumas repetições
Experimente online!
Executar como
A(string_one, string_two
.w
calcula o peso da string recursivamente.t
é o texto compactado e entrelaçado de todas as seis escalas possíveis, o que acontece com muita facilidade.p
pega a sequência (com espaços removidos), o peso da sequência e o lado da balança em que está a sequência e cria um bloco de caracteres 5x6.A
pega as cordas e constrói seus blocos comp
. A corda gigante na parte inferior é composta por três cadeias de formato entrelaçadas e compactadas.fonte
JavaScript (ES6),
340337 bytesRecebe a entrada como uma matriz de 2 matrizes de caracteres. Desenha o caractere de saída por caractere.
Experimente online!
Como?
Agora, invocamos a segunda função auxiliar para desenhar a saída:
Onde
INDEX
é calculado da seguinte forma:fonte
Java 10,
1043993988983 bytes-5 bytes graças a @ceilingcat .
Entrada são duas Strings, que resultarão em uma matriz de caracteres como resultado.
Experimente online.
Explicação:
fonte