PDA

Просмотр полной версии : Мышление блондинок


_Great_
27.02.2007, 00:06
Итак, попробуем же реализовать на нашем любимом языке программирования (Си ;)) мышление блондинок :)
Напишем программу, которая будет генерировать из предложения "Привет. Как дела?" предлоежение "ПРИВЕТ!!!! КАК ДЕЛА????!!!!!" =))
Для этого нам нужно:
1) преобразовать все к верхнему регистру
2) если предложение вопросительное, дополнить его знаками вопроса
2) дополнить предложение восклицательными знаками
Приступим :)
#include <stdio.h>
#include <windows.h>

// Преобразование к верхнему регистру
// Разное для разных алфавитов
char touppercase(char c)
{
if( c >= 'a' && c <= 'z' )
return c + 'A' - 'a';
else if( c >= 'а' && c <= 'я' )
return c + 'А' - 'а';
else
return c;
}

// Преобразование предложения
void blonde(char* sentense)
{
// К верхнему регистру
for(char* sp = sentense;*sp;sp++)
*sp = touppercase(*sp);

// Длина предложения
int len = strlen(sentense) + 1;

// Если вопросительное - дополняем
if( sentense[len - 2] == '?' )
for(int i=0;i<7;i++)
{
sentense[len + i - 1] = '?';
sentense[len + i] = 0;
}

// новая длина
len = strlen(sentense) + 1;

// дополняем "!"
for(int i=0;i<7;i++)
{
sentense[len + i - 1] = '!';
sentense[len + i] = 0;
}
}

int main()
{
while(1)
{
char buffer[1024];

// Приглашение. Считываем строчку
printf("blonde> ");
gets(buffer);

// OEM -> ANSI
OemToChar( buffer, buffer );

// Обрабатываем
blonde(buffer);

// ANSI -> OEM
CharToOem( buffer, buffer );

// Выводим
printf("%s\n", buffer);
}
return 0;
}

Все :)
Вывод:
blonde> Привет, я блондинка
ПРИВЕТ, Я БЛОНДИНКА!!!!!!!
blonde> Как дела?
КАК ДЕЛА????????!!!!!!!
blonde>

Можно даже ICQ-бота написать )


ЗЫ. Оно зохавало мой моск!!!!!!11111 =\\

Abra
27.02.2007, 00:09
давай не бот а модик под аську!
или веб оболочку хотя бы.
буду через нее с некоторыми общаться.

_Great_
27.02.2007, 00:13
Напишу веб оболочку )) Общацо

sni4ok
27.02.2007, 00:16
а теперь о косячгах


// Преобразование к верхнему регистру
// Разное для разных алфавитов
char touppercase(char c)
{
if( c >= 'a' && c <= 'z' )
return c + 'A' - 'a';
else if( c >= 'а' && c <= 'я' )
return c + 'А' - 'а';
else
return c;
}



ну да, стока буква, вместа обычной стандартной, сишной int toupper(int c );


// Преобразование предложения
void blonde(char* sentense)



берёшь сишную страку, делаешь её больше, а проверку на выход за пределы не проводишь.

_Great_
27.02.2007, 00:20
ну да, стока буква, вместа обычной стандартной, сишной int toupper(int c );
уверен, что она обрабатывает русский язык корректно?

берёшь сишную страку, делаешь её больше, а проверку на выход за пределы не проводишь.
я заблаговременно выделил 1024 байта под нее.
на большее оно не способно. А что ты хотел от блондинки?))

sni4ok
27.02.2007, 00:29
уверен, что она обрабатывает русский язык корректно?


ага, уверен


я заблаговременно выделил 1024 байта под нее.
на большее оно не способно. А что ты хотел от блондинки?))

ну может ты где-то эти 1024 байта и выделил.. а функции то это неизвестно, мог бы и размерчег передавать,
а вообще даже в твоём коде кто запрещает пользователю страку набить более чем 1к?

_Great_
27.02.2007, 00:33
Да че пристал, дай постебаться )))

DRON-ANARCHY
27.02.2007, 00:49
на php все выйдет куда короче....

_Pantera_
27.02.2007, 00:49
а мне один раз примерно такая попалась :(

#include<iostream.h>
#include<windows.h>

const char*ru(const char*s)
{
static char but[256];
CharToOem (s,but);
return but;
}

void main()
{
int i=0;
int n;

for (i=0; i>n; i++)
cout<<ru("Че ты молчишь???????");

}

sni4ok
27.02.2007, 02:18
Итак, попробуем же реализовать на нашем любимом языке программирования (Си ;))

