#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;
}
Строки по возрастанию длины. C++. Just for fun
1 Задача. Вывести строки введенные пользователем в порядке возрастания.
2 Задача. Вывести только самую длинную и самую короткую строку из введенных пользователем.
Обе задачи надо решить используя наиболее короткий код, и, по возможности, эффективный.
Приложение должно быть консольным. Ввод может заканчиваться как по нажатию Enter, так и по нажатию Ctrl + Z на новой строке — на выбор программиста. Естественно, можно использовать все средства стандартного C++.
Ну и последнее условие. Желательно, чтобы вначале попытались ответить начинающие программисты, а уж потом опытные. Свои варианты приведу где-нибудь посередине :)
Никто не захотел играться... Ну ладно, тогда выложу свой вариант решения первой задачки.
а зачем тебе это надо? и зачем в Студентах? в Общалке бы лучше тему создал...
Цитата: Washington
а зачем тебе это надо? и зачем в Студентах? в Общалке бы лучше тему создал...
Да так... Всегда злило что в теме "Студенты" ставятся задачи с неумными ограничениями на использование средств. Решил сделать тему в данном разделе, где не будет таких ограничений.
Но вообще, конечно, идея недодуманная и потому абсурдная: непонятно зачем, непонятно для чего. Да и задачи можно было подобрать интереснее :)
Задачи интересные придумать - не вопрос: много их тут было в этой ветке :)
Код:
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);
{
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);
Цитата: Der Meister
Предлагаю сделать несколько иначе: решить задачу с помощью того языка, который вам кажется наиболее для неё подходящим, а затем сравнить лаконичность вариантов для разных языков (например, прикрепив голосование). Естьевственно, все возможности языка по-прежнему идут в ход.
Тоже дело. Пусть каждый пишет на любом подходящем языке, или даже на нескольких. С голосованием не ясно, так как его можно будет устрить только после того, как накопится много сообщений. Например, о вашем Nemerle я ничего не слышал раньше и в опросе бы не упомянул.
В каждом языке есть моменты, выгодно позиционирующие его в определённом кругу задач. Границы этих областей как раз и хотелось бы выяснить, причём наиболее объективно.
Задачи могут быть как на алгоритмы, так и на инфраструктуру или устранение сложности... Вообще какие угодно. Вон по количеству постов сортируем темы, да смотрим, пробуждая вдохновение. :)
Код:
#!/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;
}
use strict;
my @strings;
while (<>) {
last if /!/;
push @strings, $_;
}
print "\n\n";
foreach my $string (sort { length ($a) <=> length ($b) } @strings) {
print $string;
}
Код:
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;
}
{
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;
}
{
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;
}
Код:
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
}
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
}
Код:
<?php
$a = file('con');
usort($a, create_function('$s1,$s2', 'return strlen($s1) - strlen($s2);'));
array_walk($a, create_function('$s', 'print $s;'));
?>
$a = file('con');
usort($a, create_function('$s1,$s2', 'return strlen($s1) - strlen($s2);'));
array_walk($a, create_function('$s', 'print $s;'));
?>
Somebody, кросавчег :)