Форум Tolkien.SU

Человек Играющий => Стол с зеленым сукном => Тема начата: Maeglor от 03/03/2004, 22:03:04

Название: Программерские приколы.
Отправлено: Maeglor от 03/03/2004, 22:03:04
Что-то я тут не вижу програмистских задач.
Пусть будут!
Тоже задачи!

1. Что означает в одном недоязыке(по моему Паскале) такое выражение:
type x=array[boolean,boolean,boolean] of boolean;

2. А вот есть у меня алкоритм архиватора сжимающего любой файл до 1 байта (ну и естественно разжимающий его обратно). И применение у него есть четкое. Не скажете ли мне что это за алгоритм. Только если догадаетесь ногами не бейте ладно?

3. И еще один алгоритм архиватора не столь впечатляющий но зато действующий. Есть некий спрособ сжатия игровых ландшафтов (скажем для RPG или  стратегий) таой что вполне осмысленный ландшафт будет занимать очень небольшое место (порядка 500 байт). Алгоритм вполне дееспособный и даже реализованный мною в одном из проэктов. Бесплатно делюсь!

               

               
Название: Re:Программерские приколы.
Отправлено: Ayar от 04/03/2004, 17:04:13
1) А не не определение ли это типа переменной- массива логических переменных размерностью 2х2х2?

2) Ничего путного в голову не приходит :(. Может это создание симлинка (или как оно там в виндовс называется) на файл?

3) Можно наводящий вопрос? Этот алгоритм сначала сжимает а потом восстанавливает ландшафт любой сложности без потери качества?

               

               
Название: Re:Программерские приколы.
Отправлено: Maeglor от 04/03/2004, 19:52:47
1. Естественно да.
2. Нет. Этот алгоритм сжимает и расжимает файл а не делает на него ссылку.
3. Нет сжатие производится непосредственно при создании, хотя если его немного перелелать... Короче думайте а я еще задачек поищу. Кстати я отнють не обижусь если у кого-то найдутся задачки во теме и он выкинет их сюда вне очереди. Я тоже порешать хочу.

               

               
Название: Re:Программерские приколы.
Отправлено: Erlom-Tiu от 04/03/2004, 20:27:21
Есть такая фича: попробовать написать самую короткую программу, воспроизводящую свой текст, на определённом языке.

Если интересно, дальше идёт ссылка:

http://pic200x.chat.ru/new_year.htm
.

<2: интересный архиватор, где-то я такое уже видел, только без разжимания...
М.б. надо запомнить содержимое файла в голове, а потом воспроизвести в Notepade :-)

P.S.: к Арвинду пора обращаться ...

               

               
Название: Re:Программерские приколы.
Отправлено: Maeglor от 04/03/2004, 20:34:01
main(){cout>>"text";}

Можно проще?

               

               
Название: Re:Программерские приколы.
Отправлено: Erlom-Tiu от 05/03/2004, 21:42:22
в смысле <<"text" ?
так она и выведет

Код:
text

а не

Код:
main(){cout>>"text";}

Кроме того, по указанной ссылке, есть описание языка программирования. (PiBAS)


               

               
Название: Re:Программерские приколы.
Отправлено: Maeglor от 05/03/2004, 23:29:11
Извени. Я кажется разучился читать. Про то что текст самой себя я не увидел.

               

               
Название: Re:Программерские приколы.
Отправлено: Maeglor от 06/03/2004, 00:29:28
Вот что у меня получилось:
Хотите верьте, хотите нет но оно самое себя выводит.
 
a="a='?&(a,1,2)+b+&(a,1,2)+b+&(a,4,97)+b+&(a,107,1)+&(a,14,14)+&(a,2,3)+b+&(a,3,3)+&(a,107,1)+&(a,4,97);";b='"';?&(a,1,2)+b+&(a,1,2)+b+&(a,4,97)+b+&(a,90,1)+&(a,14,14)+&(a,2,3)+b+&(a,3,3)+&(a,97,1)+&(a,4,97);

Хотя, конечно, тут огромное поле для оптимицации.


               

               
Название: Re:Программерские приколы.
Отправлено: Erlom-Tiu от 06/03/2004, 15:33:11
Уменьшить можно :-)

Дополнение: оператор
$ (знак доллара, на форуме выглядит почему-то амперсандом) в качестве первого параметра может принимать строковое выражение, напр.
Код:
$(A+B,3,12)


               

               
Название: Re:Программерские приколы.
Отправлено: Maeglor от 06/03/2004, 22:26:06
Этого и не надо. Программу можно сделать всего с одной константой.

