Перейти к содержимому

Фотография

Основы ПрограмированияПотренируемся на ночь?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 171

#61
KFC

KFC
  • Частый гость
  • 99 сообщений
PHP

$arr=explode(" ",$phrase); 
foreach($arr as $v){$ret.=$v[0];}

дополнение
пояснение к листингу:
строка 1 - разбиваем строку на массив слов, ограниченный пробелом (в общем случае нужно предусмотреть табы и прочее) и помещаем это в переменную $arr
строка 2 - в цикле формируем строку состоящую из первого символа слова в текущей итерации

Сообщение отредактировал KFC: 18.08.2005, 22:53:14

  • 0

#62
Pooh

Pooh
  • В доску свой
  • 1 898 сообщений
KFC, круто! Но правда это не функция.. :D

Блин, если бы awk знал, наверна можно было в одну строчку уложиться. Кто нибудь знает?
  • 0

#63
BAD

BAD

    Заядлый П.П.

  • В доску свой
  • 5 727 сообщений
Напомните мне, а разве в ПХП переменные дефайнить не нужно?
  • 0

#64
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений
Вот моё безумное решение.
Корректно работает только на корректных строках, зато в 1 строчку.

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

function abbr(const S: String): String;
begin
if S <> '' then Result := S[1] + abbr(Copy(S, Pos(' ', S)+1 + Ord(Pos(' ', S) = 0)*99999, 99999));
end;

begin
Writeln(abbr('Simple Mail Transfer Protocol'));
Readln;
end.
  • 0

#65
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений
А вот моё правильное решение. Корректно работает на любых строках и тоже в одну строчку.

[..gioner/programs/test]$ cat test.pl
#!/usr/bin/perl

sub abbr
{
return join("", split(/\W*(\w)\w*\W*/, $_[0]));
}

print abbr("Simple Mail Transfer Protocol"), "\n";
[..gioner/programs/test]$ ./test.pl
SMTP
  • 0

#66
Rus++

Rus++
  • Завсегдатай
  • 106 сообщений
давно не заглядывал, и зря :D

"simple Mail Transfer Protocol".split.map { | x | x[0..0].upcase }.join

а вот как можно расширить системный класс String

class String
   def abbr
     self.split.map { | x | x[0..0].upcase }.join
   end
end

после этого можно пользоваться abbr как встроеным методом

irb(main):035:0> "simple Mail Transfer Protocol".abbr
=> "SMTP"

Сообщение отредактировал Rus++: 19.08.2005, 15:34:18

  • 0

#67
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений
А что это за язык?
  • 0

#68
meir

meir
  • Частый гость
  • 81 сообщений
Извините, обе мои версии были немного неправильными. Вот исправленные версии:
#include<strstream>

char*abbr(char*a){

 static char temp[32],result[32];

 std::istrstream in(a);

 for(int i=0;in>>temp;result[i++]=static_cast<char>(toupper(*temp)));

 return result;}
И другой вариант - не функция, а программа:
#include<iostream>

main(){

 for(char a[32];std::cin>>a;std::cout<<static_cast<char>(toupper(*a)));}
Мне кажется, выиграет тот, кто умеет программировать на Basic, так как там не надо объявлять переменные, подключать библиотеки, например в коде на C++ для таких мелких задач большинство занимают объявления и добавления Header-файлов.
  • 0

#69
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
Рад отметить появление новых интересных решений! Похоже, можно уже говорить и о победителе - по-моему, это v04bvs с его однострочной функцией на Perl. Поздравляю!

Лично мне больше всего нравится реализация функции abbr(), которую я видел на языке Python (увы, автор - не я :D ). Вот она:
from string import split, join                                            #импорт не всего модуля, а только двух нужных 
                                                                                     #функций из него. Вот она, реальная экономия памяти!
def abbr(s): return join(map(lambda x: x[0], split(s)), "")  #сама функция - всего лишь 1 строка.

Пример использования:
print abbr("Simple Mail Transfer Protocol")      #выводит "SMTP"

К тому же это переносимый код, он без какой-либо модификации работает как под Linux, так и под Windows.

Всем приятных выходных! :rolleyes:

Сообщение отредактировал Visual1: 20.08.2005, 01:01:19

  • 0

#70
Usama

