Exercicis Llistes

Sumari

  1. List
    1. DayOfWeek
      1. Input
      2. Output
    2. PlayerNumbers
      1. Input
      2. Output
    3. CandidatesList
      1. Input
      2. Output
    4. LetterInWord
      1. Input
      2. Ouput
  2. MutableList
    1. AddValuesToList
      1. Sortida
    2. Swap
      1. Input
      2. Output
    3. PushButtonPadlockSimulator
      1. Input
      2. Output
    4. BoxesOpenedCounter
      1. Input
      2. Output
  3. Recorregut de llistes
    1. MinOf10Values
    2. IsThereAMultipleOf7
    3. IsThereAMultipleOf7v2
    4. SearchInOrdered
      1. Input
      2. Output
    5. InverseOrder
    6. Palindrom
    7. ListSortedValues
      1. Input
      2. Output
      3. Input
      4. Output
    8. ListReader
    9. ListMaxValue
    10. CapICuaValues
      1. Input
      2. Output
    11. ListSameValues
      1. Input
      2. Output
    12. ListSameValuesV2
    13. ListSumValues
      1. Input
      2. Output
    14. IvaPrices
      1. Input
      2. Output
    15. CovidGrowRate
      1. Input
      2. Output
    16. BicicleDistance
      1. Input
      2. Output
    17. ValueNearAvg
      1. Input
      2. Output
    18. Isbn
      1. Input
      2. Output
    19. Isbn13
      1. Input
      2. Output
  4. Llistes i classes
    1. MostPopulatedCountries
      1. Input
    2. Output
    3. MultiProductInfoPrinter
      1. Intput
      2. Output
    4. FromAvgSallaryInfo
  5. Llistes mida dinàmica
    1. AnotherInverseOrder
      1. Input
      2. Output
    2. StrangeOrder
      1. Input
      2. Output
    3. PassaLlista
      1. Input
      2. Output
    4. StoreFirstOnly
      1. Input
      2. Output
    5. StrangeCountDown
      1. Input
      2. Output
    6. AllwaysSorted
      1. Input
      2. Output
  6. Matrius
    1. SimpleBattleshipResult
      1. Input
      2. Output
      3. Input
      4. Output
    2. MatrixElementSum
    3. MatrixBoxesOpenedCounter
      1. Input
      2. Output
    4. MatrixIsThereADiv13
    5. HighestMountainOnMap
      1. Output
    6. HighestMountainScaleChange
    7. MatrixReader
    8. MatrixSum
      1. Input
      2. Output
    9. RookMoves
      1. Input
      2. Output
  7. Avançats
    1. SortArray
      1. Input
      2. Output
    2. MatrixSimetric
      1. Input
      2. Output
  8. Acepta el reto

List

DayOfWeek

Donat un enter, printa el dia de la setmana amb text (dilluns, dimarts, dimecres…), tenint en compte que dilluns és el 0. Els dies de la setmana es guarden en una llista

Input

 6

Output

diumenge

PlayerNumbers

Volem fer un petit programa per guardar l'alineació inicial de jugadors d'un partit de bàsquet. L'usuari introduirà els 5 números dels jugadors. Imprimeix-los després amb el format indicat.

Input

3 9 44 11 6

Output

[3, 9, 44, 11, 6]

CandidatesList

Volem fer un petit programa per un partit polític. Quan hi ha eleccions, el partit presenta una llista de candidats. Cada candidat té una posició a la llista.

El programa primer llegirà la llista de candidats (primer introduïrem la quantitat i després un candidat per línia).

Un cop llegida la llista, l'usuari podrà preguntar quin candidat hi ha a cada posició. El programa acaba quan introdueixi -1. Tingues en compte que els politics no són informàtics, i si indiquen la posició 1, volen dir el primer polític de la llista.

Input

3
Mar Pi
Yun Om
Ali Puig
1
1
3
-1

Output

Mar Pi
Mar Pi
Ali Puig

LetterInWord

Donada una paraula i un valor indica quina lletra hi ha a la posició indicada

Els strings funcionen com si fossin llistes de chars

var paraula:String = "Hello"
print(paraula[0])  

Input

Hello 1

Ouput

e

MutableList

AddValuesToList

Inicialitza un list de floats de mida 50, amb el valor 0.0f a tots els elements.
Després asigna els els valors següents a les posicions indicades i printa la llista:

Sortida

[31.0, 56.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 79.0]

Swap

Donada una llista de 4 números de tipus int,intercanvia el primer per l'últim element.

Input

9 4 6 7

Output

[7, 4, 6, 9]

PushButtonPadlockSimulator

Volem fer un simulador d'un candau com el de la foto:

