LINUX.ORG.RU
ФорумTalks

Большой июльский ребус от saahriktu

 


1

1

Собственно, сабж:

program prg201907;
{$codepage UTF8}
uses cwstring, math;
var
	s1: UnicodeString = 'Як-строитель чудит набирая звонком от плейера юрко "WAVE FULL OF 8 RUSTY CHECKED MULTIPLEX IMAGES!", однако.';
	s2: UnicodeString = '';
	indx: Integer;

function getdata1(x: Integer): Integer;
begin
	case (x) of
	$0, $2f: getdata1 := Floor64(1.340425531914894 * x + 1);
	$1, $12, $14, $1c, $23, $25, $33, $38, $3e, $45, $47, $4d: getdata1 := $d;
	$2, $a, $1a, $1e, $20: getdata1 := $1e;
	$3..$4: getdata1 := $1d + x;
	$5, $9, $19: getdata1 := $14;
	$6, $8: getdata1 := Floor64($1d - $5 * x / $2);
	$7, $10: getdata1 := $19;
	$b, $d: getdata1 := $10 + x;
	$c, $f: getdata1 := Floor64(7 * x / $3 - $7);
	$e, $15, $51: getdata1 := $1a;
	$11, $21, $50: getdata1 := $b;
	$13, $1f: getdata1 := $4;
	$16, $17: getdata1 := $94 - $6 * x;
	$18, $1b: getdata1 := $c * x - $11a;
	$1d, $22, $27, $2c: if x < $27 then getdata1 := $9 * x - $103
	                    else getdata1 := $9 * x - $120;
	$24, $46: getdata1 := $8;
	$26, $5a: getdata1 := $4e;
	$28, $35, $59: getdata1 := $5c;
	$29, $31: getdata1 := $42;
	$2a, $30: getdata1 := $3;
	$2b, $4b, $58: getdata1 := $44;
	$2d, $5c: getdata1 := $45;
	$2e, $49, $5b: getdata1 := $47;
	$32, $37, $3d: getdata1 := $64;
	$34, $39: getdata1 := $1c9 - $7 * x;
	$36, $40, $43, $55, $56: getdata1 := $36;
	$3a, $3b: getdata1 := $ab - $2 * x;
	$3c, $4c: getdata1 := $52;
	$3f, $42: getdata1 := Floor64($168 - $d * x / $3);
	$41, $54: getdata1 := $46;
	$44, $48: getdata1 := Floor64($f * x / $2 - $1c2);
	$4a, $4e: getdata1 := Floor64($a17 / $2 - $41 * x / $4);
	$4f, $52: getdata1 := x - $40;
	$53, $57: getdata1 := Floor64($8fd / $4 - $17 * x / $4);
	else getdata1 := -1;
	end;
end;

function getdata2(x: Integer): Integer;
begin
	case (x) of
	$0..$7, $9..$a, $c..$1d, $1f..$20, $22..$33, $35..$5c: getdata2 := $1;
	$8, $34: getdata2 := $4;
	$b, $1e, $21: getdata2 := $2;
	else getdata2 := -1;
	end;
end;

begin
	for indx := $0 to $2c do s2 := s2 + copy(s1, getdata1(indx), getdata2(indx));
	s2 := s2 + chr($a);
	for indx := $2d to $53 do s2 := s2 + copy(s1, getdata1(indx), getdata2(indx));
	s2 := s2 + chr($a) + chr($a);
	for indx := $54 to $5c do s2 := s2 + copy(s1, getdata1(indx), getdata2(indx));
	writeln(s2);
end.
Эта программа на Free Pascal'е выводит текст в UTF-8.

Суть ребуса: какой конкретно текст в UTF-8 выводит эта программа?

★★★★★

Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: Прочти наконец hier(7)! от dexpl

Так в бинарных дистрибутивах «make install» именно для локальной установки обычно и не используют как и саму локальную установку не через пакеты. При создании же пакета можно просто взять готовый бинарник и положить его куда нужно без «make install'ов». А для source-based систем наподобие LFS'а это самый тот вариант для дефолта «make install'а».

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

При создании же пакета можно просто взять готовый бинарник и положить его куда нужно без «make install'ов». А для source-based систем наподобие LFS'а это самый тот вариант для дефолта «make install'а».

Только ты забываешь, что нормальный софт (не твой), устанавливает конфиги, манпейджи, хелперы, ресурсы и всякие тами хидеры. Поэтому все делают make install как миленькие. Один ты глупый никак не можешь этого понять.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

