J'ai essayé de résoudre le problème de la boisson bonus Ruby (il y a un exemple de réponse)

introduction

"Introduction à Ruby pour ceux qui veulent devenir un professionnel" Je suis un débutant en programmation après avoir appris le livre dit de la cerise. Quand j'ai voulu bouger mes mains et mettre en pratique ce que j'apportais, j'ai trouvé un article de l'auteur. "Si vous rencontrez des problèmes avec le matériel de sortie!? J'ai collecté des problèmes de programmation pour les débutants Ruby (10 questions au total)"

J'ai essayé de résoudre ce quatrième problème.

Cliquez ici pour d'autres numéros Première question: Problème de création de calendrier (problème de pratique Ruby amusant) Deuxième question: Problème de création de machine à karaoké Troisième question: Problème de création de carte de bingo Quatrième question: Problème de boisson bonus Cinquième question: Problème de création du répertoire

problème

Pour plus de détails à partir d'ici

Lorsque vous achetez une boisson dans une confiserie, vous obtenez une nouvelle boisson avec 3 bouteilles vides. Créez un programme qui calcule le nombre total de boissons que vous pouvez boire à partir du nombre de boissons que vous avez achetées en premier. De plus, si vous achetez 100 bouteilles pour la première fois, combien de bouteilles pouvez-vous boire au total?

** Remarques ** Ce problème est basé sur le problème arithmétique de la troisième année du primaire.

** Exemple **

|Nombre d'achats|Nombre de boissons| |--:|--:| | 0 | 0 | | 1 | 1 | | 3 | 4 | | 11 | 16 | | 100 | (Calculer par programme) |

Exemple de réponse

Il s'est avéré être quelque chose comme ça

class BonusDrink
  def self.total_count_for(amount)
    if amount.zero?
      0
    elsif amount.odd?
      3 * amount / 2
    elsif amount.even?
      3 * (amount - 1) / 2 + 1
    end
  end
end

Voici le code de test.

require_relative '../Bonus_drink/drink'

RSpec.describe BonusDrink do
  it "total_count_for" do
    expect(BonusDrink.total_count_for(0)).to eq 0
    expect(BonusDrink.total_count_for(1)).to eq 1
    expect(BonusDrink.total_count_for(3)).to eq 4
    expect(BonusDrink.total_count_for(11)).to eq 16
  end
end

Commentaire

Je pense qu'il est établi comme un programme, mais il y a un léger sentiment que cette solution était bonne comme objectif du problème de programmation. (La plupart du temps, j'ai déplacé le papier et le stylo pour le résoudre mathématiquement.)

Premier

Comme vous pouvez le voir dans le problème, vous pouvez obtenir «« Échangez 3 bouteilles vides et 1 nouvelle ». Le point de ce problème est que même une nouvelle bouteille que vous avez échangée et reçue sera sujette à échange.

Alors

Nombre d'achats: 3 Nombre de nouvellement échangés:1 Nombre total de boissons: 4

Cependant, si vous ajoutez les bouteilles reçues et que vous atteignez trois, vous pouvez en échanger une autre. Par exemple

Nombre d'achats: 5 Nombre de nouvellement échangés:1 Livres supplémentaires échangés: 1 Nombre total de boissons: 7

Cela signifie que. Par conséquent, à mesure que le nombre d'achats augmente, des échanges supplémentaires seront répétés plusieurs fois.

J'ai pensé que c'était un problème d'exprimer cela par programmation et de substituer à plusieurs reprises le nombre total de bouteilles et le nombre de bouteilles remplacées pour me rapprocher du nombre total maximum, mais je n'y ai pas pensé et j'ai abandonné. Je vous serais reconnaissant si vous pouviez me faire savoir dans les commentaires si vous avez des exemples de réponses.

Explication d'ici

Alors, comment ai-je résolu le problème?

Nombre d'achats Nombre de boissons
0 0
1 1
2 2
3 4
4 5
5 7
6 8
7 10
8 11
9 13
10 14
11 16

Ensuite, *** "Lorsque le nombre de bouteilles achetées n est impair, la valeur de (n * 3) correspond au nombre total de bouteilles buvables en n et (n + 1)" *** J'ai découvert. Au fait, quand il est à 0, il ne tient pas. (Il existe diverses autres règles, mais cette fois je vais utiliser cette équation.) En particulier,

