Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Строки по возрастанию длины. C++. Just for fun

87
04 февраля 2009 года
Kogrom
2.7K / / 02.02.2008
Студенты закончили сессию и ушли на каникулы. В разделе затишье. Хочу нарушить — задать простые студенческие задачки, но без глупых ограничений типа "только без string", "не используя классы, STL".

1 Задача. Вывести строки введенные пользователем в порядке возрастания.

2 Задача. Вывести только самую длинную и самую короткую строку из введенных пользователем.

Обе задачи надо решить используя наиболее короткий код, и, по возможности, эффективный.
Приложение должно быть консольным. Ввод может заканчиваться как по нажатию Enter, так и по нажатию Ctrl + Z на новой строке — на выбор программиста. Естественно, можно использовать все средства стандартного C++.

Ну и последнее условие. Желательно, чтобы вначале попытались ответить начинающие программисты, а уж потом опытные. Свои варианты приведу где-нибудь посередине :)
87
05 февраля 2009 года
Kogrom
2.7K / / 02.02.2008
Никто не захотел играться... Ну ладно, тогда выложу свой вариант решения первой задачки.

Код:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

struct CompareString
{
    bool operator()(const string &l, const string &r)
    {return (l.length() < r.length());}
};

typedef istream_iterator<string> issi;
typedef ostream_iterator<string> ossi;

int main()
{
    vector<string> data;

    copy(issi(cin), issi(), back_inserter(data));
    sort(data.begin(), data.end(), CompareString());
    copy(data.begin(), data.end(), ossi(cout, "\n"));
    return 0;
}
6
05 февраля 2009 года
George
4.1K / / 05.01.2007
а зачем тебе это надо? и зачем в Студентах? в Общалке бы лучше тему создал...
87
05 февраля 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Washington
а зачем тебе это надо? и зачем в Студентах? в Общалке бы лучше тему создал...


Да так... Всегда злило что в теме "Студенты" ставятся задачи с неумными ограничениями на использование средств. Решил сделать тему в данном разделе, где не будет таких ограничений.

Но вообще, конечно, идея недодуманная и потому абсурдная: непонятно зачем, непонятно для чего. Да и задачи можно было подобрать интереснее :)

341
05 февраля 2009 года
Der Meister
874 / / 21.12.2007
[QUOTE=Kogrom]Обе задачи надо решить используя наиболее короткий код, и, по возможности, эффективный.[/QUOTE]Предлагаю сделать несколько иначе: решить задачу с помощью того языка, который вам кажется наиболее для неё подходящим, а затем сравнить лаконичность вариантов для разных языков (например, прикрепив голосование). Естьевственно, все возможности языка по-прежнему идут в ход.
Задачи интересные придумать - не вопрос: много их тут было в этой ветке :)
341
05 февраля 2009 года
Der Meister
874 / / 21.12.2007
Например, Nemerle:
Код:
def getInput(acc = [])
{
    def line = ReadLine();
   
    if (line.Length == 0)
        acc;
    else
        getInput(line :: acc);
}

def input = getInput();
def result = input.ToArray().Sort(s => s.Length);

foreach (s in result)
    WriteLine(s);
87
05 февраля 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Der Meister
Предлагаю сделать несколько иначе: решить задачу с помощью того языка, который вам кажется наиболее для неё подходящим, а затем сравнить лаконичность вариантов для разных языков (например, прикрепив голосование). Естьевственно, все возможности языка по-прежнему идут в ход.


Тоже дело. Пусть каждый пишет на любом подходящем языке, или даже на нескольких. С голосованием не ясно, так как его можно будет устрить только после того, как накопится много сообщений. Например, о вашем Nemerle я ничего не слышал раньше и в опросе бы не упомянул.

341
05 февраля 2009 года
Der Meister
874 / / 21.12.2007
[QUOTE=Kogrom]С голосованием не ясно, так как его можно будет устрить только после того, как накопится много сообщений.[/QUOTE]Голосование - не главное. Просто нужен какой-то видимый итог.
В каждом языке есть моменты, выгодно позиционирующие его в определённом кругу задач. Границы этих областей как раз и хотелось бы выяснить, причём наиболее объективно.
Задачи могут быть как на алгоритмы, так и на инфраструктуру или устранение сложности... Вообще какие угодно. Вон по количеству постов сортируем темы, да смотрим, пробуждая вдохновение. :)
1.8K
06 февраля 2009 года
igor_nf
256 / / 13.12.2006
Perl. Первая задача. Ввод заканчивается строкой, содержащей воскл. знак:

Код:
#!/usr/bin/perl

use strict;

my @strings;
while (<>) {
        last if /!/;
        push @strings, $_;
}

print "\n\n";
foreach my $string (sort { length ($a) <=> length ($b) } @strings) {
        print $string;
}
87
07 февраля 2009 года
Kogrom
2.7K / / 02.02.2008
C++. Вторая задача. Мой начальный вариант
Код:
int main()
{
    string shortest, str, longest;
    cin >> shortest;
    while(cin >> str)
    {
        if(str.length() < shortest.length()) shortest = str;
        if(str.length() > longest.length()) longest = str;
    }
    cout << shortest << endl << longest << endl;
    return 0;
}

То же самое, поправленное одним человеком
Код:
int main()
{
    string shortest, str;
    cin >> shortest;
    string longest(shortest);
    while(cin >> str)
    {
        if(str.length() < shortest.length()) swap(shortest, str);
        if(str.length() > longest.length()) swap(longest, str);
    }
    cout << shortest << endl << longest << endl;
    return 0;
}
355
07 февраля 2009 года
&lt;SCORP&gt;
786 / / 21.10.2006
AWK, задача 2
Код:
NR==1  {
          max=$0
          min=$0
       }
       {
          if (length($0) > length(max))
              max=$0
          if (length($0) < length(min))
              min=$0
       }
END    {
           print "Max " max
           print "Min " min
       }
5.3K
10 февраля 2009 года
Somebody
185 / / 24.12.2006
Задача 1, php. Окончание ввода - {Ctrl+Z на новой строке} 2 раза (почему 2, не понял).
 
Код:
<?php
$a = file('con');
usort($a, create_function('$s1,$s2', 'return strlen($s1) - strlen($s2);'));
array_walk($a, create_function('$s', 'print $s;'));
?>
341
11 февраля 2009 года
Der Meister
874 / / 21.12.2007
Somebody, кросавчег :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог