2016-09-24 5 views
0

Versuchen Sie, diese Frage zu lösen, wo Sie Argumente bereitstellen und eine übereinstimmende Ausgabe bereitstellen müssen.Ruby: Filter Non-Integers von String

Nimm zwei ganze Zahlen (i und n) als Befehlszeilenargumente. Schreibe i auf die Standardausgabe, gefolgt von den folgenden n ganzen Zahlen (getrennt durch Kommas).

Geben Sie keine Leerzeichen oder versteckte Zeichen in die Ausgabe ein.

Beispiel: Argumente: 3 5 Ausgang: 3,4,5,6,7,8

Hier ist mein Code:

base_number = ARGV.shift.to_i 
iterate_number = ARGV.shift.to_i 

if iterate_number < 0 
    base_number = base_number.to_s 
    iterate_number = iterate_number.to_s 
else 
    print base_number 
    iterate_number.times do 
    base_number = base_number + 1 
    print ',' 
    print base_number 
    end 
end 

Bisher ich habe schaffte es, 7/9 der Tests zu fangen. Dies schließt ein, wenn iterate_number negativ ist, was die Ausgabe leer zurückgibt.

Die letzten beiden Tests beziehen sich auf Argumente, die Buchstaben oder Leerzeichen sind, die beide in der Variablen i aufgelöst werden und 0 zurückliefern, so dass meine Ausgabe 0 anstatt leer ist.

Danke!

+0

Ein Detail: Sie könnten 'base_number, iterate_number = ARGV.map (&: to_i)' schreiben. –

Antwort

2

Sie sind auf dem richtigen Weg mit times, aber Sie verpassen eine der wichtigsten Funktionen in Ruby: ein Enumerator Nutzung und es wie ein Array zu behandeln.

Zum Beispiel:

i = ARGV[0].to_i 
n = ARGV[1].to_i 

puts (i..i+n).to_a.join(', ') 

Dies stellt einen einfachen Bereich auf, wandelt es in eine Reihe von Werten, schließt ich dann zusammen, diese Werte.

Wenn Sie, wenn ein Wert testen wollen, ist „numerical“, versuchen Sie dies:

value.to_i.to_s == value 

Wenn es das gleiche ist, wenn in einer ganzen Zahl umgewandelt und zurück es ist garantiert ein Integer-Wert sein.

+0

Ah, das macht Sinn! Vielen Dank. –

-1

Um zu überprüfen, ob i ein String Sie i.match(/^\d+$/) nennen kann, wenn es nicht ein String Rückkehr werde false

-1

Wenn Sie Buchstaben oder leer sagen, meinen Sie einen "String" oder `` nil```?

Sie sollten prüfen, ob die Eingabe zuerst eine ganze Zahl ist.

return nil unless iterate_number.is_a?(Integer)