LINUX.ORG.RU

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

 , , , ,


9

4

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

Задачка:

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

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

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

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

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

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



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

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

Едва ли бесполезные задачки подобные этой ему помогут.

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

У вас есть код? Есть ведь всякие онлайн редакторы. Дали бы ссылочку - все бы запустили и порадовались.

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

Как показывает практика, даже в очень больших и серьёзных компаниях ТЗ не сильно лучше. Только они гораздо длиннее, а потенциальных косяков гораздо больше.

Вангуем, додумываем, всё по классике.

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

Насколько я читал - Перл это надстройка на Си

Не читайте советских газет.

И все Линуксы написаны именно на Перле.

Хм. Оказывается его там есть маленько.

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

на питонячьем это. войти можешь через x(a,b)

ты вроде такой кулхацкер, а вопросы глупые…

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

Или вы будите специально искать старые кодировки? Старых кодировок - не нужно.

Что такое «старая кодировка»? А «новая кодировка» существует? Если да то что это такое? Существуют ли ещё какие-то кроме «старых» и «новых» ?

anc ★★★★★
()
firstW, secondW = str(input()).split(' ')
t=len(firstW)
for j in range(t):
    if(firstW[j:]==secondW[:t-j]): break
print("%s%s"%(firstW,secondW[t-j:]))
xmikex ★★★★
()
Ответ на: комментарий от kompospec

эм нет, больше баш/питон/с/ и иногда перл, но эт чет из 2000х или 90х если еще

dengolius
()

Rust. Для указанных примеров работает. Для всего остального - условие слишком жидкое.

use std::io::{stdin, BufRead, BufReader};

fn main() {
    'outter: for line in BufReader::new(stdin()).lines() {
        let line = line.expect("Error while reading a line").replace('+', " ");
        let (first, second) = line
            .split_once(char::is_whitespace)
            .map(|(s1, s2)| (s1, s2.trim_start()))
            .expect("Error while extracting strings");

        for i in 0..first.len() {
            if second.as_bytes().starts_with(&first.as_bytes()[i..]) {
                println!("{}{}", &first[..i], second);
                continue 'outter;
            }
        }

        println!("{}{}", first, second);
    }
}
anonymous-angler ★☆
()
Последнее исправление: anonymous-angler (всего исправлений: 1)

А если длина совпадающей подстроки равна нулю?

Вы свои примеры проверяете для частных случаев?

А условие задачи сформулировано как говно. Впрочем, как всегда в таких дебильных задачах.

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

Так по условию второе слово прибавляется к первому. Ты используешь внешний (по отношении к скрипту, я знаю что это из коробки) модуль, это не честно - так то можно все решение уместить в

import my_module_for_talks_16616396; my_module_for_talks_16616396.do_magic()

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

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

Ты реюзаешь имена переменных трижды. Это из job security-ориентированных практик и гарантированное «втф, можешь писать понятнее» на любом код-ревью независимо от знания регулярок.

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

Это Перл. Там даже есть переменная «по умолчанию» - она вообще не пишется.

kompospec
() автор топика
vadim@aquila:/tmp/111$ cat 1.txt 
шлакоблок + окунь
папа + папаха
карусель + сельдь
спорткар + карась
форель + рельса
хрен + нога
бугага + несовпало
ааа + бб
vadim@aquila:/tmp/111$ cat 1.rb 
STDIN.read.lines do |line|
    a, b = line.strip.split(/[ +]+/)
    i = [a.size, b.size].min
    while i > 0 do
        break if b.start_with? a[a.size - i .. -1]
        i -= 1
    end
    puts "#{a} + #{b} = #{a}#{b[i..-1]}"
end
vadim@aquila:/tmp/111$ ruby 1.rb < 1.txt 
шлакоблок + окунь = шлакоблокунь
папа + папаха = папаха
карусель + сельдь = карусельдь
спорткар + карась = спорткарась
форель + рельса = форельса
хрен + нога = хренога
бугага + несовпало = бугаганесовпало
ааа + бб = ааабб
vadim@aquila:/tmp/111$ 
wandrien ★★
()
Ответ на: комментарий от kompospec

Это задание настоящее. Вы вообще ничего не прочитали?

Настоящее что? Настоящее задание для студентов на олимпиаде? Так я не сомневаюсь.

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

Эх, сто лет не писал на ruby. Хороший ЯП.

Но нет, завтра у меня опять питон. При чем аж в двух версиях. На проприетарном софте второй, а в опенсорсе третий.

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

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

Боже, что мы вообще на ЛОРе обсуждаем с вашей подачи =)

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

Вот именно. Три строчки кода. То:

  • Задание кривое То:

  • Кодировка какая?

То в течении часа никто код выдать не мог.

kompospec
() автор топика
Последнее исправление: kompospec (всего исправлений: 2)
 quicksort =:  (( $: @ ( <# [ ) ,  ( = # [ ) ,  $: @ ( > # [ ))  ( {~  ? @ # )]  ^:  ( 1 <# )

Как будет на Перле? Если не страшнее, то он не нужен.

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

А что выдать-то? Ну вон я выше оторвался от телефона, сел за комп и написал за 2 минуты.

Или это проверка, сколько на ЛОРе человек способны решить задачу первого курса? Результаты неутешительные, в общем.

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

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

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

К слову, запринть sys.modules в своём скрипте, удивись (или нет), а потом расскажи, где ты видишь границу между «внешним» и нет.

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

Отписываюсь в новом легендарном треде. Надеюсь будет на уровне треда про Vue.

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

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

Лол. Можно хоть в одну строку всё записать.

Вот тебе на php вместо портянки fernandos-а:

<?php
while($line = fgets(STDIN)){
    [$a, $b] = preg_split('/[ +]+/', trim($line));
    $i = min(mb_strlen($a), mb_strlen($b));
    while ($i > 0) if (str_starts_with($b, mb_substr($a, -$i))) break; else $i--;
    $c = mb_substr($b, $i); echo "$a + $b = $a$c\n";
}
wandrien ★★
()
Ответ на: комментарий от kompospec

php … круче Перла

Щас хохотом соседей перебужу.

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

Допустим что никто не уложился. Знаешь о чём это говорит? О том что перл пригоден для компактного написания кода для двух частных случаев одной плохо сформулированой задачи.

Окей, перл на что-то способен. Но едва ли это станет для кого-то причиной начать/продолжить его использовать.

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

Тема огонь. У меня 5 утра, и я не сплю, всё жду, что еще автор придумает. Теперь табуляции в ход пошли.

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

Это о многом говорит. Когда вы не обращаете на это внимание - значит мало опыта обработки входных строк.

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