вот вам задачка:
написать сабж на C максимально короткий.
формат такой:
char*sum(char*a,char*b,int Z,int Y,int*W);
причем a,b = исходные строки, в которых записаны числа (от больших разрядов к меньшим),
Z и Y — знаки: 1 = число отрицательное, 0 = число положительное.
W = знак результата, 1 = результат отрицательный, 0 = положительный.
задачка абсолютно реальная, и возникла, когда друг попросил меня написать такую функцию. я сказал: ну... порядка 10 строк. Но ведь можно и короче
Я пока свернул сабж где-то в 400 символов (с учетом определения char* sum(bla-bla){}, "где-то" потому что ещё в процессе)
А кто сможет короче?
Формат ввода менять нельзя! разве что переменные поменять на более понятные...
Записать это надо в одну строчку и без define и inline-функций.
Остальные варианты — оффтопик ( ветку так и назовите )
p.s. Математические и прочие библиотеки не использовать! Только стандартные библиотеки Си.
У меня это —
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Здравствуйте, BUran, Вы писали:
BU>вот вам задачка: BU>написать сабж на C максимально короткий. BU>формат такой: BU> char*sum(char*a,char*b,int Z,int Y,int*W); BU>причем a,b = исходные строки, в которых записаны числа (от больших разрядов к меньшим), BU>Z и Y — знаки: 1 = число отрицательное, 0 = число положительное. BU>W = знак результата, 1 = результат отрицательный, 0 = положительный.
Здравствуйте, BUran, Вы писали:
BU>Здравствуйте, Flamer, Вы писали:
F>>Навскидку — 214 знаков, учитывая пробелы...
BU>Ну, не так быстро. Строки-то бывают любой длины! А иначе и смысла нету...
Не понял... Вы о чем? всем вашим требованиям удовлетворяет... А проверять переданные указатели на NULL — лень Или вам проверку на NULL дописать? Ну плюс еще знаков 20...
Здравствуйте, Flamer, Вы писали:
F>Не понял... Вы о чем? всем вашим требованиям удовлетворяет... А проверять переданные указатели на NULL — лень Или вам проверку на NULL дописать? Ну плюс еще знаков 20...
Числа могут ни в int, не в long, ни даже в long long не влезть!
Здравствуйте, BUran, Вы писали:
BU>вот вам задачка: BU>написать сабж на C максимально короткий. BU>формат такой: BU> char*sum(char*a,char*b,int Z,int Y,int*W); BU>причем a,b = исходные строки, в которых записаны числа (от больших разрядов к меньшим), BU>Z и Y — знаки: 1 = число отрицательное, 0 = число положительное. BU>W = знак результата, 1 = результат отрицательный, 0 = положительный.
Пролог. BU>Остальные варианты — оффтопик ( ветку так и назовите )
Глава 1-я и она же последняя. Эпиграф. BU>Записать это надо в одну строчку и без define и inline-функций.
BUran
2030 год...
Стандарт давно утвердил суперфункцию BUranа. Для нее даже выделили отдельный заголовочный файл: BUran.h, который уже давным-давно использовался в stdlib.h.
Мне оставалось только включить последний и написать:
#include <stdlib.h>
char *sum(char *a, char *b, int Z, int Y, int *W) {
return BUran_BUran(a, b, Z, Y, W);
}
Здравствуйте, BUran, Вы писали:
BU>вот вам задачка: BU>написать сабж на C максимально короткий.
А почему на С?
BU>формат такой: BU> char*sum(char*a,char*b,int Z,int Y,int*W);
А почему не char*s(char*a,char*b,char c,char d,char e)?
BU>задачка абсолютно реальная, и возникла, когда друг попросил меня написать такую функцию. я сказал: ну... порядка 10 строк. Но ведь можно и короче
BU>Я пока свернул сабж где-то в 400 символов (с учетом определения char* sum(bla-bla){}, "где-то" потому что ещё в процессе) BU>А кто сможет короче?
Ну и смысл?
Давай похерим все пробелы, все идентификаторы сделаем однобуквенными, наплюем на читабельность...
И что?
Твой вариант, на 400 символов, суперпуперсовсемтакойкороткийбезпробелов
компилятор отрыгнет в гораздо больший машинный код,
чем другой, внятный и более длинный.
А смысл твоего сообщения, на которое я сейчас отвечаю?
UgN>Давай похерим все пробелы, все идентификаторы сделаем однобуквенными, наплюем на читабельность...
В данной задачке-то? Ну давай! Я — за
UgN>Смысл твоего challenge?
А, так ты о смысле жизни
Я предложил задачку. Не хочешь — не решай. Только пальчиком попрошу не тыкать и умными словечками не бросаться не подумав.
P.S. Так значит, тебе в 400 символов укатать слабо?
Здравствуйте, BUran, Вы писали:
BU>А смысл твоего сообщения, на которое я сейчас отвечаю?
Смысл моего сообщения в том, что твое задание в данном виде не является корректным.
Нужно уточнить и доработать.
UgN>>Давай похерим все пробелы, все идентификаторы сделаем однобуквенными, наплюем на читабельность...
BU>В данной задачке-то? Ну давай! Я — за
А я нет.
Ну ты покажи свой вариант, вместе и посмеемся.
UgN>>Смысл твоего challenge?
BU>А, так ты о смысле жизни
Нет, о твоей задаче.
BU>P.S. Так значит, тебе в 400 символов укатать слабо?
Здравствуйте, BUran, Вы писали:
BU>вот вам задачка: BU>написать сабж на C максимально короткий. BU>формат такой: BU> char*sum(char*a,char*b,int Z,int Y,int*W); BU>причем a,b = исходные строки, в которых записаны числа (от больших разрядов к меньшим), BU>Z и Y — знаки: 1 = число отрицательное, 0 = число положительное. BU>W = знак результата, 1 = результат отрицательный, 0 = положительный.
BU>задачка абсолютно реальная, и возникла, когда друг попросил меня написать такую функцию. я сказал: ну... порядка 10 строк. Но ведь можно и короче BU>Я пока свернул сабж где-то в 400 символов (с учетом определения char* sum(bla-bla){}, "где-то" потому что ещё в процессе) BU>А кто сможет короче?
BU>Формат ввода менять нельзя! разве что переменные поменять на более понятные... BU>Записать это надо в одну строчку и без define и inline-функций. BU>Остальные варианты — оффтопик ( ветку так и назовите )
BU>p.s. Математические и прочие библиотеки не использовать! Только стандартные библиотеки Си. BU>У меня это - BU> #include <stdio.h> BU> #include <stdlib.h> BU> #include <string.h>
Вот что-то есть. Не уверен за абсолютную правильность, программа очень нежная, чувствительная к внешним условиям, особенно ко входным данным. Но что-то она считает...
Здравствуйте, UgN, Вы писали:
UgN>Типа исходник. Для проверки алгоритма. Особо не напрягался, поэтому мог и накосячить, да и оптимизировать еще можно. UgN>Но ломает...
Почему ты думаешь, что я глупый???
1) строки в виде чисел. А не кодов от 0 до 9
пример: sum("1234","12345",1,0,&x)
2) я говорил С а не С вперемежку с С++
косяк поэтому при компиляции — у меня в libc max нету...
3) ты подумал вообще о том, что числа со знаком бывают???
мой тест N1:
int main(){
int s;
printf("1000-2543=", sum("1000","2543",0,1,&s), s);
}
Здравствуйте, Dmitry Kukushkin, Вы писали:
DK>При всем уважении знак суммы вычисляется не так ( это же не произведение ). DK>Легче всего еще умножать на знак (-1,1) значения из разных char * — ей.
Э-э-э, я как раз для умножения и написал... Исправлю.
BU>>Почему ты думаешь, что я глупый??? BU>>1) строки в виде чисел. А не кодов от 0 до 9 UgN>Где это в условии. Покажи пальцем.
"причем a,b = исходные строки, в которых записаны числа"
согласен, не очень чеканная формулировка. Я имел в виду символы с кодами от 48 (aka '0') до 57 (aka '9')
ну извини , тебе же не сложно будет переделать
BU>>2) я говорил С а не С вперемежку с С++ BU>>косяк поэтому при компиляции — у меня в libc max нету...
UgN>Буду я щас тебе проверять C это или C++
Ага А в условии про C написано:
"сабж на C", "только стандартные библиотеки Си",
И ещё один отличительный признак С — operator new не определен. Знать надо