Pull to refresh

Comments 147

В C# задача 6 (фильтрация списка чисел) решена как-то слишком длинно. Непонятно, зачем там таплы. Почему не просто вот так?

(new[] { 49, 58, 76, 82, 88, 90 }).ForEach( v => (v > 60 ? passed : failed).Add(v) );


Не проверял, компилируется ли, но уверен, что как-то вот так можно решить задачу.
Да, спасибо. Я когда-то даже специально смотрел транскрипцию, но уже забыл.
А что в нём «простого русского»?
Это заимствованоне французское слово(cortege).
Про «русское» — это была шутка :)
Но всё-таки у нас в математике используется именно «кортеж», а не «тьюпл». Да и выговорить его куда проще.
А у нас используется «тупл». Русифицированная версия, даже склоняется: туплы, туплу и т.д. Это как с микрософтом :)
Можно так же использовать GroupBy:

var result = (new[] { 49, 58, 76, 82, 88, 90 }).GroupBy(v => v > 60).ToDictionary(gr=>gr.Key);

//result[true] - passed
//result[false] - failed
на PHP это будет «многотысячник», а не «однострочник» :)
Ну кроме пункта 9, все остально вполне ок.
А чего минусуете? :) Сам пишу на php не первый год.

Самоирония должна быть у каждого разработчика. Код, представленный на описанных в посте языках, более лаконичный. И это надо признать.
Какой из 10 однострочников будет представляться в виде тысяч строк на PHP?
В русской литературе есть понятие «гипербола». Не надо понимать буквально мои слова. Не 1000 строк, но 10-15 строк. PHP никогда не гордился лаконичностью кода.
UFO just landed and posted this here
Эко вы хитро гиперболой-то нас ошарашили! Как лопатой по лбу!
val fileText = io.Source.fromFile("data.txt").mkString

менее лаконичен, чем
$fileText = file_get_contents("data.txt");


Строго говоря, только пункт 9 решается в десять строчек, остальные реализуются через одну строчку (благодаря PHP 5.3)
Для п.9 в PEAR что-то есть, если мне память не изменяет, чтобы в 1 строку
Как ниже описали — на PHP код не менее лаконичный.

Поехали по пунктам:

// 1
// PHP 5.3
array_map(function($a){return $a*2;}, array(...));

// 2
array_sum(array(...));

// 3
strpos($mystring, $findme);

// 4
$fileText = file_get_contents("data.txt");


P.S. Кроме троллей никого не минусую принципиально
Согласен, все пункты кроме 9 можно выполнить на php в одну строчку.
Первую задачу на питоне можно решить через list comprehension:
print [x*2 for x in range(1,11)]

Легче читается, чем через лямбды
Кстати, когда много таких здач решать приходится, вместо list используют numpy.array, он мощнее и быстрее:

# arr = numpy.array(range(1, 1001))
print arr*2
UFO just landed and posted this here
Он смотрит на все примеры как на говно зная что может намного больше уместить в одну строку ^_^
Извините, но заголовок режет слух. Лучше было бы так: «10 строк кода, которые удивят(шокируют) ваших друзей».
За подборку спасибо.
Спасибо, поправил
вхождение подстроки, Python:

wordlist = ["scala", "akka", "play framework", "sbt", "typesafe"]
tweet = "This is an example tweet talking about scala and sbt."

print [word in tweet for word in wordlist


Если нужно только булево значение, как на scala:

wordlist = ["scala", "akka", "play framework", "sbt", "typesafe"]
tweet = "This is an example tweet talking about scala and sbt."

print any(word in tweet for word in wordlist)
Третий однострочник на Python не найдёт «play framework», даже если он будет присутствовать в строке tweet, ибо split()
(from bucket in new[] { passed, failed } from i in new[] { 49, 58, 76, 82, 88, 90 } 
select new { bucket, i }).ToList().ForEach((tuple) => tuple.bucket.AddRange(Enumerable.Repeat(tuple, 1)
.Where((tup) => (tup.bucket == passed && tup.i > 60) || (tup.bucket == failed && tup.i <= 60))
.Select((tup) => tup.i)));

Заказчик платить за кол-во символов?
А каждый посмотрел только те строки, на языке которых он пишет?
Я посмотрел первые 2 или 3, а дальше пропускал. Суть задач понятна, на тех я зыках, что я использую, сделать смогу (ну большую часть), поэтому непонятно, зачем смотреть на своих.
Увидев заголовок, я уж надеялся увидеть следующее:
echo «test… test… test...» | perl -e '$??s:;s:s;;$?::s;;=]=>%-{
Кое-что на PHP
1:
array_map(function($v){ return $v*2;}, range(1,10));

2:
array_sum(range(1,1000));

3:
$word_list = array("monad", "monoid", "Galois", "ghc", "SPJ");
$str = "This is an example tweet talking about SPJ interviewing with Galois";
$result = (bool)array_filter($word_list, function($v)use($str){return (strpos($str, $v)!==FALSE);});

4:
$file = file_get_contents("data.txt");

5:
implode(PHP_EOL, array_map(function($v){ return "Happy Birthday ".(($v==3)?"dear NAME":"to you");}, range(1,4)));

6:
array_filter(array(49, 58, 76, 82, 88, 90), function($v){return ($v>60);});

7:
$xml = simplexml_load_file("http://search.twitter.com/search.atom?&q=scala");

8:
$min = min(array(14, 35, -7, 46, 98));
$max = max(array(14, 35, -7, 46, 98));
У меня немного иначе вышло
1. Удваивание всех чисел в списке
foreach(range(1,10) as &$v) $v *= 2;
2. Сумма списка чисел
$result = array_sum(range(1, 10));
3. Проверка вхождения подстроки
$tweet = "This is an example tweet talking about scala and sbt.";
foreach(array("monad", "monoid", "Galois", "ghc", "SPJ") as $word)
strpos($tweet, $word) === false ?: $hits[] = $word;
var_dump($hits);

4. Чтение файла
$lines = file("data.txt");
5. С днём рожденья
foreach(range(1,10) as $i) echo "Happy Birthday " .($i%2 ? "dear Robert" : "to You");
6. Фильтрация списка чисел
$passed = $failed = array();
foreach(range(1,10) as $v) ($v > 10) ? $passed[] = $v : $failed[] = $v;

7. Получение и разбор XML от веб-сервиса ( XML -> массив)
$parser = function ($iter) use (&$parser) {
foreach($iter as $key=>$val) $arr[$key][] = ($iter->hasChildren()) ? $parser($val) : strval($val);
return $arr;
}
$result = $parser(new SimpleXmlIterator(file_get_contents("http://domain.ru/api"), null));

8. Поиск минимума (или максимума) в списке
max(array(14, 35, -7, 46, 98));
min(array(14, 35, -7, 46, 98));
ух, не указал язык(
10й пункт (про решето), не знаю как записать короче:
$i = range(2,100); 
while(($a[] = array_shift($i))&&count($i) > 0)foreach($i as $k=>$v) if($v%end($a) == 0) unset($i[$k]);


Простые числа в лежат в $a
var_dump($a);


В одну строчку это можно утолкать, если первую строчку вставить в array_shift.
Не совсем понял, как именно?
while(($a[] = array_shift($i = range(2,100)))&&count($i) > 0)foreach($i as $k=>$v) if($v%end($a) == 0) unset($i[$k]);

Но в данной ситуации такой финт ушами не работает.

И да, я в курсе, что это не кошерно и всё такое.
кошерно-не кошерно, но такой код не работает :)
Вообще объявление переменных внутри аргументов функций или внутри if вполне работает. Просто приведённый пример — не тот случай. Хотя, чтобы оно заработало можно извратиться ещё дальше с isset и тернарным оператором, но это уже будет совсем говнокод :)
объявление переменных внутри аргументов функций работает.
Но, ($i = range(2,100)) — вернет true, соответственно будет выполнятся array_shift(true) — а значит все зациклится.
Попробуйте сами :)
а нет вру.
зациклится, но не поэтой причине. ($i = range(2,100)) — вернет не boolean а сам массив.
for($i = range(2,100);($a[] = array_shift($i)) && count($i) > 0;)foreach($i as $k=>$v) if($v%end($a) == 0) unset($i[$k]);
Да, кстати, вот и одна строчка :)
1. foreach (range(0, 1000) as $i) $i*2;
2. array_sum(range(0, 1000));
3. count(array_diff($wordlist, explode(' ', $tweet)))>0?true:false;
4. file_get_contents(); или file() для построчного чтения.


