Saya Melihat Itu Datang

19

Tulis program atau fungsi yang menggunakan bilangan bulat lebih besar dari 1 atau kurang dari -1. Artinya, input tidak akan 0, 1, atau -1.

Jika inputnya adalah 2, outputnya harus:

|\_/|
|___|

Jika inputnya adalah 3, outputnya harus:

|\_/\_/|
|______|

Jika inputnya adalah 4, outputnya harus:

|\_/\_/\_/|
|_________|

Pola berlanjut dengan cara yang persis sama untuk input yang lebih besar. Misalnya, jika inputnya adalah 10, outputnya harus:

|\_/\_/\_/\_/\_/\_/\_/\_/\_/|
|___________________________|

Jika inputnya adalah -2, outputnya harus:

 ____
|    |
|_/\_|

Jika inputnya adalah -3, outputnya harus:

 _______
|       |
|_/\_/\_|

Jika inputnya adalah -4, outputnya harus:

 __________
|          |
|_/\_/\_/\_|

Pola berlanjut dengan cara yang persis sama untuk input yang lebih kecil. Misalnya, jika inputnya adalah -10, outputnya harus:

 ____________________________
|                            |
|_/\_/\_/\_/\_/\_/\_/\_/\_/\_|

Output dapat dicetak atau dikembalikan sebagai string dengan baris tambahan opsional. Pojok "kosong" kanan atas output untuk input negatif mungkin berupa spasi atau mungkin tetap kosong.

Kode terpendek dalam byte menang.

Hobi Calvin
sumber
12
Saya melihat apa yang Anda lakukan di sana.
Alex A.

Jawaban:

1

Pyth, 45 byte

