Je l'ai vu venir

19

Écrivez un programme ou une fonction qui accepte un entier supérieur à 1 ou inférieur à -1. Autrement dit, l'entrée ne sera pas 0, 1 ou -1.

Si l'entrée est 2, la sortie doit être:

|\_/|
|___|

Si l'entrée est 3, la sortie doit être:

|\_/\_/|
|______|

Si l'entrée est 4, la sortie doit être:

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

Le modèle se poursuit de la même manière exacte pour les entrées plus importantes. Par exemple, si l'entrée est 10, la sortie doit être:

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

Si l'entrée est -2, la sortie doit être:

 ____
|    |
|_/\_|

Si l'entrée est -3, la sortie doit être:

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

Si l'entrée est -4, la sortie doit être:

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

Le modèle se poursuit de la même manière exacte pour les entrées plus petites. Par exemple, si l'entrée est -10, la sortie doit être:

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

La sortie peut être imprimée ou renvoyée sous forme de chaîne avec un retour à la ligne facultatif. Le coin "vide" en haut à droite de la sortie pour les entrées négatives peut être un espace ou il peut rester vide.

Le code le plus court en octets gagne.

Loisirs de Calvin
la source
12
J'ai vu ce que tu as fait là-bas.
Alex A.

Réponses:

1

Pyth, 45 octets

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

Essayez-le en ligne: démonstration ou suite de tests

Explication:

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
la source
4

CJam, 56 50 49 octets

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

Essayez-le en ligne dans l' interpréteur CJam.

Comment ça fonctionne

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
la source
3

Pyth, 56 54 octets

Je joue à Pyth au téléphone avec l'interprète en ligne. C'est une excellente idée.

Mise à jour 2015-10-15: J'ai réécrit la chose (toujours sur mon téléphone, lol) et j'ai enregistré 2 octets, dont un aurait pu être fait avec l'original aussi.

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

Essayez-le en ligne.

PurkkaKoodari
la source
2

Minkolang 0,8 , 100 octets

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

Construit simplement la pile, puis imprime le tout à la fois. Je suis sûr que cela pourrait être joué au golf, mais j'ai déjà consacré beaucoup de temps à cela ...

El'endia Starman
la source
1

JavaScript (ES6), 111 98 octets

Découverte d'une technique optimale! Il s'avère que la suppression de tous ces interpolateurs des chaînes de modèle économise beaucoup d'octets. Peut-être pourrait-il encore être raccourci, peut-être pas. Dans tous les cas, les chaînes de modèles ES6 (et les fonctions fléchées) sont géniales. :)

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

Python 2.7, 144 octets

Cela a pris plus d'octets que prévu. Voici le code.

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
toujours
la source
0

Java, 272 octets

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
la source
0

SpecBAS - 167 octets

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$est une IFdéclaration en ligne ,#13 est un moyen d'incorporer des sauts de ligne dans une chaîne (et n'a pas toujours besoin d'un "+" si c'est entre des chaînes codées en dur).

Depuis quelques versions, SpecBAS vous permet d'avoir plusieurs affectations à une seule LETinstruction, ce qui permet de sauvegarder certains caractères.

Brian
la source
0

Python 2.7, 118 octets

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

Passer de 120 à 118 était amusant!

nigel222
la source
0

Rubis - 113 octets

Semble trop long. Je vais essayer de jouer au golf un peu plus.

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
la source
0

C #, 185 octets

C # a du mal à jouer au golf avec des cordes répétitives.

Complètement 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));}

Indentation et nouvelles lignes ajoutées pour plus de clarté:

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)
    );
}
Hand-E-Food
la source
0

Powershell - 200 190 186 168 154

Joué l'équation (4 - (($ n-2) 3)) à (3 $ n-6) avec quelques parens et points-virgules étrangers.

Trouvé que `n est l'équivalent de [Environment]::NewLineet c'est $s -f [args]l'équivalent de [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)

L'explication conserve des parenthèses clarifiées:

$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)
Quarante3
la source