ในคุกตอนนี้


18

ท้าทาย

กำหนดจำนวนเต็มn(ที่4<=n<=10**6) เป็นอินพุตสร้าง ASCII art "เรือนจำประตู" * วัดn-1ความกว้างของnตัวอักษรและอักขระสูงโดยใช้สัญลักษณ์จากตัวอย่างด้านล่าง


ตัวอย่าง

╔╦╗
╠╬╣
╠╬╣
╚╩╝

อักขระที่ใช้มีดังนี้:

┌───────────────┬─────────┬───────┐
│ Position      │ Symbol  │ Char  │
├───────────────┼─────────┼───────┤
│ Top Left      │    ╔    │ 9556  │
├───────────────┼─────────┼───────┤
│ Top           │    ╦    │ 9574  │
├───────────────┼─────────┼───────┤
│ Top Right     │    ╗    │ 9559  │
├───────────────┼─────────┼───────┤
│ Right         │    ╣    │ 9571  │
├───────────────┼─────────┼───────┤
│ Bottom Right  │    ╝    │ 9565  │
├───────────────┼─────────┼───────┤
│ Bottom        │    ╩    │ 9577  │
├───────────────┼─────────┼───────┤
│ Bottom Left   │    ╚    │ 9562  │
├───────────────┼─────────┼───────┤
│ Left          │    ╠    │ 9568  │
├───────────────┼─────────┼───────┤
│ Inner         │    ╬    │ 9580  │
└───────────────┴─────────┴───────┘

กฎระเบียบ

  • คุณสามารถป้อนข้อมูลด้วยวิธีการที่เหมาะสมและสะดวกสบายใด ๆ ตราบเท่าที่มันได้รับอนุญาตตามกฎ I / Oมาตรฐาน
  • สำหรับจุดประสงค์ของการท้าทายนี้ในภาษาที่สัญลักษณ์ที่ใช้สร้าง "ประตู" เป็นอักขระหลายไบต์อาจมีการนับคะแนนของคุณเป็นคะแนนไบต์เดียว
  • ควรนับตัวอักษรอื่น ๆ (แบบซิงเกิลหรือหลายไบต์) ตามปกติ
  • เอาต์พุตอาจไม่มีช่องว่างต่อท้าย แต่ขึ้นบรรทัดใหม่ต่อท้ายได้รับอนุญาตหากจำเป็นอย่างยิ่ง
  • นี่คือมีจำนวนไบต์ต่ำสุดที่จะชนะ

กรณีทดสอบ

Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝

Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝

Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝

* ใช่ฉันรู้ว่ายิ่งใหญ่เท่าไหร่ก็ยิ่งน้อยเหมือนประตูคุก! : D


4
นี่คงจะดีถ้าคุณสามารถป้อนทั้งขนาด x และ y
เบต้าการสลายตัว

15
มันอยู่ในแซนด์บ็อกซ์นานเกินกว่าที่คุณจะแนะนำได้
Shaggy

โปรแกรมของฉันมีรางที่ไม่ได้อยู่ในเพจรหัสได้หรือไม่? หากไม่ได้"'Z“ζรับอนุญาตจะมีค่าใช้จ่ายหนึ่งไบต์ (หรือ 2) (กด 9580 แปลงเป็น Unicode) หรือไม่
dzaima

@dzaima สำหรับจุดประสงค์ของการท้าทายนี้ในภาษาที่สัญลักษณ์ที่ใช้สำหรับ "ประตู" ใช้เวลาหลายไบต์พวกเขาอาจถูกนับรวมในคะแนนของคุณเป็นไบต์เดียว
Okx

@Okx `╬` - ไม่สามารถรีเซ็ตได้ในจำนวนไบต์ใด ๆ"'Z“ζซึ่งเท่ากับหนึ่งไบต์จะเป็นเช่นเดียวกับในจาวาสคริปต์ที่"╬"ใช้ต้นทุน 1 ไบต์
dzaima

คำตอบ:


9

Java 8, 156 151 148 118 ไบต์

n->{String a="╔",b="╠",c="╚";for(int i=n;i-->3;a+="╦",b+="╬")c+="╩";a+="╗\n";for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}

