Una explicación visual común del teorema de Pitágoras es como tal:
Los cuadrados están destinados a representar el cuadrado de la longitud del lado y las áreas de a + b = c
, tal como dice el teorema de Pitágoras.
Esta parte es lo que tienes que mostrar.
Tu tarea
- Obtendrá dos enteros como entrada, destinados a representar lados
a
yb
de un triángulo rectángulo (ej.3, 4
). - A continuación, hacer cuadrados de las longitudes
a
,b
yc
fuera del#
personaje. Por ejemplo, aquí hay 3:
###
###
###
- Luego los formateará en una ecuación matemática que explica el triplete pitagórico particular:
#####
#### #####
### #### #####
### #### #####
### + #### = #####
- Observe cómo los signos
=
y+
tienen espacios en ambos lados y cómo todo está en la parte inferior. - Nunca obtendrá valores para
a
yb
eso hace quec
no sea integral. - Este es el código de golf, ¡el código más corto en bytes gana!
Casos de prueba
(vendrán más una vez que tenga tiempo, son realmente difíciles de hacer a mano)
3, 4
#####
#### #####
### #### #####
### #### #####
### + #### = #####
6, 8
##########
##########
######## ##########
######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### + ######## = ##########
4, 3
#####
#### #####
#### ### #####
#### ### #####
#### + ### = #####
5, 12
#############
############ #############
############ #############
############ #############
############ #############
############ #############
############ #############
############ #############
##### ############ #############
##### ############ #############
##### ############ #############
##### ############ #############
##### + ############ = #############
a+b=c
a
,b
yc
se definen como las áreas de los cuadrados, entonces los ejemplos son incorrectos.Respuestas:
Pyth,
35323130 bytesPruébalo en línea.
fuente
.i
para agregar las líneas en blanco en su lugar:j_.ts.i.imm*d\#d+Qs.aQ"+="mk4d
CJam, 49 bytes
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Python 2,
134100bytesPruébalo en línea.
El programa toma la entrada como números enteros separados por comas, calcula la hipotenusa utilizando los números complejos incorporados de Python, luego desciende desde ese valor calculando e imprimiendo cada línea a medida que avanza. El principal truco de golf es utilizar la indexación de cadenas en lugar de condicionales para seleccionar
#
/+
/=
vs espacio.Editar: La primera versión fue víctima de una ingeniería excesiva seria, esta es a la vez más simple y mucho más corta.
fuente
"# "[i>a]*a
lugar de hacerlo para cada variable.Julia,
121114112 bytesSin golf:
Problema solucionado y ahorró 2 bytes gracias a Glen O.
fuente
JavaScript ES6,
155134140129 bytesHe reescrito esto con
for
. Mucho golf todavía ...Si algo no funciona, avíseme. Lo arreglaré en la mañana.
Probado en Safari Nightly
Sin golf:
Explicación:
(No actualizado) pero aún lo suficientemente preciso.
MANIFESTACIÓN
La entrada de la versión ES5 debe ser un conjunto de números válido :
fuente
a
yb
eso hace quec
no sea integral".(z<b?'#':' ')
->' #'[z<b|0]
Pyth,
5149 bytesEspera entrada en el formulario
[3,4]
.Pruébalo aquí
AQ
- asigna entrada aG, H
Js.a,GH
- calcula la hipotenusa comoJ
Lj*b]*b\#;
- se definey(b)
como hacer un cuadrado de tamañob
(en otra parte del código,b
significa nueva línea)j_MCm_.[d\ Jcj[yJb\=byHb\+byG))b
- Crea los cuadrados, almohadillas con espacios y transponeGuardado dos bytes gracias a Maltysen.
fuente
.i
nterlace en lugar de todas esas listas.J
es dentro de una lambda, que se evalúa después de queJ
se usa por primera vez.*]
puede ser reemplazado conm
Rubí, 134
enfoque simple línea por línea.
A continuación, en el programa de prueba, con el símbolo cambiado a @ para ayudar a evitar la confusión con la sintaxis
#{....}
("interpolación de cadenas") utilizada para insertar expresiones en una cadena. Cada entrada debe darse en una línea diferente.fuente
a*a+b*b
debe cortar dos bytes del cálculo dec
.C, 176 bytes
C no va a ganar esto, pero la diversión lo vale.
Bastante impreso:
gcc nos permite pasar el tercer parámetro a main (una matriz de variables de entorno), por lo que lo aprovechamos para usarlo para nuestro propósito.
los
sería equivalente a
porque
scanf
devuelve el número de parámetros escaneados con éxito.fuente
PHP,
178170168 bytesLa entrada es OBTENER parámetros
x
yy
. Desafortunadamente, parece que no puedo jugar golf esas cuerdas repetitivas.$i>0
con$i
No estoy seguro de por qué a PHP no le gusta,
@echo
así que tuve que sacrificar 1 byte con@print
.En caso de que SE arruine la codificación, está destinado a codificarse en Windows-1252 (no UTF8).
fuente
echo
vsprint
. ver: stackoverflow.com/questions/7094118/…APL (Dyalog Extended) ,
3329 bytes SBCS-3 debido a mis extensiones de Dyalog APL.
Prefijo anónimo lambda:
Pruébalo en línea!
{
...}
"dfn";⍵
es el argumento (longitudes laterales)⍵*2
cuadrado+/
suma√
raíz cuadrada⍵,
argumento anterior{
...}¨
aplique la siguiente lambda anónima a cada#
espacio de nombres raíz⍕
formatear como texto⍵ ⍵⍴
utilizar argumento dos veces para r eshape en matriz con esas dimensiones.⍪
convertir en columna' ++=',
anteponer estos tres caracteres a las tres filas,
ravel (combinar filas en la lista)⍕
formatear como texto⊖
voltear al revésfuente
CJam, 78 bytes
Primero calcula la hipotenusa (H), luego, para cada lado (S), construye una matriz de líneas S hechas de:
H-S
espacios +S
guiones. Finalmente, transpone la matriz.Manifestación
fuente
Lua5.2,
257241227222 bytesio
funciones inspiradas en otra respuestafuente
Carbón de leña , 24 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Toma datos como una matriz de dos elementos. Explicación:
Agregue la hipotenusa a las entradas.
Pase el cursor sobre los caracteres que aparecen a la derecha de cada cuadrado en orden inverso.
Imprime ese personaje a la izquierda con espaciado.
Haga estallar el último número de la matriz e imprima un cuadrado de
#
s de ese tamaño.fuente
PowerShell ,
139137135 bytes-2 gracias a ASCII-only
-2 gracias a Mazzy
Pruébalo en línea!
Calcular $ c duele y probablemente haya una mejor manera de cambiar condicionalmente entre
#
y. Crea una lista de fragmentos y los une mientras agrega los signos condicionalmente.
fuente
$m=(" ","#")
: ¡ Pruébelo en línea!Japt, 28 bytes
Toma datos como una matriz de enteros.
Intentalo
fuente
05AB1E , 38 bytes
Toma la entrada como una lista de dos números (es decir
[3,4]
).Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
DnOt©)˜ε'#×y.Dðy×®y-.D)R}ø»
fue mi intento hasta que noté el+
y=
.+
y=
son de hecho responsable de la mayor parte del código. Por cierto, puedes jugar 2 bytes en tu enfoque reemplazandoDnOt©)˜
connOt©ª
, como hice en mi respuesta actual. :) Sin.D
embargo, me gusta tu uso de .Perl 6 , 99 bytes
Pruébalo en línea!
Bloque de código anónimo que toma dos números y devuelve la cadena completa con una nueva línea inicial y tres espacios iniciales y uno final en cada línea.
Si podemos usar otros caracteres en lugar de
#
, entonces puedo guardar un byte reemplazándolo'#'
con\*
.fuente
C # (.NET Core) ,
221, 194 bytesEsto se siente demasiado tiempo. Esta versión solo se repite para construir la cadena.
EDITAR: ¡Ascii-Only con un bonito golf de -27 bytes usando el constructor de cadenas para adiciones de caracteres en serie! Además, escriba para señalar que estaba usando Math.Sqrt no System.Math.Sqrt. Esto ha sido ajustado!
Pruébalo en línea!
fuente
System.Math
tampocoMath
si no está usando interactivo