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)

Ответ на: комментарий от lenin386

Твоему яку-строителю артикли не надо бы пропускать, учитель. Это очень выдаёт русских.

Запятые тоже не надо бы пропускать. Это очень выдает нерусских.

dexpl ★★★★★
()
Ответ на: комментарий от i-rinat

Чувствую себя диким неудачником, но последний способ я часа два искал :(

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

I need (a|the) vaccine. В определенной ситуации разница может оказаться смертельной :)

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

Вы так говорите как будто бы _вся_ математика ограничивается анализом взаимоотношений различных сущностей. Однако, это только отдельные области математики. При этом математические вычисления полезны в т.ч. и при работе с уравнениями. Без математических вычислений даже «x + x/2 + 3» не упростить до «1.5 * x + 3». Да, это тоже математические вычисления.

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

А откуда Score берется?

Это показатель активности в технических разделах.

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

Кто-то пытается абсолютизировать свою собственную работу. Точно также как кто-то некоторое время назад писал что, дескать, тот, кто не пользуется офисными текстовыми процессорами, ничего полезного за компьютером делать просто не может.

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

Я выкладываю весьма полезный софт, который выполняет поставленные задачи. А его реализации приближены к коду из BSD 3, который является для меня эталонным. Вот пример:

/*
 * Concatenate files.
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

char	stdbuf[BUFSIZ];

main(argc, argv)
char **argv;
{
	int fflg = 0;
	register FILE *fi;
	register c;
	int dev, ino = -1;
	struct stat statb;

	setbuf(stdout, stdbuf);
	for( ; argc>1 && argv[1][0]=='-'; argc--,argv++) {
		switch(argv[1][1]) {
		case 0:
			break;
		case 'u':
			setbuf(stdout, (char *)NULL);
			continue;
		}
		break;
	}
	fstat(fileno(stdout), &statb);
	statb.st_mode &= S_IFMT;
	if (statb.st_mode!=S_IFCHR && statb.st_mode!=S_IFBLK) {
		dev = statb.st_dev;
		ino = statb.st_ino;
	}
	if (argc < 2) {
		argc = 2;
		fflg++;
	}
	while (--argc > 0) {
		if (fflg || (*++argv)[0]=='-' && (*argv)[1]=='\0')
			fi = stdin;
		else {
			if ((fi = fopen(*argv, "r")) == NULL) {
				fprintf(stderr, "cat: can't open %s\n", *argv);
				continue;
			}
		}
		fstat(fileno(fi), &statb);
		if (statb.st_dev==dev && statb.st_ino==ino) {
			fprintf(stderr, "cat: input %s is output\n",
			   fflg?"-": *argv);
			fclose(fi);
			continue;
		}
		while ((c = getc(fi)) != EOF)
			putchar(c);
		if (fi!=stdin)
			fclose(fi);
	}
	return(0);
}
Это реальный код из BSD 3, да. Умели же люди раньше писать.

А не так как по тому же стандарту GNU, где даже helloworld раздут до ужаса.

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

При этом математические вычисления полезны в т.ч. и при работе с уравнениями

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

даже «x + x/2 + 3» не упростить до «1.5 * x + 3». Да, это тоже математические вычисления

Эти вычисления уровня счёта на камушках. Тема, почему математик не может проводить такие вычисления на калькуляторе (да даже на счётах), совершенно не раскрыта.

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

Эти вычисления уровня

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

Можно быть прекрасным математиком, вообще не умея считать.

А тут внезапно выясняется, что даже на уровне 4-го класса без счёта уравнение не упростить. Вот на это противоречие я и указывал.

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

Очень много всего. brutal squirrel (конвертер в hex числа и обратно в бинарник), сharseq (seq для символов), humpbacked titmouse (конвертер из одной системы счисления в другую), n7t328IIpnwd (конвертер из UTF-32 в ASCII/KOI8-R без потерь), g053dac0 (утилита, которая составляет дополнительный аргумент гуглофильтра по временному периоду от одной даты до другой), читалки true hackers' reader и yegyerdye reader, графическая библиотека camell++,... и многое другое.

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

А тут внезапно выясняется, что даже на уровне 4-го класса без счёта уравнение не упростить

Легко. Беру свой любимый калькулятор лбратной польской записи (работающий, разумеется, а не нелепую поделку некого гражданина), нажимаю на нём 1,<стек>,2,/,1,+, вуаля, уравнение упрощено. И математики уже дано не занимаются собственно решением уравнений, это давно сугубо прикладная задача для всяких инженеров, программистов, экономистов и других истов.

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

Конечно. Зачем мне хрюникод в консоли и текстовых файлах?

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

юзербаза, состоящая из тебя одного

Кто-то пытается выдать желаемое за действительное.

однострочных

Повторяю: это юниксвей, а не раздутые комбайны. Выше я копипастил пример реализации cat из BSD 3. Там тоже такой же уровень кода - нормальный рабочий.

И, вообще, от софта требуется чтобы он работал, а не повышал чьё-то ЧСВ. И, собственно, я ни с кем и не соревнуюсь. Мне в институте, как я уже как-то говорил, в пример приводили человека, который писал настолько однострочный код, что в его софте кроме него вообще никто не мог разобраться. Тем не менее, этот его софт в его руках вполне работал и выполнял возложенные на него задачи. Мой софт не настолько однострочен и всё-таки изначально расчитан на более широкую аудиторию. А на любой софт найдутся свои пользователи. Даже виндой кто-то умудряется пользоваться. Так что, если какой-то софт не нравится лично Вам, то он не нравится лично Вам.

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

Кто-то пытается выдать желаемое за действительное.

Ссылки на твои пакеты в дистрибутивах.

Повторяю: это юниксвей, а не раздутые комбайны. Выше я копипастил пример реализации cat из BSD 3. Там тоже такой же уровень кода - нормальный рабочий.

Повторяю: это однострочники от студента первого курса. Авторы писали cat в условиях, когда не было ничего. Сейчас базовая система есть, и писать cat заново нужно разве что на Rust.

И, вообще, от софта требуется чтобы он работал, а не повышал чьё-то ЧСВ. И, собственно, я ни с кем и не соревнуюсь. Мне в институте, как я уже как-то говорил, в пример приводили человека, который писал настолько однострочный код, что в его софте кроме него вообще никто кроме него не мог разобраться. Тем не менее, этот его софт в его руках вполне работал и выполнял возложенные на него задачи. Мой софт не настолько однострочен и всё-таки изначально расчитан на более широкую аудиторию. А на любой софт найдутся свои пользователи. Даже виндой кто-то умудряется пользоваться. Так что, если какой-то софт не нравится лично Вам, то он не нравится лично Вам.

Ещё раз — ссылки на твои пакеты в дистрибутивах.

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

пакеты в дистрибутивах

Это не показатель. Это может быть показателем того, что софт признан большинством, но и меньшинство юзеров - это далеко не нуль. Даже если моим софтом пользуется только несколько человек - это уже не только один я.

в условиях

Условия тут ни при чём. Я про то, что по Вашим меркам эта конкретная реализация тоже однострочна, но вполне работает. Иначе бы она бы и не вошла в состав BSD 3 на полном серьёзе. В общем, серьёзные мужики на полном серьёзе могут писать и так. Поскольку

от софта требуется чтобы он работал, а не повышал чьё-то ЧСВ

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

Это не показатель. Это может быть показателем того, что софт признан большинством, но и меньшинство юзеров - это далеко не нуль. Даже если моим софтом пользуется только несколько человек - это уже не только один я.

То есть пруфов нет. Значит, пока единственный подтвержденный пользователь твоей срани — ты сам.

Условия тут ни при чём. Я про то, что по Вашим меркам эта конкретная реализация тоже однострочна, но вполне работает. Иначе бы она бы и не вошла в состав BSD 3 на полном серьёзе. В общем, серьёзные мужики на полном серьёзе могут писать и так. Поскольку

Как мы только что выяснили, серьезным мужиком тебя считает вся твоя юзер база, состоящая из тебя одного. И мамы.

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

То есть пруфов нет.

Таких пруфов нет относительно большой кучи софта, которого нет в дистрибутивах. В дистрибутивах есть далеко не всё, а только малая часть имеющегося в природе софта. И авторов этого отсутствующего в дистрибутивах софта это ни разу не напрягает. Они просто делают своё дело. Также поступаю и я.

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

Таких пруфов нет относительно большой кучи софта, которого нет в дистрибутивах. В дистрибутивах есть далеко не всё, а только малая часть имеющегося в природе софта. И авторов этого отсутствующего в дистрибутивах софта это ни разу не напрягает. Они просто делают своё дело. Также поступаю и я.

Короче никто не пользуется, понятно. А зачем ты это тогда пишешь? Тем более, так убого (в твоих Makefile'ах, например, хардкодится gcc).

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

Короче никто не пользуется

Кто-то пытается выдать желаемое за действительное.

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

хардкодится gcc

И что? Это дефолтный компилятор ОС GNU, который прекрасно справляется со своей задачей.

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

Но даже если и так

Это так.

то я всё равно создаю полезные инструменты

Нет. См. предыдущий пункт.

И что? Это дефолтный компилятор ОС GNU, который прекрасно справляется со своей задачей.

Ну то, что нормальные разработчики так не делают. Только студенты и школьники. Вменяемые люди используют $(CC), хотя для твоих проектов вообще хватает implicit rules.

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

Нет. См. предыдущий пункт.

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

нормальные разработчики так не делают

Раньше серьёзные бородатые мужики просто хардкодили cc. В последнее время эта практика сошла на нет только потому, что сначала получили распросранение autotools с ./configure, а потом и альтернативы autotools. Однако, не везде они нужны. Обычные Makefile'ы тоже вполне работают если софт ни разу не модульный и нет необходимости включать и выключать используемые библиотеки.

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

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

Только перед твоим софтом их никто не ставит, лол.

Раньше серьёзные бородатые мужики просто хардкодили cc.

В 70-х?

В последнее время эта практика сошла на нет только потому, что сначала получили распросранение autotools с ./configure, а потом и альтернативы autotools.

Ээээ... Нет. Просто нормальные люди не хардкодят переменные компилятора, потому что компиляторы могут оказаться разными (внезапно, кросс-компилятор, например). А в сборочных скриптах могут быть добавлены флаги в CFLAGS.

Однако, не везде они нужны. Обычные Makefile'ы тоже вполне работают если софт ни разу не модульный и нет необходимости включать и выключать используемые библиотеки.

Осталось понять, причем тут все это, потому что речи про автолулзы не было вообще.

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

речи про автолулзы не было вообще

Именно эти инструменты используются для детектирования компилятора в системе, а в ряде случаев нужный компилятор выбирается прямо через них. Без этого функционала остаётся только один вариант. Можно, конечно, использовать переменные окружения, но я начал прописывать конкретно gcc ещё в те времена, когда про тот же clang никто и не думал, и сам я продолжаю юзать именно gcc. Он продолжает развиваться и рулить.

В 70-х?

И в более поздние годы тоже.

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

Именно эти инструменты используются для детектирования компилятора в системе, а в ряде случаев нужный компилятор выбирается прямо через них. Без этого функционала остаётся только один вариант. Можно, конечно, использовать переменные окружения, но я начал прописывать конкретно gcc ещё в те времена, когда про тот же clang никто и не думал, и сам я продолжаю юзать именно gcc. Он продолжает развиваться и рулить.

Ты просто некомпетентный великовозрастный школьник, мы это давно поняли. Про кросс-компиляцию, специализированные компиляторы и просто /etc/portage/make.conf ты видимо не в курсе. Как и про то, что автолулзы для всего это не нужны.

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

автолулзы для всего это не нужны

А я пишу про то, для чего они нужны. Там, где они ненужны, всего один вариант. Который в случае чего не проблема вписать в Makefile если он отличается от дефолта.

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

А я пишу про то, для чего они нужны. Там, где они ненужны, всего один вариант. Который в случае чего не проблема вписать в Makefile если он отличается от дефолта.

Ну вот я и говорю же: ты некомпетентный школьник. Вариант далеко не всегда один:

$ make CC=e2k-cc
$ make PREFIX=/usr/local install

Даже такой банальный вроде бы use-case твоя поделка не осилит.

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

Все, что от тебя требовалось:

brtlsqrrl:

install:
	install -D -m 0755 brtlsqrrl $(DESTDIR)$(PREFIX)/bin

clean:
	rm -f brtlsqrrl

.PHONY: install clean

А ты даже этого не осилил. Ты жалок.

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

PREFIX

Всё это прописывается в .spec файлы (или что там вместо них) при опакечивании. А так в мэйкфайлах что-то помимо дефолта нужно далеко не всем.

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

Загадаю тебе большой июльский ребус — что общего между известным делом об оскорблении власти, фильмом Даун Хаус и тобой? А пока ты его решаешь, можешь подумать над другим вопросом — а почему все эти префиксы используются в спек-файлах и что произойдёт, если кто-то напишет спек для твоей программы и задаст в нём PREFIX?

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

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

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

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

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

Глаза только сломаешь, пока разбираешься что там к чему.

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

Разные PREFIX'ы важны сложным проектам

Nyet. Что делает сисадмин, у которого стоит в системе опакеченый random_md5_hash_from_saahriktu более старой версии, а он хочет попробовать новую для тестирования, не удаляя/обновляя пакет? Он его собирает и инсталит в /usr/local/bin. Что делает сисадмин, если ему понравилась новая версия и он хочет её опакетить? Он собирает и инсталит в ~/rpmbuild/BUILDROOT, откуда и собирается бинарный пакет. Что делает пользователь, у которого нет рута? Он собирает и инсталит в ~/bin. Так что самый вшивый хелловорд в make-файле должен уметь в PREFIX. Об этом написано в любой хаутушке по сборке рпм пакетов — https://blog.packagecloud.io/rpm/rpmbuild/packaging/2015/06/29/building-rpm-p...

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

хочет попробовать новую для тестирования, не удаляя/обновляя пакет

Для этого вообще не надо ничего устанавливать. Достаточно собрать и запустить как ./random_md5_hash_from_saahriktu. Скрипты так, конечно, не найдут, но скрипты должны брать бинарники из системы. Куда бинарники попадают через пакеты.

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

Раз ты пропустил остальную часть поста, добавим условие — сам сисадмин ушёл бухать (день сисадмина же), а тестировать будут юзеры без прав рута. Копировать бинарик каждому юзверю сисадмину лень, потому что шашлык уже стынет, а пиво теплеет.

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

Так тестировать или внедрять? Для тестирования, повторяю, ничего никуда устанавливать нет необходимости. В приведённом примере компилировать умеет только сисадмин, а пользователи не разберутся в написании скриптов для тестирования в таких условиях? Это проблемы неграмотности конкретных людей. Такими темпами они могли бы и не знать как вообще включать компьютеры. И что?

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

приведённом примере компилировать умеет только сисадмин, а пользователи не разберутся в написании скриптов для тестирования в таких условиях?

Что ты курил? Я тебе русским языком расписал — сисадмин компилирует и устанавливает по make PREFIX=/usr/local install в общесистемный каталог, потому что в /usr/bin уже есть другой бинарник с тем же именем, который перезаписывать нельзя. Что тебе тут непонятно?

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