61 votes

Code Golf: Jouer des Cubes

Le défi

Le code plus court en nombre de caractères, qui sera de sortie de jeu briques de la tour de la série en fonction de la saisie de l'utilisateur.

L'entrée sera une série de nombres (positifs, négatifs et nuls) qui représente la hauteur du cube actuel de la tour à la suite de leur index. Une hauteur de 0 signifie pas de tour et est espacée.

Un cube de la tour est composée d'un empilement de cubes. Si le nombre d'entrée sur l'indice actuel est positif, les cubes aller jusqu', si le nombre d'entrée est négative, les cubes de descendre. Un seul cube est dessiné à l'aide de 4 lignes suivantes:

__
 /__ /|
| | |
|___|/

Les Cubes sont en 3D -, ce qui signifie qu'ils se cacher les uns des autres lorsque deux tours sont placés les uns à côté des autres, de générer de faux point de vue.

Toutes les entrées peuvent être supposé pour être valide et sans erreurs - Chaque numéro est séparée par un espace blanc sur une seule ligne, avec au moins un chiffre.

Des cas de Test

Entrée:
 2 -3 -2 1 2 -1
Sortie:
 __ __
 /__ /| /__ /|
 | | | _| | |
 |___|/| /__|___|/|
 | | |__ _| | | |__
 |___|/__ /__|___|___|/__ /|
 | | | | | | |
 |___|___|/| |___|/
 | | | |
|___|___|/
 | | |
|___|/


Entrée:
 1 2 3 4 -2 4 3 2 1
Sortie:
 __ __ 
 /__ /| /__ /|
 _ | | | | | |__
 /__|___|/| |___|/__ /|
 _| | | | | | | |__
 /__|___|___|/| |___|___|/__ /|
 _| | | | | | | | | |__
 /__|___|___|___|/| |___|___|___|/__ /|
 | | | | | |_| | | | | |
|___|___|___|___|/__|___|___|___|___|/
 | | |
|___|/|
 | | |
|___|/


Entrée:
 1 3 3 7 0 -2 -2
Sortie:
__
 /__ /|
 | | |
 |___|/| 
 | | | 
 |___|/| 
 | | | 
 |___|/| 
 __ _| | | 
 /__ /__|___|/| 
 | | | | | 
 |___|___|___|/| 
 _| | | | | 
 /__|___|___|___|/| 
 | | | | | | __ __
 |___|___|___|___|/ /__ /__ /|
 | | | |
|___|___|/|
 | | | |
|___|___|/

Code de comptage d'entrée/de sortie (j'.e programme complet).

40voto

mob Points 61524

Perl 157 caractères

Cette entrée a été inspirée par l'entrée Ruby de gnibbler, y compris la partie concernant l'intégration du cube dans le code. Merci également à Kinopiko de m'avoir instruit sur la version à 4 arguments de substr .

 @O=($/.$"x99)x99;map{for$n(0..$_-1,$_..-1){map{substr$O[50-2*$n+$_],$W+4/$_,6,
(_,"__"
,"/__ /|",
"|   | |",
"|___|/")[$_]}1..4}$W+=4}@ARGV;print grep/\S/,@O
 

Explication:

Ligne 1: Choisissez où vont les cubes
Lignes 2-5: Placez les cubes là où ils vont, imprimez

39voto

gnibbler Points 103484

Ruby - 233

les cordes mutables ;) Aucun arbitraire "99" les limites. plouf :p
Dû perdre l'image du cube dans la source si

S=gets.split.map{|x|x.to_i}<<0
S.max.downto(S.min){|y|e=" ";q=e*3;r=e*3
S.map{|x|a=0,x;if(w=a.min)<=y&&x!=0&&y<z=a.max
r[-3,4]="|   | |";q[-3,4]="|___|/"+(y>w ?"|":e)else(z=z!=y)?q+=e*4:q[-2,4]="/__ /|"
r+=z ?e*4:"__  "end}
puts r,q}

Ruby - 243

Supprimer l'espace extra je l'ai mis là-bas pour obtenir la belle image du cube

S=gets.split.map{|x|x.to_i}<<0
S.max.downto(S.min){|y|e=" ";q=e*3;r=e*3
S.map{|x|a=0,x;if(w=a.min)<=y&&x!=0&&y<=z=a.max
if z==y;r+="__  "
 q[-2,3]="/__ /|"else
r[-3,4]="|   | |"
q[-3,4]="|___|/"+(y>w ?e:"|")end
else r+=e*4;q+=e*4 end}
puts r,q}
$ echo 1 3 7 3 3 |ruby pc.rb
 __ 
 /__ /| 
 | | | 
 |___|/| 
 | | | 
 |___|/| 
 | | | 
 |___|/| 
 _| | |__ __ 
 /__|___|/__ /__ /| 
 | | | | | | 
 |___|___|___|___|/| 
 _ | | | | | | 
 /__|___|___|___|___|/| 