jtW!J<Q0.b+.[YN+h*3t.aQJY.>[d.<"\_/"J\_)J" ||

Cobalah online: Demonstrasi atau Test Suite

Penjelasan:

jtW!J<Q0.b+.[YN+h*3t.aQJY.>[d.<"\_/"J\_)J" ||  implicit: Q = input number
    J<Q0                                       assign Q < 0 to J
                           [           )       create a list with
                            d                    * the string " "
                             .<"\_/"J            * the string "\_/" rotated to 
                                                   the left by J
                                     \_          * the string "_"
                         .>             J      rotate to the right by J
                                         " ||  the string " ||"
        .b                                     binary mapping, N iterates
                                               over list, Y over string:
           .[YN+h*3t.aQJ                         pad Y with N to reach a string
                                                 of length 3*(abs(Q)-1)+1-J
          +             Y                        and append Y
 tW!J                                           remove the first line if Q > 0
j                                               print each on separate line
Jakube
sumber
4

CJam, 56 50 49 byte

ri_(z"\_/"*'_@0>{\4>W<_,@*SooNoS}|1$,*]${'|\'|N}/

Cobalah online di juru bahasa CJam.

Bagaimana itu bekerja

ri     e# Read an integer from STDIN and push it on the stack.
_(z    e# Push a copy, decrement it and apply absolute value.
       e# For positive n, (n -> n-1) and (-n -> n+1).
"\_/"* e# Repeat the string that many times.
'_     e# Push an underscore.
@0>    e# Check if the original integer is positive.
{      e# If it isn't:
  \    e#   Swap the generated string with the underscore.
  4>W< e#   Discard the string's first 4 and last character.
       e#   This makes the pattern of the bottom row start and end with an
       e#   underscore, truncating it to the correct length in the process.
  _,   e#   Push the length of a copy.
  @*   e#   Repeat the underscore that many times.
  So   e#   Print a space.
  oNo  e#   Print the underscores, then a linefeed.
  S    e#   Push a space.
}|     e#
1$,    e# Retrieve the strings length.
*      e# Repeat the underscore or space that many times.
]$     e# Wrap the two generated strings in an array and sort it.
{      e# For each string:
  '|\  e#   Push a vertical bar and swap the string on top of it.
  '|N  e#   Push a vertical bar and a linefeed.
}/     e#
Dennis
sumber
3

Pyth, 56 54 byte

Saya bermain golf Pyth di telepon dengan penerjemah online. Itu ide yang sangat bagus.

Pembaruan 2015-10-15: Saya menulis ulang hal itu (masih di ponsel saya, lol) dan menyimpan 2 byte, yang salah satunya bisa dilakukan dengan aslinya.

J<Q0Ljb"||"jPW!J_WJ[y<>*K+J*3t.aQ"\_/"JKy*K?Jd\_+d*K\_

Cobalah online.

PurkkaKoodari
sumber
2

Minkolang 0.8 , 100 byte

"|"nd0`u!vbd3*["_"]"|"25*"|"1g["\_/"]"|"(O).
"[d~g1"_"<.)O(" "D*3R~1"_"*52"|"D*3R1dg2"| "*52"|"]"\/_

Cukup susun tumpukan lalu cetak semuanya sekaligus. Saya yakin ini bisa bermain golf tapi saya sudah menghabiskan banyak waktu untuk ini ...

El'endia Starman
sumber
1

JavaScript (ES6), 111 98 byte

Teknik optimal ditemukan! Ternyata menghapus semua interpolator dari string template menghemat banyak byte. Mungkin masih bisa dibuat lebih pendek, mungkin tidak. Bagaimanapun, string template ES6 (dan fungsi panah) luar biasa. :)

x=>(x>0?`|\\_/A|
|___A|`:` ___A_
|   A |
|_/\\A_|`).replace(/(...)A/g,(_,y)=>y.repeat(x>0?x-1:~x))
Produksi ETH
sumber
0

Python 2.7, 144 byte

Ini membutuhkan lebih banyak byte dari yang diharapkan. Ini kodenya.

c=int(input())
p,w,n,u=list('| \n_')
a=abs(c)-1
d=3*a
if c>0:
 s=p+"\\_/"*a+p+n+p+u*d+p
else:
 d=d+1
 s=w+u*d+n+p+w*d+p+n+p+"_/\\"*a+u+p
print s
agtoever
sumber
0

Java, 272 Bytes

String f(int i) {
String p = i>0?"\\_/":"_/\\_",x = "|"+new String(new char[(i<0?-i:i)-1]).replace("\0",p)+"|",
l=new String(new char[x.length()-2]).replace("\0","_");
return i>0?x+"\n|"+l+"|":" "+l+" \n|"+new String(new char[x.length()-2]).replace("\0"," ")+"|\n"+x;
}
Rnet
sumber
0

SpecBAS - 167 byte

1 INPUT n: DIM s$="\_/","_/\": LET t$=s$(2-(n>0))*(ABS n-1)+("_"*(n<0)),u$="_"*LEN t$
2 TEXT IIF$(n>0,"|"+t$+"|"#13"|"+u$+"|"," "+u$+#13"|"+" "*LEN t$+"|"#13"|"+t$+"|")

IIF$adalah IFpernyataan inline , #13adalah cara menyematkan baris baru ke dalam string (dan tidak selalu membutuhkan "+" jika itu di antara string hardcoded).

Sejak beberapa rilis yang lalu, SpecBAS memungkinkan Anda memiliki banyak penugasan untuk satu LETpernyataan, yang membantu menyelamatkan beberapa karakter.

Brian
sumber
0

Python 2.7, 118 byte

n=input()*3-3
a=-n-6
s=' %s_\n| %s|\n|%s_|'%(a*'_',a*' ',a/3*'_/\\')
if n>0:s='|%s|\n|%s|'%(n/3*'\\_/',n*'_')
print s

Turun dari 120 ke 118 itu menyenangkan!

nigel222
sumber
0

Ruby - 113 byte

Sepertinya terlalu lama. Saya akan mencoba untuk bermain golf ini lebih sedikit.

n=gets.to_i;p,h=n.abs-1,?|;n>0 ? (puts h+'\\_/'*p+h,h+'___'*p+h):(k=p*3+1;puts' '+?_*k,h+' '*k+h,'|_'+'/\\_'*p+h)
Peter Lenkefi
sumber
0

C #, 185 byte

C # berjuang dengan golf mengulangi string.

Benar-benar golf:

string S(int n){int m=n>0?n:-n;return string.Format(n>0?"|{0}\n|{1}|":" {1}\n|{2}|\n|_{0}","|".PadLeft(m).Replace(" ",n>0?@"\_/":@"/\_"),"".PadLeft(m=m*3-(n>0?3:2),'_'),"".PadLeft(m));}

Lekukan dan baris baru ditambahkan untuk kejelasan:

string S(int n){
    int m=n>0?n:-n;
    return string.Format(n>0?"|{0}\n|{1}|":" {1}\n|{2}|\n|_{0}",
        "|".PadLeft(m).Replace(" ",n>0?@"\_/":@"/\_"),
        "".PadLeft(m=m*3-(n>0?3:2),'_'),
        "".PadLeft(m)
    );
}
Makanan Tangan
sumber
0

Powershell - 200 190 186 168 154

Golf persamaan (4 - (($ n-2) 3)) ke (3 $ n-6) bersama dengan beberapa parens dan titik koma asing.

Ditemukan bahwa `n adalah setara dengan [Environment]::NewLineitu$s -f [args] adalah setara dengan [String]::Format:

$n=$args;if($n-gt0){$s="|{1}|{0}|{2}|";$a=$n;$b=$n*3}else{$n*=-1;$s=" {2}{0}|{3}|{0}|_/{1}\_|";$a=$n-2;$b=$c=3*$n-2};$s-f"`n",("\_/"*$a),("_"*$b),(" "*$c)

Penjelasan tetap mempertahankan tanda kurung:

$n=$args;

// Basically a way of coming up with a string to format and the 
// necessary counts of repeated characters
if($n-gt0){
  // Placeholder format
  $s="|{1}|{0}|{2}|{3}";
  // Number of repeated "\_/" instances
  $a=$n;
  // Number of repeated "_" instances
  $b=$n*3
} else { 
  $n*=-1;
  $s=" {2}{0}|{3}|{0}|_/{1}\_|";
  $a=($n-2);
  $b=(4+(($n-2)*3));
  // Number of repeated " " instances .. not needed for "positive" saw
  $c=$b;
};
[String]::Format($s,[Environment]::NewLine,"\_/"*$a,"_"*$b," "*$c)
Empat puluh3
sumber