Advertisement
Guest User

Untitled

a guest
Oct 28th, 2011
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.02 KB | None | 0 0
  1. Šahovska polja označimo s črkami a-h, ki predstavljajo koordinate stolpcev, in številkami 1-8, ki predstavljajo vrstice. Tako je polje b4 drugo polje v četrti vrsti.
  2.  
  3. Šahovska kraljica se lahko premika po stolpcih, vrsticah in diagonalah. Kraljica, ki bi jo postavili na b4, bi s svojo požrešnostjo ogrožala vsa polja stolpca b, vrste 4, poleg tega pa še diagonali, torej polja a5, c3, d2, e1 in a3, c5, d6, e7 in f8.
  4.  
  5. Na šahovnico postavimo določeno število kraljic. Razpored predstavimo s seznamom koordinat, pri čemer so koordinate opisane kot nizi, recimo ["a4", "c7", "d2"].
  6.  
  7. Spodnje naloge zahtevajo, da napišete različne funkcije. Kadar naloga eksplicitno zahteva, da mora funkcija klicati druge funkcije, se tega navodila obvezno držite. To je eden od namenov te vaje.
  8.  
  9. Naloge so razdeljene po ocenah. Za vsako oceno je potrebno pravilno rešiti tudi naloge za nižjo oceno. Tako je, na primer, za oceno 8 potrebno rešiti naloge za oceno 6, 7 in 8.
  10.  
  11. Namig: sam sem na začetku programa definiral niza
  12.  
  13. stolpci = "abcdefgh"
  14. vrstice = "12345678"
  15. in se potem v skoraj vseh funkcijah pridno sprehajal po njima. Res sta mi prišla prav, vesel sem, da sem to storil.
  16. Za oceno 6
  17. Če želiš, napiši funkcijo stolpec_prost(stolpec, razpored), ki kot argument prejme oznako stolpca in razpored kraljic ter vrne True, če v danem stolpcu ni nobene kraljice.
  18. Primer:
  19.  
  20. >>> stolpec_prost("b", ["a4", "c7", "d2"])
  21. True
  22. >>> stolpec_prost("c", ["a4", "c7", "d2"])
  23. False
  24. Napiši funkcijo prosti_stolpci(razpored), ki kot argument prejme razpored kraljic in kot rezultat vrne seznam vseh stolpcev, v katerih ni nobene kraljice. Pri reševanju ti bo v pomoč gornja funkcija, če si jo napisal (če je nisi, pa nič).
  25. Primer:
  26.  
  27. >>> prosti_stolpci(["a4", "c7", "d2"])
  28. ["b", "e", "f", "g", "h"]
  29. >>> prosti_stolpci(["h8", "a4", "b4", "c7", "g8", "d2", "e1", "f3"]))
  30. []
  31. >>> prosti_stolpci([])
  32. ["a", "b", "c", "d", "e", "f", "g", "h"]
  33. Napiši funkcijo prost_stolpec(razpored), ki kot argument prejme razpored kraljic in kot rezultat vrne prvi stolpec, v katerem ni nobene kraljice. Če takšnega stolpca ni, vrne None. Funkcija naj uporablja gornjo funkcijo!
  34. Primer:
  35.  
  36. >>> prost_stolpec(["a4", "c7", "d2"])
  37. "b"
  38. >>> print(prost_stolpec(["h8", "a4", "b4", "c7", "g8", "d2", "e1", "f3"]))
  39. None
  40. >>> prost_stolpec([])
  41. "a"
  42. Za oceno 7
  43. Napiši funkcijo napada(polje1, polje2), ki kot argument prejme koordinati dveh polj ter vrne True, če se polji napadata in False, če se ne. Dogovorimo se, da polje napada tudi samo sebe.
  44. Primer:
  45.  
  46. >>> napada("a4", "a7")
  47. True
  48. >>> napada("a4", "e4")
  49. True
  50. >>> napada("a4", "a4")
  51. True
  52. >>> napada("a4", "c6")
  53. True
  54. >>> napada("a4", "c2")
  55. True
  56. >>> napada("a4", "c1")
  57. False
  58. Napiši funkcijo napadajo(polje, razpored), ki kot argument prejme koordinate polja in razpored kraljic, kot rezultat pa vrne seznam vseh kraljic, ki napadajo podano polje. Funkcija naj kliče gornjo funkcijo!
  59. Primer:
  60.  
  61. >>> napadajo("c2", ["a4", "c7", "d2"])
  62. ["a4", "c7", "d2"]
  63. >>> napadajo("c6", ["a4", "c7"])
  64. ["a4", "c7"]
  65. >>> napadajo("e8", ["a4", "c7", "d2"])
  66. ["a4"]
  67. >>> napadajo("a4", ["a4", "c7", "d2"])
  68. ["a4"]
  69. >>> napadajo("g8", ["a4", "c7", "d2"])
  70. []
  71. Napiši funkcijo napadeno(polje, razpored), ki kot argument prejme koordinate polja in razpored kraljic, kot rezultat pa vrne True, če katera od kraljic napada izbrano polje, sicer pa False. Funkcija naj na primeren način kliče gornjo funkcijo!
  72. Primer:
  73.  
  74. >>> napadeno("a7", ["a4", "c7", "d2"])
  75. True
  76. >>> napadeno("a6", ["a4", "c7"])
  77. True
  78. >>> napadeno("h5", ["a4", "c7", "d2"])
  79. False
  80. >>> napadajo("a4", [])
  81. False
  82. Za oceno 8
  83. Napiši funkcijo prosto_v_stolpcu(stolpec, razpored), ki kot argument prejme oznako stolpca in razpored kraljic, vrne pa seznam koordinat polj v njem, ki še niso napadena. Funkcija naj pokliče ustrezno gornjo funkcijo.
  84. >>> prosto_v_stolpcu("a", ["a4", "c7", "d2"])
  85. []
  86. >>> prosto_v_stolpcu("b", ["a4", "c7", "d2"])
  87. ["b1"]
  88. >>> prosto_v_stolpcu("f", ["a4", "c7", "d2"])
  89. ["f1", "f3", "f5", "f6", "f8"]
  90. >>> prosto_v_stolpcu("f", [])
  91. ["f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8"]
  92. Napiši funkcijo prosto_polje(razpored), ki kot argument prejme razpored kraljic, vrne pa koordinato prvega prostega polja - pri čemer s prvim mislimo čim bolj levo polje, znotraj polj v istem stolpcu pa tisto, ki je v vrstici z nižjim indeksom (če so prosta a2, a4 in b1, naj vrne a2). Če prostega polja ni, naj vrne None. Funkcija naj uporablja funkcijo za iskanje prostih stolpcev in funkcijo za iskanje prostih vrstic znotraj stolpca.
  93. >>> prosto_polje(["a4", "c7", "d2"])
  94. "b1"
  95. >>> prosto_polje([])
  96. "a1"
  97. >>> print(prosto_polje(["f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8"]))
  98. None
  99. Za oceno 9
  100. Napiši funkcijo napadajoce_se(razpored), ki kot argument dobi nek razpored kraljic in kot rezultat vrne vse pare kraljic, ki se napadajo med sabo. Vsak par naj bo izpisan le enkrat! Funkcija naj uporablja ustrezno funkcijo izmed gornjih.
  101. >>> napadajoce_se(["a4", "b1", "b7"])
  102. [('b1', 'b7')]
  103. >>> napadajoce_se(["a4", "b1", "e8"])
  104. [('a4', 'e8')]
  105. >>> napadajoce_se(["a4", "b1", "e4"])
  106. [('a4', 'e4'), ('b1', 'e4')]
  107. >>> napadajoce_se(["a4", "b1", "e4", "f2"])
  108. [('a4', 'e4'), ('b1', 'e4')]
  109. >>> napadajoce_se(["a4", "b1"])
  110. []
  111. >>> napadajoce_se(["a4", "b1", "c5", "d8", "e2", "f7", "g3", "h6"])
  112. []
  113. >>> napadajoce_se(["a1", "a2", "a3", "a4"])
  114. [('a1', 'a2'), ('a1', 'a3'), ('a2', 'a3'), ('a1', 'a4'), ('a2', 'a4'), ('a3', 'a4')]
  115. Napiši funkcij legalna(postavitev), ki kot argument dobi nek razpored in pove, ali je "legalen". Razpored je legalen, če vsebuje osem kraljic, ki se ne napadajo med sabo. Funkcija naj uporablja gornjo funkcijo.
  116. >>> legalna(["a4", "b1", "c5", "d8", "e2", "f7", "g3", "h6"])
  117. True
  118. >>> legalna(["a4", "b1", "c5", "d8", "e2", "f7", "g3"])
  119. False
  120. >>> legalna(["a4", "b1", "c5", "d8", "e2", "f7", "g3", "h3"])
  121. False
  122. Za oceno 10
  123. Samostojno napiši program, ki razporedi osem kraljic po šahovnici tako, da se medsebojno ne napadajo. Rezultat naj bo v obliki seznama, kakršni so zgornji.
  124. Sprogramirati moraš tudi vse gornje funkcije, ni pa ti jih potrebno uporabljati.
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement