มองเห็นทฤษฎีบทพีทาโกรัสด้วยสายตา


36

คำอธิบายภาพทั่วไปของทฤษฎีบทพีทาโกรัสเป็นเช่นนี้:

3 กล่อง

สแควร์สนั้นหมายถึงการแสดงความยาวด้านของสี่เหลี่ยมจัตุรัสและพื้นที่ของa + b = cเช่นเดียวกับทฤษฎีบทพีทาโกรัสกล่าว

ส่วนนี้เป็นสิ่งที่คุณต้องแสดง

งานของคุณ

  • คุณจะได้รับจำนวนเต็มสองจำนวนเป็นอินพุตหมายถึงการแสดงด้านข้างaและbของสามเหลี่ยมมุมฉาก (เช่น3, 4)
  • จากนั้นคุณจะทำให้สี่เหลี่ยมออกจากความยาวa, bและcออกมาจาก#ตัวอักษร ตัวอย่างเช่นที่นี่คือ 3:
###
###
###
  • จากนั้นคุณจะจัดรูปแบบเหล่านี้เป็นสมการทางคณิตศาสตร์ที่อธิบายทริปพีทาโกรัสโดยเฉพาะ:
             #####
      ####   #####
###   ####   #####
###   ####   #####
### + #### = #####
  • สังเกตว่าสัญญาณ=และ+ช่องว่างมีทั้งสองด้านและทุกอย่างอยู่ด้านล่างอย่างไร
  • คุณจะไม่ได้รับความคุ้มค่าaและbนั่นก็cไม่ใช่สิ่งสำคัญ
  • นี่คือสั้นที่สุดในหน่วยไบต์ !

กรณีทดสอบ

(มาอีกครั้งเมื่อฉันมีเวลาสิ่งเหล่านี้ยากมากที่จะทำด้วยมือ)

3, 4
             #####
      ####   #####
###   ####   #####
###   ####   #####
### + #### = #####

6, 8
                    ##########
                    ##########
         ########   ##########
         ########   ##########
######   ########   ##########
######   ########   ##########
######   ########   ##########
######   ########   ##########
######   ########   ##########
###### + ######## = ##########

4, 3
             #####
####         #####
####   ###   #####
####   ###   #####
#### + ### = #####

5, 12
                       #############
        ############   #############
        ############   #############
        ############   #############
        ############   #############
        ############   #############
        ############   #############
        ############   #############
#####   ############   #############
#####   ############   #############
#####   ############   #############
#####   ############   #############
##### + ############ = #############

3
@ เครื่องหมาย "คุณจะไม่มีวันได้รับค่าสำหรับ a และ b ที่ทำให้ c ไม่รวม"
Maltysen

2
@RetoKoradi ดูพื้นที่สี่เหลี่ยม a+b=c
Maltysen

1
ถ้าa, bและcจะถูกกำหนดเป็นพื้นที่ของสี่เหลี่ยมแล้วตัวอย่างไม่ถูกต้อง
Reto Koradi

2
คุณควรเพิ่มอีกกรณีทดสอบที่ดีเช่น 5 + 12 = 13.
mbomb007

7
หมายเหตุ: นี่ไม่ใช่ "คำอธิบายภาพของทฤษฎีบทพีทาโกรัส" นี่คือทฤษฎีบทพีทาโกรัส แต่เดิมมันถูกกำหนดสูตรด้วยวิธีนี้: ทางเรขาคณิต พวกเขาไม่รู้เกี่ยวกับรากที่สองที่น่าสนใจยิ่งกว่านั้นพีธากอรัสเองก็ไม่เชื่อในการมีอยู่ของจำนวนอตรรกยะ นี่หมายความว่า Pythagoras คิดว่า sqrt (2) สามารถถูกแทนโดยการหารจำนวนเต็มสองจำนวนแน่นอน ทฤษฎีบทดั้งเดิมคือสิ่งที่เราเรียกว่า "การแสดงด้วยภาพ"
vsz

คำตอบ:



12

CJam, 49 ไบต์

