Khắc một số trang sức ASCII!


25

Ngày 13 tháng 3 được công nhận là Ngày Ngọc quốc gia , là chủ đề của thử thách này. Vì vậy, với một số nguyên ncó giá trị nlớn hơn 0, hãy tạo một viên ngọc ASCII. Ví dụ:

n = 1          n = 2             n = 3
                                       ______
                     ____             /      \
 __                 /    \            \      /
/  \                \    /             \    /
\  /                 \  /               \  /
 \/                   \/                 \/

Đáy được định nghĩa là đáy của viên ngọc cho đến cặp cao nhất \/. Phần còn lại là hàng đầu. Cho ví dụ trên trong đó n = 1:

Bottom: \  /    Top:   __
         \/           /  \

Như bạn có thể thấy, phía dưới được tạo thành từ n + 1các lớp \/(1 * lines from the bottom) * 2khoảng trống ở giữa với tối đa các nđường từ đáy của viên ngọc. Nếu chúng ta lấy viên ngọc thứ hai ( n = 2), chúng ta có thể thấy rằng:

 ____
/    \      
\    /  2 (or n) layers from the bottom with 1*2*2 or 4 spaces in between \/
 \  /   1 layer from the bottom with 1*1*2 or 2 spaces in between \/
  \/    The bottom (0 layers) with 1*0*2 spaces or 0 spaces in between \/

Phía trên được làm bằng một cặp /\với n*2khoảng trắng ở giữa với phần n*2dưới ở trên.

Quy tắc

  • Phải có thể nhận bất kỳ số nguyên dương nào khác làm đầu vào của người dùng
  • Phải tạo một viên ngọc với thông số kỹ thuật được xác định ở trên (được trình bày ở đây):
    • Phía trên được làm bằng một cặp /\với n*2khoảng trắng ở giữa với phần n*2dưới ở trên.
    • Đáy được tạo thành từ n + 1các lớp \/(1 * lines from the bottom) * 2khoảng trống ở giữa với tối đa các nđường từ đáy của viên ngọc.
  • Trailing newlines sau viên ngọc, hoặc dấu cách trên mỗi dòng được cho phép.
  • Không có sơ hở tiêu chuẩn được phép

Tiêu chí chiến thắng

Ít nhất là chiến thắng byte!


4
Nói một cách nghiêm túc "không khác biệt tích cực" là dư thừa - nếu bạn muốn bao gồm 0, bạn phải nói "không âm".
Vụ kiện của Quỹ Monica

Câu trả lời có thể có trong PETSCII không?
Shaun Bebbers

3
Khi số lượng càng cao, "đồ trang sức" bắt đầu trông giống như đồ trang sức hơn và giống như lát pizza hơn, hoặc có lẽ đó chỉ là giờ ăn trưa.
Marijn Stevering

Câu trả lời:


27

Than , 17 byte

Mã số:

NβG←β_↙↙¹→↘⁺β¹‖M→

Giải trình:

Nβ                      # Place the input into β
   G←β_                 # Draw a line of length β with _ as the filling character
        ↙                # Move the cursor one down and one left
         ↙¹              # Draw a line from the cursor position to one position ↙
           →             # Move the cursor 1 to the right
             ⁺β¹         # Add one to the input and..
            ↘            # Create a line pointing ↘, with the size calculated above
                ‖M→     # Mirror to the right

Một lệnh rất gọn gàng‖M, nó cũng tự động phản chiếu /vào \.

Sử dụng mã hóa Than .

Hãy thử trực tuyến!


Lệnh gương đó thực sự rất tuyệt! Nó phản ánh dấu ngoặc và các nhân vật khác quá? Và có cách nào để ghi đè hành vi đó không?
DJMcMayhem

2
@DJMcMayhem :)
Adnan

27
Lol, bạn đã tạo ra kim cương từ than củi!
SteeveDroz

8

05AB1E , 27 20 byte

ƒN·ð×…\ÿ/}¹·'_×)R.c

