Общее визуальное объяснение теоремы Пифагора таково:
Квадраты предназначены для представления квадрата длины стороны и площадей a + b = c
, как говорится в теореме Пифагора.
Эта часть - то, что вы должны показать.
Твое задание
- В качестве входных данных вы получите два целых числа, предназначенных для представления сторон
a
иb
прямоугольного треугольника (например3, 4
). - Вы будете тогда делать квадраты из длин
a
,b
иc
из#
характера. Например вот 3:
###
###
###
- Затем вы отформатируете их в математическое уравнение, которое объясняет конкретный пифагорейский триплет:
#####
#### #####
### #### #####
### #### #####
### + #### = #####
- Обратите внимание , как
=
и+
знаки имеют пробелы с обеих сторон и как все находится на дне. - Вы никогда не получите значения для,
a
иb
это делаетc
нецелым. - Это код-гольф, поэтому выигрывает самый короткий код в байтах !
Тестовые случаи
(больше, когда у меня будет время, это действительно сложно сделать вручную)
3, 4
#####
#### #####
### #### #####
### #### #####
### + #### = #####
6, 8
##########
##########
######## ##########
######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### ######## ##########
###### + ######## = ##########
4, 3
#####
#### #####
#### ### #####
#### ### #####
#### + ### = #####
5, 12
#############
############ #############
############ #############
############ #############
############ #############
############ #############
############ #############
############ #############
##### ############ #############
##### ############ #############
##### ############ #############
##### ############ #############
##### + ############ = #############
a+b=c
a
,b
иc
определяются как площади квадратов, то примеры некорректны.Ответы:
Pyth,
35323130 байтПопробуйте онлайн.
источник
.i
вместо этого добавление пустых строк:j_.ts.i.imm*d\#d+Qs.aQ"+="mk4d
CJam, 49 байтов
Попробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
Python 2,
134100 байтПопробуйте онлайн.
Программа принимает входные данные в виде целых чисел, разделенных запятыми, вычисляет гипотенузу, используя встроенные комплексные числа Python, а затем возвращается к исходному значению этого значения, вычисляя и распечатывая каждую строку по мере поступления. Основной трюк в игре в гольф заключается в использовании индексации строк вместо условий для выбора
#
/+
/=
vs пробел.Изменить: Первая версия была жертвой серьезного чрезмерного проектирования - это и проще, и намного короче.
источник
"# "[i>a]*a
вместо того, чтобы делать это для каждой переменной.Юлия,
121114112 байтUngolfed:
Исправлена проблема и сохранены 2 байта благодаря Glen O.
источник
JavaScript ES6,
155134140129 байтЯ переписал это с
for
. Много игры в гольф все еще ...Если что-то не работает, дайте мне знать. Я исправлю это утром.
Проверено на Safari Nightly
Ungolfed:
Объяснение:
(Не обновлено), но все еще достаточно точно.
DEMO
Версия ES5 Входные данные должны быть действительными наборами чисел :
источник
a
иb
что делаютc
невстроенной.»(z<b?'#':' ')
->' #'[z<b|0]
Pyth,
5149 байтОжидает ввода в форме
[3,4]
.Попробуй здесь
AQ
- назначает вход дляG, H
Js.a,GH
- рассчитывает гипотенузу какJ
Lj*b]*b\#;
- определяетy(b)
как создание квадрата размераb
(в другом месте кодаb
означает перевод строки)j_MCm_.[d\ Jcj[yJb\=byHb\+byG))b
- Создает квадраты, площадки с пробелами и транспонируетСохранено два байта благодаря Maltysen.
источник
.i
nterlace вместо всех этих списков.J
внутри лямбда, которая оценивается послеJ
первого использования.*]
можно заменитьm
Руби, 134
простой построчный подход.
Ниже в тестовой программе с символом, измененным на @, чтобы избежать путаницы с синтаксисом
#{....}
(«интерполяция строки»), используемым для вставки выражений в строку. Каждый вход должен быть указан в отдельной строке.источник
a*a+b*b
следует вырезать два байта из вычисленияc
.C 176 байт
С не собирается выиграть это, но веселье того стоит.
Довольно напечатано:
gcc позволяет нам передавать третий параметр в main (массив переменных среды), поэтому мы используем его для использования в наших целях.
The
будет эквивалентно
потому что
scanf
возвращает количество успешно отсканированных параметров.источник
PHP,
178170168 байтВвод GET параметров
x
иy
. К сожалению, я не могу играть в гольф эти повторяющиеся струны.$i>0
на$i
Не знаю, почему PHP не нравится,
@echo
поэтому пришлось пожертвовать 1 байтом@print
.В случае, если SE испортит кодировку, это должно быть закодировано в Windows-1252 (не UTF8).
источник
echo
vsprint
. see: stackoverflow.com/questions/7094118/…APL (Dyalog Extended),
3329 bytesSBCS-3 due to my extensions of Dyalog APL.
Anonymous prefix lambda:
Try it online!
{
…}
"dfn";⍵
is the argument (side lengths)⍵*2
square+/
sum√
square-root⍵,
prepend argument{
…}¨
apply the following anonymous lambda to each#
root namespace⍕
format as text⍵ ⍵⍴
use argument twice to reshape into matrix with those dimensions.⍪
make into column' ++=',
prepend these three characters to the three rows,
ravel (combine rows into list)⍕
format as text⊖
flip upside-downисточник
CJam, 78 bytes
It first computes the hypotenuse (H), then, for each side (S), it builds an array of S lines made of:
H-S
spaces +S
dashes. Finally, it transposes the matrix.Demo
источник
Lua5.2,
257241227222 bytesio
functions inspired by another answerисточник
Charcoal, 24 bytes
Try it online! Link is to verbose version of code. Takes input as an array of two elements. Explanation:
Append the hypotenuse to the inputs.
Loop over the characters that appear to the right of each square in reverse order.
Print that character leftwards with spacing.
Pop the last number from the array and print a square of
#
s of that size.источник
PowerShell,
139137135 bytes-2 thanks to ASCII-only
-2 thanks to Mazzy
Try it online!
Calculating $c hurt and there's probably a better way to conditionally swap between
#
and. Builds a list of chunks and joins them together while conditionally adding the signs.
источник
$m=(" ","#")
: Try it online!Japt, 28 bytes
Takes input as an array of integers.
Try it
источник
05AB1E, 38 bytes
Takes the input as a list of two numbers (i.e.
[3,4]
).Try it online or verify all test cases.
Explanation:
источник
DnOt©)˜ε'#×y.Dðy×®y-.D)R}ø»
was my attempt until I noticed the+
and=
.+
and=
are indeed responsible for the most part of the code. Btw, you can golf 2 bytes in your approach by replacingDnOt©)˜
withnOt©ª
, as I did in my current answer. :) I like your use of.D
, though.Perl 6, 99 bytes
Try it online!
Anonymous code block that takes two numbers and returns the full string with a leading newline and three leading spaces and one trailing on each line.
If we can use other characters instead of
#
, then I can save a byte by replacing'#'
with\*
.источник
C# (.NET Core),
221, 194 bytesThis feels way too long. This version just loops to construct the string.
EDIT: Ascii-Only with a nice -27 byte golf using the string constructor for serial char additions! Also, ty for pointing out I was using Math.Sqrt not System.Math.Sqrt. This has been adjusted!
Try it online!
источник
System.Math
notMath
if you're not using interactive