Перейти к публикации
Дедовский городской форум
RaD

конкурс: самая короткая программа на С - аналог Seq

Рекомендованные сообщения

Задача: Написать программу на языке Цэ, минимального размера с точки зрения исходника, которая может печатать последовательность цифр от 1 до 100.

 

Условия: В интернете не рыскать, думать мозгом самостоятельно.

 

Пример:

#include <unistd.h>
main(){execlp("seq","1","100",NULL);}

Пример не совсем кошерен, так как использует внешнюю утилиту.

 

Попробуйте выполнить задачу только средствами языка. Мой ответ имеет длину 37 байт :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Наверно всё такие чисел, а не цифр:)

В книжке The C programming Language ANSI W.Kernighan, D. Ritchie в описании стандартной библиотеки не нашел <unistd.h> :-\ она нестандартная чтоли? или просто описание её они не включили?

Компилятор под линукс у тебя?)

Печатать на экран, в файл, принтер? Консольное приложение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Наверно всё такие чисел, а не цифр:)

Чисел.

В книжке The C programming Language ANSI W.Kernighan, D. Ritchie в описании стандартной библиотеки не нашел <unistd.h> :-\ она нестандартная чтоли? или просто описание её они не включили?

Не читал, но осуждаю. :laugh: Вроде стандартная.

Компилятор под линукс у тебя?)

GCC, но это не важно, собирать можешь любым. Главное - размер исходного кода.

Печатать на экран, в файл, принтер? Консольное приложение?

Тут полная свобода. На линуксе вообще нет разницы - куда. Консоль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

давай усложним задачу

код должен собираться хотябы gcc и vc2005 - это чтобы не использовать платформенно зависимые особенности :)

возражения типа а у меня такого компилятора нет не канают.

если твой код у меня не собирается, значит решение не правильное ;)

 

мое решение правда это на с++

68 символов

#include<stdio.h>
int i;int main(){for(;i<100;printf("%d\n",++i));}

 

на С - неправильное потому что не всеми компиляторами собирается

45 символов

int i;main(){for(;i<100;printf("%d\n",++i));}

Изменено пользователем balmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Взял и всё испортил ;)

 

Вот ответ. Собирается gcc на раз:

main(i){for(;printf("%d\n",i++)<4;);}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не факт, что компилятор должен по умолчанию обнуляет int i(почему int, а не char?), если там не ноль :)

 

Я пас, короче :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

извращенцы) кстати ассемблер в этом плане куда более забавная штука =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Новый конкурс. Самый короткий троян :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Новый конкурс. Самый короткий троян :wacko:

www.citforum.ru

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
извращенцы) кстати ассемблер в этом плане куда более забавная штука =)

Спасибо за информацию. Не знал :happy:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробую потягаться с дятьками, правда на с++ .

 

мой первый вариант (самый большой, зато нормальный и легкочитабельный)) - 79 байт:

 

#include <iostream>
int main(){for (int i=1; i<=100;i++){std::cout<<i<<" ";}}

 

2 вариант - 69 байт ((

 

#include <iostream> 
int main(){for(int i=1;i<101;i++)std::cout<<i;}

 

P.s компилил на gnu.

 

 

Мож какую нить поинтересней задачу? ;)

Изменено пользователем KeViN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
извращенцы) кстати ассемблер в этом плане куда более забавная штука =)

Ну да. давай посоревнуемся, кто напишет самую короткую программу вывода на экран окружности через ассемблер

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Satanas,

ORG 60000

ENT $

LD A,5

LD (23693),A

LD A,0

CALL 8859

CALL 3435

LD A,2

CALL 5633

RET

LD A,66

CALL 11560

LD A,66

CALL 11560

LD A,66

CALL 11560

CALL 9005

LD HL,10072

EXX

RET

 

p/s решение не моё и не для x86.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Satanas,

ORG 60000

ENT $

LD A,5

LD (23693),A

LD A,0

CALL 8859

CALL 3435

LD A,2

CALL 5633

RET

LD A,66

CALL 11560

LD A,66

CALL 11560

LD A,66

CALL 11560

CALL 9005

LD HL,10072

EXX

RET

 

p/s решение не моё и не для x86.

Это для Zilog'а. Книжка сохранилась?

P.S. Нечестно пользоваться встроенными процедурами :)

P.P.S. И полкода можно выкинуть, после первого RET дальше ничего не вызовется.

Изменено пользователем RaD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
p/s решение не моё и не для x86.

бгг... а на чистом масме слабо? У меня программка на пару листочков... если не больше...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
p/s решение не моё и не для x86.

бгг... а на чистом масме слабо? У меня программка на пару листочков... если не больше...

а зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

офигеть, там (в ассемблере) так сложно окружность вывести?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
офигеть, там (в ассемблере) так сложно окружность вывести?

на чистом - да

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

RaD, да это для z80, книжка где-то валяется ;)

Satanas, а что такое "чистый масм"(яндекс:Московский Ансамбль Современной

Музыки)?

KeViN, самое простое - это вывести окружность в паинте %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
RaD, да это для z80, книжка где-то валяется ;)

Satanas, а что такое "чистый масм"(яндекс:Московский Ансамбль Современной

Музыки)?

KeViN, самое простое - это вывести окружность в паинте %)

Z80, а точнее английский компьютер ZX Spectrum 1982 года выпуска работал на американском процессоре Zilog, так что мы говорим об одном :)

Про чистый ассемблер и мощную (для тех времён) трёхмерную графику хорошо написал Майкл Абраш в книжке "Программирование графики, Таинства". Недавно специально нашёл и купил её на память о тех мегавременах. Вот в ней подробно разбираются аспекты отрисовки окружности, там ничего сложного, но и не для средних умов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

RaD, я же написал "да" :) только процессор z80, а фирма-производитель ZiLOG Inc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кстати, про граффику и старые процы. Есть 13-й видеорежим 320x200, есть точка (x,y). надо написать быстрый алгоритм нахождения байта COORD этой точки от начала видеопамяти по известной матформуле COORD=320*y+x желательно на асме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
P.S. Нечестно пользоваться встроенными процедурами :)

 

А в С программе внешними, типа, printf значит можно ;)

 

Вот жутко старая задача. Написать программу, которая печатает свой собственный текст.

Язык не оговаривается. Файл исходник с диска не читать. ( и т.п. тоже не катит - память, например, читать).

 

Сразу скажу - видел решение в википедии, примеры даны для многих языков. Понятно, что суть одна,

можно и на фортране написать.

 

Попробуйте сами найти решение. Правда ни мне, ни моим знакомым, кого я спрашивал решить ее не удалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
кстати, про граффику и старые процы. Есть 13-й видеорежим 320x200, есть точка (x,y). надо написать быстрый алгоритм нахождения байта COORD этой точки от начала видеопамяти по известной матформуле COORD=320*y+x желательно на асме.

Надеюсь, я не перепутал адрес видеосегмента в этом режиме, давно это было:

mov ax,Y
shl ax,8
mov cx,Y
shl cx,6
add ax,cx
add ax,X
mov A000h:[ax],COLOR

Изменено пользователем RaD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2RaD : ну да где-то, так. идея она:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

×
×
  • Создать...