Hãy thử trực tuyến!

Giải trình

ƒ                      # for N in range[0 ... n]
 N·ð×                  # push N*2 spaces
     …\ÿ/              # push the string "\ÿ/" with "ÿ" replaced by the spaces 
         }             # end loop
          Â            # push a reversed copy of the top of the stack 
                       # (the largest row of the bottom of the diamond)
           ¹·'_×       # push input*2 underscores
                )      # wrap the stack in a list
                 R     # reverse the list
                  .c   # join the list on newlines, padding each row to equal length

Haha, tốt lắm! Tôi tin rằng bạn có thể thay đổi D„/\„\/‡để Â.
Ad Nam

@Adnan: Vâng, tôi vừa nhận ra rằng bản thân mình khi thực hiện một cải tiến: P
Emigna

8

Python 2, 101 98 95 byte

lambda n:'\n'.join([' '+'__'*n,'/'+'  '*n+'\\']+[' '*i+'\\'+'  '*(n-i)+'/'for i in range(n+1)])

Hãy thử trực tuyến!

Hàm ẩn danh nhận số nguyên dương và trả về một chuỗi

Python 3.6, 92 byte (Nhờ Ben Frankel)

lambda n:f' {"__"*n}\n/{"  "*n}\\\n'+'\n'.join(' '*i+'\\'+'  '*(n-i)+'/'for i in range(n+1))

Tôi không thể tìm thấy trình thông dịch trực tuyến cho phiên bản này, nhưng nó ngắn hơn một chút do chuỗi f trong phiên bản 3.6.


Bạn có thể lưu ba byte trong Python 3.6 : lambda n:f' {"__"*n}\n/{" "*n}\\\n'+'\n'.join(' '*i+'\\'+' '*(n-i)+'/'for i in range(n+1)). Lợi dụng dây f.
Ben Frankel

Tôi khá chắc chắn repl.it có bộ thử nghiệm cho Python 3
Anthony Phạm

@AnthonyPham repl.it và TryItOnline đều sử dụng Python 3.5, tôi đã kiểm tra
nghiện toán học

Whoa, cuối cùng! Tôi tự hỏi điều gì đã khiến Python mất quá lâu. Mọi ngôn ngữ đều xứng đáng được nội suy chuỗi ...
Felix Dombek

7

PHP, 123 byte

echo($s=str_pad)(" ",$z=1+2*$a=$argv[1],_).$s("\n/",$z+1," ")."\\\n";for($i=0;$i<=$a;)echo$s($s("",$i)."\\",$z-$i++)."/\n";

143 Byte phiên bản đầu tiên

for(;$i<3+$a=$argv[1];$i++)echo 1-$i?str_pad("",$i?$i-2:1):"/",str_pad($i>1?"\\":"",$i<2?2*$a:2*($a-$i+2)+1,$i?" ":_),$i<2?$i?"\\":"":"/","\n";

Hãy thử nó ở đây!


Tôi có thể thử cái này ở đâu?
Anthony Phạm

@AnthonyPham Đây .
Ad Nam

Bạn có thể tạo ra 119 byte: ideone.com/RPCVZe
Tschallacka

@Tschallacka nếu tôi cho rằng tôi chỉ sử dụng một Sytem Linux
Jörg Hülsermann

Chà, miễn là bạn không chỉnh sửa bằng notepad.exe, hầu hết các biên tập viên đều có kết thúc dòng linux ... i.imgur.com/QZsmf4r.png bảng điều khiển cửa sổ sẽ vui vẻ hiển thị \ n như một dòng mới thực sự. Vì vậy, y ou có thể cạo một vài byte câu trả lời của bạn.
Tschallacka

6

V , 28 27 26 byte

1 byte được lưu nhờ @DJMcMayhem bằng cách sử dụng >thay vìÉ

Ài__<esc>É ÙÒ r/Á\Ùr\$r/òÙlxx>

<esc>0x1b