а теперь пишем плагин к миранде, который позволяет делать следующее:
при вводе /blo text, для text'а делаем замену на бландинистый стиль, и выплювывем обратна(работает как в личке(icq, irc), так и на irc канале, также наводимся на цель.
комадой
/aim имя_цели
которая устанавливает цель на irc канале,и при попытке этого чувачка написать текст, выводит нечто следующее

[01:12] sni40k15430: UnNam3D wanna say: ЧО ТАМА ????!!!!!
[01:12] Dr_Check|off: да
[01:12] SliP|: -_-
[01:12] UnNam3D: про америкосов нах ?
[01:12] sni40k15430: UnNam3D wanna say: ПРО АМЕРИКОСОВ НАХ ????!!!!!


ну и собственно исходник плагинчега:



<?php



function mbot_load()
{
mb_SelfRegister(MB_EVENT_MSG_OUT|IRC_EVENT_GUI_OUT |IRC_EVENT_GUI_IN, 1);
}

function ConvertStringToBlondy($msg)
{
$msg = @strtoupper($msg);
$msg = @str_replace(",", "!!!!", $msg);
$msg = @str_replace("?", "????!!", $msg);
$msg = $msg.'!!!';
return $msg;
}

function MakeBlonyString($body){
if(@strlen($body) <= 6) return 0;
if(@substr($body,0,4) == '/blo'){
$msg = @substr($body,5);
$msg = @ConvertStringToBlondy($msg);
return $msg;
}
return 0;
}

function SetTarget($aim)
{
if(@strlen($aim) <= 6) return 0;
if(@substr($aim,0,4) == '/aim'){
$aim = @substr($aim,5);
@mt_setvar('target', $aim, 1);
mb_PUMsg('Target setted');
return 1;
}
return 0;
}

function ApplyMsg($msg)
{
$ret = @SetTarget($msg);
if($ret === 1) return 1;
return @MakeBlonyString($msg);
}

function mbe_MsgOut($cid,$body)
{
$msg = @ApplyMsg($body);
if($msg === 0) return 0;
if($msg === 1) return "drop";
mb_MsgSetBody($msg);
return "send";
}

function irc_GuiOut($module,$iType,$channel,$pszUID,$text)
{
$msg = @ApplyMsg($text);
if($msg === 0) return 0;
if($msg === 1) return "drop";
mb_IrcSetGuiDataOut($iType,null,$pszUID,"$msg");
return 0;
}

function irc_GuiIn($module,$eventtype,$channel,$nick,$text)
{
if(@strcmp($eventtype, 64) == 0){
$target = @mt_getvar('target');
if(@strcmp($nick, $target) == 0){
// mb_PUMsg('voshli');
$msg = @ConvertStringToBlondy($text);
if($msg === 0) return 0;
$msg = $target.' wanna say: '.$msg;
$msg = '/MSG '.$channel.' '.$msg;
mb_IrcPostMessage($module,$msg);
// mb_PUMsg($msg);
}
return 0;
}
}

?>



да, работает он используя плагин:
MBot/MSP (Miranda Scripting Plugin)

flipper
27.02.2007, 02:28
Реализация на Perl'e:

#!/usr/bin/perl -w

sub ads(@){
my $str=shift @_;
my $j=rindex $str, '?';
if ($j>0){ # если вопрос добавляем ???
for(my $i=$j;$i<$j+3;$i++) {
$str =$str. '?'; }
}

return ads1($str);}

sub ads1(@){
my $str=shift @_;
my $j=length($str); #добавляем !!!
for(my $i=$j;$i<$j+3;$i++) {
$str =$str. '!'; }
return $str;}

my $str=$ARGV[0];
if ($str== '') {$str="hello Привет, я блондинка";}
# Преобразование к верхнему регистру
$str=~ tr/а-я,a-z/А-Я,A-Z/;
print ads $str;

GreenBear
27.02.2007, 02:32
реализация на хтмл

<span style="text-transform:uppercase">я не бладнинка!!! я пацан!!!!!</span>

Ch3ck
27.02.2007, 03:12
Ещё универсальную някалку остаётся написать до полного набора...
<?php
while(true)
{
echo('Няяяяяяяяяя<br>');
}
?>

ATFakep
27.02.2007, 05:31
Ещё универсальную някалку остаётся написать до полного набора...
<?php
while(true)
{
echo('Няяяяяяяяяя<br>');
}
?>
Гениально! =)