Usama

    Читатель

  • Завсегдатай
  • 196 сообщений
чета ребята начали с суммы, закончили СМТП :rolleyes:

у чувака который тему начал уже и курс закончился и задачу давно сдали - а они тут все воюют :D
  • 0

#71
BAD

BAD

    Заядлый П.П.

  • В доску свой
  • 5 727 сообщений
Мож новую задачу введем?
Задача.
Дано: дата в формате 01.01.2005
Требуется вывести в формате:
1 января 2005 г.
  • 0

#72
Rus++

Rus++
  • Завсегдатай
  • 106 сообщений

А что это за язык?


Руби
  • 0

#73
Rus++

Rus++
  • Завсегдатай
  • 106 сообщений

Рад отметить появление новых интересных решений! Похоже, можно уже говорить и о победителе - по-моему, это v04bvs с его однострочной функцией на Perl. Поздравляю!

Лично мне больше всего нравится реализация функции abbr(), которую я видел на языке Python (увы, автор - не я  :D ). Вот она:

from string import split, join                                            #импорт не всего модуля, а только двух нужных 
                                                                                     #функций из него. Вот она, реальная экономия памяти!
def abbr(s): return join(map(lambda x: x[0], split(s)), "")  #сама функция - всего лишь 1 строка.

Пример использования:
print abbr("Simple Mail Transfer Protocol")      #выводит "SMTP"

К тому же это переносимый код, он без какой-либо модификации работает как под Linux, так и под Windows.

Всем приятных выходных!  :rolleyes:


В Питоне ламбда функциями не советуют пользоваться так как в следующих версиях они будут заменены на нечто другое - значит решение не переносимое на следующие версии.

и все равно
def abbr(s) s.split.join.map { |x| x[0..0] }.join end
короче ;)
  • 0

#74
Rus++

Rus++
  • Завсегдатай
  • 106 сообщений

Извините, обе мои версии были немного неправильными. Вот исправленные версии:

#include<strstream>
char*abbr(char*a){
 static char temp[32],result[32];
 std::istrstream in(a);
 for(int i=0;in>>temp;result[i++]=static_cast<char>(toupper(*temp)));
 return result;}
И другой вариант - не функция, а программа:
#include<iostream>
main(){
 for(char a[32];std::cin>>a;std::cout<<static_cast<char>(toupper(*a)));}
Мне кажется, выиграет тот, кто умеет программировать на Basic, так как там не надо объявлять переменные, подключать библиотеки, например в коде на C++ для таких мелких задач большинство занимают объявления и добавления Header-файлов.


да, и вот потом хакеры ломают такие программы через buffer overflow :D Лучше уж VB тогда :rolleyes:
  • 0

#75
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

В Питоне ламбда функциями не советуют пользоваться так как в следующих версиях они будут заменены на нечто другое - значит решение не переносимое на следующие версии.

Кто же это не советует? На что именно "нечто другое" они будут заменены в следующих версиях?

Пожалуйста, конкретнее и с указанием источника.

и все равно

def abbr(s) s.split.join.map { |x| x[0..0] }.join end
короче :D

Хм, как-то не заметил... невооруженным глазом. :rolleyes:

Вы привели свой вариант в следующем виде (очевидно, в соответствии с требованиями синтаксиса):
def abbr
    self.split.map { | x | x[0..0].upcase }.join
  end
Разве три строки короче, чем одна?

Сообщение отредактировал Visual1: 22.08.2005, 22:09:38

  • 0

#76
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений
[..gioner/programs/test]$ cat test.pl
#!/usr/bin/perl

sub fmtdate
{
return $1 . " " . ("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря")[$2-1] . " " . $3 . " г." if $_[0] =~ /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/;
}

print fmtdate("22.07.1987"), "\n";
[..gioner/programs/test]$ ./test.pl
22 июля 1987 г.
  • 0

#77
BAD

BAD

    Заядлый П.П.

  • В доску свой
  • 5 727 сообщений

[..gioner/programs/test]$ cat test.pl
#!/usr/bin/perl

sub fmtdate
{
        return $1 . " " . ("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря")[$2-1] . " " .  $3 . " г." if $_[0] =~ /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/;
}

