2014-11-02 3 views

ответ

5

сопряжении их с 2 v\, проверьте, если они отличаются ~:/ и просуммировать +/:

+/ 2 ~:/\ a 
3 

2 ~:/\ 1 1 1 _1 _1 _1 1 _1 1 
0 0 1 0 0 1 1 1 

+/2 ~:/\ 1 1 1 _1 _1 _1 1 _1 1 
4 

редактировать

Или вы могли бы выстраиваться Лишать }: и обезглавить }. из a и сравнить их, но что заметно менее эффективно.

+/(}: ~: }.) a 
+0

спасибо. Очень хорошая программа. –

+0

Не могли бы вы объяснить, почему '+/@ (}: ~:}.)' Менее эффективен, чем '+/@ (2 & (~:/\))', пожалуйста? –

+1

В основном потому, что '2 f/\ y' поддерживается [специальным кодом] (http://www.jsoftware.com/help/release/infix2a.htm). Другое дело, что обезглавливание дорого (как во времени, так и в пространстве). Требуется больше, чтобы просто обезглавить большой 'a', чем считать количество изменений знака первым. Вы можете сделать большой случайный 'a' (' a =: 1 _1 {~? 1e6 $ 2') и проверить его с помощью 'timespacex'. – Eelvex

1

если число может быть иным, чем 1 и _1,

2 ~:&*/\ _2 4 3 _1 _3 1 
1 0 1 0 1