[Von 100 Punkten] Ich dachte über einen Codierungstest für Programmierschulabsolventen nach [Ruby]

Einführung

Mein Name ist yuki. Dank DMMWEBCAMP arbeite ich jetzt als WEB-Ingenieur, versammle meine Freunde, um Dienstleistungen zu entwickeln, unterrichte Programmieren als Tutor und genieße jeden Tag mein Ingenieurleben.

Wir bieten auch Support- und Fehlerfragen für diejenigen, die unerfahren sind. Wenn Sie interessiert sind, wenden Sie sich bitte an DM.

Dieses Mal wurde ich irgendwann gefragt: "Was würden Sie einem Absolventen einer Programmierschule einen Codierungstest geben?". Deshalb möchte ich meine Antwort zu diesem Zeitpunkt (vor ungefähr 6 Monaten) schreiben. ..

Heutzutage möchte ich ** sort ** hören, aber ich werde es als Erinnerung an diese Tage teilen. Wenn Sie gerade Ruby gelernt haben, versuchen Sie es bitte. Ich war der gleiche Absolvent, als ich es geschafft habe.

Problem

Es ist eine perfekte Punktzahl von 100 Punkten.

【Problemstellung】
Sie studieren Programmieren und lernen jeden Tag viel.
Nehmen wir an, heute ist der erste Tag des Monats.
Als harter Arbeiter haben Sie beschlossen, diesen Monat Regeln für das Programmieren festzulegen.
Bitte beantworten Sie die folgenden Fragen unter strikter Einhaltung der Bedingungen.

【Bedingungen】
・ Schreiben und senden Sie den Code innerhalb von 90 Minuten
・ Lösen Sie, ohne auf das Internet oder die Notizen zu schauen, die Sie bisher gelernt haben
・ Gemäß der Problemstellung heute*1. November 2020*Zu lösen durch Annahme
* Sie können es entsprechend dem Monat verwenden, in dem Sie diesen Artikel gelesen haben.

・ Da es sich um eine Punktadditionsmethode handelt, versuchen Sie, den Code so oft wie möglich zu schreiben, auch wenn Sie ihn nicht verstehen
* Geben Sie zu diesem Zeitpunkt den Teil, den Sie nicht verstanden haben, als Kommentar ein

【Problem】
(1) Geben Sie den letzten Tag dieses Monats mit einem Datumsobjekt aus.
* Allerdings erforderlich'date'Sie können es durch Schreiben verwenden.

(2) Sie haben beschlossen, jeden Tag während des Studiums ein Problem zu lösen.
Außerdem habe ich beschlossen, 2 Fragen an Tagen mit 4 am Datum und 3 Fragen an Tagen mit Primzahlen zu lösen.
Wenn Sie vom ersten Tag an lernen, wie viele Fragen können Sie diesen Monat lösen?
* Die Verwendung der Prime-Klasse ist jedoch nicht möglich.

(3) Bitte geben Sie den Kalender dieses Monats im folgenden Format aus.
https://drive.google.com/file/d/1_Km62H6c1WTzv1rWz4NfnwgVXDBC9r2c/view?usp=sharing

Antworten, Erklärungen und Bewertungskriterien

answer.rb


#60 Punkte oder mehr von 100 Punkten gehen vorbei

# (1)Antwortbeispiel
require 'date'
year = Date.today.year
month = Date.today.mon
lastday = Date.new(year, month , -1).day 
puts "(1)Antworten:"+"#{lastday}"

=begin
    (1)Bewertungskriterien perfekte Punktzahl [10 Punkte]
* Jahr und Monat sind nicht erforderlich und es werden keine Punkte abgezogen, auch wenn der letzte Tag direkt als 2020 5 eingegeben wird.
* Wenn es jedoch einen Gleichstandskandidaten gibt.Jahr oder.Bewerten Sie diejenigen, die wiederverwendbaren Code wie mon schreiben
    1.Date.neu gemacht wird [5 Punkte]
    2.Die Antwort ist 28,29,30,Jeder von 31 entspricht dem letzten Tag dieses Monats [5 Punkte]
=end

# (2)Antwortbeispiel
#Initialisierung der Anzahl der gelösten Probleme.
count = 0

#Dies ist eine Methode zur Bestimmung von Primzahlen.#Rufen Sie mit 1.
def prime?(num)
  return false if num == 1 
  (2..num).each do |i|
    if num % i == 0 && num == i
      return true
    elsif num % i == 0
      return false
    end
  end
