สามเหลี่ยม ASCII


30

งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่พิมพ์รูปสามเหลี่ยม ASCII พวกเขามีลักษณะเช่นนี้:

|\
| \
|  \
----

โปรแกรมของคุณจะมีการป้อนข้อมูลที่เป็นตัวเลขเดียวกับข้อ จำกัดn สามเหลี่ยมดังกล่าวข้างต้นมีมูลค่าของ0 <= n <= 1000n=3

สามเหลี่ยม ASCII จะมีnแบ็กสแลช ( \) และบาร์แนวตั้ง ( |), n+1เส้นและขีดกลาง ( -) และแต่ละบรรทัดจะมีจำนวนช่องว่างเท่ากับหมายเลขบรรทัด (อิงตาม 0, คือบรรทัดแรกคือบรรทัดที่ 0) นอกเหนือจากบรรทัดสุดท้าย .

ตัวอย่าง:

การป้อนข้อมูล:

4

เอาท์พุท:

|\
| \
|  \
|   \
-----

การป้อนข้อมูล:

0

เอาท์พุท:


ในกรณีทดสอบนี้ผลลัพธ์จะต้องว่างเปล่า ไม่มีช่องว่าง

การป้อนข้อมูล:

1

เอาท์พุท:

|\
--

อินพุตและเอาต์พุตจะต้องตรงตามที่ฉันระบุ

นี่คือดังนั้นควรตั้งรหัสให้สั้นที่สุด!

code-golf  ascii-art  code-golf  rubiks-cube  code-golf  path-finding  maze  regular-expression  code-golf  math  rational-numbers  code-golf  kolmogorov-complexity  graphical-output  code-golf  tips  code-golf  string  permutations  code-golf  sorting  base-conversion  binary  code-golf  tips  basic  code-golf  number  number-theory  fibonacci  code-golf  date  code-golf  restricted-source  quine  file-system  code-golf  code-golf  math  code-golf  ascii-art  code-golf  math  primes  code-golf  code-golf  math  matrix  code-golf  string  math  logic  factorial  code-golf  palindrome  code-golf  quine  stateful  code-golf  interactive  code-golf  board-game  code-golf  math  arithmetic  code-golf  string  code-golf  math  matrix  code-golf  math  abstract-algebra  polynomials  code-golf  date  code-golf  string  array-manipulation  sorting  code-golf  game  code-golf  string  code-golf  ascii-art  decision-problem  code-golf  number  sequence  code-golf  code-golf  code-golf  sequence  fibonacci  code-golf  math  geometry  random  code-golf  code-golf  math  decision-problem  fractal  rational-numbers  code-golf  number  number-theory  code-golf  combinatorics  permutations  card-games  code-golf  math  sequence  array-manipulation  fibonacci  code-golf  sequence  decision-problem  graph-theory  code-golf  ascii-art  parsing  lisp  code-golf  string  math  natural-language  logic  code-golf  math  logic  code-golf  string  alphabet  code-golf  string  code-golf  string 

4
จำเป็นต้องเป็นโปรแกรมหรือเป็นฟังก์ชั่นหรือไม่?
fəˈnɛtɪk

7
ฉันคิดว่ามันจะดีกว่าถ้ากรณีที่0จะมีการส่งออกที่ไม่คาดคิดใด ๆ เพราะมันเป็นกรณีที่ขอบ (โดยเฉพาะอย่างยิ่งนับตั้งแต่ที่คุณร้องขอว่าจำนวนของขีดกลางต้องเป็นหนึ่งเกินกว่าจำนวนที่ป้อนเข้า)
Kritixi Lithos

4
@Okx มีคำถามบ่อยครั้งที่ผู้ถามพูดโปรแกรม แต่หมายถึงโปรแกรมหรือฟังก์ชั่นจริงๆ คุณอาจต้องการชี้แจงว่าคุณกำลังขอโปรแกรมเต็มรูปแบบ
f --nəˈtɪk

