Да все уже, сделано. Вычисления длинные, к тому же это демо, решается lut размером 512 байт.
Вид для печати
Проверка на присутствие числа в диапазоне:
Есть другие варианты?Код:between: ; B.C=high/low, A=value
ld e,a
ld a,b
cp e
ret c
ld a,e
cp c
ret
Найдено в интернетах:
пишите решения.Цитата:
При устройстве на работу программистом столкнулся с интересной задачей следующего содержания:
«Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово Fizz, а вместо чисел, кратных пяти — слово Buzz. Если число кратно пятнадцати, то программа должна выводить слово FizzBuzz. Задача может показаться очевидной, но нужно получить наиболее простое и красивое решение.»
Код:var
s0: string;
begin
for i:=1 to 100 do begin
s0:='';
if (i mod 3) = 0 then s0:= 'Fizz';
if (i mod 5) = 0 then s0:= s0 + 'Buzz';
if s0 ='' then s0:= inttostr(i);
writeln(s0);
end;
Код:.org $8000
ld b,0
ld c,0
ld d,1
l1:
ld e,0
inc b
ld a,b
cp 3
jr nz,j1
ld b,0
ld hl,str_fizz
call print_strhl
inc e
j1:
inc c
ld a,c
cp 5
jr nz,j2
ld c,0
ld hl,str_buzz
call print_strhl
inc e
j2:
ld a,e
and a
jr nz,j3
call print_strnum
j3:
ld a,32
rst 16;lf
inc d
ld a,d
cp 101
jr nz,l1
ret
str_fizz: .db 'fizz',0
str_buzz: .db 'buzz',0
print_strhl:
push bc
push de
l2:
ld a,(hl)
and a
jr z,q1
rst 16
inc hl
jr l2
q1:
pop de
pop bc
ret
print_strnum:
push bc
push de
ld c,d
ld b,0
call 6683
pop de
pop bc
ret
сурово )
Задача действительно очевидная, а требование "простоты и красоты" переводит её в рубрику "угадай, что нравится автору". Быть может, требуется соблюдать определенные стандарты в оформлении кода?
Можно ли придумать что-либо проще и очевиднее, чем вариант от shurik-ua выше? Сомневаюсь. А именно понятность кода для коллег является одним из главных качеств программиста, которые хотят видеть работодатели.
По эффективности где-то можно оптимизировать. Скорость или, там, место в памяти. И это будет сильно зависеть от целевой архитектуры.
Скажем, если процессор не имеет аппаратного деления или, если деление медленное - то имеет право на жизнь такой вариант:
Но даже и здесь насчет эффективности можно поспорить, т.к. вывод на консоль почти на всех архитектурах (даже Z80) существенно медленнее, чем деление.Код:#include <stdio.h>
void main(void)
{
int r3=1;
int r5=1;
for(int i=1; i<=100; i++)
{
if(r3==3)
{
r3=0;
printf("Fizz");
}
if(r5==5)
{
r5=0;
printf("Buzz");
}
if(r3 || r5)
{
printf("%d",i);
}
putchar('\n');
r3++;
r5++;
}
}
шо касается деления, то:
https://i106.fastpic.ru/big/2019/011...fe3c212146.jpg
у меня получилось 64 байта
те-же интернеты говорят
"в голову приходит идея использования строк. Например, с помощью строк можно избавиться от одной операции сравнения.
...
А что если попробовать не приписывать к строке нужный текст, а наоборот убирать текст из строки вида «ЧислоFizzBuzz»?
алгоритм содержит всего две операции сравнения и два условных оператора. "