Софт бывает разной жирности.

Кто-то привык мыслить исключительно в рамках модульных проектов.

Разные PREFIX'ы важны сложным проектам, где на этапе компиляции хардкодятся пути к разным $PREFIX/lib и $PREFIX/share. А в относительно простых проектах всё это ни разу не актуально.

Там, где только один бинарник, остаётся указать его месторасположение именно для пакета.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

А для source-based систем наподобие LFS'а это самый тот вариант для дефолта «make install'а».

Не знаю, как делается в source based, и сомневаюсь, что там разводят бардак, но ладно, поверю тебе на слово. А теперь убеди меня в том, что разработчик, написавший в Makefile правило для цели install, не применимое в общем случае — это разработчик, а не гребаная казбечина, которую следовало бы изгнать из разработки прямо в гроб. Особенно с учетом того, что применимость в общем случае обеспечивается одной несчастной строкой, и наш т. н. «разработчик» об этом прекрасно осведомлен.

// Представь себе ситуацию: я захотел опакетить твою утилиту, увидел то, что увидел вместо Makefile'а, прислал тебе патч, от которого мне стало бы лучше, а тебе — как минимум не хуже, а ты начал мне рассказывать, что я могу «просто взять готовый бинарник», причем даже не объясняя, чем вызвано твое неприятие патча. Взять готовый бинарник я, конечно, могу, но вертел я колесом взаимодействовать с таким упоротым апстримом (а взаимодействие с апстримом — неотъемлемая часть сопровоодения пакета).

dexpl ★★★★★
()
Последнее исправление: dexpl (всего исправлений: 1)
Ответ на: комментарий от dexpl

Знаешь, даже у dmenu нормальный Makefile. Хотя там тоже только один или два бинарника.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от saahriktu

При создании же пакета можно просто взять готовый бинарник и положить его куда нужно без «make install'ов»

Это правда, всегда можно в спеке вместо %make_install сделать

%__mkdir_p %{buildroot}/%{_bindir}
install -m755 hernya %{buildroot}/%{_bindir}
Точно также можно заменить %make на gcc -o hernya -llib1 hernya.c

Только остаются два вопроса — а нахрена ты вообще делал makefile и за что ты так ненавидишь потенциальных пользователей своих программ? Впрочем, можешь не отвечать, в одном из твоих мейкфалqов в секции install было cp hren /usr/bin/, это однозначно говорит о том, что ты и сам прекрасно понимаешь, что никто этим пользоваться не будет, да и сам этим совершенно не пользуешься.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от gremlin_the_red

а нахрена ты вообще делал makefile

У разных секций разное назначение. Сборочная секция универсальна, и обычный «make» всегда соберёт мой софт. А вот секция install в этих мэйкфайлах для юзеров разных LFS'ов.

да и сам этим совершенно не пользуешься

«make install'ом» в LFS'е я мог бы пользоваться, но я там предпочитал выполнять «cp myprog /usr/bin» руками.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

«make install'ом» в LFS'е я мог бы пользоваться

Нет, не мог бы. Тебя бы задрал вопрос о перезаписи файла.

но я там предпочитал выполнять «cp myprog /usr/bin» руками

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

gremlin_the_red ★★★★★
()
Ответ на: комментарий от gremlin_the_red

вопрос о перезаписи файла

А тут нет вопросов. Пусть перезаписываются. Я так всю систему обновлял больше десяти лет. Перезапишешь старые файлы новыми, а потом прочёсываешь ФС в поисках старых файлов, которые больше неактуальны и потому не перезаписались.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Перезапишешь старые файлы новыми, а потом прочёсываешь ФС в поисках старых файлов, которые больше неактуальны и потому не перезаписались.

Шел 2019 год...

kirk_johnson ★☆
()
Ответ на: комментарий от saahriktu

А вот секция install в этих мэйкфайлах для юзеров разных LFS'ов

Нет.
Это контракт между разработчиком софта, который знает, какие файлы нужно устанавливать, и пользователем исходников, который ожидает предсказуемого поведения в соответствии с контрактом и общепринятыми обычаями.
А уж кто этот пользователь — ставящий из исходников сразу в систему, обслуживающий свою LFS, сопровождающий пакета в дистрибутиве — это уже не суть важно.
Суть в разделении обязанностей и ответственности между разработчиком исходного кода и его пользователем.

bormant ★★★★★
()
10 октября 2019 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.