-30 ไบต์โดยการสร้างพอร์ตของ@raznagul C # (. NET Core) คำตอบหลังจากที่ฉันเล่นกอล์ฟ 5 ไบต์

ลองออนไลน์

คำตอบเก่า 148 ไบต์:

n->{String r="╔";int i=n,j;for(;i-->3;r+="╦");r+="╗\n╠";for(i=n;i-->2;r+="╣\n"+(i>2?"╠":"╚"))for(j=n;j-->3;r+="╬");for(;n-->3;r+="╩");return r+"╝";}

-5 ไบต์ขอบคุณที่@raznagul

คำอธิบาย:

ลองที่นี่

n->{                   // Method with integer parameter and String return-type
  String r="╔";        //  Result String (starting with the top-left corner)
  int i=n,j;           //  Indexes `i` and `j`
  for(;i-->3;          //  Loop (1) `n`-3 times:
      r+="╦"           //   Append result with top edges
  );                   //  End of loop (1)
  r+="╗\n╠";           //  Append result with the top-right corner, new-line and left edge
  for(i=n;i-->2        //  Loop (2) `n`-2 times
      ;                //     After every iteration:
      r+="╣\n"         //   Append result with right edge and new-line
      +(i>2?"╠":"╚"))  //    + either the left edge or bottom-left corner
    for(j=n;j-->3;     //   Inner loop (3) `n`-3 times:
        r+="╬"         //    Append result with middle section
    );                 //   End of inner loop (3)
                       //  End of loop (2) (implicit / single-line body)
  for(;n-->3;          //  Loop (4) `n`-3 times:
    r+="╩"             //   Append result with bottom edges
  );                   //  End of loop (4)
  return r+"╝";        //  Return result with its bottom-right corner
}                      // End of method

คุณสามารถบันทึกไบต์ใด ๆ ด้วยรหัสการยกเว้น / อักขระแทนการเข้ารหัสได้หรือไม่?
TheLethalCoder

@TheLethalCoder บางที แต่เนื่องจากกฎการท้าทายเราสามารถนับสัญลักษณ์เป็น 1 ไบต์แต่ละรายการมันอาจจะสั้นกว่านี้ (ดังนั้นจำนวน 156 ไบต์แทนที่จะเป็น 176 จริง) แต่อย่าลังเลที่จะลองทำบางสิ่งเพื่อให้สั้นลงด้วยรหัสตัวอักษร
Kevin Cruijssen

อาฉันคิดถึงส่วนหนึ่งของกฎนั้น
TheLethalCoder

2
+1 สำหรับตัวดำเนินการไปที่ ( -->)
raznagul

