หอไอเฟล: สร้าง "A" ขนาดใหญ่จาก "A" s


20

สร้างฟังก์ชั่นที่ได้รับหมายเลขของสายทำให้nbigA

  • แถบแนวนอนของbigAต้องอยู่ที่แถวกลางหรือด้านล่างของทั้งสองถ้าnเท่ากัน
  • สมมติว่าเป็นฟอนต์ monospace สำหรับเอาต์พุต

เอาต์พุตควรเป็นสตริง (หรือที่คล้ายกันเช่นอาร์เรย์อักขระ) ที่มีการแบ่งบรรทัดที่ชัดเจนเพื่อแยกบรรทัดและมีช่องว่างที่ถูกต้องสำหรับการแพ็ดซ้าย (คุณสามารถถือว่า \ t เป็น 4 ช่องว่าง) อาจมีช่องว่างใด ๆ ทางด้านขวา

ตัวอย่าง

n = 1

A

n = 2

 A
AAA

n = 3

  A
 AAA
A   A

n = 4

   A
  A A
 AAAAA
A     A

n = 5

    A
   A A
  AAAAA
 A     A
A       A

สิ่งนี้ได้รับแรงบันดาลใจจากการสร้าง "H" จาก "H" ที่เล็กลง


ฉันขอเพิ่มช่องว่างทางด้านขวาได้ไหม นอกจากนี้ยังขึ้นบรรทัดใหม่ต่อท้ายได้รับอนุญาตหรือไม่
Bubbler

@ Bubbler ช่องว่างใด ๆ ทางด้านขวานั้นใช้ได้ไม่มีการขึ้นบรรทัดใหม่ แต่อย่างใด
Budd

เราได้รับอนุญาตให้ส่งคืนอาร์เรย์อักขระ 2D แทนที่จะเป็นสตริงหรือไม่ (คำใบ้: โดยปกติแล้วจะแนะนำให้ใช้งานได้ทุกประเภท)
Olivier Grégoire

1
@ OlivierGrégoireแน่นอนตราบใดที่มีการแบ่งที่ชัดเจนสำหรับบรรทัด (เช่นองค์ประกอบ "\ n", อาร์เรย์ที่ซ้อนกัน)
Budd

1
@ พระวรสารนักบุญไม่ที่เอาชนะความจริงนี้
Budd

คำตอบ:


12

05AB1E , 13 ไบต์

รหัส:

Ð;î¹)'A1376SΛ

ใช้การเข้ารหัส05AB1E ลองออนไลน์!

คำอธิบาย:

Ð                  # Triplicate the input.
 ;î                # Compute ceiling(n / 2).
   ¹               # Push the first input again.
    )              # Wrap into an array. For input 7, this would result in:
                     [7, 7, 4, 7].
     'A            # Push the character 'A'
       1376S       # Push the array [1, 3, 7, 6]. These are the directions of the canvas.
                     This essentially translates to [↗, ↘, ↖, ←].
            Λ      # Write to canvas using the previous three parameters.

ผ้าใบ

ฉันควรจะบันทึกภาพผืนผ้าใบอีกเล็กน้อย (และฟังก์ชั่นอื่น ๆ อีกมากมาย) แต่โดยรวมแล้วมันสรุป Canvas มี 'โหมด' ที่แตกต่างกันตามประเภทของพารามิเตอร์ที่กำหนด คำสั่งผ้าใบมีสามพารามิเตอร์: <ยาว> <สตริง> <ทิศทาง>

เนื่องจากพารามิเตอร์ความยาวและทิศทางเป็นรายการจึง 'ซิป' รายการเหล่านี้เพื่อสร้างชุดคำสั่งที่จะดำเนินการ พารามิเตอร์สตริงเป็นเพียงตัวอักษรAดังนั้นนี่คืออักขระเติมที่ใช้โดยคำแนะนำทั้งหมด Canvas ตีความว่านี่เป็นชุดคำสั่งต่อไปนี้ (สำหรับอินพุต 7):

  • ลากเส้นความยาว7ด้วยสตริงAในทิศทาง
  • ลากเส้นความยาว7ด้วยสตริงAในทิศทาง
  • ลากเส้นความยาว4ด้วยสตริงAในทิศทาง
  • ลากเส้นความยาว7โดยใช้สตริงAในทิศทาง