Hãy thử trực tuyến!

Hexdump:

00000000: c069 5f5f 1bc9 20d9 d220 722f c15c d972  .i__.. .. r/.\.r
00000010: 5c24 722f f2d9 6c78 783e                 \$r/..lxx>

Giải trình

Hàng đầu:

Ài__<esc>              " Write argument times __
É<space>               " Prepend a space to the line
Ù                      " Duplicate line below cursor, cursor also moves down
Ò<space>               " Replace every character with a space
r/                     " Change the first character in the line to a /
Á\                     " Append a \ to the end of the line

Dưới cùng:

Ù                      " Duplicate
r\                     " Change the first character in the line to a \
$r/                    " Replace the last character with a /
ò                      " Until a breaking error occurs do:
  Ù                    "  Duplicate
  lxx                  "  Remove 2 middle characters (spaces)
  >                    "  Indent by one space (implicit ending >)
                       " Implicit ending ò

Câu trả lời tốt đẹp! Bạn có thể thay đổi É<space>thành >phần cuối của macro được điền hoàn toàn vào>>
DJMcMayhem

@DJMcMayhem Đề nghị hay! Vì vậy, >thụt lề một không gian thay vì bởi một tab?
Kritixi Lithos

Vâng! Đó là lý do tôi có set expandtabset shiftwidth=1
DJMcMayhem


5

JavaScript (ES6), 80 byte

f=
n=>` ${"_".repeat(n*2)}
/${s=" ".repeat(n)}${s}\\`+s.replace(/|/g,"\n$`\\$'$'/")
<input type=number oninput=o.textContent=f(this.value)><pre id=o>


3

Python 3, 107 105 byte

n,s=int(input())," "
print(s+n*"__","/"+n*2*s+"\\",*[i*s+"\\"+2*(n-i)*s+"/"for i in range(n+1)],sep="\n")

Có một int từ Stdin


3

MATL , 34 byte

