LINUX.ORG.RU

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

 , , , ,


8

3

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

Задачка:

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

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

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

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

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

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

В перл-гольфе вообще по количеству символов в программе соревнуются

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

А я не про браузер. Я про конкретное задание.

Которое я выложу. Пока есть только на Перл. Но у меня есть специальная, созданная мной программа по переделке на разные языки программирования.

kompospec ()

тут выяснилось, что перл один из самых энергонеэффективных языков, согласно исследованиям

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

ну тогда тебе еще следует ограничить количество символов в строке. потому что в «скобкодрочерских языках» можно все в одну строку делать.

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

Зачем вы утрируете? Вполне себе нормальная, понятная программа получилась.

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

в толксах тред по глобальное потепление, если перейти по ссылке и прочитать пдф

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

Насколько я читал - Перл это надстройка на Си И все Линуксы написаны именно на Перле.

Ты явно что-то не то читаешь.

leave ★★★★★ ()

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

<?php
for ($i = 1; $i <= mb_strlen($argv[1]) && $i <= mb_strlen($argv[2]); $i++)
    if (mb_substr($argv[1], mb_strlen($argv[1]) - $i) === mb_substr($argv[2], 0, $i)) 
        $j = $i;
echo (isset($j)) ? $argv[1] . mb_substr($argv[2], $j) : 'error';

//а что, речь про перл, а не читабельность.

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

Не удивлюсь, что юникод. Perl 5 должен очень хорошо поддерживать юникод.

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

Это разве будет работать, если поменять параметры местами?

Ну, и раз уж начали раковать, то вот в 4 строки:

import difflib, sys
s = difflib.SequenceMatcher(None, sys.argv[-2], sys.argv[-1])
m = s.find_longest_match()
print(s.a[:m.a]+s.b if m.a > m.b or m.a == m.b and len(s.a) < len(s.b) else s.b[:m.b]+s.a)


Думать уже лень, но на примерах из топика работает.

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

Вообщет я ждал С++ Джаву или Го

То что PHP хороший язык - я знаю и так.

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

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

Кстати в Перл это всё решается добавлением одной строки, там где нужно. Но, в основном, и не нужно

kompospec ()
#!/usr/bin/env python3

data = (
    ("шлакоблок", "окунь"),
    ("папа", "папаха"),
    ("карусель", "сельдь"),
    ("спорткар", "карась"),
    ("форель", "рельса"),
)

for incoming_pair in data:

    first_word, second_word = incoming_pair[0], incoming_pair[1]

    results = []

    for index in range(len(second_word)):

        if first_word[-index:] == second_word[:index]:
            results = first_word[:-index] + second_word

    print(
        '{input}: "{output}"'.format(
            input=" + ".join(['"{}"'.format(i) for i in incoming_pair]),
            output="".join(results),
        )
    )
"шлакоблок" + "окунь": "шлакоблокунь"
"папа" + "папаха": "папаха"
"карусель" + "сельдь": "карусельдь"
"спорткар" + "карась": "спорткарась"
"форель" + "рельса": "форельса"

Ужать до 7 строк не проблема если плюнуть на читаемость и pep8.

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

data - это вход?

Тогда не сообветствие заданию.

Вот как должно быть:

#!/usr/bin/perl

$= «шлакоблок + окунь»; #$= «папа + папаха»;

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

какой-то странный код - там же лишние присваивания в цикле будут происходить

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

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

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

Так: $ скрипт шлакоблок окунь

Плюсик тут лишний откровенно, мусорный. Если важно с ним, то у Фернандоса, по-хорошему, добавится строка, а у меня нет.

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

data - это вход?

Критично именно читать stdin?

#!/usr/bin/env python3

import sys

first_word, second_word = sys.argv[1], sys.argv[2]

results = []

for index in range(len(second_word)):

    if first_word[-index:] == second_word[:index]:
        results = first_word[:-index] + second_word

print(
    '{input}: "{output}"'.format(
        input=" + ".join(
            ['"{}"'.format(i) for i in [first_word, second_word]]
        ),
        output="".join(results),
    )
)

Вот как должно быть:

И что это значит?

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

Плюсик есть в задании. В примере. Значит заказчик хочет и так, и так.

kompospec ()

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

Алсо, проводить сравнение на оторванных от реальности дибильных олимпиадных задачках это такое себе, может ради интереса сравним на чем-то реальном?

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

Это разве будет работать, если поменять параметры местами?

Конечно нет.

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

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

Так я написал уже. Или вам пример как в терминале запускать?

$ ./script.py шлакоблок окунь
"шлакоблок" + "окунь": "шлакоблокунь"

$ ./script.py папа папаха
"папа" + "папаха": "папаха"

а не в виде ввода с клавиатуры

Хотя стоп. Вариант с данными в срипте вам не нравится, вариант с чтением ввода вам не нравится, что для перловиков тогда "ввод с клавиатуры"?

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

Если даже в задании + - неявно. То моя программа с +

А ведь ваш язык лучше гораздо.

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

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

Где тут описано как именно входящие данные должны выглядеть? Что за придирки к орфографии? Преподом не работаете случайно?

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

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

Это не претензия к перлу, это претензия к постановке задачи.

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

А вы напишите в виде строки,

— вход в виде строки в программе.

Вы правда не понимаете?

Или в виде ОДНОЙ переменной на вход программы

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

Вы серьезно считаете что если я сделаю разделение строки по "+" чтоб из этого получить два слова это сильно что-то поменяет? Или это в перле так?

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

Еще раз - вашей программы мы не видели. Пока вы только на словах Лев Толстой. Я написал уже работающий алгоритм, вы придираетесь к оформлению.

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

А мне кажется

Я даю задание. Я.

Понятно, вы не то что написать программу не можете, вы даже не можете сформулировать условие. Был не прав, вы не Лев Толстой даже на словах.

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

Да дерьмо твоё задание. Мусорные какие-то условия, которые ничего не привносят. К моему коду это всё равно не добавит ни строки. Проиграл ты со своим перлом.

WitcherGeralt ★★ ()
Ограничение на отправку комментариев: только для модераторов и автора