- 1
- 2
- 3
Дана строка. Разрежьте ее на две равные части (если длина строки — четная, а если длина строки нечетная, то длина первой части должна быть на один символ больше). Переставьте эти две части местами, результат запишите в новую строку и выведите на экран.
При решении этой задачи не стоит пользоваться инструкцией if.
guest 19.04.2013 21:26 # +16
anonimb84a2f6fd141 20.04.2013 23:06 # +2
LispGovno 21.04.2013 02:27 # −1
3.14159265 19.04.2013 21:28 # +3
Эххх. Без LINQ это будет трудно.
"не стоит пользоваться инструкцией if" сразу не заметил, потому звучит не так саркастично как хотелось бы
bormand 19.04.2013 21:38 # 0
3.14159265 19.04.2013 21:41 # +1
bormand 19.04.2013 21:49 # +2
Ну оно же совсем не оптимально и вообще говно...
Ок, чтобы загладить свою вину добавлю плюсцов: https://ideone.com/rMmRTo
3.14159265 19.04.2013 21:52 # +1
То понятно:)
Но язык для демонстрации алгоритма выбран был неправильно.
> и вообще говно
В лабах, будь там хоть там O(n³) всем глубоко похер.
bormand 19.04.2013 21:56 # 0
Вину полностью признаю.
bormand 19.04.2013 22:06 # +3
3.14159265 19.04.2013 22:07 # +5
Глядишь, скоро и с младшей школы будут сюда ходить.
bormand 19.04.2013 22:20 # +1
http://cdsmith.wordpress.com/2011/08/16/haskell-for-kids-week-1/
bormand 19.04.2013 22:55 # +1
LispGovno 20.04.2013 21:38 # −4
bormand 19.04.2013 21:29 # +1
3.14159265 19.04.2013 21:38 # +2
LispGovno 20.04.2013 09:32 # −3
antibot-01 20.04.2013 23:26 # +1
Правда нужен instance из Control.Applicative, вместо rotate по вкусу ваш: (uncurry . flip) (++) . splitAt
зы. let вкупе с main немного сбивает)
bormand 21.04.2013 07:30 # 0
Есть такое. Одну строку из терминала скопипастил, вторую так дописал.
Xom94ok 19.04.2013 21:50 # +4
bormand 19.04.2013 21:54 # +2
3.14159265 19.04.2013 21:57 # +4
Только чётные, от кратности 8 не уйдешь.
А так да, на компьютере с 5-тритным чаром не будет работать.
bormand 19.04.2013 22:01 # 0
Разбиваем на половинки вдоль так чтобы первая строка получилась на 1 символ (8 бит) длиннее:
abcd ghij mnop stuv
ef kl qr wx
Склеиваем вдоль: efabcdklghijqrmnopwxstuv
3.14159265 19.04.2013 22:06 # 0
но вообще очень остроумный говноспособ .
bormand 19.04.2013 22:17 # 0
bormand 19.04.2013 22:31 # +1
1) 8+0
3) 5+3, 6+2, 5+3
А для больших чисел подойдет аналог алгоритма Брезенхейма: В результате получаем аккуратный разрез вдоль, причем такой, что первая половина на 1 символ (8 бит) больше второй.
byss 19.04.2013 21:56 # −7
Или это был тест на выпендрёжность решения? Тогда да, сливаюсь.
bormand 19.04.2013 21:57 # +3
LispGovno 20.04.2013 09:35 # −2
bormand 20.04.2013 09:47 # +1
Вот за это и в бан. Дабы не поважать студентов и учеников.
LispGovno 20.04.2013 09:51 # −2
scriptin 20.04.2013 10:28 # +5
LispGovno 20.04.2013 17:00 # −2
govnomonad 21.04.2013 04:47 # +1
LispGovno 21.04.2013 08:42 # −2
anonimb84a2f6fd141 21.04.2013 08:57 # −1
LispGovno 21.04.2013 09:28 # −1
scriptin 21.04.2013 13:16 # +2
http://whathaveyoutried.com/
LispGovno 21.04.2013 13:55 # −1
govnomonad 21.04.2013 09:36 # +1
Не считается плохим делом. Однако, автор даже не пытался что-то сделать ("Вообще не разбираюсь в строках"). Блять, ты манул по питону пытался искать? Благодаря всяким интернетам и гуглам у нас есть возможность найти любую информацию за считанные секунды. Леонадро да Винчи, попади он в наше время, охуел бы от количества информации и зачитывался, забыв про еду.
Дай человеку одну рыбу - накормишт его на день, научи человека ловить рыбу - наромишь его на всю жизнь. Но многие идут по пути наменьшего сопротивления и привыкают, что за них все делают(сначала тупые пользователи просят одмина изменить шрифт в ворде, потом считают, что это его обязанность). И фейл тут не только для одмина, которого заебал тупые юзвери, но и для самого юзверя, так он в профессиональном плане нихуя не растет, а требуют, просит, жалуется и нихуя не пытается ловить рыбу.
LispGovno 21.04.2013 09:48 # −1
LispGovno 21.04.2013 09:50 # 0
eth0 21.04.2013 20:31 # +2
movaxbx 19.04.2013 22:47 # +1
Lure Of Chaos 19.04.2013 22:50 # −2
anonimb84a2f6fd141 21.04.2013 08:58 # +4
Dummy00001 19.04.2013 22:53 # +5
а зачем в решении этой задачи вообще может быть нужен if?
guest 20.04.2013 00:11 # −2
python:
s = "1234567"
s[int( len(s)/2 )+len(s)%2 :] + s[ :int( len(s)/2 )+len(s)%2 ]
haskell:
let a = "1234567"
let b = ys++xs where (xs,ys) = splitAt ((length a `div` 2) + (length a `mod` 2)) a
bormand 20.04.2013 08:59 # 0
int(len(s) / 2 + 0.5) или (len(s)+1) // 2 же
guest 20.02.2016 04:25 # 0
guest 20.02.2016 04:59 # 0
s[len(s)//-2*-1:] + s[:len(s)//-2*-1]
guest 20.04.2013 01:30 # +2
LispGovno 20.04.2013 09:45 # +1
bormand 20.04.2013 09:52 # +2
guest 20.04.2013 18:00 # +2
guest 20.04.2013 18:01 # 0
LispGovno 20.04.2013 20:44 # 0
bormand 20.04.2013 21:05 # +1
Просто перебор вариантов пойдет дальше, пока они все не закончатся. А откат через "!" сразу же заканчивается фейлом.
Но в данном случае, имхо, решение будет единственным, т.к. тут все 3 варианта взаимоисключающие из-за [_,_|Y], [_] и [].
antibot-01 20.04.2013 23:09 # +2
Но в случае списка из одного элемента выведет его же согласно второму предикату split,
но предложит продолжить поиск (по-крайней мере gprolog): ведь заранее интерпретатор не обязан знать, что 3-ий не подойдет.
roman-kashitsyn 20.04.2013 08:56 # +1
LispGovno 20.04.2013 09:47 # 0
roman-kashitsyn 20.04.2013 10:06 # +1
LispGovno 20.04.2013 10:16 # 0
roman-kashitsyn 20.04.2013 10:23 # +1
bormand 20.04.2013 10:39 # +1
P.S. Ну хотя если это кооперативная многозадачность - то придется периодически втыкать в эти вычислительные рутины какой-нибудь yield, чтобы дать другим поработать.
LispGovno 20.04.2013 10:55 # 0
bormand 20.04.2013 11:21 # 0
LispGovno 20.04.2013 21:15 # −2
bormand 20.04.2013 22:56 # 0
Так это же детали реализации.
А с точки зрения программиста там самая настоящая вытесняющая многозадачность.
Кооперативная многозадачность это нода жс, питонский твистед и прочая асинхронщина встающая колом от любого мало-мальского расчета.
LispGovno 20.04.2013 23:22 # 0
> А с точки зрения программиста там самая настоящая вытесняющая многозадачность.
Нет, это влияет на написание кода программистом. Вот представь себе:
И все. Вся программа висит
bormand 21.04.2013 07:28 # +1
Если я это сделаю на ноде жс или твистеде - да, так и будет, потому что там кооперативная многозадачность.
Если же я сделаю это на эрланге: и запущу test:start() десяток раз, то увижу что мой проц загружен на 200% (линух так показывает когда загружены оба ядра) этими вечными циклами, но система остается очень отзывчивой и ничего не висит.
Так какая все-таки многозадачность в эрланге с точки зрения программиста? ;)
bormand 21.04.2013 07:36 # 0
P.P.S. А поскольку такой код написать ты не сможешь, многозадачность с точки зрения программиста там все-таки вытесняющая, и абсолютно неважно что там под капотом.
LispGovno 21.04.2013 17:58 # −2
Если заряженное ружьё висит на стене, то оно переодически стреляет, именно поэтому эрланг переодически будет ставить подножку. От этого не уйти, поэтому нужно это учитывать.
bormand 21.04.2013 18:42 # 0
> От этого не уйти, поэтому нужно это учитывать.
Как? Не юзать эрланг разве что.
P.S. Кстати воркеры переключают процессы каждые 2000 редукций. Не кажется ли тебе, что это все-таки вытесняющая многозадачность с точки зрения программиста на эрланге?
P.P.S. Да, сишный драйвер там вполне может заклинить, но он и написан не на эрланге.
roman-kashitsyn 20.04.2013 11:32 # +2
roman-kashitsyn 20.04.2013 10:10 # +2
wvxvw 20.04.2013 15:23 # +2
Я старался.
roman-kashitsyn 20.04.2013 18:49 # +2
LispGovno 20.04.2013 20:43 # +1
wvxvw 20.04.2013 21:17 # +2
LispGovno 20.04.2013 21:36 # +1
roman-kashitsyn 21.04.2013 00:07 # +2
LispGovno 21.04.2013 02:26 # −1
roman-kashitsyn 21.04.2013 07:15 # +2
Идиоматика раз тут:
LispGovno 21.04.2013 08:39 # 0
wvxvw 21.04.2013 08:24 # +1
LispGovno 21.04.2013 08:38 # 0
roman-kashitsyn 21.04.2013 15:47 # 0
Не нужны исключения там, где работает хвостовая рекурсия и return.
Опять же обсуждали это с коллегой на работе, вывели термин Pessimistic Programming - по умолчанию все функции считаются зафейлившимися, а успешный результат кидается исключением.
an0nym 20.04.2013 15:42 # +2
wvxvw 20.04.2013 21:20 # +2
Vindicar 20.04.2013 22:07 # +2
print s[k:]+s[:k]
anonimb84a2f6fd141 21.04.2013 08:58 # −6
anonimb84a2f6fd141 21.04.2013 08:59 # −6
anonimb84a2f6fd141 21.04.2013 08:59 # −6