Nombre d'achats Nombre de boissons
5 7
6 8
5 * 3 = 15
7 + 8 = 15

Ce sera! En d'autres termes, *** "Si vous divisez n par 3 et le divisez par 2, vous pouvez trouver le nombre de boissons que vous pouvez boire." *** Si vous traduisez cela en programmation,

#Quand c'est bizarre
3 * amount / 2
#Lorsqu'il est pair, il est calculé à partir du nombre impair précédent.
3 * (amount - 1) / 2 + 1

[Exemple de la réponse ci-dessus](#Exemple de réponse) est un résumé du contenu ci-dessus.

à la fin

Je comprends que ce type de règle ne tient pas, mais je ne suis pas sûr ** "Pourquoi cela se produit" **. Si vous pouvez expliquer d'une manière facile à comprendre, je voudrais vous demander d'enseigner avec embarras.

Je vous remercie!

Recommended Posts

J'ai essayé de résoudre le problème de la boisson bonus Ruby (il y a un exemple de réponse)
J'ai essayé de résoudre le problème de la machine à karaoké Ruby (il y a un exemple de réponse)
J'ai essayé de résoudre le problème de création de carte de bingo Ruby (il y a un exemple de réponse)
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
J'ai essayé de résoudre le problème de Google Tech Dev Guide
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby (temps limite 10 minutes)
J'ai brièvement résumé la grammaire de base de Ruby
J'ai essayé de résoudre le problème de la campagne paiza "Challenge from Phantom Thief 813"
Je veux rendre le cadre de la zone de texte rouge lorsqu'il y a une erreur de saisie
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
Je veux connaître la réponse de l'application Janken
Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne
L'argument de link_to est nul (nul) et un lien inattendu a été généré, j'ai donc essayé de le vérifier
J'ai essayé de résumer les bases de kotlin et java
Puisque la lecture de JdbcCodeList de TERASOLUNA est lente, j'ai essayé d'enregistrer plusieurs à la fois.
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'ai essayé le problème FizzBuzz
[Ruby] Je souhaite inverser l'ordre de la table de hachage
Je veux résoudre le problème N + 1 où les données sont plus rassemblées et l'opération devient lente.
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
[Rubiy] J'ai essayé de résumer le traitement de la boucle ce soir [fois, pause ...]
Vous voulez savoir ce que Ruby n est la puissance de 2? (Jugement de puissance de 2)
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
J'ai essayé de comprendre comment la méthode des rails "redirect_to" est définie
J'ai essayé de vérifier le fonctionnement du serveur gRPC avec grpcurl
J'ai essayé de comprendre comment la méthode des rails "link_to" est définie
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé de faire un Numeron qui n'est pas bon avec Ruby
Je veux changer la valeur de l'attribut dans Selenium of Ruby
J'ai essayé d'expliquer la méthode
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
[Introduction à Java] J'ai essayé de résumer les connaissances que j'estime essentielles
Obtenez le type d'un élément d'un tableau pour déterminer s'il s'agit d'un tableau
Comment résoudre la construction de l'environnement local de Ruby on Rails (MAC)!
J'ai essayé de visualiser l'accès de Lambda → Athena avec AWS X-Ray
[Ruby] J'ai essayé de résumer les méthodes fréquentes dans paiza
[Ruby] J'ai essayé de résumer les méthodes fréquentes avec paiza ②
J'ai essayé de mesurer et de comparer la vitesse de Graal VM avec JMH
J'ai un LSP et j'ai essayé de créer un environnement pour écrire Java avec Vim (NeoVim), mais je n'ai pas pu battre l'IDE ...
J'ai essayé un problème de calendrier avec Ruby
J'ai essayé de résumer les méthodes utilisées
Comme la commande du utilisée lorsque la capacité est pleine est difficile à utiliser, j'ai essayé de l'envelopper avec du rubis
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de résumer l'API Stream
Qu'est-ce que Docker? J'ai essayé de résumer
Ruby: J'ai essayé de savoir où Nokogiri va voir l'encodage lui-même
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
J'ai essayé de comparer la technologie d'infrastructure des ingénieurs ces jours-ci avec la cuisine.