Compare commits
5
Commits
v2026.09.20
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84da62c45d | ||
|
|
57e5bd9af8 | ||
|
|
c7298c0c84 | ||
|
|
ae0fea1ea6 | ||
|
|
af1f374b95 |
@@ -18,50 +18,19 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
releases: write
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up JDK 17
|
- name: Verify Environment
|
||||||
# Ставим JDK вручную и явно прописываем JAVA_HOME.
|
|
||||||
# actions/setup-java не всегда передаёт JAVA_HOME дальше в Gitea Actions.
|
|
||||||
run: |
|
run: |
|
||||||
set -euxo pipefail
|
|
||||||
cd /tmp
|
|
||||||
wget -q https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz
|
|
||||||
tar -xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz -C /opt
|
|
||||||
mv /opt/jdk-17.0.12+7 /opt/java17
|
|
||||||
export JAVA_HOME=/opt/java17
|
|
||||||
export PATH=$JAVA_HOME/bin:$PATH
|
|
||||||
echo "JAVA_HOME=/opt/java17" >> $GITHUB_ENV
|
|
||||||
echo "$JAVA_HOME/bin" >> $GITHUB_PATH
|
|
||||||
java -version
|
java -version
|
||||||
javac -version
|
echo "SDK path: $ANDROID_HOME"
|
||||||
|
|
||||||
- name: Install Android SDK
|
|
||||||
# Устанавливаем command-line tools и нужные компоненты SDK,
|
|
||||||
# затем прописываем ANDROID_HOME (читается Gradle/AGP).
|
|
||||||
run: |
|
|
||||||
set -euxo pipefail
|
|
||||||
echo "ANDROID_HOME=/opt/android-sdk" >> "$GITHUB_ENV"
|
|
||||||
mkdir -p /opt/android-sdk/cmdline-tools
|
|
||||||
wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/clt.zip
|
|
||||||
unzip -q /tmp/clt.zip -d /tmp/clt
|
|
||||||
mv /tmp/clt/cmdline-tools /opt/android-sdk/cmdline-tools/latest
|
|
||||||
yes | /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses >/dev/null 2>&1 || true
|
|
||||||
/opt/android-sdk/cmdline-tools/latest/bin/sdkmanager \
|
|
||||||
"platform-tools" \
|
|
||||||
"platforms;android-36.1" \
|
|
||||||
"build-tools;36.1.0"
|
|
||||||
|
|
||||||
- name: Grant execute permission for gradlew
|
- name: Grant execute permission for gradlew
|
||||||
run: |
|
run: |
|
||||||
chmod +x gradlew
|
chmod +x gradlew
|
||||||
java -version
|
|
||||||
|
|
||||||
# Версия по дате (ГГГГ.ММ.ДД), при совпадении тега добавляем уникальный суффикс.
|
# Версия по дате (ГГГГ.ММ.ДД), при совпадении тега добавляем уникальный суффикс.
|
||||||
- name: Generate version from date
|
- name: Generate version from date
|
||||||
|
|||||||
@@ -1,2 +1,8 @@
|
|||||||
# vyatsu-schedule
|
# ВятГУ расписание _(неофициальный Android клиент)_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Расписание загружается и парсится прямиком с сайта ВятГУ, и сохраняется в локальную БД телефона без промежуточных серверов
|
||||||
|
|
||||||
|
- Расписание групп - парсится из PDF-ок ([тута](https://www.vyatsu.ru/studentu-1/spravochnaya-informatsiya/raspisanie-zanyatiy-dlya-studentov.html))
|
||||||
|
- Расписание преподавателей - загружаются все расписания преподавателей [отсюда](https://www.vyatsu.ru/studentu-1/spravochnaya-informatsiya/teacher.html) на выбранный переиод (ибо раскиданы по кафедрам)
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
android:fullBackupContent="@xml/backup_rules"
|
android:fullBackupContent="@xml/backup_rules"
|
||||||
android:icon="@drawable/icon"
|
android:icon="@drawable/icon"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/Theme.VyatsuSchedule">
|
android:theme="@style/Theme.VyatsuSchedule">
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package agzam.vyatsu.data.local
|
||||||
|
|
||||||
|
import androidx.room.Embedded
|
||||||
|
|
||||||
|
/** Занятие преподавателя + кафедра-источник. Проекция LEFT JOIN, схема Room не меняется. */
|
||||||
|
data class TeacherLessonWithDepartment(
|
||||||
|
@Embedded val lesson: TeacherLessonEntity,
|
||||||
|
val departmentId: String,
|
||||||
|
val departmentName: String?
|
||||||
|
)
|
||||||
@@ -33,6 +33,9 @@ interface TeacherScheduleDao {
|
|||||||
@Query("DELETE FROM teacher_schedules")
|
@Query("DELETE FROM teacher_schedules")
|
||||||
suspend fun deleteAll()
|
suspend fun deleteAll()
|
||||||
|
|
||||||
|
@Query("SELECT lastSyncedAt FROM teacher_schedules WHERE departmentId = :departmentId AND season = :season AND weekStart = :weekStart")
|
||||||
|
suspend fun lastSyncedAt(departmentId: String, season: String, weekStart: Long): Long?
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
suspend fun insertDays(days: List<TeacherDayEntity>): List<Long>
|
suspend fun insertDays(days: List<TeacherDayEntity>): List<Long>
|
||||||
|
|
||||||
@@ -41,6 +44,7 @@ interface TeacherScheduleDao {
|
|||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
suspend fun replaceSchedule(schedule: TeacherScheduleEntity, days: List<TeacherDayEntity>, lessons: List<TeacherLessonEntity>) {
|
suspend fun replaceSchedule(schedule: TeacherScheduleEntity, days: List<TeacherDayEntity>, lessons: List<TeacherLessonEntity>) {
|
||||||
|
deleteSchedule(schedule.departmentId, schedule.season.name, schedule.weekStart)
|
||||||
val scheduleId = insertSchedule(schedule)
|
val scheduleId = insertSchedule(schedule)
|
||||||
val daysWithScheduleId = days.map { it.copy(scheduleId = scheduleId) }
|
val daysWithScheduleId = days.map { it.copy(scheduleId = scheduleId) }
|
||||||
deleteDaysForSchedule(scheduleId)
|
deleteDaysForSchedule(scheduleId)
|
||||||
@@ -57,13 +61,15 @@ interface TeacherScheduleDao {
|
|||||||
fun observeDaysForPeriod(season: String, weekStart: Long): Flow<List<TeacherDayEntity>>
|
fun observeDaysForPeriod(season: String, weekStart: Long): Flow<List<TeacherDayEntity>>
|
||||||
|
|
||||||
@Query(
|
@Query(
|
||||||
"SELECT teacher_lessons.* FROM teacher_lessons INNER JOIN teacher_days ON teacher_days.id = teacher_lessons.dayId " +
|
"SELECT teacher_lessons.*, teacher_schedules.departmentId AS departmentId, departments.name AS departmentName " +
|
||||||
|
"FROM teacher_lessons INNER JOIN teacher_days ON teacher_days.id = teacher_lessons.dayId " +
|
||||||
"INNER JOIN teacher_schedules ON teacher_schedules.id = teacher_days.scheduleId " +
|
"INNER JOIN teacher_schedules ON teacher_schedules.id = teacher_days.scheduleId " +
|
||||||
|
"LEFT JOIN departments ON departments.departmentId = teacher_schedules.departmentId " +
|
||||||
"WHERE teacher_schedules.season = :season AND teacher_schedules.weekStart <= :weekStart " +
|
"WHERE teacher_schedules.season = :season AND teacher_schedules.weekStart <= :weekStart " +
|
||||||
"AND teacher_schedules.weekEnd >= :weekStart " +
|
"AND teacher_schedules.weekEnd >= :weekStart " +
|
||||||
"ORDER BY teacher_lessons.date, teacher_lessons.slotIndex, teacher_lessons.lessonIndex"
|
"ORDER BY teacher_lessons.date, teacher_lessons.slotIndex, teacher_lessons.lessonIndex"
|
||||||
)
|
)
|
||||||
fun observeLessonsForPeriod(season: String, weekStart: Long): Flow<List<TeacherLessonEntity>>
|
fun observeLessonsForPeriod(season: String, weekStart: Long): Flow<List<TeacherLessonWithDepartment>>
|
||||||
|
|
||||||
@Query(
|
@Query(
|
||||||
"SELECT DISTINCT teacher FROM teacher_lessons INNER JOIN teacher_days ON teacher_days.id = teacher_lessons.dayId " +
|
"SELECT DISTINCT teacher FROM teacher_lessons INNER JOIN teacher_days ON teacher_days.id = teacher_lessons.dayId " +
|
||||||
|
|||||||
@@ -23,9 +23,18 @@ object TeacherScheduleParser {
|
|||||||
|
|
||||||
data class ParsedTeacherSchedule(val teachers: List<String>, val days: List<Day>)
|
data class ParsedTeacherSchedule(val teachers: List<String>, val days: List<Day>)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Столбец расписания преподавателя: имя и абсолютный индекс ячейки в шапке.
|
||||||
|
* Индекс нужен для точного выравнивания с рядами данных — в шапке могут
|
||||||
|
* присутствовать пустые колонки-разделители, которые не должны сдвигать
|
||||||
|
* соответствие «преподаватель → столбец».
|
||||||
|
*/
|
||||||
|
private data class Column(val teacher: String, val headerIndex: Int)
|
||||||
|
|
||||||
fun parse(html: String): ParsedTeacherSchedule {
|
fun parse(html: String): ParsedTeacherSchedule {
|
||||||
val doc = Jsoup.parse(html)
|
val doc = Jsoup.parse(html)
|
||||||
var headerFound = false
|
var headerFound = false
|
||||||
|
var columns: List<Column> = emptyList()
|
||||||
var teachers: List<String> = emptyList()
|
var teachers: List<String> = emptyList()
|
||||||
val days = mutableListOf<Day>()
|
val days = mutableListOf<Day>()
|
||||||
var currentDate: LocalDate? = null
|
var currentDate: LocalDate? = null
|
||||||
@@ -43,10 +52,12 @@ object TeacherScheduleParser {
|
|||||||
val first = cellText(tds[0])
|
val first = cellText(tds[0])
|
||||||
val second = cellText(tds[1])
|
val second = cellText(tds[1])
|
||||||
if (!headerFound && first == "День" && second == "Интервал") {
|
if (!headerFound && first == "День" && second == "Интервал") {
|
||||||
teachers = tds.drop(2)
|
columns = tds.mapIndexedNotNull { index, td ->
|
||||||
.map { cellText(it.selectFirst("span") ?: it) }
|
if (index < 2) return@mapIndexedNotNull null
|
||||||
.filter { it.isNotEmpty() }
|
val name = cellText(td.selectFirst("span") ?: td)
|
||||||
.distinct()
|
if (name.isEmpty()) null else Column(name, index)
|
||||||
|
}.distinctBy { it.teacher }
|
||||||
|
teachers = columns.map { it.teacher }
|
||||||
headerFound = true
|
headerFound = true
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -58,7 +69,7 @@ object TeacherScheduleParser {
|
|||||||
currentIntervals = mutableListOf()
|
currentIntervals = mutableListOf()
|
||||||
}
|
}
|
||||||
if (intervalMatch != null && currentIntervals != null) {
|
if (intervalMatch != null && currentIntervals != null) {
|
||||||
parseIntervalRow(tds, intervalMatch, if (dayMatch != null) 2 else 1, teachers, currentIntervals!!)
|
parseIntervalRow(tds, intervalMatch, dayMatch != null, columns, currentIntervals!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
flushDay()
|
flushDay()
|
||||||
@@ -83,16 +94,20 @@ object TeacherScheduleParser {
|
|||||||
private fun parseIntervalRow(
|
private fun parseIntervalRow(
|
||||||
tds: List<Element>,
|
tds: List<Element>,
|
||||||
intervalMatch: MatchResult,
|
intervalMatch: MatchResult,
|
||||||
startCol: Int,
|
dayRow: Boolean,
|
||||||
teachers: List<String>,
|
columns: List<Column>,
|
||||||
intervals: MutableList<TimeSlot>
|
intervals: MutableList<TimeSlot>
|
||||||
) {
|
) {
|
||||||
val start = LocalTime.parse(intervalMatch.groupValues[1])
|
val start = LocalTime.parse(intervalMatch.groupValues[1])
|
||||||
val end = LocalTime.parse(intervalMatch.groupValues[2])
|
val end = LocalTime.parse(intervalMatch.groupValues[2])
|
||||||
val lessons = mutableListOf<Lesson>()
|
val lessons = mutableListOf<Lesson>()
|
||||||
for (i in teachers.indices) {
|
for (column in columns) {
|
||||||
val cell = tds.getOrNull(startCol + i) ?: continue
|
// Ряд с днём содержит обе ведущие ячейки (День, Интервал) и совпадает
|
||||||
lessons += parseCell(cell, teachers[i])
|
// по индексам с шапкой; ряд только с интервалом пропускает ячейку дня
|
||||||
|
// (rowspan) — его ячейки сдвинуты на одну позицию влево.
|
||||||
|
val dataIndex = if (dayRow) column.headerIndex else column.headerIndex - 1
|
||||||
|
val cell = tds.getOrNull(dataIndex) ?: continue
|
||||||
|
lessons += parseCell(cell, column.teacher)
|
||||||
}
|
}
|
||||||
if (lessons.isNotEmpty()) intervals.add(TimeSlot(start, end, lessons))
|
if (lessons.isNotEmpty()) intervals.add(TimeSlot(start, end, lessons))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import agzam.vyatsu.data.local.DepartmentPeriodEntity
|
|||||||
import agzam.vyatsu.data.local.TeacherDao
|
import agzam.vyatsu.data.local.TeacherDao
|
||||||
import agzam.vyatsu.data.local.TeacherDayEntity
|
import agzam.vyatsu.data.local.TeacherDayEntity
|
||||||
import agzam.vyatsu.data.local.TeacherLessonEntity
|
import agzam.vyatsu.data.local.TeacherLessonEntity
|
||||||
|
import agzam.vyatsu.data.local.TeacherLessonWithDepartment
|
||||||
import agzam.vyatsu.data.local.TeacherScheduleDao
|
import agzam.vyatsu.data.local.TeacherScheduleDao
|
||||||
import agzam.vyatsu.data.local.TeacherScheduleEntity
|
import agzam.vyatsu.data.local.TeacherScheduleEntity
|
||||||
import agzam.vyatsu.data.remote.TeacherScheduleParser
|
import agzam.vyatsu.data.remote.TeacherScheduleParser
|
||||||
@@ -56,7 +57,7 @@ class TeacherScheduleRepositoryImpl(
|
|||||||
scheduleDao.observeDistinctTeachers(period.season.name, period.weekStart.toEpochDay())
|
scheduleDao.observeDistinctTeachers(period.season.name, period.weekStart.toEpochDay())
|
||||||
.map { names -> names.map { name -> Teacher(name = name) } }
|
.map { names -> names.map { name -> Teacher(name = name) } }
|
||||||
|
|
||||||
override suspend fun syncPeriod(date: LocalDate): Flow<BulkSyncProgress> = flow {
|
override suspend fun syncPeriod(date: LocalDate, force: Boolean): Flow<BulkSyncProgress> = flow {
|
||||||
// Unique index (departmentId, season, weekStart) breaks on interleaved
|
// Unique index (departmentId, season, weekStart) breaks on interleaved
|
||||||
// delete+insert from concurrent syncPeriod() callers.
|
// delete+insert from concurrent syncPeriod() callers.
|
||||||
syncMutex.withLock {
|
syncMutex.withLock {
|
||||||
@@ -68,18 +69,27 @@ class TeacherScheduleRepositoryImpl(
|
|||||||
return@withLock
|
return@withLock
|
||||||
}
|
}
|
||||||
|
|
||||||
targets.map { it.season to it.weekStart }
|
val now = now()
|
||||||
.distinct()
|
var skippedCount = 0
|
||||||
.forEach { (season, weekStart) ->
|
val nonSkipped = mutableListOf<DepartmentPeriodEntity>()
|
||||||
withContext(Dispatchers.IO) {
|
for (target in targets) {
|
||||||
scheduleDao.deletePeriod(season.name, weekStart)
|
val last = withContext(Dispatchers.IO) {
|
||||||
}
|
scheduleDao.lastSyncedAt(target.departmentId, target.season.name, target.weekStart)
|
||||||
}
|
}
|
||||||
|
val shouldSkip = !force && last != null && now - last < STALE_WINDOW_MS
|
||||||
|
if (shouldSkip) {
|
||||||
|
skippedCount++
|
||||||
|
} else {
|
||||||
|
nonSkipped.add(target)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
emit(BulkSyncProgress(total = targets.size, done = skippedCount, failed = 0))
|
||||||
|
|
||||||
val total = targets.size
|
val total = targets.size
|
||||||
val semaphore = Semaphore(PARALLELISM)
|
val semaphore = Semaphore(PARALLELISM)
|
||||||
val jobs = coroutineScope {
|
val jobs = coroutineScope {
|
||||||
targets.map { target ->
|
nonSkipped.map { target ->
|
||||||
async {
|
async {
|
||||||
semaphore.withPermit {
|
semaphore.withPermit {
|
||||||
try {
|
try {
|
||||||
@@ -102,7 +112,7 @@ class TeacherScheduleRepositoryImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var done = 0
|
var done = skippedCount
|
||||||
var failed = 0
|
var failed = 0
|
||||||
for (job in jobs) {
|
for (job in jobs) {
|
||||||
if (job.await()) done++ else failed++
|
if (job.await()) done++ else failed++
|
||||||
@@ -229,30 +239,30 @@ class TeacherScheduleRepositoryImpl(
|
|||||||
private fun buildTeacherSchedule(
|
private fun buildTeacherSchedule(
|
||||||
period: SchedulePeriod,
|
period: SchedulePeriod,
|
||||||
dayEntities: List<TeacherDayEntity>,
|
dayEntities: List<TeacherDayEntity>,
|
||||||
lessonEntities: List<TeacherLessonEntity>
|
lessons: List<TeacherLessonWithDepartment>
|
||||||
): TeacherSchedule? {
|
): TeacherSchedule? {
|
||||||
val weekDays = dayEntities
|
val weekDays = dayEntities
|
||||||
.filter {
|
.filter {
|
||||||
it.date >= period.weekStart.toEpochDay() && it.date <= period.weekEnd.toEpochDay()
|
it.date >= period.weekStart.toEpochDay() && it.date <= period.weekEnd.toEpochDay()
|
||||||
}
|
}
|
||||||
if (weekDays.isEmpty()) return null
|
if (weekDays.isEmpty()) return null
|
||||||
val lessonsByDate = lessonEntities.groupBy { it.date }
|
val lessonsByDate = lessons.groupBy { it.lesson.date }
|
||||||
val days = weekDays
|
val days = weekDays
|
||||||
.sortedBy { it.date }
|
.sortedBy { it.date }
|
||||||
.distinctBy { it.date }
|
.distinctBy { it.date }
|
||||||
.map { day ->
|
.map { day ->
|
||||||
val lessons = lessonsByDate[day.date].orEmpty()
|
val dayLessons = lessonsByDate[day.date].orEmpty()
|
||||||
Log.d(
|
Log.d(
|
||||||
TAG,
|
TAG,
|
||||||
"build: date=${day.date} totalLessons=${lessons.size} " +
|
"build: date=${day.date} totalLessons=${dayLessons.size} " +
|
||||||
"groupedByStart=${lessons.groupBy { it.start }.keys.sorted()}"
|
"groupedByStart=${dayLessons.groupBy { it.lesson.start }.keys.sorted()}"
|
||||||
)
|
)
|
||||||
val slots = lessons.groupBy { it.start }
|
val slots = dayLessons.groupBy { it.lesson.start }
|
||||||
.toSortedMap()
|
.toSortedMap()
|
||||||
.map { (startMin, slotLessons) ->
|
.map { (startMin, slotLessons) ->
|
||||||
val first = slotLessons.first()
|
val first = slotLessons.first().lesson
|
||||||
val times = slotLessons.map { "${it.start}-${it.end}" }.distinct()
|
val times = slotLessons.map { "${it.lesson.start}-${it.lesson.end}" }.distinct()
|
||||||
val teachers = slotLessons.map { it.teacher }.distinct()
|
val teachers = slotLessons.map { it.lesson.teacher }.distinct()
|
||||||
Log.d(
|
Log.d(
|
||||||
TAG,
|
TAG,
|
||||||
"build: date=${day.date} start=$startMin firstEnd=$first.end " +
|
"build: date=${day.date} start=$startMin firstEnd=$first.end " +
|
||||||
@@ -262,7 +272,7 @@ class TeacherScheduleRepositoryImpl(
|
|||||||
start = LocalTime.of(startMin / 60, startMin % 60),
|
start = LocalTime.of(startMin / 60, startMin % 60),
|
||||||
end = LocalTime.of(first.end / 60, first.end % 60),
|
end = LocalTime.of(first.end / 60, first.end % 60),
|
||||||
lessons = slotLessons
|
lessons = slotLessons
|
||||||
.sortedBy { it.lessonIndex }
|
.sortedBy { it.lesson.lessonIndex }
|
||||||
.map { it.toDomain() }
|
.map { it.toDomain() }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -271,16 +281,33 @@ class TeacherScheduleRepositoryImpl(
|
|||||||
return TeacherSchedule(period = period, days = days)
|
return TeacherSchedule(period = period, days = days)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun TeacherLessonEntity.toDomain(): Lesson = Lesson(
|
private fun TeacherLessonWithDepartment.toDomain(): Lesson = Lesson(
|
||||||
raw = raw,
|
raw = lesson.raw,
|
||||||
room = room,
|
room = lesson.room,
|
||||||
group = groupName,
|
group = lesson.groupName,
|
||||||
subgroup = subgroup,
|
subgroup = lesson.subgroup,
|
||||||
subject = subject,
|
subject = lesson.subject,
|
||||||
type = type,
|
type = lesson.type,
|
||||||
teacher = teacher
|
teacher = lesson.teacher,
|
||||||
|
department = departmentLabel(departmentId, departmentName)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Названия, не выводимые акронимом из слов (например «топ-уровня в сфере…»)
|
||||||
|
private val DEPARTMENT_LABELS = mapOf(
|
||||||
|
"974" to "Топ ИИ"
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun departmentLabel(departmentId: String, departmentName: String?): String {
|
||||||
|
DEPARTMENT_LABELS[departmentId]?.let { return it }
|
||||||
|
val name = departmentName ?: return "каф. $departmentId"
|
||||||
|
val words = name.removePrefix("Кафедра ").removePrefix("кафедра ")
|
||||||
|
.substringBefore(" (")
|
||||||
|
.split(" ")
|
||||||
|
.filter { it.isNotBlank() && it != "и" }
|
||||||
|
val acronym = words.joinToString("") { it.first().uppercase().toString() }
|
||||||
|
return acronym.ifBlank { "каф. $departmentId" }
|
||||||
|
}
|
||||||
|
|
||||||
private fun LocalTime.toMinutesOfDay(): Int = hour * 60 + minute
|
private fun LocalTime.toMinutesOfDay(): Int = hour * 60 + minute
|
||||||
|
|
||||||
private fun now(): Long = System.currentTimeMillis()
|
private fun now(): Long = System.currentTimeMillis()
|
||||||
|
|||||||
@@ -26,4 +26,6 @@ data class Lesson(
|
|||||||
/** Преподаватель **/
|
/** Преподаватель **/
|
||||||
val teacher: String? = null,
|
val teacher: String? = null,
|
||||||
|
|
||||||
|
/** Кафедра-источник (только в расписании преподавателей) **/
|
||||||
|
val department: String? = null,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import java.time.LocalDate
|
|||||||
interface TeacherScheduleRepository {
|
interface TeacherScheduleRepository {
|
||||||
fun observeTeachers(period: SchedulePeriod): Flow<List<Teacher>>
|
fun observeTeachers(period: SchedulePeriod): Flow<List<Teacher>>
|
||||||
fun observeSchedule(period: SchedulePeriod): Flow<TeacherSchedule?>
|
fun observeSchedule(period: SchedulePeriod): Flow<TeacherSchedule?>
|
||||||
suspend fun syncPeriod(date: LocalDate): Flow<BulkSyncProgress>
|
suspend fun syncPeriod(date: LocalDate, force: Boolean = false): Flow<BulkSyncProgress>
|
||||||
suspend fun hasData(period: SchedulePeriod): Boolean
|
suspend fun hasData(period: SchedulePeriod): Boolean
|
||||||
suspend fun weeksFor(date: LocalDate): List<SchedulePeriod>
|
suspend fun weeksFor(date: LocalDate): List<SchedulePeriod>
|
||||||
suspend fun clearAll()
|
suspend fun clearAll()
|
||||||
|
|||||||
@@ -146,7 +146,15 @@ class PickerViewModel(
|
|||||||
syncJob = viewModelScope.launch {
|
syncJob = viewModelScope.launch {
|
||||||
try {
|
try {
|
||||||
teacherScheduleRepository.syncPeriod(today).collect { progress ->
|
teacherScheduleRepository.syncPeriod(today).collect { progress ->
|
||||||
_uiState.value = _uiState.value.copy(syncProgress = progress)
|
_uiState.value = _uiState.value.copy(
|
||||||
|
syncProgress = progress,
|
||||||
|
error = if (progress.failed > 0) {
|
||||||
|
"Не удалось загрузить расписание: ${progress.failed} из " +
|
||||||
|
"${progress.total} кафедр. Проверьте подключение к интернету."
|
||||||
|
} else {
|
||||||
|
_uiState.value.error
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} catch (e: CancellationException) {
|
} catch (e: CancellationException) {
|
||||||
throw e
|
throw e
|
||||||
|
|||||||
@@ -70,6 +70,16 @@ internal fun LessonSlot(slotIndex: Int, slot: TimeSlot, showTeacher: Boolean = t
|
|||||||
) {
|
) {
|
||||||
var any = false
|
var any = false
|
||||||
|
|
||||||
|
if (lesson.department != null) {
|
||||||
|
Text(
|
||||||
|
lesson.department,
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
modifier = Modifier.padding(horizontal = hPadding)
|
||||||
|
)
|
||||||
|
any = true
|
||||||
|
}
|
||||||
|
|
||||||
val meta = listOfNotNull(
|
val meta = listOfNotNull(
|
||||||
if (lesson.type == LessonType.OTHER) {
|
if (lesson.type == LessonType.OTHER) {
|
||||||
null
|
null
|
||||||
|
|||||||
@@ -89,7 +89,9 @@ class TeacherScheduleViewModel(
|
|||||||
if (!scheduleRepository.hasData(period)) {
|
if (!scheduleRepository.hasData(period)) {
|
||||||
_uiState.value = _uiState.value.copy(isLoading = true, loadError = false)
|
_uiState.value = _uiState.value.copy(isLoading = true, loadError = false)
|
||||||
try {
|
try {
|
||||||
scheduleRepository.syncPeriod(period.weekStart).collect { }
|
// force = true: hasData() already proved there is nothing cached for
|
||||||
|
// this period, so never let the staleness window skip the fetch.
|
||||||
|
scheduleRepository.syncPeriod(period.weekStart, force = true).collect { }
|
||||||
} catch (e: CancellationException) {
|
} catch (e: CancellationException) {
|
||||||
throw e
|
throw e
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@@ -199,7 +201,7 @@ class TeacherScheduleViewModel(
|
|||||||
try {
|
try {
|
||||||
_uiState.value = _uiState.value.copy(isLoading = true, loadError = false)
|
_uiState.value = _uiState.value.copy(isLoading = true, loadError = false)
|
||||||
try {
|
try {
|
||||||
scheduleRepository.syncPeriod(ScheduleDates.moscowToday()).collect { }
|
scheduleRepository.syncPeriod(ScheduleDates.moscowToday(), force = true).collect { }
|
||||||
} catch (e: CancellationException) {
|
} catch (e: CancellationException) {
|
||||||
throw e
|
throw e
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV
|
||||||
|
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv
|
||||||
|
b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX
|
||||||
|
BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi
|
||||||
|
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es
|
||||||
|
CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/
|
||||||
|
r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje
|
||||||
|
2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt
|
||||||
|
bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj
|
||||||
|
K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4
|
||||||
|
12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on
|
||||||
|
ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls
|
||||||
|
eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9
|
||||||
|
vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD
|
||||||
|
VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM
|
||||||
|
BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg
|
||||||
|
JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy
|
||||||
|
gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92
|
||||||
|
CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm
|
||||||
|
OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq
|
||||||
|
JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye
|
||||||
|
qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz
|
||||||
|
nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7
|
||||||
|
DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3
|
||||||
|
QEUxeCp6
|
||||||
|
-----END CERTIFICATE-----
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Сертификат vyatsu.ru перевыпущен 05.10.2026 и теперь выдан в иерархии
|
||||||
|
GlobalSign Root R46, которая в системный trust store Android попала
|
||||||
|
только в Android 14. На устройствах с Android 13 и ниже все HTTPS-запросы
|
||||||
|
к сайту падают с "Trust anchor for certification path not found".
|
||||||
|
|
||||||
|
Добавляем этот корень как дополнительный якорь доверия ТОЛЬКО для доменов
|
||||||
|
vyatsu.ru — системные корни сохраняются, остальные сайты не затронуты.
|
||||||
|
-->
|
||||||
|
<network-security-config>
|
||||||
|
<base-config>
|
||||||
|
<trust-anchors>
|
||||||
|
<certificates src="system" />
|
||||||
|
</trust-anchors>
|
||||||
|
<cleartextTrafficPermitted>false</cleartextTrafficPermitted>
|
||||||
|
</base-config>
|
||||||
|
<domain-config>
|
||||||
|
<domain includeSubdomains="true">vyatsu.ru</domain>
|
||||||
|
<trust-anchors>
|
||||||
|
<certificates src="system" />
|
||||||
|
<certificates src="@raw/globalsign_root_r46" />
|
||||||
|
</trust-anchors>
|
||||||
|
</domain-config>
|
||||||
|
</network-security-config>
|
||||||
@@ -15,6 +15,14 @@ class TeacherScheduleParserTest {
|
|||||||
checkNotNull(javaClass.getResourceAsStream("/prepod.html"))
|
checkNotNull(javaClass.getResourceAsStream("/prepod.html"))
|
||||||
.readBytes().toString(Charsets.UTF_8)
|
.readBytes().toString(Charsets.UTF_8)
|
||||||
|
|
||||||
|
private fun fixture517(): String =
|
||||||
|
checkNotNull(javaClass.getResourceAsStream("/prepod517.html"))
|
||||||
|
.readBytes().toString(Charsets.UTF_8)
|
||||||
|
|
||||||
|
private fun fixture974(): String =
|
||||||
|
checkNotNull(javaClass.getResourceAsStream("/prepod974.html"))
|
||||||
|
.readBytes().toString(Charsets.UTF_8)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun teachersHeaderParsedInOrderAndDeduped() {
|
fun teachersHeaderParsedInOrderAndDeduped() {
|
||||||
val parsed = TeacherScheduleParser.parse(fixture())
|
val parsed = TeacherScheduleParser.parse(fixture())
|
||||||
@@ -83,4 +91,94 @@ class TeacherScheduleParserTest {
|
|||||||
val total = parsed.days.sumOf { day -> day.intervals.sumOf { it.lessons.size } }
|
val total = parsed.days.sumOf { day -> day.intervals.sumOf { it.lessons.size } }
|
||||||
assertEquals(11, total)
|
assertEquals(11, total)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun spacerColumnFixture(): String = """
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>День</td><td>Интервал</td><td></td>
|
||||||
|
<td><span>Марков Р.В.</span></td><td><span>Мельцов В.Ю.</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>четверг 08.10.26</td><td>08:20-09:50</td><td></td>
|
||||||
|
<td>2-206 Математика Практическое занятие УТб-2301-02-00</td>
|
||||||
|
<td>1-334 Организация параллельных вычислительных систем Лекция ИВТб-4301-05-00</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>10:00-11:30</td><td></td>
|
||||||
|
<td>2-206 Математика Практическое занятие УТб-2301-02-00</td>
|
||||||
|
<td>1-334 Организация параллельных вычислительных систем Лекция ИВТб-4301-05-00</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
""".trimIndent()
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun emptyHeaderSpacerDoesNotShiftTeacherColumns() {
|
||||||
|
val parsed = TeacherScheduleParser.parse(spacerColumnFixture())
|
||||||
|
assertEquals(listOf("Марков Р.В.", "Мельцов В.Ю."), parsed.teachers)
|
||||||
|
assertEquals(1, parsed.days.size)
|
||||||
|
assertEquals(LocalDate.of(2026, 10, 8), parsed.days[0].date)
|
||||||
|
assertEquals(2, parsed.days[0].intervals.size)
|
||||||
|
for (slot in parsed.days[0].intervals) {
|
||||||
|
val markov = slot.lessons.filter { it.teacher == "Марков Р.В." }
|
||||||
|
val meltsov = slot.lessons.filter { it.teacher == "Мельцов В.Ю." }
|
||||||
|
assertEquals(1, markov.size)
|
||||||
|
assertEquals(1, meltsov.size)
|
||||||
|
assertEquals("Математика", markov[0].subject)
|
||||||
|
assertEquals("Организация параллельных вычислительных систем", meltsov[0].subject)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun realPage517TeacherColumnsAligned() {
|
||||||
|
val html = checkNotNull(javaClass.getResourceAsStream("/prepod517.html"))
|
||||||
|
.readBytes().toString(Charsets.UTF_8)
|
||||||
|
val parsed = TeacherScheduleParser.parse(html)
|
||||||
|
assertTrue(parsed.teachers.contains("Мельцов В.Ю."))
|
||||||
|
val day = parsed.days.first { it.date == LocalDate.of(2026, 10, 8) }
|
||||||
|
val all = day.intervals.flatMap { it.lessons }
|
||||||
|
val markov = all.filter { it.teacher == "Марков Р.В." }
|
||||||
|
val meltsov = all.filter { it.teacher == "Мельцов В.Ю." }
|
||||||
|
assertTrue("Мельцов должен иметь пары 08.10", meltsov.isNotEmpty())
|
||||||
|
assertTrue(
|
||||||
|
"У Мельцова не должно быть математики Маркова",
|
||||||
|
meltsov.none { it.subject?.contains("Математика") == true }
|
||||||
|
)
|
||||||
|
assertTrue(
|
||||||
|
"У Маркова должна остаться математика",
|
||||||
|
markov.any { it.subject?.contains("Математика") == true }
|
||||||
|
)
|
||||||
|
assertTrue(
|
||||||
|
"У Мельцова параллельные вычислительные системы",
|
||||||
|
meltsov.any { it.subject?.contains("Организация параллельных") == true }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun realPage517MeltsovLabsSitAt1000And1145NotAt0820() {
|
||||||
|
val parsed = TeacherScheduleParser.parse(fixture517())
|
||||||
|
val day = parsed.days.first { it.date == LocalDate.of(2026, 10, 6) }
|
||||||
|
val labsAt = { time: java.time.LocalTime ->
|
||||||
|
day.intervals.firstOrNull { it.start == time }
|
||||||
|
?.lessons
|
||||||
|
?.filter { it.teacher == "Мельцов В.Ю." && it.type == LessonType.LABORATORY }
|
||||||
|
.orEmpty()
|
||||||
|
}
|
||||||
|
assertEquals(
|
||||||
|
"В 08:20 у Мельцова на странице 517 лабораторных нет",
|
||||||
|
0, labsAt(java.time.LocalTime.of(8, 20)).size
|
||||||
|
)
|
||||||
|
assertTrue(labsAt(java.time.LocalTime.of(10, 0)).isNotEmpty())
|
||||||
|
assertTrue(labsAt(java.time.LocalTime.of(11, 45)).isNotEmpty())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun realPage974MeltsovHasPracticeAt0820() {
|
||||||
|
val parsed = TeacherScheduleParser.parse(fixture974())
|
||||||
|
val day = parsed.days.first { it.date == LocalDate.of(2026, 10, 6) }
|
||||||
|
val slot = day.intervals.first { it.start == java.time.LocalTime.of(8, 20) }
|
||||||
|
val mel = slot.lessons.filter { it.teacher == "Мельцов В.Ю." }
|
||||||
|
assertTrue(mel.isNotEmpty())
|
||||||
|
assertTrue("08:20 на странице 974 — практическое занятие", mel.all { it.type == LessonType.PRACTICE })
|
||||||
|
assertEquals("ИВТб-2305-06-00", mel.first().group)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,980 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5.0 Transitional//EN">
|
||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8">
|
||||||
|
<TITLE></TITLE>
|
||||||
|
<STYLE TYPE="text/css">
|
||||||
|
body { background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||||
|
tr.R0{ height: 25px; }
|
||||||
|
tr.R0 td.R0C0{ font-family: Arial; font-size: 14pt; font-style: normal; font-weight: bold; color: #000000; background-color: #ffffff; text-align: left; }
|
||||||
|
tr.R0 td.R0C1{ text-align: left; }
|
||||||
|
tr.R1{ height: 21px; }
|
||||||
|
tr.R1 td.R15C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R1 td.R15C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R1 td.R1C0{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; color: #000000; background-color: #fcfaeb; text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R1 td.R1C2{ font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; color: #000000; background-color: #fcfaeb; text-align: center; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R1 td.R9C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R1 td.R9C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R1 td.R9C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R1 td.R9C6{ text-align: left; }
|
||||||
|
tr.R16{ height: 43px; }
|
||||||
|
tr.R16 td.R16C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R16 td.R16C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R16 td.R16C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R16 td.R16C6{ text-align: left; }
|
||||||
|
tr.R17{ height: 141px; }
|
||||||
|
tr.R17 td.R17C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R17 td.R17C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R17 td.R17C6{ text-align: left; }
|
||||||
|
tr.R17 td.R58C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R18{ height: 15px; }
|
||||||
|
tr.R18 td.R18C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R18 td.R18C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R18 td.R18C6{ text-align: left; }
|
||||||
|
tr.R18 td.R22C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R18 td.R22C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R18 td.R65C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R2{ height: 30px; }
|
||||||
|
tr.R2 td.R2C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R2 td.R2C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R2 td.R2C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R2 td.R2C6{ text-align: left; }
|
||||||
|
tr.R30{ height: 16px; }
|
||||||
|
tr.R30 td.R30C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R30 td.R30C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R30 td.R30C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R30 td.R30C6{ text-align: left; }
|
||||||
|
tr.R30 td.R36C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R30 td.R36C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R37{ height: 24px; }
|
||||||
|
tr.R37 td.R37C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R37 td.R37C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R37 td.R37C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R37 td.R37C6{ text-align: left; }
|
||||||
|
tr.R37 td.R43C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R37 td.R43C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R47{ height: 27px; }
|
||||||
|
tr.R47 td.R47C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R47 td.R47C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R47 td.R47C6{ text-align: left; }
|
||||||
|
tr.R49{ height: 26px; }
|
||||||
|
tr.R49 td.R49C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R49 td.R49C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R49 td.R49C6{ text-align: left; }
|
||||||
|
tr.R49 td.R50C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R49 td.R50C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R7{ height: 29px; }
|
||||||
|
tr.R7 td.R23C0{ font-family: Arial; font-size: 14pt; font-style: normal; text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R7 td.R7C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R7 td.R7C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R7 td.R7C6{ text-align: left; }
|
||||||
|
tr.R7 td.R8C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R7 td.R8C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R74{ height: 23px; }
|
||||||
|
tr.R74 td.R74C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R74 td.R74C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R74 td.R74C6{ text-align: left; }
|
||||||
|
tr.R74 td.R78C1{ text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R74 td.R78C2{ text-align: left; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 3px solid; border-right: #000000 1px solid; }
|
||||||
|
tr.R86{ height: 99px; }
|
||||||
|
tr.R86 td.R86C3{ font-family: Arial; font-size: 8pt; font-style: normal; text-align: center; vertical-align: middle; }
|
||||||
|
table {table-layout: fixed; padding: 0px; padding-left: 2px; vertical-align:bottom; border-collapse:collapse;width: 100%; font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||||
|
td { padding: 0px; padding-left: 2px; overflow:hidden; }
|
||||||
|
</STYLE>
|
||||||
|
</HEAD>
|
||||||
|
<BODY STYLE="background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; ">
|
||||||
|
<TABLE style="width:100%; height:0px; " CELLSPACING=0>
|
||||||
|
<COL WIDTH=31>
|
||||||
|
<COL WIDTH=89>
|
||||||
|
<COL WIDTH=420>
|
||||||
|
<COL WIDTH=420>
|
||||||
|
<COL WIDTH=420>
|
||||||
|
<COL WIDTH=420>
|
||||||
|
<COL WIDTH=63>
|
||||||
|
<COL>
|
||||||
|
<TR CLASS=R0>
|
||||||
|
<TD CLASS="R0C0" COLSPAN=3><SPAN STYLE="white-space:nowrap;max-width:0px;">Обновление 07.10.2026</SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R1C0"><SPAN STYLE="white-space:nowrap;max-width:0px;">День</SPAN></TD>
|
||||||
|
<TD CLASS="R1C0"><SPAN STYLE="white-space:nowrap;max-width:0px;">Интервал</SPAN></TD>
|
||||||
|
<TD CLASS="R1C2"><SPAN STYLE="white-space:nowrap;max-width:0px;">Долженкова М.Л.</SPAN></TD>
|
||||||
|
<TD CLASS="R1C2"><SPAN STYLE="white-space:nowrap;max-width:0px;">Коржавина А.С.</SPAN></TD>
|
||||||
|
<TD CLASS="R1C2"><SPAN STYLE="white-space:nowrap;max-width:0px;">Мельцов В.Ю.</SPAN></TD>
|
||||||
|
<TD CLASS="R1C2"><SPAN STYLE="white-space:nowrap;max-width:0px;">Прозоров Д.Е.</SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R2>
|
||||||
|
<TD CLASS="R2C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">понедельник 28.09.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R2C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R2>
|
||||||
|
<TD CLASS="R2C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R2C2">1-109 Программирование Лабораторная работа ИВТб-1301-06-00 ИВТб-1301-06-00, 01 подгруппа</TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R2>
|
||||||
|
<TD CLASS="R2C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R2C2">1-109 Программирование Лабораторная работа ИВТб-1301-06-00 ИВТб-1301-06-00, 01 подгруппа</TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R2>
|
||||||
|
<TD CLASS="R2C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R2C2">1-109 Программирование Лабораторная работа ИВТб-1302-06-00 ИВТб-1302-06-00, 01 подгруппа</TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R2>
|
||||||
|
<TD CLASS="R2C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R2C2">1-109 Программирование Лабораторная работа ИВТб-1302-06-00 ИВТб-1302-06-00, 01 подгруппа</TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R2C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R8C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R8C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R8C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R8C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R8C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">вторник 29.09.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-237 Теория автоматов Практическое занятие ИВТб-2301-06-00 ИВТб-2301-06-00, 01 подгруппа ИВТб-2301-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-237 Теория автоматов Практическое занятие ИВТб-2302-06-00 ИВТб-2302-06-00, 01 подгруппа ИВТб-2302-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R15C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R16>
|
||||||
|
<TD CLASS="R16C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">среда 30.09.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R16C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R16C2">2-207 Программирование Практическое занятие ИВТб-1306-06-00 ИВТб-1306-06-00, 01 подгруппа ИВТб-1306-06-00, 02 подгруппа ИВТб-1306-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R17>
|
||||||
|
<TD CLASS="R17C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2">2-209 Информатика Лекция ИВТб-1301-06-00 ИВТб-1301-06-00, 01 подгруппа ИВТб-1301-06-00, 02 подгруппа ИВТб-1301-06-00, 03 подгруппа ИВТб-1302-06-00 ИВТб-1302-06-00, 01 подгруппа ИВТб-1302-06-00, 02 подгруппа ИВТб-1302-06-00, 03 подгруппа ИВТб-1303-06-00 ИВТб-1303-06-00, 01 подгруппа ИВТб-1303-06-00, 02 подгруппа ИВТб-1303-06-00, 03 подгруппа ИВТб-1304-06-00 ИВТб-1304-06-00, 01 подгруппа ИВТб-1304-06-00, 02 подгруппа ИВТб-1304-06-00, 03 подгруппа ИВТб-1305-06-00 ИВТб-1305-06-00, 01 подгруппа ИВТб-1305-06-00, 02 подгруппа ИВТб-1305-06-00, 03 подгруппа ИВТб-1306-06-00 ИВТб-1306-06-00, 01 подгруппа ИВТб-1306-06-00, 02 подгруппа ИВТб-1306-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R16>
|
||||||
|
<TD CLASS="R16C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R16C2">1-334 Программирование Практическое занятие ИВТб-1305-06-00 ИВТб-1305-06-00, 01 подгруппа ИВТб-1305-06-00, 02 подгруппа ИВТб-1305-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R22C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R23C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">четверг 01.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-237 Интеллектуальные системы Лабораторная работа ИВТб-4301-05-00 ИВТб-4301-05-00, 01 подгруппа ИВТб-4301-05-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-237 Интеллектуальные системы Лабораторная работа ИВТб-4301-05-00 ИВТб-4301-05-00, 01 подгруппа ИВТб-4301-05-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R17>
|
||||||
|
<TD CLASS="R17C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R17C2">2-209 Программирование Лекция ИВТб-1301-06-00 ИВТб-1301-06-00, 01 подгруппа ИВТб-1301-06-00, 02 подгруппа ИВТб-1301-06-00, 03 подгруппа ИВТб-1302-06-00 ИВТб-1302-06-00, 01 подгруппа ИВТб-1302-06-00, 02 подгруппа ИВТб-1302-06-00, 03 подгруппа ИВТб-1303-06-00 ИВТб-1303-06-00, 01 подгруппа ИВТб-1303-06-00, 02 подгруппа ИВТб-1303-06-00, 03 подгруппа ИВТб-1304-06-00 ИВТб-1304-06-00, 01 подгруппа ИВТб-1304-06-00, 02 подгруппа ИВТб-1304-06-00, 03 подгруппа ИВТб-1305-06-00 ИВТб-1305-06-00, 01 подгруппа ИВТб-1305-06-00, 02 подгруппа ИВТб-1305-06-00, 03 подгруппа ИВТб-1306-06-00 ИВТб-1306-06-00, 01 подгруппа ИВТб-1306-06-00, 02 подгруппа ИВТб-1306-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R22C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R30>
|
||||||
|
<TD CLASS="R30C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">пятница 02.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R30C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R30>
|
||||||
|
<TD CLASS="R30C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R16>
|
||||||
|
<TD CLASS="R16C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R16C2">1-435 Программирование Практическое занятие ИВТб-1301-06-00 ИВТб-1301-06-00, 01 подгруппа ИВТб-1301-06-00, 02 подгруппа ИВТб-1301-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-109 Программирование Лабораторная работа ИВТб-1301-06-00 ИВТб-1301-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-109 Программирование Лабораторная работа ИВТб-1301-06-00 ИВТб-1301-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-237 Теория автоматов Практическое занятие ИВТб-2304-06-00 ИВТб-2304-06-00, 01 подгруппа ИВТб-2304-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R30>
|
||||||
|
<TD CLASS="R30C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R30>
|
||||||
|
<TD CLASS="R36C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R36C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R36C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R36C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R36C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R30C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">суббота 03.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R43C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R43C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R43C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R43C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R43C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R16>
|
||||||
|
<TD CLASS="R16C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">понедельник 05.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R16C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R16C2">1-311 Программирование Практическое занятие ИВТб-1302-06-00 ИВТб-1302-06-00, 01 подгруппа ИВТб-1302-06-00, 02 подгруппа ИВТб-1302-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-109 Программирование Лабораторная работа ИВТб-1302-06-00 ИВТб-1302-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-109 Программирование Лабораторная работа ИВТб-1302-06-00 ИВТб-1302-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R47>
|
||||||
|
<TD CLASS="R47C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R47>
|
||||||
|
<TD CLASS="R47C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R47C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R49>
|
||||||
|
<TD CLASS="R49C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R49C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R49C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R49C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R49C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R49C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R49>
|
||||||
|
<TD CLASS="R50C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R50C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R50C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R50C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R50C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R49C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R23C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">вторник 06.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-237 Теория автоматов Практическое занятие ИВТб-2305-06-00 ИВТб-2305-06-00, 01 подгруппа ИВТб-2305-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">1-237 Теория автоматов Практическое занятие ИВТб-2303-06-00 ИВТб-2303-06-00, 01 подгруппа ИВТб-2303-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R9C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R1>
|
||||||
|
<TD CLASS="R15C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R15C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R9C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R17>
|
||||||
|
<TD CLASS="R58C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">среда 07.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R17C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R17C2">2-209 Программирование Лекция ИВТб-1301-06-00 ИВТб-1301-06-00, 01 подгруппа ИВТб-1301-06-00, 02 подгруппа ИВТб-1301-06-00, 03 подгруппа ИВТб-1302-06-00 ИВТб-1302-06-00, 01 подгруппа ИВТб-1302-06-00, 02 подгруппа ИВТб-1302-06-00, 03 подгруппа ИВТб-1303-06-00 ИВТб-1303-06-00, 01 подгруппа ИВТб-1303-06-00, 02 подгруппа ИВТб-1303-06-00, 03 подгруппа ИВТб-1304-06-00 ИВТб-1304-06-00, 01 подгруппа ИВТб-1304-06-00, 02 подгруппа ИВТб-1304-06-00, 03 подгруппа ИВТб-1305-06-00 ИВТб-1305-06-00, 01 подгруппа ИВТб-1305-06-00, 02 подгруппа ИВТб-1305-06-00, 03 подгруппа ИВТб-1306-06-00 ИВТб-1306-06-00, 01 подгруппа ИВТб-1306-06-00, 02 подгруппа ИВТб-1306-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R17>
|
||||||
|
<TD CLASS="R17C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R17C2">2-209 Введение в профессию Лекция ИВТб-1301-06-00 ИВТб-1301-06-00, 01 подгруппа ИВТб-1301-06-00, 02 подгруппа ИВТб-1301-06-00, 03 подгруппа ИВТб-1302-06-00 ИВТб-1302-06-00, 01 подгруппа ИВТб-1302-06-00, 02 подгруппа ИВТб-1302-06-00, 03 подгруппа ИВТб-1303-06-00 ИВТб-1303-06-00, 01 подгруппа ИВТб-1303-06-00, 02 подгруппа ИВТб-1303-06-00, 03 подгруппа ИВТб-1304-06-00 ИВТб-1304-06-00, 01 подгруппа ИВТб-1304-06-00, 02 подгруппа ИВТб-1304-06-00, 03 подгруппа ИВТб-1305-06-00 ИВТб-1305-06-00, 01 подгруппа ИВТб-1305-06-00, 02 подгруппа ИВТб-1305-06-00, 03 подгруппа ИВТб-1306-06-00 ИВТб-1306-06-00, 01 подгруппа ИВТб-1306-06-00, 02 подгруппа ИВТб-1306-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R17C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R22C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R65C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">четверг 08.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R16>
|
||||||
|
<TD CLASS="R16C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R16C2">1-435 Программирование Практическое занятие ИВТб-1303-06-00 ИВТб-1303-06-00, 01 подгруппа ИВТб-1303-06-00, 02 подгруппа ИВТб-1303-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R16>
|
||||||
|
<TD CLASS="R16C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R16C2">1-435 Программирование Практическое занятие ИВТб-1304-06-00 ИВТб-1304-06-00, 01 подгруппа ИВТб-1304-06-00, 02 подгруппа ИВТб-1304-06-00, 03 подгруппа</TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R16C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R7>
|
||||||
|
<TD CLASS="R7C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C2">2-205 Теория автоматов Практическое занятие ИВТб-2306-06-00 ИВТб-2306-06-00, 01 подгруппа ИВТб-2306-06-00, 02 подгруппа</TD>
|
||||||
|
<TD CLASS="R7C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R7C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R18C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R18>
|
||||||
|
<TD CLASS="R22C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R22C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R18C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">пятница 09.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R74>
|
||||||
|
<TD CLASS="R74C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R74>
|
||||||
|
<TD CLASS="R74C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R74>
|
||||||
|
<TD CLASS="R74C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R74>
|
||||||
|
<TD CLASS="R74C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R74>
|
||||||
|
<TD CLASS="R78C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R78C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R78C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R78C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R78C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R74C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C0" ROWSPAN=7><div style="margin: 0 -17px;-moz-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -o-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg)"><SPAN STYLE="max-width:0px;">суббота 10.10.26 </SPAN></TD>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">08:20-09:50</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">10:00-11:30</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">11:45-13:15</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">14:00-15:30</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">15:45-17:15</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">17:20-18:50</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R37>
|
||||||
|
<TD CLASS="R37C1"><SPAN STYLE="white-space:nowrap;max-width:0px;">18:55-20:25</SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C2"><SPAN></SPAN></TD>
|
||||||
|
<TD CLASS="R37C6"><SPAN></SPAN></TD>
|
||||||
|
<TD><SPAN></SPAN></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR CLASS=R86>
|
||||||
|
<TD><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD CLASS="R86C3"><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD><DIV STYLE="position:relative; height:99px;width: 100%; overflow:hidden;"><SPAN></SPAN></DIV></TD>
|
||||||
|
<TD><DIV STYLE="width:100%;height:99px;overflow:hidden;"> </DIV></TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
||||||
Reference in New Issue
Block a user