Created
June 6, 2011 08:20
-
-
Save andreyvit/1009926 to your computer and use it in GitHub Desktop.
Wicked - andreyvit's solution
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{Во входном файле 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