Uma explicação visual comum do teorema de Pitágoras é a seguinte:
Os quadrados devem representar o comprimento do lado ao quadrado e as áreas de a + b = c
, exatamente como o teorema de Pitágoras diz.
Esta parte é o que você tem que mostrar.
Sua tarefa
- Você receberá dois números inteiros como entrada, destinados a representar lados
a
eb
um triângulo retângulo (ex.3, 4
). - Você vai então fazer quadrados fora dos comprimentos
a
,b
ec
fora do#
personagem. Por exemplo, aqui está 3:
###
###
###
- Você irá formatá-los em uma equação matemática que explica o trigêmeo pitagórico específico:
#####
#### #####
### #### #####
### #### #####
### + #### = #####
- Observe como os sinais
=
e+
têm espaços nos dois lados e como tudo está no fundo. - Você nunca obterá valores para
a
eb
quec
não sejam integrais. - Este é o código-golfe, pelo que o código mais curto em bytes vence!
Casos de teste
(mais chegando quando eu tiver tempo, é muito difícil de fazer à mão)
3, 4
#####
#### #####
### #### #####
### #### #####
### + #### = #####
6, 8
##########
##########
######## ##########
######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### + ######## = ##########
4, 3
#####
#### #####
#### ### #####
#### ### #####
#### + ### = #####
5, 12
#############
############ #############
############ #############
############ #############
############ #############
############ #############
############ #############
############ #############
##### ############ #############
##### ############ #############
##### ############ #############
##### ############ #############
##### + ############ = #############
a+b=c
a
,b
ec
são definidas como as áreas dos quadrados, os exemplos estão incorretos.Respostas:
Pyth,
35323130 bytesExperimente online.
fonte
.i
para adicionar as linhas em branco em vez disso:j_.ts.i.imm*d\#d+Qs.aQ"+="mk4d
CJam, 49 bytes
Experimente online no intérprete CJam .
Como funciona
fonte
Python 2,
134100 bytesExperimente online.
O programa recebe a entrada como números inteiros separados por vírgula, calcula a hipotenusa usando os números complexos internos do Python e, em seguida, desce desse valor calculando e imprimindo cada linha à medida que avançam. O principal truque do golfe é usar a indexação de cordas no lugar de condicionais para selecionar
#
/+
/=
vs espaço.Edit: A primeira versão foi vítima de um excesso de engenharia grave - esta é mais simples e muito mais curta.
fonte
"# "[i>a]*a
vez de fazê-lo para cada variável.Julia,
121114112 bytesUngolfed:
Corrigido o problema e economizamos 2 bytes graças a Glen O.
fonte
JavaScript ES6,
155134140129 bytesEu reescrevi isso com
for
. Muito golfe ainda ...Se algo não estiver funcionando, me avise. Vou consertar de manhã.
Testado no Safari Nightly
Ungolfed:
Explicação:
(Não atualizado), mas ainda preciso o suficiente.
DEMO
Versão ES5 A entrada deve ser um conjunto válido de números :
fonte
a
eb
isso tornac
não integral".(z<b?'#':' ')
->' #'[z<b|0]
Pitão,
5149 bytesEspera entrada no formulário
[3,4]
.Experimente aqui
AQ
- atribui entrada paraG, H
Js.a,GH
- calcula a hipotenusa comoJ
Lj*b]*b\#;
- definey(b)
como fazer um quadrado de tamanhob
(em outra parte do código,b
significa nova linha)j_MCm_.[d\ Jcj[yJb\=byHb\+byG))b
- Cria quadrados, almofadas com espaços e transpõeEconomizou dois bytes graças a Maltysen.
fonte
.i
nterlace em vez de todas essas listas.J
está dentro de um lambda, que é avaliada depois queJ
é usada pela primeira vez.*]
pode ser substituído porm
Ruby, 134
abordagem simples linha a linha.
Abaixo no programa de teste, com o símbolo alterado para @ para ajudar a evitar confusões com a sintaxe
#{....}
("interpolação de string") usada para inserir expressões em uma string. Cada entrada deve ser fornecida em uma linha diferente.fonte
a*a+b*b
deve cortar dois bytes do cálculo dec
.C, 176 bytes
C não vai ganhar isso, mas a diversão vale a pena.
Bonito impresso:
O gcc nos permite passar o terceiro parâmetro para main (uma matriz de variáveis de ambiente), então aproveitamos para usá-lo para nosso propósito.
o
seria equivalente a
porque
scanf
retorna o número de parâmetros varridos com sucesso.fonte
PHP,
178170168 bytesA entrada é parâmetros GET
x
ey
. Infelizmente, não consigo jogar golfe aquelas cordas repetidas.$i>0
por$i
Não sei por que o PHP não gosta,
@echo
então tive que sacrificar 1 byte@print
.Caso o SE estrague a codificação, isso deve ser codificado no Windows-1252 (não no UTF8).
fonte
echo
vsprint
. Veja: stackoverflow.com/questions/7094118/…APL (Dyalog Extended) ,
3329 bytes SBCS-3 devido às minhas extensões do Dyalog APL.
Prefixo anônimo lambda:
Experimente online!
{
...}
"dfn";⍵
é o argumento (comprimentos laterais)⍵*2
quadrado+/
soma√
raiz quadrada⍵,
argumento precedente{
…}¨
Aplique a seguinte lambda anônima a cada#
espaço para nome raiz⍕
formatar como texto⍵ ⍵⍴
usar argumento duas vezes para r eshape em matriz com essas dimensões.⍪
transformar em coluna' ++=',
coloque esses três caracteres nas três linhas,
ravel (combinar linhas na lista)⍕
formatar como texto⊖
virar de cabeça para baixofonte
CJam, 78 bytes
Primeiro calcula a hipotenusa (H) e, em seguida, para cada lado (S), constrói uma matriz de S linhas feitas de:
H-S
spaces +S
traços. Finalmente, transpõe a matriz.Demo
fonte
Lua5.2,
257241227222 bytesio
funções inspiradas em outra respostafonte
Carvão , 24 bytes
Experimente online! Link é a versão detalhada do código. Recebe entrada como uma matriz de dois elementos. Explicação:
Anexe a hipotenusa às entradas.
Passe os caracteres que aparecem à direita de cada quadrado na ordem inversa.
Imprima esse caractere para a esquerda com espaçamento.
Retire o último número da matriz e imprima um quadrado de
#
s desse tamanho.fonte
PowerShell ,
139137135 bytes-2 graças a ASCII-apenas
-2 graças a Mazzy
Experimente online!
Calcular $ c doeu e provavelmente existe uma maneira melhor de trocar condicionalmente entre
#
e. Constrói uma lista de pedaços e os une enquanto adiciona condicionalmente os sinais.
fonte
$m=(" ","#")
: Experimente online!Japonês, 28 bytes
Recebe a entrada como uma matriz de números inteiros.
Tente
fonte
05AB1E , 38 bytes
Toma a entrada como uma lista de dois números (ou seja
[3,4]
).Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
DnOt©)˜ε'#×y.Dðy×®y-.D)R}ø»
foi minha tentativa até que notei o+
e=
.+
e=
são, de facto responsável pela maior parte do código. Aliás, você pode jogar 2 bytes na sua abordagem substituindoDnOt©)˜
pornOt©ª
, como fiz na minha resposta atual. :) Eu gosto do seu uso.D
, no entanto.Perl 6 , 99 bytes
Experimente online!
Bloco de código anônimo que recebe dois números e retorna a cadeia completa com uma nova linha principal e três espaços principais e um à direita em cada linha.
Se pudermos usar outros caracteres em vez de
#
, posso salvar um byte substituindo'#'
por\*
.fonte
C # (.NET Core) ,
221, 194 bytesIsso parece muito longo. Esta versão apenas faz um loop para construir a string.
EDIT: ASCII-Only com um bom golfe de -27 bytes usando o construtor de strings para adições de caracteres em série! Além disso, digite ty para apontar que eu estava usando Math.Sqrt e não System.Math.Sqrt. Isso foi ajustado!
Experimente online!
fonte
System.Math
nãoMath
se você não estiver usando o modo interativo