LINUX.ORG.RU

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

 , , , ,


9

4

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

Задачка:

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

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

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

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

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

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



Последнее исправление: Pinkbyte (всего исправлений: 1)

Ответ на: комментарий от fernandos

Отлично! Похоже все поверили на слово, я в том числе и не стали смотреть на код по ссылке.

anc ★★★★★
()
<?php
for ($i = 0; $i <= mb_strlen(trim(explode('+', $argv[1])[0])); $i++)
    echo (str_starts_with(trim(explode('+', $argv[1])[1]), mb_substr(trim(explode('+', $argv[1])[0]), $i))) ? exit(trim(explode('+',$argv[1])[1])) : mb_substr(trim(explode('+', $argv[1])[0]), $i , 1);

Это две.

fernandos ★★★
()

А если, в теории, был бы язык, у которого в стандартной библиотеке была функция соединения строк по заданному в задаче алгоритму, то тот язык был бы лучше всех остальных только из-за наличия такой функции?

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

Сори только проснулся. Готово на github pages. За 0 рублей навсегда(куда уж доступнее)

https://js-the-best.github.io/js-the-best/

в одну строку длиной 148 символов

Теперь у меня условие. Нужно что был ввод и вывод данных был из GUI в GUI. У меня все готово

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

В том-то и дело. Раз нет общего конца, должно получиться «бабочкапалочка», а у тебя получается говно «бабпалочка», а не просто склеивает.

У тебя ошибка в алгоритме изначально. Ты вообще не решил задачу.

javascript
()
Последнее исправление: javascript (всего исправлений: 2)
Ответ на: комментарий от fernandos

7.4 где-то ещё полгода будет мейнстримом.

У меня тут вообще

# grep PRETTY /etc/os-release 
PRETTY_NAME="CentOS Linux 7 (Core)"

но не будем о грустном.

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

Специальная олимпиада продолжается?

Немножко подсократил свой вариант:

STDIN.read.lines do |line|
    a, b = line.strip.split(/[ +]+/)
    puts "#{a} + #{b} = #{a}#{b[(a.size.step(0, -1).find{|i| b[0,i] == a[-i,i]})..-1]}"
end
wandrien ★★
()
Ответ на: комментарий от xmikex

Конечно. В этом вся болезная логика автора. А ведь с его постановкой задачи, ничто не мешает написать эзотерический язык с парой операторов, который будет пригоден для реализации одной единственной задачи - этой :D

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

Еще минус 2 символа. step() тут не нужен.

STDIN.read.lines do |line|
    a, b = line.strip.split(/[ +]+/)
    puts "#{a} + #{b} = #{a}#{b[(a.size.downto(0).find{|i| b[0,i] == a[-i,i]})..-1]}"
end

Теперь это еще и читабельно. o_O

Короче ruby победил. Где мои 20 рублей?

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

А ведь с его постановкой задачи, ничто не мешает написать эзотерический язык с парой операторов, который будет пригоден для реализации одной единственной задачи - этой :D

Если одним из этих операторов будет сабж, а язык при этом будет тьюринг-полным, то автор хорош!

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

Автор лох.

Вот что получается с его прекрасным кодом:

$_= $ARGV[0];

($u1,$u2) = split/[+\s]+/;

for(split(//,$u2)){
  $v .= $_;
  if ($u1 =~ /$v$/) {$v1=$v}  
  }

$u2 =~ s/$v1//;

print "$ARGV[0] = $u1$u2\n";
vadim@aquila:/tmp/111$ perl 111.pl "шлакобл^ок + ^окунь"
шлакобл^ок + ^окунь = шлакобл^ок^окунь
vadim@aquila:/tmp/111$ perl 111.pl "шлакобл$ок + $окунь"
шлакобл$ок + $окунь = шлакобл$ок$окунь
vadim@aquila:/tmp/111$ perl 111.pl "шлакобл*ок + *окунь"
Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE $/ at 111.pl line 8.
Status: 255
vadim@aquila:/tmp/111$ perl 111.pl "шлакобл?ок + ?окунь"
Quantifier follows nothing in regex; marked by <-- HERE in m/? <-- HERE $/ at 111.pl line 8.
Status: 255

То есть задачу он не решил, а понтов-то было.

Можно представить, сколько в его сайтах дыр с удалённым исполнением кода и чтением данных в обход логики приложения, если он неэкранированные данные суёт в регулярки даже в таком учебном примере.

За такую работу и 20 рублей в час платить не стоит, потом в какую сумму еще последствия исправлять обойдётся.

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

Ну и компоновать регулярку на итерации каждого символа это пять. Рублей в час. =)

