Problem bei der Kalendererstellung (lustiges Ruby-Übungsproblem)

Einführung

Nach dem Erlernen von "Einführung in Ruby für Profis", allgemein bekannt als Cherry Book Als ich meine Hände bewegen und meine Eingaben in die Praxis umsetzen wollte, fand ich einen Artikel des Autors. "Wenn Sie Probleme mit dem Ausgabematerial haben !? Ich habe Programmierprobleme für Ruby-Anfänger gesammelt (insgesamt 10 Fragen)"

Wir lösen auch andere Probleme. Erste Frage: Problem bei der Kalendererstellung (lustiges Ruby-Übungsproblem) Zweite Frage: Problem bei der Erstellung von Karaoke-Maschinen Dritte Frage: Problem bei der Erstellung der Bingokarte Vierte Frage: Problem mit Bonusgetränken Fünfte Frage: Problem bei der Erstellung des Telefonbuchs

Die erste hier aufgeführte Frage

Dies ist ein orthodoxes Problem bei der Kalendererstellung, das in "Fun Ruby" beschrieben wird. Wenn Sie die API der Date-Klasse kennen, können Sie Code nur mit grundlegenden Programmierkenntnissen schreiben.

Verwenden Sie die Date-Klasse, um das Datum und den Tag des ersten und letzten Monats des Monats zu ermitteln und den Kalender im folgenden Format anzuzeigen:

Das Ziel ist es, dass es so aussieht

     May 2020      
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 

Als ich suchte, konnte ich verschiedene Antworten finden, aber meine Antwort war so.

require 'date'

  def monthly_calendar(this_day = Date.today) #Ausführungsdatum
    #Extrahieren Sie den ersten Tag des Ausführungsmonats
    first_day = Date.new(this_day.year,this_day.month,1)
    #Sonntag der ersten Woche des Monats(Oben links im Kalender)Extrahieren Sie das entsprechende Datum
    start_day = first_day - first_day.strftime('%w').to_i

    # month year
    puts this_day.strftime('%B %Y').center(21)
    # weekdays
    puts "\sSu\sMo\sTu\sWe\sTh\sFr\sSa"
    # days
    while start_day.month <= first_day.month

      if start_day.month != first_day.month
        print "\s\s\s"
      elsif start_day.strftime('%u') == "6"
        print "\s" + start_day.strftime('%e') + "\n"
      else
        print "\s" + start_day.strftime('%e')
      end

      start_day += 1
    end

  end

puts monthly_calendar

Selbst wenn ich nur das Jahr und den Monat als Argumente übergeben habe, konnte ich den Kalender für diesen Monat anzeigen.

puts monthly_calendar(Date.new(1995,8)) #Kann in jedem Monat angegeben werden
     August 1995     
 Su Mo Tu We Th Fr Sa
        1  2  3  4  5
  6  7  8  9 10 11 12
 13 14 15 16 17 18 19
 20 21 22 23 24 25 26
 27 28 29 30 31

Es scheint, dass der Wert am Datum <1995-08-01> übergeben wird.


Bitte lassen Sie uns wissen, wenn es Verbesserungen gibt.

Recommended Posts

Problem bei der Kalendererstellung (lustiges Ruby-Übungsproblem)
Rubinproblem ⑦
Ich habe ein Kalenderproblem mit Ruby versucht
Ruby-Suchproblem
[Ruby] FizzBuzz-Problem
Ruby API Problem
Ruby API Problem
Portfolioerstellung Ruby on Rails
Erstellen eines Kalenders mit Ruby
[Ruby] Problem mit der if-Anweisung
Ruby Deposit System, Algorithmus Problem