1
ถ้าคุณใช้i-->3, i-->2และj-->3´ you can save 5 bytes by removing the n- = 3` n+1และ
raznagul

7

Charcoal , 34 - 5 = 29 bytes

A⁻N³γUB╬↓×╠γ╠¶╚×╩γ‖BOγ‖BO↑⁺γ

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

ReflectOverlapOverlap(0)ควรจะเทียบเท่ากับReflectMirror()แต่แทนที่จะถ่านเพียงแค่ไม่ได้แทนมิฉะนั้นการแก้ปัญหานี้ก็จะทำงานReflectTransform() n=3นี่คือวิธีแก้ไขปัญหาชั่วคราวซึ่งแสดงให้เห็นว่าจะเกิดอะไรขึ้นn=3กับ 38 - 5 = 33 ไบต์:

A⁻N³γUB╬↓×╠γ╠¶╚×╩γ¿γ‖BOγ‖M‖BO↑⁺γ¹

ยังดีกว่าถ้าReflectOverlapOverlap(0)ทำงานได้ แต่ฉันไม่ได้รบกวนการสนับสนุนn=3จากนั้นฉันสามารถทำเช่นนี้สำหรับ 31 - 4 = 27 ไบต์:

A⁻N³γUB╬↓×╠γ╚×╩γ‖BOγ‖BO↑⁻γ¹

1
อืมไม่รู้ว่า Charcoal สะท้อน / สะท้อนไปยังสิ่งนั้น " เคาน์เตอร์ไบต์ของ Charcoal ไม่ทำงานด้วยเหตุผลบางอย่าง " บางทีเคาน์เตอร์ไบต์ของ Charcoal ไม่ทำงานเพราะตัวละครเหล่านั้นไม่ได้เป็นส่วนหนึ่งของโค้ดเพจ คุณสามารถนับพวกเขาเป็น 1 ไบต์แต่ละตามกฎท้าทายแม้ว่าดังนั้นนี่เป็น 27
เควิน Cruijssen

@KevinCruijssen ขึ้นอยู่กับโอเปอเรเตอร์ที่คุณใช้ (ฉันต้องกลับไปและตรวจสอบอีกครั้งในแต่ละครั้งมีจำนวนมากและทำให้สับสน ... )
Neil

@Neil โอ๊ะโอนั่นเป็นข้อผิดพลาดจะแก้ไขโดยเร็ว ขอบคุณที่ค้นหา!
ASCII เท่านั้นเท่านั้น

@Neil ด้วยเหตุผลบางอย่างมันก็หักเมื่อ n = 4
เฉพาะ ASCII เท่านั้น

1
ขอให้เรายังคงอภิปรายนี้ในการแชท
ASCII เท่านั้นเท่านั้น


6

Haskell, 75 ไบต์

w i(a:b:c)=a:(b<$[4..i])++c
f n=concat$w(n+1)$w n<$>["╔╦╗\n","╠╬╣\n","╚╩╝"]  

ลองออนไลน์!

ฟังก์ชั่นwใช้เวลาเป็นจำนวนเต็มiและรายชื่อที่aเป็นครั้งแรกbองค์ประกอบที่สองและcส่วนที่เหลือของรายการและทำรายการใหม่aตามi-3สำเนาตามด้วยb cใช้wครั้งแรกในแต่ละองค์ประกอบของรายการ["╔╦╗\n","╠╬╣\n","╚╩╝"]แล้วอีกครั้ง (พร้อมiเพิ่มขึ้น1) ในรายการผลลัพธ์ ต่อกันเป็นรายการเดียว


ตัวดำเนินการ <$ คืออะไร >> แค่มีข้อโต้แย้งที่พลิก?
Aneesh Durg

@AneeshDurg: <$มีพื้นเพมาจากและได้รับการใส่ลงไปในData.Functor มันเกือบจะเป็นเช่นเดียวกับPrelude แทนที่ทุกองค์ประกอบในด้วยในขณะที่คาดว่าจะเป็นรายชื่อและ concatenates ความยาวของสำเนาของ -> , -> หมายเหตุ: เท่ากับ >>a <$ bbab >> aaba[1,2] >> "aa""aaaa""aa" <$ [1,2]["aa","aa"]'x' <$ [1,2][1,2] >> "x"
nimi

5

เป็นกลุ่ม 29 ไบต์

3<C-x>C╔╦╗
╠╬╣
╚╩╝<Esc>h<C-v>kkx@-Pjyy@-p

เนื่องจากมีอักขระควบคุมนี่คือดัมพ์ xxd:

00000000: 3318 43e2 9594 e295 a6e2 9597 0de2 95a0  3.C.............
00000010: e295 ace2 95a3 0de2 959a e295 a9e2 959d  ................
00000020: 1b68 166b 6b78 402d 506a 7979 402d 70    .h.kkx@-Pjyy@-p

ลองออนไลน์! (ล่าม V ดูเหมือนจะมีปัญหากับตัวละครที่แปลกใหม่ดังนั้นลิงก์ใช้ตัวอักษรธรรมดามากขึ้น)

คำอธิบาย

3<C-x>     " Decrement the number by 3
C╔╦╗
╠╬╣
╚╩╝<Esc>   " Cut the number (goes in @- register) and enter the "template"
h<C-v>kkx  " Move to the middle column, highlight and cut it
@-P        " Paste @- copies of the cut column
jyy        " Move to the middle line and copy it
@-p        " Paste @- copies of the copied line

วิธียืนยัน: เป็นเพียงล่าม TIO ที่สำลักสัญลักษณ์หรือไม่
Shaggy

@Shaggy ใช่มันมีข้อผิดพลาด Python เกี่ยวกับ Latin-1 ไม่ใช่ข้อผิดพลาด Vim (ฉันใช้หน้า V เพราะ TIO ไม่มีหน้า Vim ธรรมดาและฉันคิดว่า V ใช้ภาษาละติน -1) Vim บนเครื่องของฉันไม่มีปัญหาเกี่ยวกับตัวอักษร
Jordan

5

รุ่น GNU, 74 + 1 = 75 ไบต์

+1 ไบต์สำหรับการ-rตั้งค่าสถานะ ใช้อินพุตเป็นหมายเลขยูนารี

s/1111(1*)/╔╦\1╗\n;\1╠╬\1╣\n╚╩\1╝/
:
s/(.)1/\1\1/
t
s/;([^;\n]+)/\1\n\1/
t

ลองออนไลน์!

คำอธิบาย

มันค่อนข้างเรียบง่าย สมมติว่าอินพุตเป็น 6 (unary 111111) บรรทัดแรกลดลงสี่1s และแปลงอินพุตที่เหลือเป็น:

╔╦11╗
;11╠╬11╣
╚╩11╝

บรรทัดที่สามในลูปจะแทนที่1ด้วยอักขระที่อยู่ด้านหน้า สิ่งนี้สร้างคอลัมน์ของเรา:

╔╦╦1╗
;11╠╬11╣
╚╩11╝

╔╦╦╦╗
;11╠╬11╣
╚╩11╝

...

╔╦╦╦╗
;;;╠╬╬╬╣
╚╩╩╩╝

ขอให้สังเกตว่าสิ่งนี้ได้ทำซ้ำ;ตัวละคร ในที่สุดบรรทัดที่ห้าในลูปจะแทนที่;อักขระทุกตัวด้วยสำเนาของบรรทัดที่ตามมา:

╔╦╦╦╗
;;╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

╔╦╦╦╗
;╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

╔╦╦╦╗
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

4

เยลลี่ 33 ไบต์

... มันคือ 33 - มีค่าใช้จ่าย 5 ในการแปลงจากตัวอักษรสตริงไบต์หนึ่ง (ดัชนีหน้ารหัส) เป็นอักขระ Unicode

_2µ“€ðБẋ“¡Ø¤“©ßµ‘js3x€2¦€’+⁽"7ỌY

โปรแกรมเต็มรูปแบบการพิมพ์ผล

ลองออนไลน์!

อย่างไร?

_2µ“€ðБẋ“¡Ø¤“©ßµ‘js3x€2¦€’+⁽"7ỌY - Main link: n
_2                                - subtract 2
  µ                               - start a new monadic chain with n-2 on the left
   “€ðБ                          - code page indexes [12, 24, 15] (middle row characters)
        ẋ                         - repeat n-2 times (make unexpanded middle rows)
         “¡Ø¤“©ßµ‘                - code page indexes [[0,18,3],[6,21,9]] (top & bottom)
                  j               - join (one list: top + middles + bottom)
                   s3             - split into threes (separate into the unexpanded rows)
                          ’       - decrement n-2 = n-3
                        ¦€        - sparsely apply to €ach:
                       2          -   at index 2
                     x€           -   repeat €ach (expand centre of every row to n-3 chars)
                            ⁽"7   - literal 9556
                           +      - addition (0->9556; 12->9568; etc...)
                               Ọ  - cast to characters (╠; ╔; etc...)
                                Y - join with newlines
                                  - implicit print

@Shaggy - ฉันใช้ 9 ไบต์เพื่อแทนอักขระภายในตัวอักษรของสตริง - นี่คือดัชนีหน้ารหัส 5 ไบต์ก่อนที่จะYสิ้นสุด+⁽"7Ọ, เพิ่ม 9556 เหล่านี้แล้ว casts กับตัวละคร พวกเขา (5) ฟรีหรือไม่ ฉันรู้สึกว่ามันจะเหมือนกับว่าฉันสามารถใช้อักขระ Unicode ได้โดยตรง (ฉันสามารถใช้อักขระจริงแทนดัชนีหน้ารหัสและใช้การแมปสำหรับไบต์เพิ่มเติม)
Jonathan Allan

Nope หลังจากการสนทนาสรุปได้ว่ามีเพียงถ่านเท่านั้นที่สามารถนับเป็น 1 ไม่ใช่ตัวแสดงอื่น ๆ
Erik the Outgolfer

3

Python 3 , 75 ไบต์

n=int(input())-3
print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*-~n+"╚"+"╩"*n+"╝")

ลองออนไลน์!


คุณสามารถเล่นกอล์ฟได้เล็กน้อยโดยเริ่มต้นที่n-3:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
Kevin Cruijssen

นอกจากนี้จะเทียบเท่ากับn+1 -~n
Leun Nun

3

Dyalog APL, 71 ไบต์

{('╔',('╠'⍴⍨⍵-2),'╚'),((⍵-3)\⍪('╦',('╬'⍴⍨⍵-2),'╩')),'╗',('╣'⍴⍨⍵-2),'╝'}

ลองออนไลน์!


คุณสามารถตีกอล์ฟนี้ได้อย่างแน่นอน เช่นคุณสามารถแทนที่ด้วย(some expr)f Y Y f⍨ some expr
อดัม

@ Adámฉันรู้ว่ามันกำลังดำเนินการฉันไม่ได้ใช้คอมพิวเตอร์ในขณะนี้
Uriel

3

Japt , 60 52 49 48 36 ไบต์

"╔{Uµ3 ç'╦}╗{UÄ ç"
╠{ç'╬}╣"}
╚{ç'╩}╝

ลองออนไลน์!

รุ่นอื่น ( -Rค่าสถานะ47 ไบต์ + )

"8{Uµ3 ç'J};{UÄ ç"D{ç'P}G"}>{ç'M}A"c_+9500ÃòU+2

ต้องการ-Rแฟล็ก (เพิ่มในฟิลด์อินพุต) ลองออนไลน์!

มันทำงานยังไง?

เนื่องจากเดิมฉันคิดว่า 'ประตูตัวละคร' มีค่าใช้จ่ายมากกว่าหนึ่งไบต์ฉันคิดว่าฉันสามารถบันทึกได้ไม่กี่ไบต์โดยการเข้ารหัส จากนั้นฉันลบ 9500 ตัวจากรหัสตัวละครซึ่งทิ้งฉันไว้กับตัวละคร8J; DPG >MAซึ่งมีราคาเพียงหนึ่งไบต์ต่อตัว จากนั้นฉันสามารถเพิ่ม 9500 ให้กับรหัสอักขระแต่ละตัวได้และทั้งหมดนั้นก็ดี

 "8{   Uµ 3 ç'J}  ;{   UÄ  ç"D{   ç'P}  G"}  >{   ç'M}  A"c_+9500Ã òU+2
 "8"+((U-=3 ç'J)+";"+((U+1 ç"D"+(Uç'P)+"G")+">"+(Uç'M)+"A"c_+9500} òU+2
 "8"+           +";"+                      +">"+      +"A"              # Take this string of characters
     ((U-=3 ç'J)                                                        # Repeat "J" input - 3 times
                     ((    ç              )                             # Repeat the string
                            "D"+(Uç'P)+"G"                              # "D" + input-3 times "P" + "G"
                       U+1                                              # Input - 2 times
                                                (Uç'M)                  # Repeat "M" input - 3 times
                                                          c_     }      # Take the character code of every character
                                                            +9500       # Add 9500 to it
                                                          c_     }      # And convert it back to a character
                                                                   òU+2 # Split this string on every (input)th character
                                                                        # Print the resulting array, joined with newlines.

โอ้ใช่คุณพูดถูก
ลุค



2

สวิฟท์, 161 ไบต์

let f:(String,Int)->String={String(repeating:$0,count:$1)};var p={i in print("╔\(f("╦",i-3))╗\n\(f("╠\(f("╬",i-3))╣\n",i-2))╚\(f("╩",i-3))╝")}

ยกเลิกแข็งแรงเล่นกอล์ฟ:

let f:(String,Int)->String = {
    String(repeating:$0,count:$1)
}
var p={ i in
    print("╔\(f("╦",i-3))╗\n\(f("╠\(f("╬",i-3))╣\n",i-2))╚\(f("╩",i-3))╝")
}

คุณสามารถลองคำตอบนี้ได้ที่นี่


2

QBICขนาด 78 ไบต์

[:-3|X=X+@╦`]?@╔`+X+@╗`[b-2|Y=Z[b-3|Y=Y+@╬`]?@╠`+Y+@╣`}[b-3|W=W+@╩`]?@╚`+W+@╝`

โชคดีที่สัญลักษณ์ทั้งหมดที่ใช้ในประตูเซลล์อยู่ใน QBasic codepage

คำอธิบาย

            The TOP
[:-3|       FOR a = 1 to n-3 (-1 for the width, -2 for beginning and end)
X=X+@╦`]    Build out X$ with the parts of the middle-top
?@╔`+X+@╗`  Then print that preceded and followed by the corners
┘           Syntactic linebreak

            The MIDDLE
[b-2|       FOR c = 1 to n-2 (all the middle rows)
Y=Z         Reset Y$ to ""
            Build up the middle rows in the same way as the top,
            just with different symbols and once for each middle row
[b-3|Y=Y+@╬`]?@╠`+Y+@╣`
}           Close the FOR loop
            The BOTTOM
            The same as the top, just with different symbols