QE:qgOO(t~E3O(GQXy3*tPgEhv'_/\ 'w)

Hãy thử nó tại MATL Online!

Giải trình

QE:qg   % Create array [0 1 1 ... 1 1] of size2*(n+1)
OO(     % Turns last 1 into a 0: [0 1 1 ... 1 0]
t~      % Duplicate and negate: [1 0 0 ... 0 1]
E3O(    % Multiply by 2, turn last 2 into 3: [2 0 0 ... 0 3]
GQXy    % Push identity matrix of size n+1
3*      % Multiply by 3
tPgE    % Duplicate, flip, turn 3 into 2
h       % Concatenate the two matrices horizontally
v       % Concatenate all arrays vertically into a matrix
'_/\ '  % Push this string
w)      % Index (modular, 1-based) with the matrix into the string. Implicitly display

3

PowerShell , 76 , 74 byte

param($n)" "+'_'*2*$n;"/$(' '*$n*2)\";$n..0|%{' '*($n-$_)+"\$(' '*$_*2)/"}

Lưu ý: ví dụ trực tuyến chứa một chút gói như một minh chứng. Đặt trong một hàm PoSH hoặc tập lệnh để thực thi.

Hãy thử trực tuyến!


Chào mừng đến với PPCG! Câu trả lời đầu tiên rất hay và rất vui khi thấy một PowerSheller khác! Bạn có thể lưu một vài byte bằng cách sử dụng biến tăng dần trong vòng lặp - ' '*$i++thay vì ' '*($n-$_).
admBorkBork

3

C, 131 byte

i;f(n){for(printf(" ",i=0);i++<n*2;)printf("_");for(printf("\n/%*c\n",n*2+1,92,i=0);i++<n+1;)printf("%*c%*c\n",i,92,(n-i)*2+3,47);}

Hãy thử trực tuyến!


Tôi có thể kiểm tra cái này ở đâu?
Anthony Phạm

@AnthonyPham Liên kết Tio đã thêm.
Steadybox

Cách tiếp cận đẹp bằng cách sử dụng chiều rộng của printf để điền vào chỗ trống. Bạn có thể lưu thêm 9 byte nếu bạn tạo macro cho printf, xóa i = 0 đầu tiên và thêm biến mới j thay vì khởi tạo lại i thành 0 trong lần chạy thứ hai:i,j;f(n){for(p(" ");i++<n*2;p("_"));for(p("\n/%*c\n",n*2+1,92);j++<n+1;p("%*c%*c\n",j,92,(n-j)*2+3,47));}
Claudiu

@Claudiu Cảm ơn, nhưng sau đó chức năng sẽ chỉ tạo ra đầu ra chính xác khi nó được gọi lần đầu tiên và IIRC đó là trái với quy tắc ở đây. Hàm sẽ hoạt động bất kể nó được gọi bao nhiêu lần.
Steadybox

@Steadybox oh tôi hiểu rồi, xin lỗi vì điều đó. Điều này áp dụng cho tất cả các câu hỏi codegolf? Nhìn vào câu hỏi cụ thể này có vẻ như nó không muốn nhiều đầu vào.
Claudiu

2

Bình, 44 byte

+" "*Q"__"++\/**2Qd\\jm+++*d\ \\**2-Qd\ \/hQ

thử nó!

giải trình

Mã bao gồm 3 phần:

+" "*Q"__"               # pretty straightforward " "+input()*"__"
++\/**2Qd\\              # d is defined as " ":  "/"+2*input()*d+"\"
jm+++*d\ \\**2-Qd\ \/hQ  # The third part is a bit more complex so I'll explain it further:

jm                   hQ  # Map some lambda function onto range(input()+1) and join the result on newlines
  +++*d\ \\**2-Qd\ \/    # Here d is the lambda argument (so I can't use it for spaces -.-) 
  +++*d\ \\**2-Qd\ \/    # In Python: d*" "+"\\"+2*(Q-d)*" "+"/"

2

Python3, 104 byte

n=int(input());print(" "+"__"*n+"\n/"+"  "*n+"\\")
for i in range(n+1):print(" "*i+"\\"+"  "*(n-i)+"/")

Chương trình lấy một số nguyên từ STDIN và trả lại viên ngọc vào STDOUT.


2

Pip , 43 byte

42 byte mã, +1 cho -ncờ.

Ps.'_Xa*2P"/\"JsXa*2sX_.'\.sXa-_X2.'/M,a+1

Đưa đầu vào làm đối số dòng lệnh. Hãy thử trực tuyến!

Giải trình

Xây dựng hai dòng đầu tiên riêng biệt, sau đó là phần còn lại của viên ngọc với thao tác bản đồ:

Ps.'_Xa*2
      a*2  Cmdline arg, times 2
   '_X     That many underscore characters
 s.        Concatenated to a space character
P          Print (with newline)

P"/\"JsXa*2
        a*2  Cmdline arg, times 2
      sX     That many space characters
 "/\"J       Join the string "/\" with the above as the separator
P            Print (with newline)

sX_.'\.sXa-_X2.'/M,a+1
                  ,a+1  Numbers from 0 up to and including a
                 M      Map the following lambda function:
sX_                      Space, repeated (fn arg) times
   .'\                   Concatenate \
      .                  Concatenate:
       sXa-_              Space, repeated (a - (fn arg)) times
            X2            repeated twice
              .'/        Concatenate /
                         Print result list, newline separated (implicit, -n flag)

Giải pháp khác

Ngoài ra 42 + 1 byte, lần này với -lcờ:

Ys.tAL'_.sX2+,a.0(yALRVyRXD1-_)R0'\R1'/ZDs

TIO



2

C, 115 byte

#define p printf(
i;j;f(n){for(p" ");i++<n;p"__"));for(p"\n/%*c",2*n+1,92);j<=n;p"\n%*c%*c",++j,92,n*2-j*2+3,47));}

Hãy thử trực tuyến!

C, 123 byte

Mặc dù thách thức không yêu cầu, nhưng với chi phí 8 byte, chức năng có thể được sử dụng lại (giải pháp đầu tiên tiết kiệm 8 byte bằng cách dựa vào khởi tạo ngầm của các biến toàn cục).

#define p printf(
i;f(n){for(i=0,p" ");i++<n;p"__"));for(i=0,p"\n/%*c\n",2*n+1,92);i<=n;p"%*c%*c\n",++i,92,n*2-i*2+3,47));}

Hãy thử trực tuyến!


2

Mẻ, 152 byte

@set s=
@for /l %%i in (1,1,%1)do @call set s=  %%s%%
@echo  %s: =_%
@echo /%s%\
@set s=\%s%/
:l
@echo %s%
@if %s:~-2%==/ set s=%s:\  = \%&goto l

Các xét nghiệm:

n = 1
 __
/  \
\  /
 \/

n = 2
 ____
/    \
\    /
 \  /
  \/

n = 3
 ______
/      \
\      /
 \    /
  \  /
   \/

Tôi sẽ cần một bộ kiểm tra để kiểm tra điều này.
Anthony Phạm

2

C #, 187 byte

Tôi chắc chắn có một giải pháp nhỏ gọn hơn ngoài kia nhưng đây là nỗ lực đầu tiên của tôi:

var a=" "+new string('_',2*n)+"\n/"+new string(' ',2*n)+"\\\n";for(int i=n;i>0;i--){a+=new string(' ',n-i)+"\\"+new string(' ',2*i)+"/\n";}a+=new string(' ',n)+"\\/";Console.Write(a);

Hãy thử trực tuyến ..


Tôi sẽ cần một bộ kiểm tra để kiểm tra điều này.
Anthony Phạm

1

JavaScript (ES6), 93 byte

n=>(` 0
/2\\`+`
1\\4/`.repeat(k=++n)).replace(/\d/g,c=>' _'[+!+c].repeat(c&1?k-n-2:+c+--n*2))

Bản giới thiệu



1

Perl 5 109 94 + 1 (đối với cờ -p) = 95 byte

Hãy thử trực tuyến!

$l=$_*2;$s=" "."_"x$l."\n/"." "x$l."\\\n";$s.=" "x$_."\\"." "x($l-$_*2)."/\n"for 0..$_;print$s

Có thể chạy như vậy:

perl -p <name of file> <<< n

Bị đánh cắp

$l=$_*2;
$s=" "."_"x$l."\n/"." "x$l."\\\n";
$s.=" "x$_."\\"." "x($l-$_*2)."/\n"for 0..$_;
print$s

Giải trình

#Sets $l to twice the value of the input 'n'
$l=$_*2;  

#Top 2 rows of jewel adding $l underscores then newline  
#followed by '/' and $l spaces.  The '\\\n' is an escaped '\' and a newline
$s=" "."_"x$l."\n/"." "x$l."\\\n";

#The meat of the jewel generation.  It contains a for-loop
#that iterates from 0 to $_ (the input value 'n')
#The loop uses its iterator value ($_ (which overrides the outer $_))
#to determine how many leading spaces it needs to apply.
#Then it adds a '\' with '\\' followed by $l-$_*2 number of spaces
#(the inside of the jewel).  Again, while under the umbrella of the for-loop,
#the $_ refers to the iterator value of the for-loop.
#After the inner spaces, it goes on to add in the '/' and a new line
$s.=" "x$_."\\"." "x($l-$_*2)."/\n"for 0..$_;

#Lastly, it prints the compiled Scalar value $s.  (In Perl, Strings are Scalar values or references
print$s

Tôi sẽ cần một bộ kiểm tra để kiểm tra điều này vì không phải ai cũng hiểu hoặc có khả năng chạy nó theo cách bạn đã nêu
Anthony Phạm

@AnthonyPham Tôi đã thêm liên kết Dùng thử trực tuyến
CraigR8806
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.