Mátrix

Mátrix

Közepes

Utasítások

Adott egy számokból álló mátrixot reprezentáló string. Add vissza a mátrix sorait és oszlopait.

Nézzünk egy beágyazott sortöréseket tartalmazó stringet:

9 8 7
5 3 2
6 6 7

amely ezt a mátrixot reprezentálja:

    1  2  3
  |---------
1 | 9  8  7
2 | 5  3  2
3 | 6  6  7

A kódodnak ezeket kell kiadnia:

  • A sorok listáját, minden sort balról jobbra olvasva, miközben fentről lefelé haladsz a sorokon,
  • Az oszlopok listáját, minden oszlopot fentről lefelé olvasva, miközben balról jobbra haladsz.

A példabeli mátrixunk sorai:

  • 9, 8, 7
  • 5, 3, 2
  • 6, 6, 7

Az oszlopai pedig:

  • 9, 5, 6
  • 8, 3, 6
  • 7, 2, 7

Új AWK-fogalmak

Ez az első feladat, amelyben a megoldás nem egy „main” szkript. A cél egy függvénykönyvtár írása, amelyet más awk programokba lehet beilleszteni. Ebben a feladatban több érdekes új fogalom is van.

A következő, „(gawk)” jelöléssel ellátott szakaszok kifejezetten GNU awk-kiterjesztések.

Fájlból olvasás

Ebben a feladatban fájlból fogsz adatokat beolvasni, nem a fő bemeneti adatfolyamból. Olvass a getline-ról a Gnu awk kézikönyvben, különösen a Getline/File és a Getline/Variable/File formákról.

Több a tömbökről

Egy kétdimenziós tömb is szóba jöhet a megoldás megvalósításához. A GNU awk kétféleképpen ábrázolhatja:

Fájlok beillesztése (gawk)

Figyeld meg a @include direktívát a tesztfájlban. Ez arra utasítja a gawk-ot, hogy olvassa be és értékelje ki a megnevezett fájlt.

Névterek (gawk)

Minden awk változó globális (kivéve a függvényparamétereket, amelyek a függvényen belül lokálisak). Nagy a névütközések veszélye, különösen amikor harmadik féltől származó könyvtárakat illesztünk be. A névterek lehetővé teszik a változók tárolási helyének felosztását. Figyeld meg a @namespace direktívát a feladat fájljaiban.

Az alapértelmezett névtér neve „awk”. Az alapértelmezett névtér lehetővé teszi a programozó számára, hogy egy másik névtérben lévő függvényből meghívjon egy beépített awk függvényt.

A függvényparaméterek átadása

A tömbparaméterek referencia szerint adódnak át. A függvényben a tömbön végzett változtatások láthatóak a hívóban.

A nem tömb paraméterek érték szerint adódnak át.

A típus nélküli paraméterek esetében ez attól függ, hogy a függvény mit tesz velük:

  • ha a függvény tömbként inicializálja, akkor referenciaként átadott paraméterré válik,
  • ha a függvény skaláris értékként (számként vagy stringként) inicializálja, akkor nem referencia.

A részletes leírás a kézikönyvben a Függvényargumentumok átadása érték vagy referencia szerint című részben található.

Lokális változók

A függvényhatókörű (lokális) változók „érték szerinti átadás” paraméterekkel hozhatók létre. Nem hiba, ha kevesebb értéket adunk át egy függvénynek, mint a felsorolt paraméterek száma; a felesleges paraméterek „típus nélküliek” maradnak, amíg fel nem használjuk őket. Ezek a függvényben skaláris értékeket kaphatnak, amelyek nem a globális névtérben tárolódnak.

  • Ha skaláris értéket rendelsz egy paraméterhez, az a függvényen belül lokális lesz.
  • Ha skaláris értéket rendelsz egy olyan változóhoz, amely nincs a paraméterlistában, az a változó globális lesz.

A konvenció szerint a függvény szignatúrájában először a várt paraméterek szerepelnek, majd némi whitespace, végül a lokális paraméterek. Egy példa:

function add(a, b,    total) {
    # here, `typeof(total)` is "untyped"
    total = a + b
    # now, `typeof(total)` is "number"
    return total
}

BEGIN {
    sum = add(5, 10)
    print sum             # 15
    print typeof(total)   # untyped, meaning "total" is unused in this scope
}
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
AWK Exercism

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

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