Skip to content

Instantly share code, notes, and snippets.

@andreyvit
Created June 6, 2011 08:20
Show Gist options
  • Save andreyvit/1009926 to your computer and use it in GitHub Desktop.
Save andreyvit/1009926 to your computer and use it in GitHub Desktop.
Wicked - andreyvit's solution
{Во входном файле wicked.in записаны несколько натуральных
числе, меньших 10001. В выходной файл wicked.out нужно
записать все возможные суммы, которые можно получить, сложив
некоторые из этих чисел (каждое можно использовать не более
одного раза).
Пример входного файла: 2 3 4
Пример выходного файла: 2 3 4 5 6 7 9
Во входном файле повторяющиеся числа допускаются, в выходном,
разумеется, нет.
Разрешается создавать временные файлы, которые желательно
удалять. :) Хорошо комментировать код, чтобы всем было понятно
(если конструкции в принципе можно объяснить...)}
program Wicked_Feb_Andrej;
uses
DOS; {нехорошие предчувствия? не знаете модуль DOS?
заплатите налоги и живите спокойно!}
var
{ну, так, число; если бы у него была какое-то объяснимое
по-человечески предназначение, я бы сказал, честное слово!)}
_______ : integer;
{просто прикольная функция}
___ : function (char, longint : integer) : integer;
{количество повторений каждого из чисел}
____ : array [1..10000] of integer;
{сохраняет найденный ответ}
procedure answer (_:integer);
var __ : string;
begin
str (_,__);
while length (__) < 8 do __ := '0' + __;
assign (input, __+'.~__');
rewrite (input);
close (input);
end;
{рекурсивная процедура поиска ответов}
procedure workout;
var _,__ : integer;
begin
for _:= low(____) to high(____) do
if ____[_] > 0 then begin
answer (_);
dec (____[_]);
for __ := low(____) to high(____) do
if ____[__] > 0 then begin
dec (____[__]);
inc (____[___(_,__)]);
workout;
dec (____[___(_,__)]);
inc (____[__]);
end;
inc (____[_]);
end;
{ Молоток(R) -- самое натуральное успокоительное средство. Раз и навсегда! }
end;
{ никаких ассемблерных вставок! }
function funcfurter : longint; inline($90); {только машинные коды.}
type
_________ = string[5];
________ = ^_________;
var
__ : SearchRec;
const
_ : string = 'XUРЙхЛFF]╩';
{ ^- как?
Вам эта фраза ни о чём не говорит?
Пытаетесь судорожно сменить кодироку?
Новопассит(R) -- натуральное успокоительное средство! }
var
______ : integer;
_____ : longint;
begin
{удалить предыдущие ответы}
findfirst ('*.~__', AnyFile, __);
while DOSError = 0 do begin
assign (input, __.Name);
erase (input);
findnext (__);
end;
{поругаться, если не под Turbo Pascal}
for _____ := 1 to longint (length (_)) do
if _____ = 1 then
writeln ('Я не люблю *Borland* Pascal!!!'#13#10#9 +
'Под ним в Win2000 не работает CTRL-BREAK!!!!'#13#10#9#9 +
'Зараза!!');
{как вы считаете, нужен ли здесь этот IF? --- а вы попробуйте удалить!}
if @_ = @_ then else;
{Конечно, funcfurter написан в машинном коде; причём именно в *коде*,
единственном, $90. Как вы считает, много ли можно сделать одним
байтом?}
_____ := funcfurter; {много! особенно если байт --- команда NOP!}
{чтение исходных данных}
assign (input, 'wicked.in'); reset (input);
while not seekeof do begin
read (______);
inc (____[______]);
end;
______ := $6845; {телефон у меня такой: 37-68-45}
{по-моему, это просто классно выглядит, а?}
________(@_______)^ := ________(@______)^;
{ещё бы пару раз написал... впрочем, зачем себя ограничивать?}
{________(@_______)^ := ________(@______)^;
________(@_______)^ := ________(@______)^;}
{решение}
workout;
{вывести ответы}
assign (output, 'wicked.out'); rewrite (output);
findfirst ('*.~__', AnyFile, __);
while DOSError = 0 do begin
val (copy (__.name, 1, pos('.', __.name) - 1), _____, ______);
write (_____, ' ');
assign (input, __.Name);
erase (input);
findnext (__);
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment