LINUX.ORG.RU

Говорили что Перл старый, ни на что не способный язык. Проверим?

 , , , ,


9

4

Говорили что Перл старый, ни на что не способный язык. Проверим?

Задачка:

Необходимо для каждой пары слов получить новое слово, так, чтобы окончание первого совпадало с началом второго, например, шлакоблок + окунь = шлакоблокунь. Это слово надо вывести в стандартный поток вывода.Если слова возможно соединить несколькими способами, надо выбрать тот, что обеспечивает максимальную общую часть, например папа + папаха = папаха (а не папапаха). Необходимо написать последнее условие.

Я просто взял практически первое попавшаяся задание.

На Перле программа заняла 5 строк не считая ввода-вывода. С вводом-выводом - 7 строк.

А как у вас? На ваших Супер-пупер языках?

Перемещено xaizek из general

Перемещено hobbit из talks



Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

Не, этому клоуну даже в спецолимпиаде позволять победить нельзя.

Победитель идёт работать за 20 р./ч. вместо ТСа ((

wandrien ★★
()
Ответ на: комментарий от wandrien

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

WitcherGeralt ★★
()
Ответ на: комментарий от wandrien

Ок. Хотите всё в одну строку? Пожалуйста:

#!/usr/bin/perl
 
$_= "шлакоблок + окунь";
#$_= "папа + папаха";

($u1,$u2)=split/[+\s]+/;for(split(//,$u2)){$v .= $_;if($u1 =~ /$v$/){$v1=$v}}$u2 =~ s/$v1//;

print "$u1$u2";

kompospec
() автор топика
Ответ на: комментарий от wandrien

Посмотри на его сайте видео. Полнейший сюр. Я бы даже стал платить 20р в час, лишь бы подобным не заниматься :D

anonymous-angler ★☆
()
Ответ на: комментарий от kompospec

Мой код читает все строки и для каждой вычисляет. А твой что делает? Где ввод? Переделывай.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Да тут наверно никто не сомневался, он же из жёлтого дома вещает :D

anonymous-angler ★☆
()
Ответ на: комментарий от kompospec

Короче слился по полной. Тебе самому не зашкварно? Ты пацан или нет? С какова раёна будешь?

wandrien ★★
()
Ответ на: комментарий от WitcherGeralt

от перевода строки сильно изменится количество символов??? Тем более что я переводы строк не считал вообще

kompospec
() автор топика
Ответ на: комментарий от kompospec

от перевода строки сильно изменится количество символов???

У меня результирующая строка честно вычисляется в одно выражение. А ты просто тухло стёр переводы строк между разными операторами. Крокодилий поступок.

wandrien ★★
()
Ответ на: комментарий от kompospec

В топике у тебя сказано про строки, а не про символы.

У меня в 4 строках обрабатывается любой порядок, у него в 4 строках обрабатывается любое количество входных строк.

А у тебя в 5 строках нет даже обработки ввода. ПОЗОР.

WitcherGeralt ★★
()
Ответ на: комментарий от kompospec

Вообще, если честно. Я рассчитывал на java или С++. Я знал что это древнегреческий язык. Но думал - может мне сейчас подкинут стройное решение.

Но нет. Чуда не случилось.

kompospec
() автор топика
Ответ на: комментарий от kompospec

Я не считал строки.

Это с доработками можно принять как 6 строк. У меня 5 строк.

Продолжай позориться

wandrien ★★
()
Ответ на: комментарий от kompospec

Ты сделал мне день. Ночью будет сниться цирк и клоуны, пишущие на перле.

WitcherGeralt ★★
()
Ответ на: комментарий от kompospec

Так вам легче?

#!/usr/bin/perl
 
$_= "шлакоблок + окунь";
#$_= "папа + папаха";

($u1,$u2)=split/[+\s]+/;
for(split(//,$u2)){$v .= $_;
if($u1 =~ /$v$/){$v1=$v}}$u2 =~ s/$v1//;

print "$u1$u2";

kompospec
() автор топика
Ответ на: комментарий от kompospec

Здесь в строку по несколько выражений упихано. Это как минимум 7 строк, а если корректно фигурные скобочки расставить, то все 9.

WitcherGeralt ★★
()

Тему в избранное. Теперь шлакоблокунь и спорткарась на карусельди мой новый локальный мем.

Как перестать ржать?!

wandrien ★★
()
Ответ на: комментарий от kompospec

Да после тебя и средняя школа кажется достойным образованием xD

anonymous-angler ★☆
()
Ответ на: комментарий от wandrien

шлакоблокунь и спорткарась на карусельди

Сделал мой день.

Miguel ★★★★★
()
Ответ на: комментарий от wandrien

Шлакоблокунь

Существительное, неодушевлённое, мужской род, 2-е склонение.

Корень: -шлак-; интерфикс: -о-; корень: -блокунь-.

Произношение

  • МФА: [ʂɫəkɐˈbɫokˈokʊnʲ]

Семантические свойства

Значение

Говнокод на перле, обычно нечитаем, полученный методом печатанья на клавиатуре индусом.

WitcherGeralt ★★
()

И хотя специальная олимпиада закончилась, всё же код на пайтоне удалось ещё немного укоротить:

import sys
for l in sys.stdin:
    f, s = l.replace('+',' ').split()
    print(f[:next(i for i in range(0, len(f)) if s.startswith(f[i:]))] + s)
anonymous-angler ★☆
()

Ух. Прямо молодость вспомнил. Я с этого персонажа примерно ~12-15 лет назад лулзы ловил в одной региональной nntp конфе.

pi11 ★★★★★
()
Ответ на: комментарий от anonymous-angler

Ну ТСу то точно неоткуда с его блестящим образованием)

Никто в этой теме не знает перл =)

wandrien ★★
()

Короч народ. Вот вам язык богов! делает это в 2 строки

// let str = 'шлакоблок + окунь';
// let str = 'спорткар + карась';
// let str = ' папа  +  папаха ';
let str = 'карусель + сельдь';

let [str1, str2] = str.split('+').map(el => el.replace(/\s/g, ''));

let res = str1.replace(str1.split('').filter((el, i) => str2.includes(str1.slice(i))).join(''), '').concat(str2)

console.log(res);
romanlinux ★★★
()
Последнее исправление: romanlinux (всего исправлений: 1)
Ответ на: комментарий от anonymous-angler

Ладно, просили цельную программу — держите:

module Main where
import Data.List
test xs ys = xs ++ drop (last $ findIndices (`isSuffixOf` xs) $ inits ys) ys
main = getLine >>= \xs -> getLine >>= \ys -> putStrLn (test xs ys)
Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Говорили что Перл старый, ни на что не способный язык. Проверим? (комментарий)

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

Какой ты нехороший бракодел, у тебя же функциональный язык и функций слишком много! (Нет)

anonymous-angler ★☆
()
Ответ на: комментарий от kompospec
#!/usr/bin/perl
 
$_= "шлакоблок + окунь";
#$_= "папа + папаха";

($_,$r)=split/[+\s]+/;
for $u3(split(//,$r)){
$v.=$u3;
$v1=$v if /$v$/}
$r =~ s/$v1//;

print $_.$r;

81 символ

kompospec
() автор топика

Ладно вот последний вариант. Я спать пошел.

2 строки, 171 символ:

[a, b] = 'карусель + сельдь'.split('+').map(e => e.replace(/\s/g, ''));
console.log(a.replace(a.split('').filter((e, i) => b.includes(a.slice(i))).join(''), '').concat(b))

Это при условии, что карусель + сельдь занимаем длину в этом коде в 17 символов и перенос строки 1 символ :)

И мое решение может работать в браузере и на сервере и на смартфоне и на ПК! А Ваше?

romanlinux ★★★
()
Последнее исправление: romanlinux (всего исправлений: 4)
Ответ на: комментарий от romanlinux

Вот. Это достойное заявление. И интересное решение. Если рабочее

Ввод-вывод конечно же считать не надо.

kompospec
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.