дальше лень )
1 не очень корректно, возвращает не список. Вернее вообще ничего не возвращает :)
А он нигде не возвращает
Можно так
foreach (range(0, 1000) as $i) echo $i*2;

или так
foreach (range(0, 1000) as $i)  $a[]=$i*2;


Это уже мелочи.
Мне вот 10й пункт более интересен :)
array_map(function($v){ return $v*2;}, range(1,10));
из коммента выше — возвращает ) Примеры в посте на руби и питоне тоже, остальные — похоже на то.
В данном случае, работать будет только в 5.3 или выше.
А что же, в 5.2 в одну строку уже не записать? :)
На планшете неудобно :)
3 не корректно, нужен поиск подстроки, а у вас происходит поиск слова в строке.
Я не совсем понял, что вы имели ввиду, в любом случае, 3 пункт на php в одну строку лучше всего будет выглядеть так:
!(str_replace($wordlist,'',$tweet)==$tweet);
Красиво, ничего не скажешь.
Кстати, песенка про день рождения делается намного проще (и не обязательно 5.3 PHP)
for($i=0;++$i<=4; printf("Happy Birthday %s", $i==3?"dear NAME":"to You"))
$min = min(14, 35, -7, 46, 98);
$max = max(14, 35, -7, 46, 98);
Только, прошу — не использовать такое в коде, который я буду поддерживать. Потому как я маньяк и знаю ваши адреса…
Да ладно, там вроде бы нигде нет грязных хаков. И уж всяко лучше писать
doubles = [x*2 for x in range(1,5)]
чем
doubles = []
i = 1
while i<5:
  l.append(i*2)
  i+=1


Да, во втором как бы более понятен метод работы. Правда, только для тех, кто на питоне не программирует. А если знаешь язык, и не пользуешься его легитимными функциями — это как-то странно.
Меньше кода — меньше ошибок.
одностроки на sed смотрятся весьма неплохо (запускать можно, безобидная команда):
echo 0|sed 's909=bO%3g)o19;s0%0aob)]vO0;s()(0eh}=(;s%}%r1="?0^2{%;
s)")@l2h3%"@$);sw%wh]r()$o%!w;sz(z^+.z;sa+a !z" a;sxzxi?v{a)ax;:b;
s/\(\(.\).\)\(\(..\)*\)\(\(.\).\)\(\(..\)*%.*\6.*\2.*\)/\5\1\3\7/;
tb;s/%.*//;s/.\(.\)/\1/g'

а вообще их далеко не десяток.
про аналогичный список для awk'a, я не говорю, т.к. awk, в отличии от sed, не является языком программирования.
зы. но мой любимый однострок — на перле (запускать не стоит, если что — я предупреждал):
echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Я надеюсь, Вы хотели сказать, что awk, в отличии от sed, является языком программирования? :)
Я хотел сказать именно то, что сказал. Тем не менее ошиблись и Вы, и я. sed — язык программирования (пруф), только вот awk таки тоже язык программирования.
Человекам свойственно ошибаться, что поделать.
Да уж, оказывается sed — тьюринг-полный язык.
sed ':s;s:^.\+$:{s}\:{y}=*}2>y:;y:{\:}:r-:;y:y=s:f/m:;:m;s;.\.\?\+;&\&;e;bm'

