Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.80.143.34] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Всем здрасте!
Давно уже собирался, но, наконец, решил начать вести рубрику мини-соревнований. Для участия приглашаются все желающие. p.s. Всех мужчин с праздником! Постановка задачи. Написать функцию поиска в ряде целых чисел наиболее близкого числа к Z. При нахождении нескольких таких чисел выбрать первое наибольшее, если Z>0, первое наименьшее, если Z<0 или любое первое, если Z=0. Адрес массива знаковых 2-байтовых чисел передается в паре регистров DS:SI, размер массива - в регистре CX, а число Z - в регистре AX. Значение остальных регистров не определено. Вернуть в регистре AX порядковый номер числа (отсчет вести с нуля). Если CX=0, вернуть 0. Пример. Ряд чисел: 9 4 -11 8 -7 0 8 2 Z=6 Результат: 3 Объяснение: наиболее близкие к 6 числа 4 и 8, но т.к. Z>0, мы выбираем 8, в представленном ряде чисел оно идёт под номером 3. Критерий оценки. Наименьший размер кода. Платформа. MS-DOS. Продолжительность соревнования. До 9 марта 2006 года включительно. Награда. 1 dgm. Свои работы кидайте мне в приват, а в теме просто указывайте размер получившейся программы с учётом команды ret. Удачи! |
Сообщ.
#2
,
|
|
|
Есть некоторые вопросы
1. разрядность Z (и чисел в массиве) 2. если нашли Z? 3. куда слать исходники |
Сообщ.
#3
,
|
|
|
процессор? любой больше 386?
|
Сообщ.
#4
,
|
|
|
лично я уже код написал проверяю, модернезирую..
- а вот куда его слать потом это вопрос? - и еще Женя, в виде подпрограммы пойдет? - и можно ли будет исправить его потом в догонку, если возникнет необходимость? - и так понял, что без переменных - только регистры. orb сказано же Z - два байта знаковых, и его находить не нужно (оно задано)!!! |
Сообщ.
#5
,
|
|
|
Цитата kardinal @ если оно найдено в последовательности Z - два байта знаковых, и его находить не нужно (оно задано) |
Сообщ.
#6
,
|
|
|
Число Z задано изначально, а в массиве ищется наиболее близкое к нему. Если найдено, то оно и будет наиболее близким, логично?
А по поводу подпрограммы (процедурки) - конечно, можно, так даже и надо! Куда слать? Хм... ну давайте в приват, а в топике просто укажите размер проги с учётом команды ret (описал в первом посте) Активность пока не ахти, так что продлеваем ещё на недельку, до 9.02. Добавлено kardinal, здоровая у тебя, однако, процедурка получилась Аж 62 байта! |
Сообщ.
#7
,
|
|
|
7in X
Цитата kardinal, здоровая у тебя, однако, процедурка получилась. Аж 62 байта! Ну вот... |
Сообщ.
#8
,
|
|
|
Если используются строковые команды то обязательно явно сбрасывать флаг направления?
|
Сообщ.
#9
,
|
|
|
captain cobalt
Цитата Если используются строковые команды то обязательно явно сбрасывать флаг Обыкновенно не надо, если ты перед этим не мудрил с направлением. |
Сообщ.
#10
,
|
|
|
captain cobalt
Лучше сбросить! В условии написано: Цитата 7in X @ Значение остальных регистров не определено И регистр флагов сюда тоже входит |
Сообщ.
#11
,
|
|
|
Сократил еще на 5 байт днем скину..
Невезуха, наоборот баг нашел при Z<0, стало больше.. |
Сообщ.
#12
,
|
|
|
Ну что... соревнование почти заканчивается
Пока участников трое (работы ещё не проверял)... но ещё есть чуть-чуть времени. |
Сообщ.
#13
,
|
|
|
Цитата 7in X @ А как их проверять? работы ещё не проверял Добавлено правленый вариант вышлю завтра, сегодня не успел |
Сообщ.
#14
,
|
|
|
Странный вопрос... ну во-первых, проанализировать, а во-вторых, через тестовую прогу.
|
Сообщ.
#15
,
|
|
|
Извиняйте, что не опубликовал результаты вовремя, были проблемы со свободным временем.
Итак, наши участники: * Lyrik (45 байт) * captain_cobalt (47 байт) * kardinal (62 и 81 байт) * orb (50 байт) Изо всех программ корректно работала только программа captain_cobalt (47 байт). Программа Lyrik'а могла бы победить, но при Z=0 она ищет не первое ближайщее число, а наименьшее (т.е. из 1 и -1 она выберет -1, даже если 1 будет стоять раньше). Т.о... Победителем объявляется captain_cobalt, который награждается 1 dgm! Мои поздравления! Исходный текст программы: ; mini-compo #00 ; http://forum.sources.ru/index.php?showtopic=133825 ; captain cobalt, 08mar2006, 47 bytes CLD PUSH CX JCXZ EXIT0 PUSH CX XCHG AX,BP MOV DI,-1 L1: LODSW MOV DX,BP SUB DX,AX JG $+4 NEG DX NEG AX JZ $+4 JNS $-4 CMP DI,DX JC L2 JNZ $+6 CMP BX,AX JNG L2 POP BX MOV DI,DX MOV BX,AX PUSH CX L2: LOOP L1 POP CX EXIT0: POP AX SUB AX,CX RET Программы тестировались на последовательностях: z dw 6, 6, 0, 0, -3, -3, 0 ; числа Z, последовательно передаваемые в AX data dw 9, 4, -11, 8, -7, 0, 8, 2 dw 9, 8, -11, 4, -7, 0, 8, 2 dw 5, -2, 7, 4, 1, 6, -1, 3 dw 5, -2, 7, 4, -1, 6, 1, 3 dw 4, 6, -5, 12, -101, 27, -1, 0 dw 4, 6, -1, 12, -101, 27, -5, 0 ; cx = 8 для всех случаев ; правильные ответы: 3, 1, 4, 4, 2, 6, 0 2 Lyrik: Даю тебе ещё один шанс. Исправишь свою программу так, чтобы она работала корректно и была менее 47 байт (46,45...), тоже получишь 1 dgm |