[b-3|W=W+@╩`]?@╚`+W+@╝`

ตัวอย่างผลลัพธ์

Command line: 7

╔╦╦╦╦╗
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╚╩╩╩╩╝

1
+1 สำหรับการใช้ภาษาที่มีพวกเขาเป็นหนึ่งไบต์ตัวอักษรในหน้ารหัสเริ่มต้น
Joshua

คุณสามารถเพิ่ม TIO (หรือเทียบเท่า) ได้หรือไม่?
Shaggy


1
โอ้ใช่! ฉันจะจำได้ว่าในที่สุดฉันสัญญา! : D
Shaggy

@Shaggy ดีไม่คุ้นเคยกับความคิด ฉันเพิ่งพบ Emscripten-build ของ Dosbox ที่ใช้งาน QBasic ฉันจะพยายามที่จะมุ่งสู่ QBIC ในเดือนที่จะมาถึงดังนั้นเว็บ env อาจมาถึง ...
steenbergh


2

JavaScript (ES6), 86 ไบต์

นี่ยาวกว่าคำตอบ JS อื่น ๆอย่างมีนัยสำคัญแต่ฉันต้องการลองใช้วิธีอื่นแทน

n=>(g=i=>--i?`╬╣╠╩╝╚╦╗╔
`[(j=i%n)?!--j+2*!(n-j-2)+3*(i<n)+6*(i>n*n-n):9]+g(i):'')(n*n)

อย่างไร?

เรากำหนดน้ำหนักให้กับแต่ละขอบของตาราง: 1 สำหรับขวา, 2 สำหรับซ้าย, 3 สำหรับด้านล่างและ 6 สำหรับด้านบน ผลรวมของน้ำหนักให้ดัชนีของตัวละครที่จะใช้

8666667    0 1 2 3 4 5 6 7 8
2000001    ╬ ╣ ╠ ╩ ╝ ╚ ╦ ╗ ╔
2000001
2000001
2000001
2000001
2000001
5333334

การสาธิต


2

JavaScript (ES6), 80 74 ไบต์

n=>`╔${"╦"[a="repeat"](n-=3)}╗${`
╠${"╬"[a](n)}╣`[a](n+1)}
╚${"╩"[a](n)}╝`

คุณสามารถนับสัญลักษณ์ได้ทีละหนึ่งไบต์ทำให้มีขนาด 80 ไบต์ และคุณควรจะสามารถใช้เทมเพลตตัวอักษรได้ดีขึ้นเพื่อประหยัดสองสามไบต์;)
Shaggy

คุณสามารถนับสัญลักษณ์ได้เพียงหนึ่งไบต์เท่านั้นหากคุณพบการใช้งาน ES6 ที่จะรับอินพุต CP437 โดยกำเนิด
user5090812

@ user5090812 มันเป็นค่าเผื่อเฉพาะสำหรับความท้าทายนี้
Shaggy

@ user5090812 ไม่จำเป็นต้องพบว่ามีการใช้งานเนื่องจากความท้าทายของกฎระบุว่า " สำหรับวัตถุประสงค์ของการท้าทายนี้ในภาษาที่สัญลักษณ์ที่ใช้สำหรับ" ประตู "ใช้เวลาหลายไบต์พวกเขาอาจถูกนับเป็นคะแนนของคุณในแต่ละไบต์ "นี่จะมีจำนวนไบต์ 80 ไบต์แทน 98 (ถ้าฉันนับถูกต้อง)
Kevin Cruijssen

นั่นเป็นกฎที่ไม่ดี มันลบแรงจูงใจทั้งหมดเพื่อค้นหาวิธีที่ดีกว่าในการจัดเก็บอักขระ
ลุค

2

ทับทิม, 54 52 ไบต์

-2 ไบต์ขอบคุณ ymbirtt

->n{?╔+?╦*(n-=3)+"╗
"+(?╠+?╬*n+"╣
")*-~n+?╚+?╩*n+?╝}

ลองออนไลน์!

Ungolfed

มันน่าเบื่อสุด ๆ :

->n{
   ?╔ + ?╦ * (n-=3) + "╗\n" + 
  (?╠ + ?╬ * n      + "╣\n") * -~n + 
   ?╚ + ?╩ * n      + ?╝
}

คุณสามารถย่อให้สั้นลงได้(n+1)โดยการเขียน-~n- การให้ความสำคัญกับโอเปอเรเตอร์จะช่วยคุณประหยัดวงเล็บ
ymbirtt

2

Java 8, 102 + 101 ไบต์

java.util.function.BiFunction<String,Integer,String>r=(c,n)->"".valueOf(new char[n]).replace("\0",c);

n->{n-=3;return "╔"+r.apply("╦",n)+"╗\n"+r.apply('╠'+r.apply("╬",n)+"╣\n",-~n)+"╚"+r.apply("╩",n)+"╝";}

นี่คือ repeater สตริงอีกความยาวเดียวกัน:

java.util.function.BiFunction<String,Integer,String>r=(c,n)->{String p=c;for(;--n>0;p+=c);return p;}

ลองออนไลน์!


ไม่เลวคุณสามารถทำให้วิธีการของคุณต่ำกว่าคำตอบของฉัน ก่อนอื่นคุณสามารถลดให้เหลือ 78 + 72 ไบต์ (ทั้งหมด 150 รายการ) โดยใช้วิธี Java 7 แทนที่จะเป็นBiFunction: n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}และString r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);} ลองออนไลน์ และวิธีที่สองยังสามารถเปลี่ยนเป็นString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}(63 ไบต์) ดังนั้นจึงกลายเป็น141 ไบต์ทั้งหมด
Kevin Cruijssen

การแก้ไขคุณยังสามารถลดมันจะ130 ไบต์ : n->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"และString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;} ลองออนไลน์
Kevin Cruijssen

2

C # (.NET แกน) , คะแนน 123 (141 bytes)คะแนน 118 (136 bytes)

n=>{string a="╔",b="╠",c="╚";for(int i=3;i++<n;a+="╦",b+="╬")c+="╩";a+="╗\n";for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}

ลองออนไลน์!

-5 ไบต์ขอบคุณ @KevinCruijssen

คำอธิบาย:

n => 
{
    string a = "╔", b = "╠", c = "╚"; //Initialize the first, last and the middle lines with the starting character.
    for (int i = 3; i++ < n;          //Loop n-3 times
        a += "╦", b += "╬")           //Add the middle character to the first and middle line.
        c += "╩";                     //Add the middle character to the last line.
    a += "╗\n";                       //Add the end character to the first line.
    for (b += "╣\n";                  //Add the end character to the first line.
        n-- > 2;)                     //Loop n-2 times.
        a += b;                       //Add the middle line to the first line.
    return a + c + "╝";               //Add the last line and the final character and return.
}

1
คำตอบที่ดี +1 จากฉัน ฉันรู้ว่าไม่นานมานี้ แต่คุณสามารถเล่นกอล์ฟได้อีก 5 ไบต์โดยเปลี่ยนb+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};เป็นfor(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} ลองออนไลน์
Kevin Cruijssen

@KevinCruijssen: ขอบคุณ
raznagul

2

Stax , 23 ไบต์

÷ÅoB↔╒╢Fm|╦a⌐á5µ┐»♫÷d╕Ñ

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

นี่คือเวอร์ชั่นที่ไม่ดี ที่จริงแล้วมันมีขนาดเล็กกว่าสำหรับ stax ที่จะไม่ใช้ตัวอักษรที่แท้จริงเพราะการรวมไว้เป็นตัวอักษรจะป้องกันการจัดเก็บต้นฉบับ

"2Pfj_EQGG]T"!  packed representation of the 9 characters
3/              split into groups of 3
GG              call into trailing program twice
m               print each row
}               trailing program begins here
1|xv\           [1, --x - 1]; x starts as original input
:B              repeat each element corresponding number of times
                effectively, this repeats the internal row of the matrix
M               transpose door; this way it expands the two dimensions

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


1

Mathematica, 106 ไบต์

(T[a_,b_,c_]:=a<>Table[b,#-3]<>c;w=Column;w[{T["╔","╦","╗"],w@Table[T["╠","╬","╣"],#-2],T["╚","╩","╝"]}])&

คุณสามารถเพิ่ม TIO (หรือเทียบเท่า) ได้หรือไม่?
Shaggy

1
goto sandbox.open.wolframcloud.com/app/objects วางรหัส (ctrl + v) เพิ่ม [8] ที่ส่วนท้ายแล้วกด Shift + Enter
J42161217

ดูเหมือนจะมีการแบ่งบรรทัดพิเศษระหว่างแต่ละบรรทัดฉันจะพูดถูกว่าเป็นปัญหากับการแสดงผลของ outpu มากกว่าเอาท์พุทตัวเอง?
Shaggy

@Shaggy wolfram cloud แสดงตัวละครทุกตัวด้วยวิธีที่ตลกเพี้ยนดังนั้นจึงไม่ใช่วิธีที่ดีที่สุดในการนำเสนองานดังกล่าวไม่มีบรรทัดอื่นและทุกอย่างดูโอเคในวิชาคณิตศาสตร์ คัดลอกและวางกรณีทดสอบของคุณเพื่อตรวจสอบฉันทำและดูเหมือนกัน
J42161217

1

OK, 38 ตัวอักษร

`0:"╔╠╚╦╬╩╗╣╝"{+x+/:3*0,2_x}@&1,|1,-2+

ลองออนไลน์

k ดูเหมือนจะไม่ต้องการจัดการยูนิโค้ดได้ดีดังนั้นฉันจึงไปกับ OK


1

แบตช์ 126 ไบต์

@set s=
@for /l %%i in (4,1,%1)do @call set s=%%s%%Î
@echo É%s:Î=Ë%»
@for /l %%i in (3,1,%1)do @echo Ì%s%¹
@echo È%s:Î=Ê%¼

ใช้งานได้ใน CP437 หรือ CP850 ดูเหมือนว่านี้ในหน้ารหัสเหล่านั้น:

@set s=
@for /l %%i in (4,1,%1)do @call set s=%%s%%╬
@echo ╔%s:╬=╦%╗
@for /l %%i in (3,1,%1)do @echo ╠%s%╣
@echo ╚%s:╬=╩%╝

1

เรติน่า , 56 50 ไบต์

.+
$*╬╣
^╬╬╬
╠
.?
$_¶
T`╠╬╣`╔╦╗`^.*
T`╠╬╣`╚╩╝`.*¶$

ลองออนไลน์! ทำงานโดยสร้างสี่เหลี่ยมจัตุรัสขึ้นมาแล้วทำการยึดขอบ (โดยเฉพาะอย่างยิ่งสาม colums จะถูกลบออกเมื่อเพิ่มด้านข้าง)


1

PowerShellขนาด 67 ไบต์

'╔'+'╦'*($x=$args[0]-3)+'╗';,('╠'+'╬'*$x+'╣')*($x+1);'╚'+'╩'*$x+'╝'

รับอินพุต$args[0], ลบ3, บันทึกสิ่งนั้นลง$x, ใช้สิ่งนั้นในการก่อสร้างด้านบนของประตูเพื่อส่งออกจำนวนส่วนกลางที่เหมาะสม จากนั้นเรากำลังแสดงผลแถวกลางของการที่เรามี$x+1ของ ในที่สุดแถวล่างก็คล้ายกับแถวบนสุด สิ่งเหล่านี้ทั้งหมดถูกทิ้งไว้บนไปป์ไลน์และนัยWrite-Outputแทรกบรรทัดใหม่ระหว่างองค์ประกอบฟรี

ลองออนไลน์!




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