" +   = "S/3/[q~_2$mh:H]_'#f*:a.*.\:+SH*f.e|zW%N*

ลองใช้ออนไลน์ในล่าม CJam

มันทำงานอย่างไร

" +   = "S/3/ e# Split at spaces, the into chunks of length 3.
              e# This pushes [["" "+" ""] ["" "=" ""]].
[             e#
  q~          e# Read and interpret all input from STDIN.
  _2$         e# Copy both integers.
  mh          e# Calculate the hypotenuse of the triangle with those catheti.
  :H          e# Save the result in H.
]             e# Collect catheti and hypotenuse in an array.
_'#f*         e# Copy and replace each length with a string of that many hashes.
:a            e# Wrap each string in an array.
.*            e# Vectorized repetition. Turns strings into square arrays.
.\            e# Interleave with the string of operators.
:+            e# Concatenate to form an array of strings.
SH*           e# Push a string of spaces of length H.
f.e|          e# Mapped vectorized logical OR; pads all strings with spaces to
              e# length H.
zW%           e# Zip and reverse; rotates the array.
N*            e# Join the strings, separating by linefeeds.

11

Python 2, 134 100 ไบต์

a,b=input()
i=c=int(abs(a+b*1j))
while i:print"# "[i>a]*a," +"[i<2],"# "[i>b]*b," ="[i<2],"#"*c;i-=1

ลองออนไลน์

โปรแกรมใช้อินพุตเป็นจำนวนเต็มคั่นด้วยเครื่องหมายจุลภาคคำนวณด้านตรงข้ามมุมฉากโดยใช้ตัวเลขที่ซับซ้อนในตัวของ Python จากนั้นวนซ้ำลงมาจากค่าที่คำนวณและพิมพ์แต่ละบรรทัดตามที่ไป เคล็ดลับการเล่นกอล์ฟหลักคือการใช้การจัดทำดัชนีสตริงแทน conditionals เพื่อเลือก#/ +/ =vs space

แก้ไข:รุ่นแรกเป็นเหยื่อของการ over-engineering ร้ายแรงบางอย่าง - อันนี้ง่ายและสั้นกว่ามาก


ฉันเพิ่งได้สิ่งเดียวกันโดยใช้เวลาสักครู่เพื่อตระหนักว่ามันสั้นกว่าที่จะทำซ้ำ"# "[i>a]*aแทนที่จะทำเพื่อตัวแปรแต่ละตัว
xnor

11

Julia, 121 114 112 ไบต์

f(a,b)=for i=1:(c=isqrt(a^2+b^2)) g(x,t)=(i>c-x?"#":" ")^x*(i<c?"  ":t)" ";println(g(a," +")g(b," =")g(c,""))end

Ungolfed:

function f(a,b)
    # Compute the hypotenuse length
    c = isqrt(a^2 + b^2)

    # Write the lines in a loop
    for i = 1:c
        # Make a function for constructing the blocks
        g(x,t) = (i <= c - x ? " " : "#")^x * (i < c ? "  " : t) " "

        println(g(a," +") g(b," =") g(c,""))
    end
end

แก้ไขปัญหาและบันทึก 2 ไบต์ด้วย Glen O


11

JavaScript ES6, 155 134 140 129 ไบต์

(n,m)=>eval("for(o='',q=(b,s)=>' #'[z<b|0].repeat(b)+(z?'   ':s),z=i=Math.hypot(n,m);z--;)o+=q(n,' + ')+q(m,' = ')+q(i,'')+`\n`")

forผมเคยเขียนใหม่นี้กับ ยังมีสนามกอล์ฟจำนวนมาก ...

หากบางสิ่งไม่ทำงานแจ้งให้เราทราบ ฉันจะแก้ไขในตอนเช้า

ทดสอบบน Safari Nightly แล้ว

Ungolfed:

(n,m)=>
   Array(
     z=Math.hypot(n,m)
   ).fill()
   .map((l,i)=>
      (q=(j,s)=>
        (z-i<=j?'#':' ')
        .repeat(j)+
         (z-i-1?' ':s)
      )
      (n,`+`)+
      q(m,`=`)+
      q(z,'')
   ).join`
   `

