J'ai pu en trouver un qui est un triangle en étoile complètement solide, mais j'ai du mal à créer un "creux" et un numéro un qui incrémentent tous les deux du nombre que l'utilisateur entre. Avez-vous de l'aide?
5 Réponses :
1er. itérer les lignes
2ème. mettre "*" uniquement dans les limites de la ligne: [0, i], remplir "" à l'intérieur:
3ème: exceptions pour le 1er et le dernier (n) cas
n = 8 puts '*' (n-2).times do |i| puts '*' + ' ' * (i) + '*' end puts '*' * n if n > 1
Ça marche! Puis-je essayer une méthode similaire pour produire le deuxième triangle?
Bien sûr, en itérant les lignes, vous pouvez itérer x <= [0, i] puis mettre x + 1, vous pouvez ensuite refactoriser ensuite cela.
Voici ma solution:
class RightTriangle
class << self
def draw_border(size:, char: '*')
validate(size)
1.upto(size) do |n|
1.upto(n) do |o|
break if n == size
o == 1 || o == n ? print(char) : print(' ')
end
n.times { print char } if n == size
puts if n > 0
end
end
def draw_numbers(size:)
validate(size)
1.upto(size) do |n|
1.upto(n) { |o| print o }
puts
end
end
private
def validate(size)
raise 'SizeError: `size` must be greater than 1' if size <= 1
end
end
end
# For the triangle border
RightTriangle.draw_border(size: 8) # character will be '*'
RightTriangle.draw_border(size: 8, char: 'a') # character will be 'a'
# For the numbers triangle
RightTriangle.draw_numbers(size: 8)
Et le deuxième triangle? Doit-il être imbriqué?
@Void Oups, j'ai oublié celui-là. Corrigé.
draw_border si pour le premier triangle et draw_numbers est pour le deuxième triangle.
Vous pouvez créer une méthode simple avec deux boucles, pour le deuxième triangle:
Plese enter the height of the triangle: 8 1 12 123 1234 12345 123456 1234567 12345678
Exemple d'utilisation:
def print_numbers_right_triangle(height)
1.upto(height) do |row|
1.upto(row) do |i|
print i
end
puts
end
end
print "Plese enter the height of the triangle:"
print_numbers_right_triangle(gets.strip.to_i)
Êtes-vous sûr? repl.it/repls/WelltodoGrowingOffice (Cliquez sur Exécuter et regardez à droite de l'écran)
J'ai tout vérifié et cela fonctionne très bien! Je vous remercie.
@Void Réponse mise à jour avec exemple d'entrée utilisateur
ROW = 'ð'*10 lt 6 ð ðð ððð ðððð ððððð ðððððð
Autres options, juste pour le plaisir.
Hollow
# 𥡠# ð¥¦ð¥¡ # ð¥¤ð¥¥ð¥ # ð¥©ð¥£ð¥¦ð¥¥
Il renvoie:
some_emotics = (0..9).each_with_object([]) { |n, o| o << "1F96#{n}".to_i(16) }.pack 'U*'
n.times do |n|
puts some_emotics.split("").shuffle[0..n].join
end
Pouvez-vous publier un code indiquant ce que vous avez tenté jusqu'à présent?
Bien sûr, j'ai essayé plusieurs choses jusqu'à présent.
La première et la dernière ligne du triangle sont spéciales car la première ne contient qu'un seul
*et la dernière est une ligne complète. Le reste est juste une étoile plus(n-2)fois un espace plus une autre étoile, oùnest le numéro de ligne commençant à1. Votre dernier essai atteint presque ce que vous voulez.Ok, merci Je vais essayer!
n = 1 tandis que n> = 1 met fin "*" * n n = n - 2 * "" + "*"
cela ressemblerait-il à quelque chose comme ça?