Не печатает
Парсер пробел убил после :r-
ну вы хотя бы проверили свое творение. оно ж работать не будет. конструкция после :m не отрабатывает. про мелочи типа ненужной метки :s я уж совсем молчу.
Опечатался несколько раз, понедельник же. Хотя, может это защита от дурака, а то ещё на боевых серверах пустят.
Вот, пофиксил.
sed ':s;s:^.\+$:{s}\:{y}=*}2>y:;y:{\:}:r- :;y:y=s:f/m:;:m;s;.\?\+;&\&;e;bm'
та не, ну зачем там цикл то в конце? он же сам себя в рекурсию загоняет.
вот так прекрасно сработает (и писать лучше в домашнюю директорию, а то вдруг в текущую нету прав на запись:
echo 0|sed 's:^.\+$:{s}\:{y}=*}2>y:;y:{\:}:r- :;y:y=s:f/m:;s=>=>~/=;s;.\?\+;&\&;e'
Если запускать не стоит, то поделитесь, пожалуйста — что делает этот однострок?
UFO just landed and posted this here
hpricot в ruby как-то уже морально устарел вместо него рекомендуется Nokogiri.
вместо partition в фильтрации чисел вы скорее всего имели в виду select.
и вообще решето эратосфена у вас странное. нужен однострок? держите:
puts (errat = lambda { |arr=(2..20).to_a, mul=2, max=20| mul > max/2 ? arr : errat.call(t = arr.select { |x| x == mul || x % mul != 0 }, t[t.find_index(mul)+1], max) }).call

:)
точнее даже так:
puts (errat = ->(arr=(2..20).to_a, mul=arr.first, max=arr.last) { mul > max/2? arr: errat.(t = arr.select { |x| x == mul || x % mul != 0 }, t[t.find_index(mul)+1], max) }).()
поднять веб сервер на питоне одной строкой:
python -m SimpleHTTPServer
Ну просто очень часто этим пользуюсь для отладки.
Я б не сказал, что это «на Python» )
вот на ruby это действительно так:
WEBrick::HTTPServer.new(:Port => 3000, :DocumentRoot => Dir.pwd).start
Где элегантные решения для brainfuck !? :)
вставлю свои 5 копеек
не совсем те задачи, которые указывались, но всё же. Все примеры на c#

вычисление числа фибоначчи
Enumerable.Range(1, n).Skip(2).Aggregate(new KeyValuePair<int, int>(1, 1), (seq, index) => new KeyValuePair<int, int>(seq.Value, seq.Key + seq.Value)).Value


вычисление факториала
Enumerable.Range(1, n).Aggregate((accumulator, next) => accumulator * next);
Решето Эратосфена используется для нахождения всех простых чисел до некоторого целого числа n, а для того, чтобы определить, является ли число простым, используются тесты на простоту.

Сборка понравилась. Особенно любят однострочные коды Python-программисты, сам язык толкает к минимализму. Хотя, в принципе, если перейти к монадическому синтаксису в том же C#, то в одну строчку можно записать почти что хочешь.
Создание и разрушение модальной формы в одну строчку. Delphi.

with TMyModalForm.Create(nil) do try Result := ShowModal = mrOK finally Free end;
Лучше 10 строк понятного кода, чем 1 говнострочник.
Всё в этом мире симметрично:
Лучше одна понятная строка, чем 10 строчек говнокода.

Из говнокода в этих примерах — разве что решето Эратосфена, да ещё фильтрация списка в некоторых примерах. И то, большей частью из-за желания написать в одну строку код, которых всё-таки по хорошему занимает несколько строк.
Для ruby можно короче с xarray гемом

require 'xarray'
(1..10).to_a.map { x * 2 }

p.s. Потом можно будет и без to_a
этот xarray только портит читаемость кода:
1) теряется мнемоничность переменных. items.map {|item| item.do_smth } понятнее, чем x, особенно когда items имеет определённую смысловую нагрузку
2) определите x вне блока до этого — и мучайтесь с дебагом
3) смотришь на блок — и не можешь понять, откуда взялось это 'x'
это инструмент который смысл применять в нужных ситуациях

тут главная задача — ускорение и упрощение небольших скриптов.

