Partirobot

Partirobot

Tanulófeladat

Bevezetés

A Crystalben van egy String nevű típus, amit szöveg ábrázolására használunk. A Crystal stringek Unicode-karakterek sorozatai. A stringek módosíthatatlanok, ami azt jelenti, hogy létrehozásuk után nem változtathatók meg. Ez azt jelenti, hogy minden alkalommal új string jön létre, amikor módosítasz egy stringet; ezért az eredeti string nem változik.

Egy string definiálásához dupla idézőjelet " használsz.

"Hello World"

Összefűzés

Két string összefűzéséhez a + operátort használod. A + operátor egy új stringet ad vissza, ami a két stringet összefűzi.

hello = "Hello"
hello + " World"
# => "Hello World"

Stringek és számok közötti átalakítás

A to_i metódus egy stringet egész számmá alakít. Alternatívaként a to_f metódussal lebegőpontos számot kaphatsz. Ha a string nem alakítható számmá, akkor ArgumentError kivétel keletkezik.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

"Hello".to_i
# => ArgumentError: Invalid integer: Hello

Egy egész vagy lebegőpontos szám a to_s metódussal stringgé alakítható.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Interpoláció

Az interpoláció kényelmes módja a stringek kombinálásának és kifejezések stringbe ágyazásának. Egy string interpolálásához a # karaktert használhatod, amit kapcsos zárójelek {} követnek, a kifejezés pedig a zárójelek között van.

name = "World"
"Hello #{name}!"
# => "Hello World!"

A Crystal automatikusan stringgé alakítja a kifejezés eredményét.

"Hello #{1 + 1}!"
# => "Hello 2!"

Méret

Amikor tudni szeretnéd, hány karakter van egy stringben, használhatod a size metódust, ami a string hosszát egész számként adja vissza. A string mérete a string tárolt tulajdonsága, így nem kell minden metódushíváskor kiszámolni a méretet, ami nagyon gyorssá teszi.

"Hello World".size
# => 11

Indexelés

Az indexelés arra való, amikor egy adott karaktert szeretnél lekérni egy stringből. Ahhoz, hogy karaktert kérj le egy String-ből, használhatod a megszokott szögletes zárójeles jelölést.

Note

A [] egy String példánymetódusként van megvalósítva, ahol az index a metódus argumentuma.

A Crystalben egy string első karaktere a 0. indexen található.

"Hello World"[0]
# => 'H'

"Hello World"[6]
# => 'W'

Ahhoz, hogy egy karaktert a string végéről kérj le, veheted a string hosszát mínusz egyet, hogy megkapd az utolsó karakter indexét; a második utolsó karakterhez a string hosszát mínusz kettőt, és így tovább. Erre van egy egyszerűbb megoldás: egyszerűen használj negatív indexet, ahol az utolsó karakter a -1. indexen van, a második utolsó a -2. indexen, és így tovább.

name = "Hello World"
name[name.size - 1]
# => 'd'

name[-1]
# => 'd'

Escape-elés

Néhány karaktert nem lehet közvetlenül stringbe írni, helyette escape-szekvenciát kell használnod. Például, ha dupla idézőjelet szeretnél használni egy stringben, escape-elned kell a dupla idézőjelet. A \ karaktert használhatod escape-szekvencia írásához, amit az escape-elni kívánt karakter követ.

Ezek a speciális karakterek a Crystalben:

Value Description
\a Riasztás
\b Visszatörlés
\e Escape
\f Lapdobás
\n Soremelés vagy újsor
\r Kocsivissza
\t Vízszintes tabulátor
\v Függőleges tabulátor
\\ Visszaperjel
\' Aposztróf
\" Dupla idézőjel
\377 Nyolcas számrendszerű ASCII-karakter
\xFF Tizenhatos számrendszerű ASCII-karakter
\uFFFF Tizenhatos számrendszerű Unicode-karakter
puts "Hello \"World\""
# => Hello "World"

puts "Hello \nWorld"
# => Hello
# => World

Többsoros stringek

Többsoros string írásához ugyanazt a szintaxist használod, mint egy egysoros stringnél, de minden sorhoz, amit a stringben szeretnél, új sort kezdesz.

"Hello
World"
# => "Hello\nWorld"

Utasítások

Volt egyszer egy különc programozó, aki egy furcsa házban lakott, rácsos ablakokkal. Egy nap munkát vállalt egy online álláshirdetési oldalon keresztül: egy bulirobotot kellett építenie. A robotnak köszöntenie kell a vendégeket, és a helyükre kell kísérnie őket. Az első változat nagyon technikásra sikerült, és hűen tükrözte, hogy a programozó nem sok mindent tud az emberi kapcsolatokról. Ebből néhány dolog a következő kiadásba is átkerült.

1. Köszöntsd az új vendéget a bulin

Valósítsd meg a welcome metódust, amely a kapott név felhasználásával visszaad egy üdvözlő üzenetet:

PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!

2. Köszöntsd azt az új vendéget, akinek ma van a születésnapja

Valósítsd meg a happy_birthday metódust, amely a személy nevének és életkorának felhasználásával visszaad egy születésnapi üzenetet. Sajnos a programozó kicsit kérkedő alkat, így a robotnak bizonyítania kell, hogy minden vendég születésnapját ismeri.

PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!

3. Adj útbaigazítást

Valósítsd meg az assign_table függvényt, amely útbaigazítást ad. Öt paramétert kell fogadnia.

  • A köszöntendő új vendég neve (String)
  • Az asztal száma (Int)
  • Az asztalszomszéd neve (String)
  • Az irány, amerre az asztal található (String)
  • Az asztal távolsága (Float64)

A pontos eredményformátum az alábbi példában látható.

A szomszéd nevét le kell rövidíteni a név első és utolsó betűjére. Frankből Fk lesz, Christianből Cn, és így tovább.

Az asztal számát a robot adja meg. A robot az asztal távolságát is megemlíti. Szerencsére csak egy számjegyre kerekített pontossággal.

PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Crystal Exercism

Készen állsz elkezdeni a(z) Partirobot feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Crystal nyelvet 26 fogalom142 feladat segítségével, valódi emberi mentorálással, mindez ingyen.