end

#Iteriert vom ersten bis zum letzten Tag.
(1..lastday).to_a.each do |date|
    #Dies ist der Vorgang, bei dem die Nummer 4 im Datum enthalten ist.
  if date.to_s.split("").include?("4")
    count += 2
    #Dies ist der Prozess, wenn ein Tag eine Primzahl ist.
  elsif prime?(date)
    count += 3
  else
    count += 1
  end
end
puts "(2)Antworten:"+"#{count}"

=begin
(2)Bewertungskriterien perfekte Punktzahl [30 Punkte]
    1.Der Beurteilungscode der Primzahl wird geschrieben [10 Punkte]
* Wenn alle Primzahlen ausgeschrieben sind, [5 Punkte]
    2.Ich kann den Code schreiben, um den Tag zu beurteilen, an dem 4 angehängt ist(Alles kann ausgeschrieben werden) [5 Punkte]
    3.Ich kann jeden Tag einen Code schreiben, um eine Frage mit Wiederholung zu lösen [5 Punkte]
    4.Variablen, die Punkte hinzufügen, können initialisiert und hinzugefügt werden [5 Punkte]
    5.Es gibt eine Antwort [5 Punkte]
=end

# (3)Über das Problem
puts "(3)Antworten:\n" 
week = ["Su","Mo","Tu","We","Th","Fr","Sa"]
puts week.join(" ") 

#Der erste Tag eines jeden Monats wird quantifiziert.
day = Date.new(year,month,1).wday
#Tag+Halbwertsbreite für einstelliges Datum=Es ist für die erste Woche richtig, indem es mit 3 Feldern halber Breite multipliziert wird.
print "   " * day

(1..lastday).each do |date|
  print date.to_s.rjust(2) + " "
  day += 1
  if day % 7 == 0
    puts "\n"
  end
end

if day % 7 != 0
  print "\n"
end

=begin
(3)Bewertungskriterien perfekte Punktzahl [50 Punkte]
    1.Die Ausgabe des ersten Zeilentages ist abgeschlossen [10 Punkte]
    2.Das Datum wird ausgegeben [5 Punkte]
    3.Ich habe einen Weg gefunden, um mit einem Abstand von halber Breite zwischen jedem Tag auszugeben [5 Punkte]
      ※"1 ","2 "Wenn Sie manuell eingeben wie [5 Punkte]
    4.Es ist in 7 Tage unterteilt [10 Punkte]
* Wenn Sie viel Puts verwenden, ohne Zeilenumbrüche zu wiederholen oder zu verwenden, [5 Punkte]
    5.Bei der Ausgabe eines 1-stelligen Datums kann am Anfang ein Leerzeichen eingefügt werden [5 Punkte]
    6.Die erste Woche ist richtig gerechtfertigt [5 Punkte]
    7.Die letzte Woche ist linksbündig [5 Punkte]
    8.Die Antworten sind richtig [5 Punkte]
=end

=begin
(Andere)Perfekte Punktzahl [10 Punkte]
Unter dem Gesichtspunkt der Lesbarkeit des Antwortcodes, Berücksichtigung des Lesers, der Verarbeitungsmethode, des abzuleitenden Prozesses usw.
Der Bewerter sollte zusammen mit dem Bewertungsgrund bis zu 10 Punkte addieren.
=end

Zusammenfassung

Ich fand es nostalgisch. Natürlich hatte ich einige Gedanken darüber, warum ich so ein Problem hatte, aber ich vergaß es nach langer Zeit. Unabhängig vom Guten oder Schlechten des Codierungstests möchte ich auf diese Tage zurückblicken und darüber nachdenken, welche Art von Test jetzt durchgeführt werden soll.

Bitte kontaktieren Sie mich, wenn Sie es lösen können (◞´ • ௰ • `) ◞

Recommended Posts

[Von 100 Punkten] Ich dachte über einen Codierungstest für Programmierschulabsolventen nach [Ruby]
Kenntnis der Objektorientierung für ein halbes Jahr Programmierung
Ich habe ein Docker-Image für die japanische Version von SDAPS erstellt
[RSpec] Ich habe einen Test zum Hochladen eines Profilbilds geschrieben.
Ich habe eine Frage zur Tastatureingabe von Zahlen