| | | | | | | 
|___|___|___|___|___|/ 

6voto

gnibbler Points 103484

Python - 249

La seconde boucle est en retrait avec onglet

 S=map(int,raw_input().split())+[0]
for y in range(max(S),min(S)-1,-1):
 q=r=e=" "*4
 for x in S:
    w=x*(x<0);z=x*(x>0)
    if w<=y<z:r=r[:-3]+"|   | |";q=q[:-3]+"|___|/"+" |"[y>w]
    elif(y==z)*x:q=q[:-2]+"/__ /|";r+="__  "
    else:q+=e;r+=e
 print r+"\n"+q
 

Python - 393

 S=map(int,raw_input().split())+[0]
for Y in range(max(S),min(S)-1,-1):
 Q=R="";B=s=t=" "*4;N=0
 for y in S:
  if(y>0)*(y==Y)+(Y==0)*(y<0):
   q="_  _";r=" /__";s="_   ";t=" /| "
   if(N<y>0)+(N==0):q="   _"
   if y<N>0:q="| |_";r="|/__"
  elif(y>Y>=0)+(y<=Y<0):q="|   ";r="|___";s="| | ";t="|/"+("| "[(y==Y<0)+(Y==0)])+" "
  else:q=s;r=t;s=t=B
  Q+=q;R+=r;N=y
 print Q.rstrip()+"\n"+R.rstrip()
 

6voto

DigitalRoss Points 80400

Ruby, 261 258 250 242

c=[]
n=99
$F.map{|e|e=e.to_i
c<<(e<0?[e,-1]:[0,e-1])}
m=[]
x=0
c.map{|d|x+=4
k,l=d
(k+n..l+n).map{|y|y*=2
[[3,3,2,'__'],[2,1,6,'/__ /|'],[1,0,7,'|   | |'],[0,0,6,'|___|/']].map{|e|a,b,c,s=e
(m[y+a]||=' '*79)[x+b,c]=s}}}
puts m.compact.reverse

Courir avec ruby -n -a v2.rb

Cette entrée est légèrement surdimensionné qui lui permet de début et de fin de meules à tous les niveaux, pas seulement à 0. Il n'y a aucun moyen de le spécifier dans le concours "version", mais si vous remplacez les 4 premières lignes avec c=eval $_;n=99 puis il tombe à 203 octets et que vous pouvez faire: <

[[-3,3],[-3,-2],[2,3],[-3,-3],[-2,-1],[3,3],[2,2],[1,1],[0,0]]
 __ __ __ 
 /__ /| /__ /| /__ /| 
 | | | | | | | | |__ 
 |___|/| |___|/| |___|/__ /| 
 | | | | | | | | |__ 
 |___|/| |___|/ |___|/__ /| 
 | | | | | |__ 
 |___|/| |___|/__ /| 
 | | | __ | | | 
 |___|/| /__ /| |___|/ 
 | | |__ | | | 
 |___|/__ /| |___|/| 
 | | | | _| | | 
 |___|___|/| /__|___|/ 
 | | | | | | | 
 |___|___|/ |___|/ 

6voto

strager Points 41713

Befunge-93 (trop de caractères)

Très unoptimized. Mon premier Befunge programme. =]

>~:88+`v6 >11p>:!|v g13$< v $<
 000090#8 + > >68*31p v > 1-:!|!:-1g14<p+g11g13+g12g 14<
 __ :* * 5 ^ < > 31pvvp16<>:41p1 - 31g1+g :68*-!#^_ ^
 /__ /||\-6 >>1-: |^8 < $<| `g16 $< <
| | |>-*8 ^ ^ p11-2g11-1$ < >31g 11g+:::51g` | 1
|___|/ 8^0 >#-#< v ^< >51p^
 < < |`0: p 56 p34:p30:p26:p25:p22:p21:p20:*68<
^ v95:< 6^ *2:* -10< >21g4+p 21 11
1 >*- | > > 31g51gg,31g21g-3-!#v_v
1 >$ ^v< | ,+55-g16p15+1:g15 <
|!-*48 <~> ^ ^ p13+1g13 <
> ^ @

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X