คำอธิบาย:

(ไม่อัปเดต) แต่ก็ยังแม่นยำพอ

(n,m)=> // Function with two arguments n,m
   Array( // Create array of length...
    z=Math.hypot(n,m) // Get sqrt(n^2+m^2) and store in z
   ).fill() // Fill array so we can loop
   .map((l,i) => // Loop z times, take l, and i (index)
     (q=j=>( // Create function q with argument j
      z-i<=j? // If z-i is less than or equal to j...
        '#' // Use '#'
      : // OR
        ' ' // Use space
      ).repeat(j) // Repeat the character j times
     )(n) // Run with n
   + // Add to string
   ` ${ // Space
      (b=z-i-1)? // If this isn't the last line...
       ' ' // Return ' '
      : // Otherwise
       '+' // Plus
    } ${ // Space
      q(m) // run function q with arg m
    } ${ // Space
      b? // If b
       ' ' // Return space
      : // Otherwise
        '=' // '='
    }` + // Add to...
    '#'.repeat(z) // Repeat hashtag, z times
  ).join` // Join the new array with new lines
  `

การสาธิต

รุ่น ES5 การป้อนข้อมูลต้องเป็นชุดตัวเลขที่ถูกต้อง :

function _taggedTemplateLiteral(e,t){return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var _templateObject=_taggedTemplateLiteral(["\n"],["\n"]),t=function(e,t){return Array(z=Math.sqrt(e*e+t*t)).fill().map(function(r,n){return(q=function(e,t){return(z-n<=e?"#":" ").repeat(e)+(z-n-1?" ":t)})(e,"+")+q(t,"=")+q(z,"")}).join(_templateObject)};
// Demo
document.getElementById('go').onclick=function(){
  document.getElementById('output').innerHTML = t(+document.getElementById('input').value,
                                                 +document.getElementById('input2').value)
};
<div style="padding-left:5px;padding-right:5px;"><h2 style="font-family:sans-serif">Visually Explaining the Pythagorean Theorem</h2><div><div  style="background-color:#EFEFEF;border-radius:4px;padding:10px;"><input placeholder="Number 1" style="resize:none;border:1px solid #DDD;" id="input"><input placeholder="Number 2" style="resize:none;border:1px solid #DDD;" id="input2"><button id='go'>Run!</button></div><br><div style="background-color:#EFEFEF;border-radius:4px;padding:10px;"><span style="font-family:sans-serif;">Output:</span><br><pre id="output" style="background-color:#DEDEDE;padding:1em;border-radius:2px;overflow-x:auto;"></pre></div></div></div>


2
+1 แต่มีปัญหาเล็ก ๆ ตามที่ OP บอกว่า: "สังเกตว่าเครื่องหมาย = และ + มีช่องว่างทั้งสองด้านและทุกอย่างอยู่ด้านล่างอย่างไร"
Léo Lam

1
ตัวอย่างไม่ทำงานบน Firefox 40.0.3 (Windows 7x64 SP1)
Ismael Miguel

1
ตัวอย่างไม่ทำงานใน Chromium 44 Linux x64
Nenotlep

2
@IsmaelMiguel กรณีหลังเหล่านี้ไม่จำเป็นต้องจัดการอย่างถูกต้อง แต่: "คุณจะไม่มีวันได้รับค่านิยมaและbนั่นcไม่ใช่สิ่งสำคัญ"
DLosc

2
+1 ดีใช้ eval คำแนะนำ: (z<b?'#':' ')->' #'[z<b|0]
edc65

7

Pyth, 51 49 ไบต์

AQJs.aQLj*b]*b\#;j_MCm_.[d\ Jcj[yJb\=byHb\+byG))b