Писать оптимизированное решение мне лень. Свою часть я уже сделал. Дальше пусть другие мучаются.

               

               
Название: Re:Программерские приколы.
Отправлено: Ayar от 11/03/2004, 17:03:34

Цитата:
2. А вот есть у меня алкоритм архиватора сжимающего любой файл до 1 байта (ну и естественно разжимающий его обратно). И применение у него есть четкое. Не скажете ли мне что это за алгоритм. Только если догадаетесь ногами не бейте ладно?



М.б. это удаление файла на fat'e, при этом теряется первый символ имени, на его запоминание нужен как раз 1 байт. И соответственно восстановление удаленного файла?

               

               
Название: Re:Программерские приколы.
Отправлено: Maeglor от 11/03/2004, 19:43:15
Да это один из вариантов. Но есть еще и второй.


               

               
Название: Re: Программерские приколы.
Отправлено: Dalen от 21/07/2004, 06:41:52

Цитата:
Есть такая фича: попробовать написать самую короткую программу, воспроизводящую свой текст, на определённом языке.


.bat:

echo

:)

               

               
Название: Re: Программерские приколы.
Отправлено: Арвинд от 24/07/2004, 14:55:01

Цитата из: Dalen on 21-07-2004, 06:41:52

Цитата:
Есть такая фича: попробовать написать самую короткую программу, воспроизводящую свой текст, на определённом языке.


.bat:

echo


Не помню, как оно было в ДОСе. Сейчас под 2000 у меня это не работает (команда echo без параметров пишет, включен ли режим вывода).

               

               
Название: Re: Программерские приколы.
Отправлено: Dalen от 25/07/2004, 23:15:45
Ну значит echo something

               

               
Название: Re: Программерские приколы.
Отправлено: Dalen от 11/08/2004, 08:23:17
Ode to C:

May your signals all trap
May your references be bounded
All memory aligned
Floats to ints rounded

Remember ...

Non-zero is true
++ adds one
Arrays start with zero
and, NULL is for none

For octal, use zero
0x means hex
= will set
== means test

use -> for a pointer
a dot if its not
? : is confusing
 use them a lot

a.out is your program
there's no U in foobar
and, char (*(*x())[])() is...

Кто сможет закончить?

               

               
Название: Re: Программерские приколы.
Отправлено: Heledirn от 03/12/2004, 19:10:19
Такая вот задача: есть массив, нужно получить из него другой, выбрав по условию определенные элементы. Как это сделать наиболее просто. На любом языке. Со своей стороны предлагаю Python:
Код:
array2 = [x for x in array1 if some_condition]


               

               
Название: Re: Программерские приколы.
Отправлено: Mrrl от 20/01/2005, 20:58:57
На C#:
Код:
ArrayList a=new ArrayList();
foreach(object x in b) if(cond(x)) a.Add(x);


Интроспективная программа - 104 символа (не проверялось)
Код:
a="a=;b=';?$(a,1,2)+b+$a(1,50)+b+$(a,3,4)+b+$(a,6,45)";b='"';
?$(a,1,2)+b+$a(1,50)+b+$(a,3,4)+b+$(a,6,45)


Она же на C. Получилась заметно короче - 76 символов
Код:
main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}



               

               
Название: Re: Программерские приколы.
Отправлено: Mrrl от 21/01/2005, 09:42:10
Точки на окружности представлены 32-битными целыми числами (каждому числу соответствует своя точка, полная длина окружности равна 2^32). Заданы две дуги: одна от a до b, другая - от c до d (концы включаются. Например при a=-2, b=2 дуга состоит из 5 точек, а при a=2, b=-2 - из 2^32-3). Как проще всего проверить, есть ли у этих дуг общие точки?

               

               
Название: Re: Программерские приколы.
Отправлено: Mrrl от 24/01/2005, 15:07:30

Цитата из: Heledirn on 03-12-2004, 19:10:19
Такая вот задача: есть массив, нужно получить из него другой, выбрав по условию определенные элементы. Как это сделать наиболее просто. На любом языке.


какой-то диалект LISP (но я не писал на нем лет 8, так что наверняка с ошибками)
Код:
(remove nil (mapcar (lambda (x) (and (test x) x)) a))
предполагается, что nil в исходном массиве нет или что (test nil) не выполняется.