когда у тебя длинная цепь из map, select, each конкретное название роли играть не будет. Тем более этот механизм идет вместе а не вместо

Полностью согласен с пунктом 2.

если включил xarray то скорее всего что такое х ты уже знаешь
Сборка для php
(часть взята из комментов выше, варианты с анонимными функциями решил не использовать, т.к. работают только в версии 5.3 и выше)
1. foreach (range(0, 100) as $i) echo $i*2;
2. array_sum(range(0, 100));
3. !(str_replace($wordlist,'',$tweet)==$tweet)
4. file_get_contents('file.txt'); или file('file.txt'); для построчного чтения.
5. for($i=0;++$i<=4; printf("Happy Birthday %s", $i==3?"dear NAME":"to You"));
6. foreach(range(1,10) as $v) ($v > 10) ? $passed[] = $v : $failed[] = $v;
7. $xml = simplexml_load_file("http://search.twitter.com/search.atom?&q=scala");
8. $min = min(array(14, 35, -7, 46, 98));
   $max = max(array(14, 35, -7, 46, 98));
9. -
10. $i=range(2,100);while(($a[]=array_shift($i))&&$i)foreach($i as $k=>$v)if(!($v%end($a)))unset($i[$k]);
10й пункт был поправлен юзером Ogra
for($i=range(2,100);($a[]=array_shift($i))&&count($i)>0;)foreach($i as $k=>$v)if($v%end($a)==0)
unset($i[$k]);
PHP, 9й пункт.
Не уверен в работоспособности, вечером проверю:

$jobs = array("./job1.php", "./job2.php");
foreach ($jobs as $job) {popen('/usr/local/bin/php '. $job, 'r');}
Можно и curl_multi и через сокеты fsockopen, если задачи «расшарены» миру. Через пайпы же можно запускать задачи «скрытые» от внешнего мира.
Common Lisp:
sprunge.us/IYXU

(Стандартная библиотека уж очень тонкая, поэтому позволил себе использовать alexandria)
(Решето Эратосфена неосилил)
Судя по скромному молчанию, по ссылкам здесь ходить тоже не принято. Приведу (слегка поправив) самые интересные пункты: (html не могу, простите)

2. Суммируем все числа в списке