คำแนะนำจะถูกแปลในลักษณะต่อไปนี้:

7   0   1
  ↖ ↑ ↗
6 ← X → 2
  ↙ ↓ ↘
5   4   3

หากไม่มีการแสดงผลใด ๆ 05AB1E จะแสดงผลลัพธ์แบบ Canvas โดยอัตโนมัติ


1
ขอบคุณมากสำหรับคำอธิบายผืนผ้าใบนี่เป็นคุณสมบัติที่ยอดเยี่ยม :-)
Kaldo

TIL เพิ่มขึ้นสามเท่าเป็นคำ
Quintec

@ thecoder16 quadruplicate, quintuplicate, ... , decuplicate
Magic Octopus Urn

ว้าว. ฉันสงสัยว่าไม่ได้ทำซ้ำ แต่มันมีอยู่ตามที่คนอื่นทำ แน่นอนว่าเรามีคำที่ไร้ประโยชน์เช่นในภาษาอังกฤษ xD
Quintec

1
@KevinCruijssen เฮ้ขอโทษสำหรับการตอบกลับทั้งหมดมันยุ่งมาก ๆ สำหรับฉันในช่วงสองสามสัปดาห์ที่ผ่านมา (ฉันทำได้แค่นอน 8 ชั่วโมงใน 72 ชั่วโมงสุดท้าย) ดังนั้นฉันคิดว่าฉันไม่สามารถทำได้ มีอะไรตอนนี้ แต่อย่าลังเลที่จะเพิ่มลงในหน้าเคล็ดลับหากคุณต้องการ
Adnan

6

Charcoal , 17 15 ไบต์

NθP×θAM⊘θ↗P^×θA

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

Nθ

อินพุต nอินพุต

P×θA

พิมพ์แถบแนวนอนของใหญ่ Aพิมพ์แถบแนวนอนขนาดใหญ่(สำหรับตัวเลขที่เท่าn+1กันส่วนที่ซ้อนทับด้านขวาอยู่ดี)

M⊘θ↗

ย้ายไปด้านบนของใหญ่ Aย้ายไปที่ด้านบนของขนาดใหญ่ที่

P^×θA

Aพิมพ์ทั้งสองด้านของขนาดใหญ่


4

Python 2 , 80 ไบต์

lambda n:'\n'.join(' '*(n+~i)+('A'+' A'[i==n/2]*n*2)[:i*2]+'A'for i in range(n))

ลองออนไลน์!

แบ่งผลลัพธ์ที่ต้องการลงในช่องว่างด้านซ้ายซ้ายAบวกช่องว่างตรงกลางหรือAs Aและด้านขวา คำนวณส่วนตรงกลางโดยใช้การแบ่งบนสตริงคงที่ สิ่งนี้อนุญาตให้ใช้วิธีเดียวกันในการสร้างบรรทัดแรก


4

Stax , 15 ไบต์

┴3╬*ôP^x'┌_╓J²♫

เรียกใช้และแก้ไขข้อบกพร่อง

คลายแพ็ก, ไม่ได้อัปโหลดและแสดงความคิดเห็นโปรแกรมจะมีลักษณะเช่นนี้

m       map over [1 .. input] using rest of the program, output each result
'A      "A" literal
xhi=    is the iteration index equal to (integer) half the input?
65*     multiply by 65 (character code of "A")
]i*     repeat that character (" " or  "A") i times
+       concat to initial "A"
x)      left pad to the original input
|p      palindromize (concatenate the reverse minus the last character)

เรียกใช้อันนี้



4

Python 3.6 , 79 ไบต์หรือ 73 ไบต์

การใช้f-stringsเพื่อจัดแนวส่วนแนวนอนของตัวอักษร:

lambda n:'\n'.join(f"{'A'+' A'[i==n//2]*2*i:>{n+i}}"[:-1]+'A'for i in range(n))

เมื่อ\bใช้เพื่อลบหนึ่งรายการA(อาจเป็นการโกง):

lambda n:'\n'.join(f"{'A'+' A'[i==n//2]*2*i:>{n+i}}\bA"for i in range(n))


3

