Todo mundo adora geometria. Então, por que não tentamos codificá-lo? Esse desafio envolve receber letras e números e criar formas dependendo dele.
A entrada
A entrada será na forma de (shapeIdentifier)(size)(inverter)
.
Mas o que são identificador de forma, tamanho e inversor?
O identificador de forma é o identificador do tipo de forma que você criará com *
s. A seguir estão os identificadores de forma:
s
- Quadradot
- Triângulo
O tamanho ficará entre 1-20
e é o tamanho da figura.
O inversor é se a forma ficará ou não de cabeça para baixo, indicada por a +
ou a -
. Observe: s3-
== (igual a) s3+
porque os quadrados são simétricos. No entanto t5-
,! = (Não é igual) t5+
.
O espaço em branco à direita é bom na saída, mas o espaço em branco à esquerda não é.
Exemplos de saída
Input: s3+
Output:
***
***
***
Input: t5+
Output:
*
***
*****
Input: t3-
Output:
***
*
Notas especiais
A entrada do triângulo sempre será um número ímpar; portanto, os triângulos sempre terminarão com 1 *
na parte superior.
O tamanho do triângulo é o tamanho da base se o inversor for
+
e é o tamanho da parte superior se o inversor for-
.
fonte
Respostas:
Pitão,
40363432 bytes-1 byte por @isaacg
Um ponto-e-vírgula dentro de um lambda agora é o valor global da variável lambda, um recurso que economiza um byte.
Experimente aqui .
Conjunto de teste .
fonte
qez\+
por}\+z
, porque+
só pode aparecer na última posição.Pitão, 38 bytes
Suíte de teste
Basicamente, o mais simples possível. Eu gostaria de poder combinar um pouco da lógica para as duas formas, mas atualmente é separada.
fonte
JavaScript (ES6), 142
146 147Editar 1 byte salvo thx @ETHproductions Editar 2 bytes sve thx @ user81655
Teste (executado no FireFox)
fonte
\d
->.
, já que é garantido que haja exatamente um não dígito antes e depoisi.match(/.(.+)(.)/)
->i.match`.(.+)(.)`
Python 2, 106 bytes
A saída é um retângulo perfeito, com cada linha preenchida com espaços à direita, o que eu suponho que seja bom com base nos comentários no OP.
Nota: ainda não tenho certeza se
input
é permitido no Python 2 para problemas como esses ...fonte
Japt,
6260555251 bytesExperimente online!
A primeira coisa que precisamos fazer é descobrir o tamanho da nossa forma. Isso é bem simples:
Agora, organizamos a forma da saída:
Até agora, cuidamos do tamanho e da forma da saída. Tudo o que resta é a rotação. Atualmente, os triângulos estão apontados para cima, portanto, precisamos alterá-los se o terceiro caractere for
+
:E com saída implícita, nosso trabalho aqui está concluído. :-)
fonte
Python 2,
235193167157 bytesAtualizar:
Fiz alguma otimização significativa usando compreensão de lista e str.center (). Tenho a sensação de que posso fazer um pouco mais, vou ter um novo olhar mais tarde.
Atualização 2
Guardou 10 bytes com as sugestões de Sherlock9. Muito obrigado! :)
Resposta antiga
Abordagem bastante direta. Escrevendo linha por linha em uma string que eu produzo no final. Os triângulos são sempre desenhados invertidos e revertidos, se necessário. O fato de você poder multiplicar uma string com um Inteiro me salvou muitos bytes!
Vou tentar jogar isso um pouco mais tarde, e gostaria de receber sugestões nesse meio tempo, já que ainda não sou muito experiente com isso.
edit: Joguei bastante com a ajuda dos comentários e roubando o cálculo do tamanho de uma das outras respostas em python. Eu acho que é o máximo que posso fazer com esse algoritmo.
fonte
wc
isso, obtive-me uma contagem de bytes de 235. Estou errado?raw_input
, o usoinput
economiza 4 bytes. Além disso, você não precisa dos colchetes na segunda linha, isso e não usar a variávelx
(usandoif"s"in d
) economiza mais 9 bytes.[]
colchetes em cada uma dasjoin
chamadas de função. Segundo,if d<"t"else
é mais curto e funciona porque"s3+"<"t"<"t3+"
em Python. Terceiro,else"\n".join
e.center(x)for
. Sem espaço. Não é necessário. Em quarto lugar,print o[::-1]if"+"in d else o
onde eu reorganizadas as coisas por dois bytes (um espaço entre]
eif
e outra entreif
e"+"
.JavaScript, 220 bytes.
Correr com
f(input here)
Experimente aqui!
Os quadrados têm novas linhas à direita, mas os triângulos não. Explicação:
fonte
Python 2,
157132 bytesA primeira tentativa confirmou que o
+/-
final era opcional, me livrar disso deixei-me raspar um monteA idéia aqui é fazer uma lista que pode ser lançada em uma saída genérica. A parte mais difícil foi separar o comprimento da entrada.
fonte
x=int(d[1]if len(d)<4 else d[1:3])
com d sendo a string de entrada. Isso é 5 bytes mais curto que a sua solução. Você ainda está muito à frente da minha resposta em python, precisa tentar entender o que você fez lá e vencê-lo na próxima vez! :)x=int(d[1:-1])
é muito mais curto para isso, apenas vi na outra resposta python.Retina ,
10285 bytesA contagem de bytes supõe que o código fonte seja codificado como ISO 8859-1.
Experimente online.
Vou tentar jogar isso mais tarde.
fonte
\n
vez de\r\n
. Base64 do conteúdo:XGQrCiQwJCo6wrYKXigoXHcpKyk6KDorKQokMSQyJDMkMsK2JDAKbWBzJHw6dAoKKWAoLispwrYtKFxEKikKLSQywrYkMQptYF4uCgpHYC4KVGB0czpgICo=
(cópia direta do Notepad ++). Por incrível que pareça, qualquer solução on-line me fornece 85 bytes ... Hum ...¶
. Eles são definitivamente um byte único na ISO 8859-1 (com valor 182).Sério, 54 bytes
Experimente Online
@Ego: vê isso
#dXdXεj
? STRING SLICING ????fonte
ES6,
178172159 bytesIsso funciona devido a uma observação interessante que fiz. Se você repetir
n
espaços en
asteriscos, obtém (por exemplo, paran=5
) isso:Agora, pegue substrings com o mesmo começo e comprimento:
Essas substrings são exatamente as strings que precisamos
t5
.Editar: salvou 6 bytes graças a @ edc65.
Edit: Salvo 13 bytes, graças a ocultar o
u+=v
no terceiro argumentosubstr
, permitindo-me simplificar a inicialização.fonte
t
código de manipulação descobriu-se quew
eu
tornou-se equivalente e que me salvou suficiente bytes para me levar de volta para 178![,b,c]=s.match
e mais tardes<'t'
... deve salvar alguns bytes (Firefox apenas)s
permite que eu use, os<'t'
que me salvou em 6 bytes, obrigado.MATL , 48 bytes
Usa a versão atual (10.1.0) do idioma / compilador.
O código aceita caracteres de entrada em qualquer ordem: todos
s11+
,11s+
e até1+s1
seria cadeias de entrada válidos.EDIT (30 de julho de 2016): o código vinculado substitui
1L3$)
porY)
para estar em conformidade com as alterações recentes no idiomaExperimente online!
Explicação
fonte
C, 259 bytes
destroçado
Sugestões e críticas são bem-vindas.
fonte
Ruby, 99
Calcula um quadrado ou triângulo de altura
n
e largura médian
alterando a inclinação dos lados (portanto, a largura calculada do triângulo é 2n-1 na base, 1 na ponta.) Mas ele apenas imprime as linhas que não excedem osn
caracteres.ungolfed no programa de teste
fonte
Jolf, 37 bytes, não-competitivo
Eu adicionei funções depois que esse desafio foi lançado, portanto, isso não pode ser considerado para aceitação. Isso está codificado na ISO-8859-7. Experimente todos os casos de teste aqui .
Parte 1: analisando a sequência
Parte 2: obtendo o resultado
Parte 3: invertendo o resultado
fonte