print fmtdate("22.07.1987"), "\n";
[..gioner/programs/test]$ ./test.pl
22 июля 1987 г.

Хм.
Такой код число 01 выведет как "01", верно? Надо бы еще и нолик лидирующий убрать.
  • 0

#78
Rus++

Rus++
  • Завсегдатай
  • 106 сообщений

В Питоне ламбда функциями не советуют пользоваться так как в следующих версиях они будут заменены на нечто другое - значит решение не переносимое на следующие версии.

Кто же это не советует? На что именно "нечто другое" они будут заменены в следующих версиях?


http://blogs.nuxeo.c...uido_van_rossum

или имя Гвидо вам ничего не говорит?

и все равно

def abbr(s) s.split.join.map { |x| x[0..0] }.join end
короче :D

Хм, как-то не заметил... невооруженным глазом. :rolleyes:

ну так посчитай ;)

Вы привели свой вариант в следующем виде (очевидно, в соответствии с требованиями синтаксиса):

def abbr
    self.split.map { | x | x[0..0].upcase }.join
  end
Разве три строки короче, чем одна?


неочевидно. А в соотвествии с читабельностью, это в Питоне отступы являются частью синтаксиса, в Руби нет.
  • 0

#79
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

В Питоне ламбда функциями не советуют пользоваться так как в следующих версиях они будут заменены на нечто другое - значит решение не переносимое на следующие версии.

Кто же это не советует? На что именно "нечто другое" они будут заменены в следующих версиях?


http://blogs.nuxeo.c...uido_van_rossum

или имя Гвидо вам ничего не говорит?


Интересная ссылка, почему же сразу ее не указали. Имя Гвидо мне о многом говорит, так что Ваш вопрос мимо. Я также вижу, что у Вас большие трудности с английским языком, а может, Вы специально искажаете факты? (Для модератора: извините за вынужденный оффтопик, но Rus++ пытается обмануть читателей форума, потому что приписывает создателю языка Python ван Россуму какие-то ложные измышления - на самом деле ничего подобного насчет исключения lambda-выражения из следующих версий языка и замены его на "нечто другое" нет в интервью по указанной ссылке!!!). :smoke:

ну так посчитай :-)

Не припомню, когда это мы с Вами на "ты" переходили. Вообще, считать и давать необходимые пояснения к своему коду - это была твоя, а не моя обязанность, если ты действительно хотел участвовать в конкурсе (тем более победить в нем). Странно, всем это было понятно, только не тебе. И вообще, ты даже не снизошел до читателей хотя бы одним словом, на каком языке у тебя это написано. :D

неочевидно. А в соотвествии с читабельностью, это в Питоне отступы являются частью синтаксиса, в Руби нет.

Увы, эти твои оправдания/пояснения запоздалые. Итог был подведен еще в конце прошлой неделе, а ты все машешь кулаками после драки. Успехов в этом деле, но с кем-нибудь другим, не со мной! ;)
  • 0

#80
Rus++

Rus++
  • Завсегдатай
  • 106 сообщений

Интересная ссылка, почему же сразу ее не указали. Имя Гвидо мне о многом говорит, так что Ваш вопрос мимо. Я также вижу, что у Вас большие трудности с английским языком, а может, Вы специально искажаете факты? (Для модератора: извините за вынужденный оффтопик, но Rus++ пытается обмануть читателей форума, потому что приписывает создателю языка Python ван Россуму какие-то ложные измышления - на самом деле ничего подобного насчет исключения lambda-выражения из следующих версий языка и замены его на "нечто другое" нет в интервью по указанной ссылке!!!).  :smoke:


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

Не припомню, когда это мы с Вами на "ты" переходили. Вообще, считать и давать необходимые пояснения к своему коду - это была твоя, а не моя обязанность, если ты действительно хотел участвовать в конкурсе (тем более победить в нем). Странно, всем это было понятно, только не тебе. И вообще, ты даже не снизошел до читателей хотя бы одним словом, на каком языке у тебя это написано. :D 


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

Увы, эти твои оправдания/пояснения запоздалые. Итог был подведен еще в конце прошлой неделе, а ты все машешь кулаками после драки. Успехов в этом деле, но с кем-нибудь другим, не со мной! ;)


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

Сообщение отредактировал Rus++: 23.08.2005, 23:09:47

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.