9
ฉันจะไปทั้งโปรแกรมและฟังก์ชั่นแน่นอน นั่นเป็นกฎเริ่มต้นหากไม่มีการระบุอะไรอีก ฉันจะลบกรณี 0 ขอบเนื่องจากเป็นการละเมิดโดยตรงของ " n + 1 บรรทัดและขีดกลาง (-) "
Stewie Griffin

3
ความท้าทายจะง่ายเกินไปโดยไม่มีข้อยกเว้นขนาด = 0 ส่วนหนึ่งของความท้าทายคือการหาวิธีการบัญชีนี้ด้วยรหัสพิเศษจำนวนน้อยที่สุด
12Me21

คำตอบ:


3

เยลลี่ขนาด 14 ไบต์

’⁶x⁾|\jṄµ€Ṫ”-ṁ

ลองออนไลน์!

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

’⁶x⁾|\jṄµ€Ṫ”-ṁ  Main link. Argument: n

        µ       Combine the links to the left into a chain.
         €      Map the chain over [1, ..., n]; for each k:
’                 Decrement; yield k-1.
 ⁶x               Repeat the space character k-1 times, yielding a string.
   ⁾\j            Join the character array ['|', '\'], separating by those spaces.
      Ṅ           Print the result, followed by a linefeed.
         Ṫ      Tail; extract the last line.
                This will yield 0 if the array is empty.
          ⁾-ṁ   Mold the character '-' like that line (or 0), yielding a string
                of an equal amount of hyphen-minus characters.  

11

C, 58 ไบต์

i;f(n){for(i=2*n;~i--;printf(i<n?"-":"|%*c\n",2*n-i,92));}

-

ขอบคุณ @Steadybox ที่มีความคิดเห็นเกี่ยวกับคำตอบนี้ช่วยให้ฉันโกนหนวดสักสองสามไบต์ในโซลูชันด้านบนของฉัน


1
ฉันสามารถไปถึง 68 ได้ค่อนข้างภูมิใจในตัวเอง .. แล้วฉันก็เลื่อน :( - ทำได้ดีมาก!
เควนติน

1
ดีมาก! มี +1
Steadybox

ฉัน2*nอยู่ที่นั่นสองครั้งและมันทำให้ฉันรำคาญไม่มีใครคิดวิธีที่ฉลาดในการย่อให้สั้นลงได้ไหม?
Albert Renshaw

7

Javascript (ES6), 97 85 81 75 74 74 ไบต์

n=>(g=(n,s)=>n?g(--n,`|${" ".repeat(n)}\\
`+s):s)(n,"")+"-".repeat(n&&n+1)

ปรากฎว่าฉันไม่ได้ใช้การสอบถามซ้ำเกือบพอ

f=n=>(g=(n,s)=>n?g(--n,`|${" ".repeat(n)}\\
`+s):s)(n,"")+"-".repeat(n&&n+1)

console.log(f(0))
console.log(f(1))
console.log(f(2))
console.log(f(3))
console.log(f(4))


6

05AB1E , 16 15 16 ไบต์

บันทึกเป็นไบต์ขอบคุณAdnan

FðN×…|ÿ\}Dg'-×»?

ลองออนไลน์!

คำอธิบาย

F       }         # for N in range [0 ... input-1]
 ðN×              # push <space> repeated N times
    …|ÿ\          # to the middle of the string "|\"
         Dg       # get length of last string pushed
           '-×    # repeat "-" that many times
              »   # join strings by newline
               ?  # print without newline

ð×.svy¦…|ÿ\}¹>'-×»เดาว่าความคิดของฉัน.sไม่ดีอย่างที่คิด ใช้ดีÿมากไม่เคยเห็นมาก่อน
Magic Octopus Urn

@carusocomputing: ฉันคิด.sว่าเริ่มต้นด้วย<Ýð×แต่มีปัญหากับกรณีพิเศษด้วยวิธีการเหล่านั้น
Emigna