J , 65 ไบต์

f=:3 :''' A''{~1(([:(<@;]+i.@+:)<.@-:)y)}([:(}:@|."1,.])=/~@i.)y'

ลองออนไลน์!

สามารถลดลงได้ประมาณ 12 ไบต์โดยการสร้างคำกริยาโดยปริยาย แต่ฉันมีปัญหาในการทำ

คำอธิบาย:

3 : '...' หมายถึงกริยาหนึ่งซับที่ชัดเจน

y เป็นอาร์กิวเมนต์

=/~@i. สร้างเมทริกซ์เอกลักษณ์ด้วยขนาดอาร์กิวเมนต์

    =/~@i. 4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

([:(}:@|."1,.]) เตรียมเมทริกซ์เอกลักษณ์ด้วยสำเนามิรเรอร์พร้อมองค์ประกอบสุดท้ายของแต่ละแถวที่ลดลง

    ]a =. ([:(}:@|."1,.])=/~@i.) 4
0 0 0 1 0 0 0
0 0 1 0 1 0 0
0 1 0 0 0 1 0
1 0 0 0 0 0 1

1(...)}(...) เปลี่ยนเป็น 1 ตำแหน่งในอาร์กิวเมนต์ขวาเลือกโดยตำแหน่งซ้าย

([:(<@;]+i.@+:)<.@-:) - เตรียมการเลือกโดยทำสิ่งต่อไปนี้:

               <.@-: - halves the argument and finds the floor (finds the row number)
    <@;              - box the row, followed by a list of columns:  
        ]+i.@+:      - a list form the argumnt to the doubled row number

    ([:(<@;]+i.@+:)<.@-:) 4
┌───────────┐
│┌─┬───────┐│
││2│2 3 4 5││
│└─┴───────┘│
└───────────┘

    1(([:(<@;]+i.@+:)<.@-:) 4)}a
0 0 0 1 0 0 0
0 0 1 0 1 0 0
0 1 1 1 1 1 0
1 0 0 0 0 0 1

' A'{~ วาทกรรมพื้นที่ในสถานที่ 0 และ 'A' ที่มี 1

    ' A'{~1(([:(<@;]+i.@+:)<.@-:) 4)}a
   A   
  A A  
 AAAAA 
A     A




2

Japt -R , 20 19 ไบต์

Çç" A"gZ¶Uz¹i'A êÃû

ลองมัน


คำอธิบาย

                        :Implicit input of integer U
Ç                       :Create the range [0,U) and pass each Z through a function
         Uz             :  Floor divide U by 2
       Z¶               :  Test for equality with Z (true=1, false=0)
  " A"g                 :  Get the character in the string " A" at that index
 ç                      :  Repeat Z times
           ¹            :  (Closes a few nested methods)
            i'A         :  Prepend an "A"
                ê       :  Palindromise
                 Ã      :End function
                  û     :Centre pad each element to the length of the longest element
                        :Implicitly join with newlines and output

ทางเลือก

(ด้วยความหวังว่ามันอาจช่วยให้ฉันมองเห็นการออม!

Æ'AúXÄ" A"gX¶Uz¹êÃû

1
อีกทางเลือกหนึ่งที่มีความยาวไบต์:ç h'AUz)¬íp ®i'A êÃû
ETHproductions

@ETHproductions แทนที่p ด้วย²และมันก็เป็น 19 ไบต์
Shaggy

1 วิธีที่ดีกว่าประหลาดของฉัน
Oliver


1

เยลลี่ , 23 20 19 18 ไบต์

=þ`o\L‘HĊƲ¦UŒBị⁾A 

ลองออนไลน์!

=þ` สร้างเมทริกซ์เอกลักษณ์ของขนาด nสร้างเมทริกซ์เอกลักษณ์ของขนาด

L‘HĊƲค้นหาดัชนีแถวของแถบแนวนอนด้วยการ¦เลือกแถวนั้นและนำไปใช้o\ไปกับมันซึ่งสร้างแถบ

U ย้อนกลับแต่ละแถวดังนั้นเราจึงไม่ได้คว่ำ "A" และ ŒB (palindromize; vectorizes) ทำให้ครึ่งหลังของ "A"

ị⁾A(ด้วยช่องว่างที่กำลังถูกตัดแต่งในการจัดรูปแบบ) แทนที่0s ด้วยช่องว่างและ1s ด้วยAs


1

T-SQL , 182 177 ไบต์

DECLARE @n INT=5DECLARE @ INT=0a:DECLARE @s VARCHAR(9)=STR(POWER(10,@),@n)PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@=@n/2,'A',' '))SET @+=1IF @<@n GOTO a

รุ่นแรก (ที่มี 182 ไบต์):

DECLARE @n INT=5DECLARE @ INT=0WHILE @<@n BEGIN DECLARE @s VARCHAR(9)=STR(POWER(10,@),@n)PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@=@n/2,'A',' '))SET @+=1 END

เวอร์ชันด้านบนใช้งานได้ถึง @ n = 9

นี่คืออีกเวอร์ชันหนึ่งที่ใช้งานได้ถึง @ n = 23 แต่มี 2 ไบต์เพิ่มเติม:

DECLARE @n INT=5DECLARE @ INT=0WHILE @<@n BEGIN DECLARE @s VARCHAR(23)=STR(POWER(10.,@),@n)PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@=@n/2,'A',' '))SET @+=1 END

Ungolfed:

DECLARE @n INT=5

DECLARE @i INT=0
WHILE @i<@n BEGIN
    DECLARE @s VARCHAR(9)=STR(POWER(10,@i),@n)
    PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@i=@n/2,'A',' '))
    SET @i+=1
END

1

Haskell , 98 97 95 ไบต์และ 109 ไบต์

สองแนวทางที่แตกต่างกันมาก แรก (95 ไบต์):

c!n=([1..n]>>c)++"A"
f n=unlines[" "!(n-x)++drop 3([" "!(abs$n`div`2-x+1)!!0]!(2*x))|x<-[1..n]]

และวินาที (109 ไบต์):

m True='A'
m _=' '
g n=unlines[[m(abs(n-j)==l||l==q&&elem j[q+1..q+n])|j<-[1..2*n]]|l<-[0..n-1],q<-[n`div`2]]

ลองที่นี่! ; ลองรุ่นที่แก้ไขที่นี่!

ลองรุ่นที่สามที่นี่!


ยินดีต้อนรับสู่ PPCG! คุณสามารถบันทึกไบต์ในแนวทางแรกของคุณโดยการกำหนดlเป็นผู้ประกอบการมัด
Laikoni

m True='A'm b|b='A'จะลงไป
Laikoni

ปรากฎว่าแม้กระทั่งสองไบต์สามารถบันทึก ขอบคุณ! :)
Radek

1

Python 2 , 70 ไบต์หรือ 65 ไบต์

รายการของสตริงเป็นผลลัพธ์ที่ยอมรับได้ตามที่ @Budd ระบุไว้ในความคิดเห็น

lambda n:['%*sA\n'%(n+i,('A'+i*2*' A'[i==n/2])[:-1])for i in range(n)]

ลองออนไลน์!


วิธีการแก้ปัญหา cheaty \bดูเหมือนจะใช้ ดูเหมือนขี้ขลาดใน TIO ในคอนโซลมันทำงาน

lambda n:['%*s\bA\n'%(n+i,'A'+i*2*' A'[i==n/2])for i in range(n)]

ลองออนไลน์!


0

Javascript, 124 ไบต์

วิธีการแก้ปัญหาที่ค่อนข้างไร้เดียงสาให้ภาพเพื่อฝึกฝนทักษะ js

for(i=-1,p=" ".repeat(n-1)+"A ";++i<n;console.log(i-~~(n/2)?p:p.slice(0,i)+"A".repeat(n)),p=p.slice(1,n)+" "+p.slice(n-1)){}

ไม่ห่อ

for(
 //create the first line
 i=-1, p=" ".repeat(n-1)+"A "; 
 ++i<n;
 console.log( 
 //if we are not at the bar
      i-~~(n/2)?
 //otherwise, use the modified previous line
      p
 //slice the start of the previous line and add As
      :p.slice(0,i)+"A".repeat(n)), 
 //add a space in between the previous line and remove padding on each side
 p=p.slice(1,n)+" "+p.slice(n-1)){}


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