wandrien ★★
()

Перенёс в Development.

Только ссылку на исходник, по-хорошему, надо было в ОП привести. Я его даже поиском по теме не сразу нашёл, пришлось историю твоих комментариев смотреть. 7 страниц листать в поисках обещанного исходника — это такое себе.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

На джаве я такое напишу строчек в сто максимум. И это хорошо. Мелкие программулинки не нужны. Не вызывают уважения.

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

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

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

Сложная судьба топика =)

Ты решил подключить к теме анонимусов? Хороший, годный модератор.

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

Что там на сто строк размазывать?

function join(a = '', b = '') {
    if (a.endsWith(b)) return a

    let w = b

    while (w = w.slice(0, -1)) 
        if (a.endsWith(w)) return a + b.slice(w.length)
    
    return a + b
}
javascript
()
Ответ на: комментарий от wandrien

А зп за уважение не выдают.

Вы сарказм не распарсили?

fernandos ★★★
()

О, как! Уже Development.

@Владимир @Царь @ЗабаньсяДебил

ashot ★★★★
()

Ждём, когда топикстартер исправит баг в своём решении, а потом мы перейдём к вопросам проверки производительности!

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

Я думаю, уж шарящие в перле среди анонимусов точно есть. :) Да и под «нетехническую» тема не подходит, вполне себе техническая.

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

Не могу, к сожалению.
Только что проверил — доступное для модератора редактирование прав доступа пишет «без ограничений». Там как-то ограничения складываются, Макском говорил, но я сам не понял, по какой логике.
Будет возможность — поспрашиваю ещё.

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

У тебя кавычки не так стоят. Исправил. =)

Да и под нетехническую тема не подходит, вполне себе «техническая».

wandrien ★★
()

Щас придёт Zhbert и отправит тему в Web-development, чтобы в Development такого нубства не водилось.

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

Можно создать новую в девелопмент, указав чёткое условие и тесты. Плюс разместить код тех, кто уже присылал.

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

Будет возможность — поспрашиваю ещё.

Опенсорс же

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

А я вот читаю условия и не въезжаю, как же так: «Необходимо для каждой пары слов получить новое слово, так, чтобы окончание первого совпадало с началом второго». При этом «папа + папаха = папаха». Окончание слова «папа» - это «а» - следовательно должно быть - папапапаха, с шлакоблокунем та же херня.

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

В переводе на русский, нужно найти максимальную совпадающую подсроку такую, что в строке 1 она бы была прижата к концу строки, а в строке 2 к началу. И удалить её в одной из строк, сконкатенировав их после этого.

По крайней мере, сам ТС так понял задачу.

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

Не понятно. Вы натыкали в исходные слова непечатные символы? Зачем? Это ежу ясно что что на входе 2 русских слова. Без всяких дополнительных символов.

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

Понятно, что вы не умеете программировать. Вообще.

Это как раз понятно.

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

непечатные символы

Цуко, я ору.

Непечатные символы!

А как же я их на экран-то вывел, если они непечатные?!

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

В каком месте это непечатные символы? Вы вообще смысл слова «непечатный» не понимаете?

Это ежу ясно что что на входе 2 русских слова

Это вы условие по ходу додумываете.

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

Если бы просто нечёткое, оно ещё и динамическое.

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

Автор ваще нечёткий =)

Вон у него двумя комментами выше внезапно появилось условие, что слова должны быть РУССКИМИ.

Схерали загуляли?

@kompospec, слова на русскость по словарю проверять? Исэнмесез — русское слово или нет? А рэхмэт?

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

Я исхожу из логики

Из своей собственной.

Где в условии про то, какие слова должны быть? Где хоть слово про то, что слово должно быть «русским» или в кириллице.

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