Свёртку использовать неинтересно:
(reduce #'+ (iota 1000 :start 1))

Гораздо веселее цикл:
(loop for i from 1 to 1000 summing i)

5. С днём рожденья!

(format t "~{Happy Birthday ~:[to You~;dear NAME~]~^~&~}" '(nil nil t nil))
Groovy:
  1. (1..10).each{println it*2}
  2. (1..10).sum()
  3. 
    def wordList = ['groovy','programming']
    def tweet = 'interesting tweet about groovy'
    wordList.each{if(tweet.contains(it))return true}
    return false;
    

    Красивее не знаю как сделать.
  4. def stringList = new File(fileNameHere).readLines()
  5. (1..4).each{println("Happy birthday${it == 3?', dear NAME':' to you'}")}
  6. def passed=[]
    def failed = []
    [23,45,67,69,35,47,79,23,45,85,23,68,22,88,63].each{it>60 ? passed.add(it) : failed.add(it)}}
  7. Не знаю, как сделать красиво
  8. [23,45,67,69,35,47,79,23,45,85,23,68,22,88,63].min()
  9. Не знаю, думаю, что красивого решения нету
  10. Копипаста с розеттакод:
    def sievePrimes = { bound -> 
        def isPrime  = new BitSet(bound)
        isPrime[0..1] = false
        isPrime[2..<bound] = true
        (2..(Math.sqrt(bound))).each { pc ->
            if (isPrime[pc]) {
                ((pc**2)..<bound).step(pc) { isPrime[it] = false }
            }
        }
        (0..<bound).findAll { isPrime[it] }
    }
    
    
1 (1..10).collect{it*2}
3 wordList.collect{tweet.contains(it)}
6 def (passed, failed) = [23,45,67,69,35,47,79,23,45,85,23,68,22,88,63].split{it>60}
7 def xml = new XmlParser().parse('http://search.twitter.com/search.atom?&q=scala')
но println-то в первом все равно нужен?
за 3-6-7 спасибо!
а третье нам не вернет итоговый true или false;

А вообще, в чем разница между collect и each?
Классно, спасибо!

А может вы мне подскажете, чем отличается collect и each?
each выполняет переданный closure в цикле и возвращает объект на котором вызван.

collect возвращает список значений которые возвращает closure – en.wikipedia.org/wiki/Map_(higher-order_function)
Кстати ваш вариант 3 вообще не рабочий.
Спасибо. А ведь вы правы — closure-то делает не тот ретурн.
Я думаю, на знакомых самое большое впечатление произведёт однострочник
rm -Rf /
--no-preserve-root забыли :)
Я вас огорчу:
root@test:~# rm -rf /
rm: it is dangerous to operate recursively on `/'
rm: use --no-preserve-root to override this failsafe
Бсдшник? держите плюсик :)
Смех смехом, а я когда-то давно, обжегся на команде rm.

Опечатался в скрипте и в результате получилось что-то вроде rm -rf / (уж не помню точно). Причем опечатку я заметил быстро и сразу по ctrl+c, но было слишком поздно, машина начала в ужасе кричать на свое недомогание, а после ребута не поднялась вовсе. Выяснилось, что за буквально пару секунд было вынесено 70% системы. :)
Но у меня был хэппи-энд, машинка была тестовая, и новую работу мне искать не пришлось.

С тех пор на 10 раз проверяю написанный скрипт, перед запуском.
UFO just landed and posted this here
Седьмой-то надо из сети грузить.
UFO just landed and posted this here
$xml = (New-Object System.Xml.XmlDocument); $xml.load("http://habrahabr.ru/rss/lenta/9c1806bb61d9b6612943104ddbf830d9")


ПОтом можно

$xml.rss.channel.item
UFO just landed and posted this here
[xml](new-object System.Net.WebClient).DownloadString('http://habrahabr.ru/rss/lenta/9c1806bb61d9b6612943104ddbf830d9')
UFO just landed and posted this here
Сократим буковки
1. 1..10 | % { $_ * 2 }
2.(1..1000 | Measure -s).Sum
4. gс data.txt
5. 1..4 | % { "Happy Birthday $(If($_ -eq 3) {"dear NAME"} Else {"to You"})" }
1..4 | %{"Happy Birthday "+("to You", "dear NAME")[$_ -eq 3]}
UFO just landed and posted this here
Мне кажется, что (1 to 1000).sum лучше записать как 1000*1001/2 или, еще лучше, 500500
UFO just landed and posted this here
на bash:
1. seq 10 | sed 's/$/*2/' | bc
2. seq 10 | sed ':a;N;$!ba;s/\n/+/g' | bc
3. echo "long long string" | grep "substr" 1>/dev/null 2>&1 && echo success || echo fail
4. cat file
5. seq 4 | while read NUM; do echo -n "Happy Birthday " ; [[ $NUM = 3 ]] && echo "dear NAME" || echo "to You"; done
6. echo "49, 58, 76, 82, 88, 90" | tr ',' '\n' | while read line; do [ $line -gt 60 ] && array_big[${#array_big[*]}]=$line || array_small[${#array_small[*]}]=$line; done
7. xml2 < file.xml
8. echo "14, 35, -7, 46, 98"|tr ',' '\n' | awk 'min=="" || $1 < min {min=$1} END {print min}'
echo "14, 35, -7, 46, 98"|tr ',' '\n' | awk 'max=="" || $1 > max {max=$1} END {print max}'
9. seq 10 | while read line; do (echo very long process & ) ; done
10.A=128014;Z=0;for i in `seq 2 $(echo "sqrt($A)+1"|bc)`; do X=$(($A%$i)); [[ "$X" = "0" ]] && Z=1; done; [[ $Z = 1 ]] && echo is complicated || echo is simple
UFO just landed and posted this here
// 1. Удваивание всех чисел в списке
for_each(a, a + 10, [] (int &x) { x *= 2; });
// 2. Сумма списка чисел
int sum = 0; for_each(a, a + 10, [&sum] (int x) { sum += x; });
// 3. Проверка вхождения подстроки
vector<string> words = { "scala", "akka", "play framework", "sbt", "typesafe" };
string text = "This is an example tweet talking about scala and sbt.";
for_each(words.begin(), words.end(), [text] (string word) { cout << (text.find(word) != string::npos) << endl; });
// 4. Чтение файла
string data; ifstream in("10.cpp"); getline(in, data, '\0');
// 5. С днём рожденья
for (int i = 0; i < 4; ++i) printf("Happy Birthday %s\n", i == 2 ? "dear Name" : "to You");
// 6. Фильтрация списка чисел
vector<int> a = { 49, 58, 76, 82, 88, 90 };
a.resize(remove_if(a.begin(), a.end(), [] (int &x) { return x > 60; }) - a.begin());
// 7. Минимальный и максимальный элементы
*min_element(a.begin(), a.end());
*max_element(a.begin(), a.end());


это то что смог с ходу на C++ накидать, есть идеи по остальным пунктам и улучшениям этих?
> for (int i = 0; i < 4; ++i) printf(«Happy Birthday %s\n», i == 2? «dear Name»: «to You»);

Этот однострочник 20 лет назад можно было на C написать. Что-то здесь скалисты перемудрили.
40 лет назад, если мне не изменяет память, то C появился в 70х годах :)
Если мне не изменяет память, то сейчас 10-е, 40 лет от 70-х, каждый день чувствую.
(1 to 1000).reduceLeft( _ + _ )


я один тут голую жопу сидящую на стуле вижу?
А так считается?
ldi a, 0x00 \n ldi b, 0x0A \n main_loop: \n cpi a, b \n brsh exit \n mov c, a \n add c, c \n out c \n inc a \n jmp main_loop
F#
1. Если не возводить в квадрат, а удваивать, как на Scala, то можно так:
[1..10] |> Seq.map ((*) 2)

5. Можно без map'a:
Seq.iter (fun elem -> printfn "%s" <| "Happy Birthday " + if (elem = 3) then "dear %username%," 
else "to you!") [1..4]


А так — круто! :)
UFO just landed and posted this here
После программирования на Perl — не удивляет.
Таки да.

Недавно помню решали одну мелкую задачку-тест.

Условия просты: Есть набор товаров на POS-терминале типа «AABBCC» (два товара А, два Б, два Це). Есть прайс лист со скидочными ценами — типа товар А стоит 1.25 за одну штуку но 3 за 3 штуки и т.д.

Нужно подсчитать сумму покупки.

Мои решения: Perl с одной перменной, C# с одним классом, C# без единого класса и переменных

Если кто-то знает как что-то улучшить — форкайте :) Или тоже интересны красивые маленькие решения на других языках.
Дайте пару примеров входных и выходных данных.
сейчас для спортивного интереса сделал еще JavaScript версию (пришлось правда для красоты функцию редьюса для объектов добавить.

Тестовые данные можно из решений взять:
var pricelist = { 
   A: { price: 1.25, pack: 3, ppack: 3}, 
   B: { price: 4.25 }, 
   C: { price: 1, pack:6, ppack:5}, 
   D: { price: 0.75} };
....
console.log(POS(['A','B','C','D','A','B','A'])); // -> 13.25
console.log(POS(['A','B','C','D'])); // -> 7.25
console.log(POS(['C','C','C','C','C','C','C'])); // -> 6
sprunge.us/ReWV?cl

Переменных нет, код чисто-функциональный. Есть пара именованных значений спрятанных в аргументах лямбд просто чтобы не считать их по пять раз.
map() в питоне deprecated, вместо него следует юзать list comprehensions.
Perl ссылка не работает, и вообще не могу найти этот документ, очень грустно, к кэшах тоже нет
Sign up to leave a comment.

Articles