Geldiğini Gördüm


19

1'den büyük veya -1'den küçük bir tamsayı alan bir program veya işlev yazın. Yani, giriş 0, 1 veya -1 olmayacaktır.

Giriş ise 2, çıkış:

|\_/|
|___|

Giriş ise 3, çıkış:

|\_/\_/|
|______|

Giriş ise 4, çıkış:

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

Desen, daha büyük girişler için aynı şekilde devam eder. Örneğin, giriş ise 10çıkış şöyle olmalıdır:

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

Giriş ise -2, çıkış:

 ____
|    |
|_/\_|

Giriş ise -3, çıkış:

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

Giriş ise -4, çıkış:

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

Desen daha küçük girişler için aynı şekilde devam eder. Örneğin, giriş ise -10çıkış şöyle olmalıdır:

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

Çıktı isteğe bağlı bir son satır içeren bir dize olarak yazdırılabilir veya döndürülebilir. Negatif girişler için çıktının sağ üst "boş" köşesi boşluk olabilir veya boş kalabilir.

Bayt cinsinden en kısa kod kazanır.


12
Ben gördüm orada ne yaptığını.
Alex A.

Yanıtlar:


1

Pyth, 45 bayt

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

Çevrimiçi deneyin: Gösteri veya Test Paketi

Açıklama:

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

4

CJam, 56 50 49 bayt

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

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

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#

3

Pyth, 56 54 bayt

Çevrimiçi tercümanla telefonda Pyth'i golf oynuyorum. Bu tamamen harika bir fikir.

2015-10-15 Güncellemesi: (Yine de telefonumda lol) şeyi yeniden yazdım ve orijinali ile de yapılabilecek 2 bayt sakladım .

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

Çevrimiçi deneyin.


2

Minkolang 0.8 , 100 bayt

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

Yığını oluşturur ve hepsini aynı anda yazdırır. Eminim bu golf olabilir ama zaten bu konuda çok zaman geçirdim ...


1

JavaScript (ES6), 111 98 bayt

Optimal teknik keşfedildi! Tüm bu enterpolatörleri şablon dizelerinden kaldırdığınızda çok fazla bayt tasarrufu sağlanıyor. Belki yine de kısaltılabilirdi, belki değil. Her durumda, ES6 şablon dizeleri (ve ok işlevleri) harika. :)

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

0

Python 2.7, 144 bayt

Bu beklenenden fazla bayt aldı. İşte kod.

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

0

Java, 272 Bayt

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;
}

0

SpecBAS - 167 bayt

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$satır içi bir IFifadedir, #13yeni satırları bir dizeye gömmenin bir yoludur (ve sabit kodlu dizeler arasındaysa her zaman "+" gerekmez).

Birkaç sürümden bu yana, SpecBAS bir LETifadeye birden fazla atama yapmanızı sağlar , bu da bazı karakterlerin kaydedilmesine yardımcı olur.


0

Python 2.7, 118 bayt

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

120'den 118'e inmek eğlenceliydi!


0

Ruby - 113 bayt

Çok uzun görünüyor. Bunu biraz daha golf yapmaya çalışacağım.

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)

0

C #, 185 bayt

C # yinelenen dizeleri golf ile mücadele.

Tamamen golf oynadı:

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));}

Netlik için girintiler ve yeni satırlar eklendi:

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)
    );
}

0

Powershell - 200 190 186 168 154

Bazı yabancı parens ve noktalı virgüllerle birlikte (4 - (($ n-2) 3)) ila (3 $ n-6) denklemini dışarı çıkardı .

`N 'nin eşdeğeri [Environment]::NewLineve bunun $s -f [args]eşdeğeri olduğu bulundu [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)

Açıklama, açıklayıcı parantezleri korur:

$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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.