padlock.jpeg

La nostra versió, taḿbé tindrà 8 botons, però el primer serà el 0. A l'inici tots els botons estaran sense apretar.

L'usuari introduirà enters indicant quin botó ha d'apretar (o desapretar)
Quan introdueixi el -1, és que ja ha acabat i hem d'imprimir l'estat del candau

Input

1 2 3 4 4 4 4 3 5 -1

Output

[false, true, true, false, false, true, false, false]

BoxesOpenedCounter

Un banc té tot de caixes de seguretat, enumerades del 0 al 10.
Volem registar quan els usuaris obren una caixa de seguretat, i al final del dia, fer-ne un recompte.

L'usuari introduirà enters del 0 al 10 quan s'obri la caixa indicada.
Quan introduiexi l'enter -1, és que s'ha acabat el dia. Printa per pantalla el nombre de cops que s'ha obert.

Input

5 4 9 0 0 5 5 5 3 5 -1

Output

[2, 0, 0, 1, 1, 5, 0, 0, 0, 1, 0]

Recorregut de llistes

MinOf10Values

L'usuari entra 10 enters. Crea un list amb aquest valors.
Imprimeix per pantalla el valor més petit introduit.

Busca quin mètode de llistes et permet fer aquesta tasca que has realitzat.

IsThereAMultipleOf7

Donat el següent vector, imprimeix true si algún dels números és divisible entre 7 o false sinó.

val values = listOf(4,8,9,40,54,84,40,6,84,1,1,68,84,68,4,840,684,25,40,98,54,687,31,4894,468,46,84687,894,40,846,1681,618,161,846,84687,6,848)

IsThereAMultipleOf7v2

kotlin té diferents utilitats sobre llistes. Mira aquest exemple

val anyNegative = numbers.any { it < 0 } 
val allEven = numbers.all { it % 2 == 0 } 
val allLess6 = numbers.none { it > 6 }