FðN×…|ÿ\}Dg'-×»for 15 bytes
Adnan

@Adnan: ดีจับด้วยDg! ขอบคุณ :)
Emigna

.sยังส่งผลให้อาร์เรย์ที่ซ้อนกันและแบนซึ่งต้องใช้ไบต์เพิ่มเติม
Magic Octopus Urn

5

V , 18 17 16 ไบต์

บันทึก 1 ไบต์ต้องขอบคุณ @ nmjcman101 สำหรับการใช้วิธีการส่งสัญญาณออกอื่นหากอินพุตนั้น 0

é\é|ÀñÙá ñÒ-xÀ«D

ลองออนไลน์!

hexdump:

00000000: e95c e97c c0f1 d9e1 20f1 d22d 78c0 ab44  .\.|.... ..-x..D

คำอธิบาย (ล้าสมัย)

0ครั้งแรกที่เรามีห่วงเพื่อตรวจสอบว่าอาร์กิวเมนต์เป็น หากเป็นเช่นนั้นรหัสด้านล่างจะดำเนินการ ( |\เขียน) มิฉะนั้นจะไม่มีการเขียนอะไรเลยและบัฟเฟอร์นั้นว่างเปล่า

Àñ     ñ            " Argument times do:
  é\é|              " Write |\
      h             " Exit loop by creating a breaking error

ตอนนี้เรามีจุดสูงสุดของสามเหลี่ยมเราต้องสร้างร่างกายของมัน

Àñ   ñ              " Argument times do:
  Ù                 " Duplicate line, the cursor comes down
   à<SPACE>         " Append a space

ตอนนี้เรามีหนึ่งบรรทัดพิเศษที่ด้านล่างของบัฟเฟอร์ สิ่งนี้จะต้องถูกแทนที่ด้วย-s

Ó-                  " Replace every character with a -
   x                " Delete the extra '-'

คำตอบนี้จะสั้นลงหากเราทำทุกสิ่งที่ต้องการใส่ 0

V , 14 13 ไบต์

é\é|ÀñÙá ñÒ-x

ลองออนไลน์!


ฉันไม่ควรลองอย่างหนักสำหรับ byte ลองออนไลน์!
nmjcman101

@ nmjcman101 อา«แน่นอน ฉลาด! :)
Kritixi Lithos

4

C #, 93 ไบต์

n=>{var s=n>0?new string('-',n+1):"";while(n-->0)s="|"+new string(' ',n)+"\\\n"+s;return s;};

ฟังก์ชั่นไม่ระบุชื่อซึ่งส่งกลับสามเหลี่ยม ASCII เป็นสตริง

โปรแกรมเต็มรูปแบบพร้อมฟังก์ชั่นการแสดงความคิดเห็นและกรณีทดสอบที่ไม่ดี

using System;

class ASCIITriangles
{
    static void Main()
    {
      Func<int, string> f =
      n =>
      {
          // creates the triangle's bottom, made of dashes
          // or an empty string if n == 0
          var s = n > 0 ? new string('-', n + 1) : "";

          // a bottom to top process
          while ( n-- > 0)
          // that creates each precedent line
            s = "|" + new string(' ', n) + "\\\n" + s;

          // and returns the resulting ASCII art
          return s;
      };

      // test cases:
      Console.WriteLine(f(4));
      Console.WriteLine(f(0));
      Console.WriteLine(f(1));
    }
}

3

Python 2 , 69 ไบต์

lambda x:'\n'.join(['|'+' '*n+'\\'for n in range(x)]+['-'*-~x*(x>0)])

ลองออนไลน์!