[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


ฉันไม่รู้ว่าโค้ดของคุณทำอะไร แต่ฉันค่อนข้างมั่นใจว่าจะได้ประโยชน์จาก.interlace แทนที่จะเป็นรายการทั้งหมด
Maltysen

@Maltysen สำหรับความคิดเห็นสุดท้ายของคุณจริง ๆ แล้วฉันไม่สามารถทำได้เพราะการปรากฏตัวครั้งแรกของJภายในแลมบ์ดาซึ่งได้รับการประเมินหลังจาก Jมีการใช้งานครั้งแรก
Ypnypn

อาไม่เห็นว่า อีกสิ่งหนึ่ง: *]สามารถแทนที่ด้วยm
Maltysen

3

ทับทิม, 134

->a,b{c=((a**2+b**2)**0.5).round
c.times{|i|
d=i<c-1?'  ':'+='
puts (c-i>a ?' ':?#)*a+" #{d[0]}  #{(c-i>b ?' ':?#)*b} #{d[1]} "+?#*c}}

เส้นเรียบง่ายโดยวิธีการสาย

ด้านล่างในโปรแกรมทดสอบโดยเปลี่ยนสัญลักษณ์เป็น @ เพื่อช่วยหลีกเลี่ยงการสับสนกับไวยากรณ์#{....}("การประมาณค่าสตริง") ที่ใช้ในการแทรกนิพจน์ลงในสตริง แต่ละอินพุตควรได้รับในบรรทัดที่แตกต่างกัน

f=->a,b{c=((a**2+b**2)**0.5).round
c.times{|i|
d=i<c-1?'  ':'+='
puts (c-i>a ?' ':?@)*a+" #{d[0]}  #{(c-i>b ?' ':?@)*b} #{d[1]} "+?@*c}}

A=gets.to_i
B=gets.to_i
f.call(A,B)

ฉันไม่รู้ว่า Ruby แต่ฉันเดาว่านี่จะสั้นกว่านี้เพราะโซลูชันของ Ruby มักจะเอาชนะ Python ได้ (จากประสบการณ์ของฉัน) สำหรับ starters, ควรจะตัดไบต์ที่สองจากการคำนวณของa*a+b*b c
DLosc

3

C, 176 ไบต์

C จะไม่ชนะสิ่งนี้ แต่ความสนุกมันคุ้มค่า

#define A(x,y)for(j=x;j--;)putchar("# "[i+1>x]);printf(i?"   ":" "#y" ");
i;j;main(a,b,c){for(c=scanf("%d %d",&a,&b);a*a+b*b>c*c;c++);for(i=c;i--;puts("")){A(a,+)A(b,=)A(c,)}}

พิมพ์สวย:

#define A(x,y)for(j=x;j--;)putchar("# "[i+1>x]);printf(i?"   ":" "#y" ");
i;j;
main(a,b,c)
{
    for(c=scanf("%d %d",&a,&b);a*a+b*b>c*c;c++);
    for(i=c;i--;puts(""))
    {
        A(a,+)
        A(b,=)
        A(c,)
    }
}

gcc ช่วยให้เราสามารถส่งพารามิเตอร์ที่สามไปยัง main (อาเรย์ของตัวแปรสภาพแวดล้อม) ดังนั้นเราจึงใช้ประโยชน์จากมันเพื่อใช้ในวัตถุประสงค์ของเรา

The

for(c=scanf("%d %d",&a,&b);a*a+b*b>c*c++;);

จะเทียบเท่า

scanf("%d %d",&a,&b);
for(c=2;a*a+b*b>c*c++;);

เนื่องจากscanfคืนค่าจำนวนพารามิเตอร์ที่สแกนสำเร็จ


2

PHP, 178 170 168 ไบต์

การป้อนข้อมูลเป็น GET พารามิเตอร์และx yน่าเสียดายที่ฉันไม่สามารถเล่นสตริงซ้ำเหล่านั้นได้

<?php for(@$i=$z=hypot($x=$_GET[x],$y=$_GET[y]),@$s=str_repeat;$i;$i--)@print$s($i<=$x?~Ü:~ß,$x).(($l=$i==1)?~ßÔß:~ßßß).$s($i<=$y?~Ü:~ß,$y).($l?~ßÂß:~ßßß).$s(~Ü,$z).~õ;
  • บันทึก 8 ไบต์ด้วยการย้อนกลับสตริงทั้งหมดของฉันและลบเครื่องหมายคำพูด
  • บันทึก 2 ไบต์โดยแทนที่เงื่อนไข$i>0ด้วย$i

ไม่แน่ใจว่าทำไม PHP ไม่ชอบ@echoเพื่อให้ฉันได้เสียสละ 1 @printไบต์ด้วย

ในกรณีที่ SE เพิ่มการเข้ารหัสหมายถึงการเข้ารหัสใน Windows-1252 (ไม่ใช่ UTF8)



อ่านั่นสมเหตุสมผลแล้ว ขอบคุณ!
DankMemes

2

APL (Dyalog Extended) , 33 29 ไบต์SBCS

-3 เนื่องจากส่วนขยายของ Dyalog APL ของฉัน

คำนำหน้าไม่ระบุชื่อแลมบ์ดา:

{⊖⍕,' +=',⍪{⍵ ⍵⍴⍕#}¨⍵,√+/⍵*2}

ลองออนไลน์!

{} "dfn"; คืออาร์กิวเมนต์ (ความยาวด้าน)

⍵*2 สี่เหลี่ยม

+/ รวม

 รากที่สอง

⍵, อาร์กิวเมนต์เสริมหน้า

{ ใช้แลมบ์ดานิรนามต่อไปนี้กับแต่ละคน

  # รูทเนมสเปซ

   จัดรูปแบบเป็นข้อความ

  ⍵ ⍵⍴ ใช้อาร์กิวเมนต์สองครั้งเพื่อr eshape ลงในเมทริกซ์ด้วยมิติเหล่านั้น

 ทำให้เป็นคอลัมน์

' ++=', เพิ่มอักขระสามตัวนี้ลงในสามแถว

, ravel (รวมแถวเข้าในรายการ)

 จัดรูปแบบเป็นข้อความ

 พลิกคว่ำ


1

CJam, 78 ไบต์

q~_2f#~+mQ+ee_2=~e>f{\~@1$-S*\'#*+_'#e=\a*_0=,S*@"+= "=1$,(S*\+1$a\a@a+++~}zN*

ก่อนอื่นจะคำนวณด้านตรงข้ามมุมฉาก (H) จากนั้นสำหรับแต่ละด้าน (S) จะสร้างอาร์เรย์ของเส้น S ที่ทำจาก: H-Sช่องว่าง +Sขีดกลาง ในที่สุดมันจะสลับเมทริกซ์

การสาธิต


1

Lua5.2, 257 241 227 222 ไบต์

r=io.read
a=r"*n"b=r"*n"c=math.sqrt(a^2+b^2)d=a+b
w=io.write
for i=1,c do
for j=0,d+c+5 do
w((j>d+5 or(i>c-b and j>a+2 and j<d+3)or(i>c-a and j<a))and"#"or(i==c and(j==a+1 and"+"or(j==d+4 and"="or" "))or" "))end
w"\n"end
  • แก้ไข 1: การอ่านแบบง่าย
  • แก้ไข 2: ลบช่องว่างเพิ่มเติมออก
  • Edit3: นามแฝงของioฟังก์ชั่นแรงบันดาลใจจากคำตอบอื่น

1

ถ่าน 24 ไบต์

⊞θ₂ΣXθ²F =+«←←←ι←G↑←↓⊟θ#

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด รับอินพุตเป็นอาร์เรย์ของสององค์ประกอบ คำอธิบาย:

⊞θ₂ΣXθ²

ผนวกด้านตรงข้ามมุมฉากเข้ากับอินพุต

F =+«

วนรอบอักขระที่ปรากฏทางด้านขวาของแต่ละช่องในลำดับย้อนกลับ

←←←ι←

พิมพ์อักขระนั้นไปทางซ้ายด้วยระยะห่าง

G↑←↓⊟θ#

ป๊อปตัวเลขสุดท้ายจากอาร์เรย์และพิมพ์สแควร์ของ#ขนาดนั้น


1
@KevinCruijssen Whoa ช่างเป็นผู้กำกับดูแล! ควรได้รับการแก้ไขแล้ว
Neil

1

PowerShell , 139 137 135 ไบต์

-2 ขอบคุณ ASCII-only
-2 ขอบคุณ Mazzy

param($a,$b)($c=[math]::sqrt($a*$a+$b*$b))..1|%{(($m=" ","#")[$_-le$a]*$a)," +"[$_-eq1],($m[$_-le$b]*$b)," ="[$_-eq1],("#"*$c)-join" "}

ลองออนไลน์!

คำนวณ $ คเจ็บและอาจมีวิธีที่ดีกว่าการแลกเปลี่ยนเงื่อนไขระหว่างและ# สร้างรายการของชิ้นและรวมเข้าด้วยกันในขณะที่เพิ่มสัญญาณตามเงื่อนไข


1
มีเครื่องหมายวงเล็บซ้ำซ้อนใน$m=(" ","#"): ลองออนไลน์!
mazzy

@mazzy Ha ha,
whoops

0

Japt, 28 ไบต์

รับอินพุตเป็นอาร์เรย์ของจำนวนเต็ม

pUx²¬)ËÆDç'#
í"+="¬ûR3)c ·z3

ลองมัน

                    :Implicit input of array U=[a,b]
pUx²¬)ËÆDç'#
p                   :Push
 U ²                :  Square each element in U
  x                 :  Reduce by addition
    ¬               :  Square root
     )              :End push
      Ë             :Map each D
       Æ            :  Map the range [0,D)
        Dç'#        :    Repeat "#" D times
í"+="¬ûR3)c ·z3
í                   :Interleave
 "+="¬              :  Split the string "+=" to an array of characters
      û             :  Centre pad each
       R3           :    With newlines to length 3
         )          :End interleave
          c         :Flatten
            ·       :Join with newlines
             z3     :Rotate clockwise 270 degrees