anyNegative -> true si la llista conté algun element que compleix el predicat (element negatiu)
allEven -> true si tots els elements compleixen el predicat (l'element és parell)
allLess6 -> true si cap dels elements compleixen el predicat (l'element és més gran que sis)

Fes l'exercici anterior utilitzant el mètode any

SearchInOrdered

Donat una llista d'enters ordenats de menor a major indica si un cert valor existeix en el bucle, sense utilitzar el mètode any

Input

10
1 2 4 6 8 10 15 34 89 96
4

Output

true

InverseOrder

L'usuari entra 10 enters. Imprimeix-los en l'odre invers al que els ha entrat.
Existeix algun mètode de llistes que ja implementa aquesta tasca?

Palindrom

Indica si una paraula és palíndrom.
Els strings funcionen com si fossin llistes de chars

Exemples de palíndroms:

ListSortedValues

Printa per pantalla ordenats si la llista de N valors introduïts per l'usuari estan ordenats.

L'usuari primer entrarà el número d'enters a introduir i després els diferents enters.

Input

5 
1 25 25 81 90

Output

ordenats

Input

5
1 25 24 81 90

Output

desordenats

ListReader

Crea una funció ListReader i defineix la funció següent, que llegeix una llista d'enters de l'usuari. L'usuari primer entrarà el número d'enters a introduïr i després els diferents enters.
Nota: a l'exercici ListSortedValues ja has fet aquesta funció.

/**
 * Reads an int of lists from user input.
 * The user first introduces the number (N).
 * Later it introduces the integers one by one.
 * @return int list of values introduced of size N
 */
fun readIntList(scanner:Scanner):List<Int>

Utilitza aquesta funció quan la necessitis.
Per fer-la servir, l'has de cridar de la següent manera:

val scanner = Scanner(System.`in`).useLocale(Locale.US)
/// ...
val values = readIntList(scanner)

ListMaxValue

L'usuari introduirà una llista d'enters, com s'indica al mètode readIntList.
Un cop llegits tots, printa per pantalla el valor més gran.

El mètode que has implementat forma part de les utilitats de llistes, és a dir és una funció de la classe List. A partir d'ara el pots utilitzar quan el necessitis fent ús de maxOf()
Comprova que saps utilitzar aquest mètode.

CapICuaValues

Printa per pantalla cap i cua si la llista de N valors introduïts per l'usuari són cap i cua (llegits en ordre invers és la mateixa llista).

Input

4 10 5 5 10

Output

cap i cua

ListSameValues

L'usuari introduirà 2 llistes de valors, com s'indica al mètode readIntList.
Printa per pantalla són iguals si ha introduït la mateixa llista, o no són iguals si són diferents

Input

2 5 10 
2 5 10

Output

són iguals

ListSameValuesV2

A l'exercici anterior has comparat element a element?
Kotlin en permet utilitzar el comparador d'igualtat entre llistes

list1 == list2 

Si ja ho havies descobert fes l'exercici element per element

ListSumValues

L'usuari introduix una llista de valors tal i com s'indica al mètode readIntList.
Imprimeix per pantalla la suma d'aquests valors.

Input

3 5 10 12

Output

27

Aquest mètode que has implementat ja està inclòs dins la classe List, a partir d'ara el pots fer servir, i no et cal implementar-lo cada vegada.
Funciona de la manera següent:

val myIntList = listOf(3, 4, 2)
myIntList.sum() // = 9

IvaPrices

En una botiga volem convertir tot de preus sense a IVA al preu amb IVA. Per afegir l'IVA a un preu hem de sumar-hi el 21% del seu valor.
L'usuari introduirà el preu de 10 artícles. Imprimeix per pantalla el preu amb l'IVA afegit amb el següent format indicat a continuació. El programa no pot imprimir res fins a que hagi llegit tots els valors.

Input

8 4 45 2 48 12 48 55 15 1

Output

8.0 IVA = 9.68
4.0 IVA = 4.84
45.0 IVA = 54.45
2.0 IVA = 2.42
48.0 IVA = 58.08
12.0 IVA = 14.52
48.0 IVA = 58.08
55.0 IVA = 66.55
15.0 IVA = 18.15
1.0 IVA = 1.21

CovidGrowRate

El departament de salut ens ha demanat que calculem la taxa de infecció que està tenint la Covid en la nostre regió sanitaria. Donat un nombre de casos casos1casos1 en una setmana, si la següent tenim un nombre de casos casos2casos2, podem calcular la taxa d'infecció amb la fórmula

infeccioˊ=casos2casos1infecció = \frac{casos2}{casos1}

L'usuari introduirà un llistat de casos detectats cada setmana (usant el format del ListReader). Imprimeix la taxa d'infecció detectada cada setmana. El programa no pot imprimir res fins a que hagi llegit tots els valors.

Input

10 5 7 9 21 45 100 260 240 230 201

Output

1.4 1.2857142857142858 2.3333333333333335 2.142857142857143 2.2222222222222223 2.6 0.9230769230769231 0.9583333333333334 0.8739130434782608 

BicicleDistance

Donada una velocitat d'una bicicleta en metres per segon, indica els metres que haurà recorregut quan hagi passat 1,2,3,4,5,6,7,8,9 i 10 segons.

Input

2.5

Output

2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0 

ValueNearAvg

L'usuari introduix una llista de valors tal i com s'indica al mètode readIntList.
Imprimeix per pantalla el valor que està més proper a la mitjana dels valors de la llista (calcula la mitjana dels valors primer i cerca el més proper després).

Input

4 1 3 9 20

Output

9

Isbn

Es vol fer un programa que verifiqui que un codi ISBN (International Standard Book Code) és correcte. El format d’un codi ISBN és: Codi de grup (1 dígit), Codi de l’editor (4 dígits), Codi del llibre (4 dígits), Caràcter/dígit de control (1 caràcter/dígit)
Així, per exemple, el codi ISBN d’un llibre és 84-7602-561-0. La verificació del codi es fa a partir d’aplicar una sèrie d’operacions sobre els primers 9 dígits del resultat de les quals se n’extreu el dígit/caràcter de control. Per a l’obtenció del control, cal fer els passos següents:
Es multiplica cadascun dels dígits per la posició que ocupa dins l’ISBN i se sumen totes les multiplicacions. Es divideix el resultat per 11 i el residu és el dígit de control. Si aquest residu és 10 es fa anar la lletra “X” com a control.
Per exemple el ISBN: 84-7602-561-0 , el caràcter de control és el 0
(8x1)+(4x2)+(7x3)+(6x4)+(0x5)+(2x6)+(5x7)+(6x8)+(1x9) = 165 165 mod 11 = 0
El residu és igual al caràcter de control per tant és un ISBN vàlid

Input

0 7 6 4 5 2 6 4 1 3

Output

true

Isbn13

A partir de l'any 2006 els ISBN van passar a tenir 13 dígits i es va adaptar per a què fos compatible amb el sistema de codi de barres EAN-13.
Volem verificar si un codi ISBN és correcte. Mitjançant el dígit de control que és el dígit número 13. Es calcula de la manera següent:
Es multiplica el primer dígit dels 12 digits
per 1, el segon per 3, el tercer per 1, el quart per 3, i així
succesivament fins al número 12;
El dígito de control és el valor que s'ha d'afegir a la suma de tots aquests productes per fer-la divisible per 10. Si
el resultat de la suma ja fos múltiple de 10, el dígito de control seria 0.

Aquest ISBN 978-84-92493-70-8 ens el donarien de la manera següent, indica si él dígit de control és correcte.

Input

9 7 8 8 4 9 2 4 9 3 7 0 8

Output

true

Llistes i classes

MostPopulatedCountries

Donada una llista de països amb la seva població, volem imprimir els noms dels països amb més població d'un numero indicat per l'usuari.
L'usuari primer introduirà el nombre de països i la informació de cada país (nom i població).
Finalment introduirà el mínim de població desitjada. Imprimeix els noms dels països amb més població que la introduida.

Input

10
Bangladesh
164689383
India
1380004385
Brazil
212559417
Indonesia
273523615
Mexico
128932753
Pakistan
220892340
Nigeria
206139589
China
1439323776
United States
331002651
Russia
145934462
200000000

Output

India
Brazil
Indonesia
Pakistan
Nigeria
China
United States

MultiProductInfoPrinter

Llegeix el nom i preu de diferents productes i imprimeix-los per pantalla amb el format indicat.

Intput

3 Taula 232.32 Cadira 90.90 Bolígraf 76.22

Output

El producte Taula val 232.32€
El producte Cadira val 90.90€
El producte Bolígraf val 76.22€

FromAvgSallaryInfo

En una empresa ens diuen que volen coneixer el salari mitjà dels seus treballadors, i veure quin cobre per sota.
L'usuari introduirà una línia per cada treballador amb el seu sou, i el seu nom.

Un cop introduits els treballadors printa per pantalla el nom dels treballadors que cobren per sota del sou mitjà.

input: 3 Mar 3000 Ona 3500 Ot 2500
output: Ot


Llistes mida dinàmica

AnotherInverseOrder

L'usuari entrarà un conjunt d'enters per pantalla. Quan introdueixi el -1, és que ja ha acabat.
Imprimeix-los en odre invers.

Input

1 2 3 4 8 2 -1

Output

[2, 8, 4, 3, 2, 1]

StrangeOrder

L'usuari entrarà un conjunt d'enters per pantalla. Quan introdueixi el -1, és que ja ha acabat. Afegeix el primer a l'inici de la llista, el segon al final, el tercer a l'inici, etc.
Printa el resultat:

Input

1 2 3 4 5 6 -1

Output

[5,3,1,2,4,6]

PassaLlista

Volem fer un programa que ens digui quins alumnes no han vingut a classe.

L'usuari introduirà enters ordenats de major a menor, indicant la posició dels alumnes que han vingut a classe.
Quan introdueixi un -1 és que ja ha acabat.

Tenim la següent llista d'alumnes:
"Magalí", "Magdalena", "Magí","Màlika", "Manel", "Manela", "Mar", "Marc", "Margalida", "Marçal", "Marcel", "Maria", "Maricel", "Marina", "Marta", "Martí", "Martina", "Mausi", "Mei-Xiu", "Miquel", "Ming", "Mohamed"

Input

3 2 1 0 -1

Output

[Manel, Manela, Mar, Marc, Margalida, Marçal, Marcel, Maria, Maricel, Marina, Marta, Martí, Martina, Mausi, Mei-Xiu, Miquel, Ming, Mohamed]

StoreFirstOnly

L'usuari introduirà enters. Enmagatzema en una llista la primera vegada que l'usuari entri un valor.
Quan introdueixi un -1 és que ja ha acabat.

Input

1 3 9 3 5 1 9 2 -1

Output

[1, 3, 9, 5, 2]

StrangeCountDown

Demana a l'usuari dos enters. Imprimeix per pantalla els números que hi ha entre els dos enters, alternant, el més petit amb el més gran.

Input

3 9

Output

4 8 5 7 6

AllwaysSorted

L'usuari introduirà enters. Enmagatzema'ls en una llista de tal manera que la llista estigui sempre ordenada.
Quan introdueixi un -1 és que ja ha acabat.

Al final imprimeix la llista:

Input

3 5 9 2 7 -1

Output

2 3 5 7 9

Matrius

SimpleBattleshipResult

Donada la següent configuració del joc Enfonsar la flota, indica si a la posició x, y hi ha aigua o un vaixell (tocat)

x x 0 0 0 0 x  
0 0 x 0 0 0 x  
0 0 0 0 0 0 x  
0 x x x 0 0 x  
0 0 0 0 x 0 0  
0 0 0 0 x 0 0  
x 0 0 0 0 0 0

Input

 1 1

Output

 aigua

Input

3 1

Output

tocat

MatrixElementSum

Donada la següent matriu

val matrix = listOf(listOf(2,5,1,6),listOf(23,52,14,36),listOf(23,75,81,64))

Imrimeix la suma de tots els seus valors.

MatrixBoxesOpenedCounter

Un banc té tot de caixes de seguretat en una graella, enumerades per fila i columna del 0 al 3.
Volem registar quan els usuaris obren una caixa de seguretat, i al final del dia, fer-ne un recompte.

Input

1 1 1 3 3 3 1 1 3 3 3 0 0 3 -1

Output

[[0, 0, 0, 1], [0, 2, 0, 1], [0, 0, 0, 0], [1, 0, 0, 2]]

MatrixIsThereADiv13

Donada la següent matriu

val matrix = listOf(listOf(2,5,1,6),listOf(23,52,14,36),listOf(23,75,81,62))

Imprimeix true si algún dels números és divisible entre 13, false altrement.

HighestMountainOnMap

Usant les imatges d'un satel·lit hem pogut fer raster o (mapa de bits)[https://ca.wikipedia.org/wiki/Mapa_de_bits] que ens indica l'alçada d'un punt concret d'un mapa. Hem obtingut la següent informació:

val map =listOf(listOf(1.5,1.6,1.8,1.7,1.6),listOf(1.5,2.6,2.8,2.7,1.6),listOf(1.5,4.6,4.4,4.9,1.6),listOf(2.5,1.6,3.8,7.7,3.6),listOf(1.5,2.6,3.8,2.7,1.6));

Digues en quin punt(x,y) es troba el cim més alt i la seva alçada

Output

x, y: 1.5 metres

Substituint x i y, per les cordenades i 1.5 metres per l'alçada del cim més alt.

HighestMountainScaleChange

El govern britànic ens ha demanat que també vol accedir a les dades de l'exercici anterior i que les necessitaria en peus i no metres.
Per convertir un metre a peus has de multiplicar els metres per 3.2808.

Fes la conversió i imprimeix la matriu per pantalla.

MatrixReader

Dins del fitxer ListReader defineix la funció següent, que llegeix una matriu d'enters de l'usuari.
L'usuari primer entrarà el número de files i columnes i després els diferents enters.
Nota: semblant a ListReader

/**
 * Reads an int matrix from user input.
 * The user first introduces the size of the matrix(NxM).
 * Then, introduces the integers one by one.
 * @return matrix of values introduced of size NxM
 */
fun scannerReadIntMatrix(scanner: Scanner ):List<List<Int>> 

Utilitza aquesta funció quan la necessitis.
Per fer-la servir, l'has de cridar de la manera següent:

val scanner = Scanner(System.`in`).useLocale(Locale.US)
val matrix = scannerReadIntMatrix(scanner)

Format d'entrada d'una matriu d'exemple:

3 4
1 2 3 4
2 1 2 1
3 2 1 5

MatrixSum

Implementa un programa que demani dos matrius a l'usuari i imprimeixi la suma de les dues matrius.

Input

3 4
1 2 3 4
2 1 2 1
3 2 1 5
3 4
1 2 3 4
4 3 2 1
2 2 2 2

Output

2 4 6 8
6 4 4 2
5 4 3 7

RookMoves

Programa una funció que donat un tauler d'escacs, i una posició, ens mostri per pantalla quines són les possibles posicions a les que es pot moure una torre.
Primer caldrà llegir la posició de la torre, que simbolitzarem en el tauler amb el valor ♜ (fes copy & paste del simbol, és un string ja que ocupa dos chars), les posicions on aquesta es pugui moure les simbolitzarem amb el valor ♖ i la resta de posicions amb el valor x.
El moviment de la torre és el següent: Es pot moure al llarg d'una fila o d'una columna (però no successivament en una mateixa jugada); se la pot fer avançar tantes caselles com es vulgui.

Input

d 4

Output

x x x ♖ x x x x
x x x ♖ x x x x
x x x ♖ x x x x
x x x ♖ x x x x
♖ ♖ ♖ ♜ ♖ ♖ ♖ ♖
x x x ♖ x x x x
x x x ♖ x x x x
x x x ♖ x x x x

Per imprimir la torre còpia la línia següent

print("♖")

Avançats

SortArray

Implementa un programa que demani una llista a l'usuari i ordeni els nombres de menor a major.

Input

4 2 -1 6 5

Output

-1 2 5 6

MatrixSimetric

Donada una matriu quadrada, el programa imprimeix true si la matriu és simètrica, false en cas contrari.

Input

3 3
1 2 3
2 1 2
3 2 1

Output

true

Acepta el reto