หากคุณกำลังพิมพ์คุณสามารถบันทึกสองสามไบต์โดยเปลี่ยนเป็น python3 ลบ"".joinและแทนที่ด้วยตัว*ดำเนินการและsepอาร์กิวเมนต์ในฟังก์ชันสลีปดังนั้นlambda x:print(*['|'+' '*n+'\\'for n in range(x)]+['-'*-~x*(x>0)],sep="\n")
sagiksp

3

CJam , 24 22 21 bytes

บันทึก 1 ไบต์ขอบคุณ Martin Ender

ri_{S*'|\'\N}%\_g+'-*

ลองออนไลน์!

คำอธิบาย

ri                     e# Take an integer from input
  _                    e# Duplicate it
   {                   e# Map the following to the range from 0 to input-1
    S*                 e#   Put that many spaces
      '|               e#   Put a pipe
        \              e#   Swap the spaces and the pipe
         '\            e#   Put a backslash
           N           e#   Put a newline
            }%         e# (end of map block)
              \        e# Swap the top two stack elements (bring input to the top)
               _g+     e# Add the input's signum to itself. Effectively this increments any 
                       e#  non-zero number and leaves zero as zero.
                  '-*  e# Put that many dashes


2

PowerShell , 51 67 ไบต์

param($n)if($n){1..$n|%{"|"+" "*--$_+"\"};write-host -n ('-'*++$n)}

ลองออนไลน์!

(ไบต์เพิ่มเป็นบัญชีสำหรับการขึ้นบรรทัดใหม่ที่ไม่ตามมา)

รับอินพุต$nและตรวจสอบว่าไม่ใช่ศูนย์ จากนั้นวน-ซ้ำเพื่อสร้างรูปสามเหลี่ยมและเสร็จสิ้นด้วยเส้น โดยนัยWrite-Outputเกิดขึ้นเมื่อโปรแกรมเสร็จสมบูรณ์


โปรแกรมพิมพ์บรรทัดขึ้นบรรทัดใหม่ แต่ฉันขอให้ผลลัพธ์ตรงตามที่ระบุขออภัย!
Okx

@Okx เปลี่ยนที่ราคา 16 ไบต์
AdmBorkBork

2

เรติน่า 39 ไบต์

.*
$*
*\`(?<=(.*)).
|$.1$* \¶
1
-
-$
--

ลองออนไลน์

แปลงอินพุตทศนิยมเป็น unary แทนที่แต่ละรายการ1ด้วย|<N-1 spaces>\¶พิมพ์และเลิกทำ แทนที่แต่ละ1ด้วยเครื่องหมายขีดคั่นและยัติภังค์สุดท้ายด้วย 2 ขีดกลาง Tadaa!


2

เสียงกระเพื่อมสามัญ 89 86 ไบต์

สร้างฟังก์ชั่นที่ไม่ระบุชื่อที่รับอินพุต n และพิมพ์รูปสามเหลี่ยมไปที่*standard-output*(stdout โดยค่าเริ่มต้น)

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

(lambda(n)(when(< 0 n)(dotimes(i n)(format t"|~v@t\\~%"i))(format t"~v,,,'-<~>"(1+ n))))

Ungolfed

(lambda (n)
  (when (< 0 n)
    (dotimes (i n)
      (format t "|~v@t\\~%" i))
    (format t "~v,,,'-<~>" (1+ n))))

ฉันแน่ใจว่าฉันสามารถทำให้เรื่องนี้สั้นลงได้


2

C 101 93 75 ไบต์

f(n){i;for(i=0;i++<n;)printf("|%*c\n",i,92);for(;n--+1;)prin‌​tf("-");}

เวอร์ชันที่ไม่ดี

void f(int n)
{
  int i;

  for(i=0;i++<n;)
    printf("|%*c\n",i,92);

  for(;n--+1;)
    printf("-");

}

@ Steadybox ขอบคุณสำหรับการชี้ให้เห็นถึงความรู้สึกมากมาย


1
คุณสามารถโกนหนวดได้สองสามไบต์โดยแทนที่ค่าคงที่ของอักขระด้วยค่า ASCII และย้าย i ++ ตัวแรกในส่วนของลูป และทำไมprintf("%c",'_');verbose ดังนั้น?
เจนส์

@Jens stimmt, Danke sehr :) อัปเดต
Abel Tom

สามารถลดลงได้ถึง 74 ไบต์:i;f(n){for(i=0;i++<n;)printf("%c%*c\n",124,i,92);for(;n--+1;)printf("-");}
Steadybox

ถึง 69 ไบต์จริง ๆ แล้ว:i;f(n){for(i=0;i++<n;)printf("|%*c\n",i,92);for(;n--+1;)printf("-");}
Steadybox

@Steadybox 68: n--+1สามารถตัดให้สั้นลงได้~n--
Albert Renshaw

2

ถ่าน 15 ไบต์

Nβ¿β«↓β→⁺¹β↖↖β»

ลองออนไลน์!

ทำให้พังถล่ม

Nβ¿β«↓β→⁺¹β↖↖β»
Nβ               assign input to variable β
   ¿β«         »  if β != 0:
      ↓β           draw vertical line β bars long
        →⁺¹β       draw horizontal line β+1 dashes long
            ↖      move cursor up one line and left one character
             ↖β    draw diagonal line β slashes long

ความคิดเห็นที่ล่าช้ามาก แต่การปิด»นั้นสามารถละเว้นได้
DLosc

2

Japt , 20 ไบต์

บันทึก 2 ไบต์ด้วย @ETHproductions

o@'|+SpX +'\Ãp-pUÄ)·

ลองออนไลน์!

คำอธิบาย

o@'|+SpX +'\Ãp-pUÄ)·
o                       // Creates a range from 0 to input
 @                      // Iterate through the array
  '|+                   // "|" + 
     SpX +              // S (" ") repeated X (index) times +
          '\Ã            // "\" }
             p-pU       // "-" repeated U (input) +1 times
                 Ä)·    // Join with newlines

1
ทำได้ดีนี่! คุณสามารถบันทึกไบต์โดยการผลักดันแถวสุดท้ายก่อนเข้าร่วม: o@'|+SpX +'\Ãp'-pUÄ)·และเนื่องจากมีข้อผิดพลาด (จริงๆผลข้างเคียงที่ไม่ได้ตั้งใจของฟังก์ชั่นอัตโนมัติ) แล้วคุณสามารถลบใน' '-
ETHproductions

pอันที่จริงมันก็เหมือนว่ามีตัวอักษรตัวพิมพ์เล็กทั้งหมดไม่เพียง นั่นคือเพื่อให้คุณสามารถทำเช่นm*2เพื่อเพิ่มองค์ประกอบแต่ละส่วนหรือสองเท่าของmp2แต่ละรายการ
ETHproductions

2

J, 20 ไบต์

-13 ไบต์ขอบคุณบ๊อบ

*#' \|-'{~3,~2,.=@i.

ลองออนไลน์!

ต้นฉบับ: 33 ไบต์

(#&'| \'@(1,1,~])"0 i.),('-'#~>:)

ungolfed

(#&'| \' @ (1,1,~])"0 i.) , ('-'#~>:)

ลองออนไลน์!


25 ไบต์ด้วย*,&'-' '|',.'\'{."0~_1-i.
ไมล์

22 ไบต์ด้วย*,&'-' '|',.' \'{~=@i.
bob

@ บ็อบนั่นเป็นวิธีที่ฉลาดมากที่จะใช้เมทริกซ์เอกลักษณ์
ห่างจาก

@ บ๊อบขอบคุณสำหรับคำแนะนำ ฉันได้อัปเดตโพสต์
Jonah


1

Python2, 73 ไบต์

n=input()
w=0
exec'print"|"+" "*w+"\\\\"+("\\n"+"-"*-~n)*(w>n-2);w+=1;'*n

โปรแกรมเต็มรูปแบบ ฉันยังลองการประมาณค่าสตริงสำหรับบรรทัดสุดท้าย แต่กลับกลายเป็นอีกสองสามไบต์ที่นานกว่า: /

exec'print"|%s\\\\%s"%(" "*w,("\\n"+"-"*-~n)*(w>n-2));w+=1;'*n

โซลูชันอื่นที่ 73 ไบต์:

n=j=input()
exec'print"|"+" "*(n-j)+"\\\\"+("\\n"+"-"*-~n)*(j<2);j-=1;'*n

กรณีทดสอบ

0:

1:
|\
--

2:
|\
| \
---

3:
|\
| \
|  \
----

6:
|\
| \
|  \
|   \
|    \
|     \
-------

ฉันขอโทษสำหรับความคิดเห็นก่อนหน้าของฉันตอนนี้ฟังก์ชั่นที่ได้รับอนุญาต
Okx

@Okx ไม่มีปัญหา นี่เป็นโปรแกรมที่สมบูรณ์ ฉันไม่คิดว่าฉันจะมองเป็นแฟชั่นของการแก้ปัญหาการทำงาน :)
Yytsi


1

QBIC , 41 ไบต์

:~a>0|[a|?@|`+space$(b-1)+@\`][a+1|Z=Z+@-

คำอธิบาย

:~a>0|  Gets a, and checks if a > 0
        If it isn't the program quits without printing anything
[a|     For b=1; b <= a; b++
?@|`+   Print "|"
space$  and a number of spaces
(b-1)   euqal to our current 1-based line - 1
+@\`    and a "\"
]       NEXT
[a+1|   FOR c=1; c <= a+1; c++
Z=Z+@-  Add a dash to Z$
        Z$ gets printed implicitly at the end of the program, if it holds anything
        The last string literal, IF and second FOR loop are closed implicitly.

1

R, 101 ไบต์

for(i in 1:(n=scan())){stopifnot(n>0);cat("|",rep(" ",i-1),"\\\n",sep="")};cat("-",rep("-",n),sep="")

รหัสนี้สอดคล้องกับn=0กรณีทดสอบหากคุณพิจารณาเท่านั้นSTDOUT!
แน่นอนว่าstopifnot(n>0)ส่วนหนึ่งจะหยุดการดำเนินการสคริปต์แสดงอะไรที่จะSTDOUTแต่เขียนเพื่อError: n > 0 is not TRUESDTERR

Ungolfed:

for(i in 1:(n=scan()))
    {
    stopifnot(n>0)
    cat("|", rep(" ", i-1), "\\\n", sep = "")
    }

cat("-", rep("-", n), sep = "")

1
อาจต้องการแก้ไขการสะกดคำที่ไม่ดี
fəˈnɛtɪk

1

Python 2 , 62 ไบต์

n=input();s='\\'
exec"print'|'+s;s=' '+s;"*n
if n:print'-'*-~n

ลองออนไลน์!

พิมพ์ทีละบรรทัดแต่ละครั้งเพิ่มพื้นที่อื่นก่อนแบ็กสแลช หากฟังก์ชั่นที่ไม่ได้พิมพ์นั้นได้รับอนุญาตก็น่าจะสั้นลง


เห็นได้ชัดว่าฟังก์ชั่นไม่จำเป็นต้องพิมพ์
Yytsi

1

JavaScript (ES6), 71 ไบต์

f=
n=>console.log(' '.repeat(n).replace(/./g,'|$`\\\n')+'-'.repeat(n+!!n))
<form onsubmit=f(+i.value);return!true><input id=i type=number><input type=submit value=Go!>

ส่งออกไปยังคอนโซล บันทึก 6 ไบต์หากสามารถพิมพ์ไปยังเชลล์ SpiderMonkey JavaScript ได้ บันทึก 13 ไบต์หากส่งคืนเอาต์พุตเป็นที่ยอมรับ


regex นั้นมีความคิดสร้างสรรค์ ฉันลองทำอะไรซักอย่างตามสายเหล่านั้นก่อน ฉันไม่รู้เกี่ยวกับ$`รูปแบบ แต่ไม่รู้ว่าฉันจะคิดยังไง ดี
Jan



1

Perl, 63 ไบต์

$n=shift;print'|',$"x--$_,"\\\n"for 1..$n;print'-'x++$n,$/if$n

Ungolfed:

$ perl -MO=Deparse triangle.pl
$n = shift @ARGV;
print '|', $" x --$_, "\\\n" foreach (1 .. $n);
print '-' x ++$n, $/ if $n;

$"เป็นตัวคั่นรายการซึ่งเป็นค่าเริ่มต้นที่ "" $/เป็นตัวแยกเร็กคอร์ดเอาท์พุทซึ่งเป็นค่าเริ่มต้นที่ "\ n" $_เป็นตัวแปรลูปโดยปริยาย


1
อาจบันทึกบางอย่างโดยการอ่านอินพุตจาก stdin หรือไม่ $n=<>?
Ven


1

Pyth, 23 18 ไบต์

VQ++\|*dN\\)IQ*\-h

มีชุดทดสอบออนไลน์
ขอบคุณVenออกกอล์ฟ 5 ไบต์

คำอธิบาย

VQ++\|*dN\\)IQ*\-h
 Q           Q    Q  [Q is implicitly appended, initializes to eval(input)]
       d             [d initializes to ' ' (space)]
VQ         )         For N in range(0, eval(input)):
      *dN             Repeat space N times
   +\|                Prepend |
  +      \\           Append \
                      Implicitly print on new line
            IQ       If (input): [0 is falsy, all other valid inputs are truthy]
                 hQ   Increment input by 1
              *\-     Repeat - that many times
                      Implicitly print on new line

@Ven ขอบคุณ! คุณสามารถตัดครั้งสุดท้าย|เพื่อหาไบต์เพิ่มเติม
Mike Bufardeci

0

Javascript 101 (โปรแกรมเต็ม), 94 (ฟังก์ชั่นเอาท์พุท), 79 (ย้อนกลับ) ไบต์

โปรแกรมเต็มรูปแบบ

จะไม่ทำงานใน Chrome (เนื่องจากกระบวนการไม่ปรากฏขึ้นจริง ๆ )
จะไม่ทำงานใน TIO (เนื่องจากไม่อนุญาตให้มีข้อความแจ้ง)

x=prompt();s='';for(i=0;i<x;i++)s+='|'+' '.repeat(i)+`\\
`;process.stdout.write(s+'-'.repeat(x&&x+1))

ฟังก์ชั่นที่มีการพิมพ์ที่แน่นอน

x=>{s='';for(i=0;i<x;)s+='|'+' '.repeat(i++)+`\\
`;process.stdout.write(s+'-'.repeat(x&&x+1))}

ลองออนไลน์

ฟังก์ชั่นกับสตริงกลับ

x=>{s='';for(i=0;i<x;)s+='|'+' '.repeat(i++)+`\\
`;return s+'-'.repeat(x&&x+1)}

ลองออนไลน์

อักขระที่ซ้ำกันใน Javascript นั้นเป็นใบ้และดังนั้นจะเป็นการขึ้นบรรทัดใหม่ในเอาต์พุต


0

Python 2 , 82 ไบต์

def f(i,c=0):
 if c<i:print'|'+' '*c+'\\';f(i,c+1)
 print'-'*((c+1,c)[c<1]);exit()

ลองออนไลน์!

อีกต่อไปว่า Python อื่นตอบ แต่ฟังก์ชั่นวนซ้ำจะแตกต่างกัน

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


คุณสามารถทำได้-~c*(c>0)ในบรรทัดสุดท้ายที่จะบันทึก 3 ไบต์ :)
Yytsi

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