0

05AB1E , 38 ไบต์

nOtª©Å10ζíε„ #yè®Rׄ= NĀèð.øý}»R„=+`.;

รับอินพุตเป็นรายการของตัวเลขสองตัว (เช่น[3,4])

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

n             # Take the square of each value in the (implicit) input-list
              #  i.e. [3,4] → [9,16]
 O            # Take the same of that list
              #  i.e. [9,16] → 25
  t           # Take the square-root of that sum
              #  i.e. 25 → 5.0
   ª          # Append it to the (implicit) input-list
              #  i.e. [3,4] and 5.0 → [3,4,5.0]
    ©         # Store it in the register (without popping)
Å1            # Change each value to an inner list of that amount of 1s
              #  i.e. [3,4,5.0] → [[1,1,1],[1,1,1,1],[1,1,1,1,1]]
  0ζ          # Zip/transpose; swapping rows/columns, with "0" as filler
              #  i.e. [[1,1,1],[1,1,1,1],[1,1,1,1,1]]
              #   → [[1,1,1],[1,1,1],[1,1,1],["0",1,1],["0","0",1]]
    í         # Reverse each inner list
              #  i.e. [[1,1,1],[1,1,1],[1,1,1],["0",1,1],["0","0",1]]
              #   → [[1,1,1],[1,1,1],[1,1,1],[1,1,"0"],[1,"0","0"]]
