На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Ради интереса, и если модераторы не против, давайте устроим конкурс на самую короткую программу на паскале или си (отдельно 2 конкурса), которая выводит свой текст на экран. Пробелы и лайнбрейки не в счет. Постим сюда.
П.С. Не надо плиз решений которые ищут прогу в памяти и злобно ее дизассемблируют, или просто читают с диска
Поза форумом
var a:array[1..100]of string;i:integer; begin a[2]:=' var a:array[1..100]of string;i:integer;'; a[3]:='begin'; a[4]:='for i:=2 to 3 do writeln(a[i])'; a[5]:='for i:=2 to 11 do begin'; a[6]:=' write(chr(97),chr(91),i);'; a[7]:=' write(chr(93),chr(58),chr(61));'; a[8]:=' writeln(chr(39),a[i],chr(39),chr(59));'; a[9]:='end;'; a[10]:='for i:=4 to 11 do writeln(a[i])'; a[11]:='end.'; for i:=2 to 3 do writeln(a[i]); for i:=2 to 11 do begin write(chr(97),chr(91),i); write(chr(93),chr(58),chr(61)); writeln(chr(39),a[i],chr(39),chr(59)); end; for i:=4 to 11 do writeln(a[i]); end.
Поза форумом
var s,k,l,b,t,c:string;begin s:='var s,k,l,b,t,c:string;begin s:=';
c:=chr(39);t:=c+chr(59);l:=chr(98)+s[31]+s[32];k:='c:=chr(39);t:=c+chr(59);l:=chr(98)+s[31]+s[32];k:=';
b:='writeln(s,c,s,t);writeln(k,c,k,t);writeln(l,c,m,t);writeln(m);end.';
writeln(s,c,s,t);writeln(k,c,k,t);writeln(l,c,b,t);writeln(b);end.
Відредаговано Andrey (2005-10-16 20:10:37)
Поза форумом
А вот еще меньше:
const i=chr(98)+chr(61);c=chr(39);l=c+chr(59);s='const i=chr(98)+chr(61);c=chr(39);l=c+chr(59);s=';
b='begin writeln(s,c,s,l);write(i,c,b,l);write(b);end.';begin writeln(s,c,s,l);write(i,c,b,l);write(b);end.
Поза форумом
const i=chr(98)+chr(61);c=chr(39);l=c+chr(59);s='const i=chr(98)+chr(61);c=chr(39);l=c+chr(59);s=';
b='begin writeln(s,c,s,l);write(i,c,b,l,b);end.';begin writeln(s,c,s,l);write(i,c,b,l,b);end.
Поза форумом
Сишники! Вы где? Подтягиваемся! А вот такая программа(120 байт):
#include<stdio.h> char*s="#include<stdio.h>%cchar*s=%c%s%c;main(){printf(s,10,34,s,34);}";main(){printf(s,10,34,s,34);}
Поза форумом
Привіт від сяшників до Олімпійця. Я трохи покодив і в мене є текст на 105 байт.
#include <stdio.h> main(){char c;FILE *f=fopen("short.cpp","r+");while(c!=EOF)fputc(c=fgetc(f),stdout);}
Хто може краще - пишіть
Поза форумом
Ще одне. Якщо назву файлу поміняти на 1.с, то розмір коду стає 98 байт і виглядить так.
#include <stdio.h> main(){char c;FILE *f=fopen("1.c","r");while(c!=EOF)fputc(c=fgetc(f),stdout);}
Поза форумом
engineer прочитай саме перше повідомлення цієї теми
Rybak написав:
Не надо плиз решений которые ищут прогу в памяти и злобно ее дизассемблируют, или просто читают с диска
твоя прога читає файл свого ж тексту
Поза форумом
Еще можно предложить отдельно рассматривать программы на, так сказать, абстрактном паскале, т.е. без аппаратной привязки. Я имею ввиду использование таблицы символов ASCII. Я не уверен что chr(34) даже сейчас выдаст кавычку на любой платформе, а использование chr значительно расширяет возможности. Давайте еще попробуем без этого.
П.С. Андрей, твой код еще можно уменьшить, давай!
П.П.С reiten - круто; интересно, можно ли меньше?
Поза форумом
попытался улучшить код андрея
const i=chr(59)+chr(98)+chr(61);c=chr(39);s='const i=chr(59)+chr(98)+chr(61);c=chr(39);s=';
b=';begin write(s,c,s,c,i,c,b,c,b);end.';begin write(s,c,s,c,i,c,b,c,b);end.
Поза форумом
Ivan написав:
попытался улучшить код андрея
const i=chr(59)+chr(98)+chr(61);c=chr(39);s='const i=chr(59)+chr(98)+chr(61);c=chr(39);s=';
b=';begin write(s,c,s,c,i,c,b,c,b);end.';begin write(s,c,s,c,i,c,b,c,b);end.
А перевод строки вывести? В турбо паскале строки не больше 128 символов
Поза форумом
Rybak написав:
. Пробелы и лайнбрейки не в счет.
Поза форумом
const i=#10#13+chr(59)+chr(98)+chr(61);c=chr(39);s='const i=#10#13+chr(59)+chr(98)+chr(61);c=chr(39);s=';
b=';begin write(s,c,s,c,i,c,b,c,b);end.';begin write(s,c,s,c,i,c,b,c,b);end.
Поза форумом
Иван. У тебя один символ ";" переносится во вторую строку.
Rybak написав:
Еще можно предложить отдельно рассматривать программы на, так сказать, абстрактном паскале, т.е. без аппаратной привязки. Я имею ввиду использование таблицы символов ASCII. Я не уверен что chr(34) даже сейчас выдаст кавычку на любой платформе, а использование chr значительно расширяет возможности.
А ковычка, это 39й код . Так что, написать без чара?
Поза форумом
Andrey написав:
А ковычка, это 39й код . Так что, написать без чара?
Двойная кавычка - это 34й
Ну да, напиши. А твой код все-таки можно уменьшить, сильнее чем предложил Иван.
Поза форумом
144 Байт:
CONST S:STRING='CONST S:STRING=;BEGIN WRITE(COPY(S,1,15)+#39+S+#39+COPY(S,16,70));END.'
;BEGIN WRITE(COPY(S,1,15)+#39+S+#39+COPY(S,16,70));END.
Відредаговано ROBOT (2005-10-29 11:49:52)
Поза форумом
Ещё вариант:
uses my; Begin k; End.
(в модуле my проц. k)
Поза форумом
Ivan написав:
Rybak написав:
. Пробелы и лайнбрейки не в счет.
Не заметил, поэтому отвечаю только сейчас. Я тогда имел ввиду что пробелы и лайнбрейки не в счет когда сравниваем, чей код короче, но выводить их надо. Хотя теперь мне кажется что и при сравнении можно учитывать
Поза форумом
ROBOT написав:
144 Байт:
CONST S:STRING='CONST S:STRING=;BEGIN WRITE(COPY(S,1,15)+#39+S+#39+COPY(S,16,70));END.'
;BEGIN WRITE(COPY(S,1,15)+#39+S+#39+COPY(S,16,70));END.
Прикольно.
1) Замена chr на # это действительно круто
2) Использование copy() очень портится тем, что в борланд паскале нельзя его применять если константа не описана как String - обидно, но из-за этого copy() менее выгодна чем использование нескольких переменных, как у Андрея.
3) Ты не выводишь перевод строки.
4) Давай на 10 символов меньше?
Поза форумом
ROBOT написав:
Ещё вариант:
uses my; Begin k; End.
(в модуле my проц. k)
Прикольно
Я уже думал о том, что можно специальный язык Retro сделать, в котором нету главных Begin-End или {} (т.е. обрамляющих тело программы), весь остальной синтаксис - как в Паскале, и есть встроенная процедура U, которая выводит символ U на экран . На таком языке решение бы состояло из одного символа U.
Поза форумом
Я тут значит отлучался не на долго (писал игрушку Го в паскале и до сих пор пишу на нее соперника), а вы тут уже понапридумывали... Молодцы... Посмотрев и оценив... Думаю эта прога короче (не считая язык ретро):
uses q;begin end.
Вот мой юнит:
unit q;
interface
implementation
begin
write('uses q;begin end.');
end.
В юните стоит постоянный вывод при использовании...
Итого 17 байт... Я думаю что создание Ретро не совсем удачная идея, так как в у словии писалось про паскаль и си.
Еще на 10 символов?
Поза форумом
Andrey написав:
Я тут значит отлучался не на долго (писал игрушку Го в паскале и до сих пор пишу на нее соперника), а вы тут уже понапридумывали... Молодцы... Посмотрев и оценив... Думаю эта прога короче (не считая язык ретро):
uses q;begin end.
Вот мой юнит:
unit q;
interface
implementation
begin
write('uses q;begin end.');
end.
В юните стоит постоянный вывод при использовании...
Итого 17 байт... Я думаю что создание Ретро не совсем удачная идея, так как в у словии писалось про паскаль и си.
Еще на 10 символов?
Да. тут на 10 символов врядли , но я про Ретро писал к тому, что решения с модулем типа твоего - этот примерно так же честно, как язык Ретро . В принципе прикольно, но по сути, твоя программа состоит из двух частей, одна из которых выводит другую. А надо чтоб всю.
Так что это тоже не совсем то что в условии. А вот программу ROBOTа можно уменьшить.
Поза форумом