ε         }   # Map the inner lists to:
  #          #  Push string " #"
    yè        #  Index each inner list value into this string
              #   i.e. " #" and [1,1,"0"] → ["#","#"," "]
      ®R      #  Push the list from the register
        ×     #  Repeat the character that many times
              #   i.e. ["#","#"," "] and [5.0,4,3] → ["#####","####","   "]
 „=           #  Push string "= "
   NĀ         #  Push the map-index trutified (0 remains 0; everything else becomes 1)
              #   i.e. 0 → 0
              #   i.e. 3 → 1
     è        #  Use it to index into the string
              #   i.e. "= " and 0 → "="
              #   i.e. "= " and 1 → " "
      ð.ø     #  Surround it with spaces
              #   i.e. "=" → " = "
              #   i.e. " " → "   "
         ý    #  Join the map-list together with this string as delimiter
              #   i.e. ["#####","####","   "] and "   " → "#####   ####      "
»             # After the map, join everything by newlines
              #  i.e. ["##### = #### = ###","#####   ####   ###","#####   ####   ###","#####   ####      ","#####             "]
              #   → "##### = #### = ###\n#####   ####   ###\n#####   ####   ###\n#####   ####      \n#####             "
 R            # Reverse the string
              #  i.e. "##### = #### = ###\n#####   ####   ###\n#####   ####   ###\n#####   ####      \n#####             "
              #   → "             #####\n      ####   #####\n###   ####   #####\n###   ####   #####\n### = #### = #####"
  „=+`.;      # And replace the first "=" with "+"
              #  i.e. "             #####\n      ####   #####\n###   ####   #####\n###   ####   #####\n### = #### = #####"
              #   → "             #####\n      ####   #####\n###   ####   #####\n###   ####   #####\n### + #### = #####"
              # (and output the result implicitly)

DnOt©)˜ε'#×y.Dðy×®y-.D)R}ø»เป็นความพยายามของฉันจนกว่าผมสังเกตเห็นและ+ =
Magic Octopus Urn

@MagicOctopusUrn Yeah ทั้งสามช่องว่างและ+และ=มีความรับผิดชอบส่วนใหญ่ของรหัส Btw คุณสามารถเล่นกอล์ฟ 2 ไบต์ในวิธีการของคุณโดยแทนที่DnOt©)˜ด้วยnOt©ªเช่นเดียวกับที่ฉันทำในคำตอบปัจจุบันของฉัน :) ฉันชอบการใช้งานของ.Dคุณ
Kevin Cruijssen

0

Perl 6 , 99 ไบต์

{$!=sqrt $^a²+$^b²;flip map({map {[' ','#'][$^d>$_]x$d,' =+ '.comb[!$_*++$ ]},$!,$b,$a},^$!)X"
"}

ลองออนไลน์!

บล็อกโค้ดแบบไม่ระบุชื่อที่ใช้ตัวเลขสองตัวและส่งคืนสตริงเต็มด้วยการขึ้นบรรทัดใหม่ชั้นนำและช่องว่างชั้นนำสามช่อง

ถ้าเราสามารถใช้ตัวละครอื่น ๆ แทน#แล้วฉันสามารถบันทึกไบต์โดยการแทนที่ด้วย'#'\*


0

C # (. NET Core) , 221 , 194 ไบต์

นี่รู้สึกนานเกินไป รุ่นนี้เป็นเพียงลูปเพื่อสร้างสตริง

แก้ไข: Ascii-Only กับสนามกอล์ฟขนาด 27 ไบต์โดยใช้ตัวสร้างสตริงสำหรับการเพิ่มถ่านอนุกรม! นอกจากนี้ฉันยังใช้ Math.Sqrt ไม่ใช่ System.Math.Sqrt สิ่งนี้ถูกปรับแล้ว!

(a,b)=>{int c=(int)System.Math.Sqrt(a*a+b*b),j=c;var s="";while(j>0)s+=new string(j>a?' ':'#',a)+(j>1?"   ":" + ")+new string(j>b?' ':'#',b)+(j-->1?"   ":" = ")+new string('#',c)+"\n";return s;}

ลองออนไลน์!


1
โปรดจำไว้ว่าไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคตอนจบและSystem.Mathไม่ใช่Mathหากคุณไม่ได้ใช้แบบโต้ตอบ
ASCII- เท่านั้น



สิ่งหนึ่งที่ฉันจะลบทั้งหมดโดยใช้คำสั่งเพื่อให้แน่ใจว่าฉันไม่ได้ทำผิด
ASCII เท่านั้น

1
โอ้และเนื่องจากคุณไม่ได้มีรุ่นที่สามอีกต่อไปฉันไม่คิดว่าคุณควรพูดถึงมันอีกต่อไป
ASCII-only
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.