Имя: Пароль:
1C
 
Шуточный тест: самый лаконичный код в 1С для реверса строки
0 Tateossian
 
12.11.18
17:30
Всем привет!
Напишите самый короткий и оптимальный способ инвертировать строку в 1С.

=> .С1 в укортс ьтаворитревни босопс йыньламитпо и йикторок йымас етишипаН
1 lubitelxml
 
12.11.18
17:31
вроде только понедельник
2 Tateossian
 
12.11.18
17:31
(1) Люблю понедельники!
3 formista2000
 
12.11.18
17:32
Для Й = 1 По СтрДлина(Стр) Цикл
    Результат = Результат + Сред(Стр, СтрДлина(Стр) - Й, 1);
КонецЦикла;

Короче у меня вроде не получается
4 РусКомп
 
12.11.18
17:35
(3)
Для Й = 1 По СтрДлина(Стр) Цикл
    Рез = Рез + Сред(Стр, СтрДлина(Стр) - Й, 1);
КонецЦикла;
5 Tateossian
 
12.11.18
17:35
(3)
6 Tateossian
 
12.11.18
17:35
Результат= "";
Для Й = 0 По СтрДлина(Пут)-1 Цикл
    Результат = Результат + Сред(Пут, СтрДлина(Пут) - Й, 1);
КонецЦикла;
7 elCust
 
12.11.18
17:35
8 Tateossian
 
12.11.18
17:36
(7) Есть способ лучше и быстрее)
9 Tateossian
 
12.11.18
17:36
(7) Его нет в баяне:)
10 Tateossian
 
12.11.18
17:36
(4) Есть способ в 3 раза быстрее работающий. И короче:)
11 Вафель
 
12.11.18
17:37
Вот так нужно?
ɔ1 ʚ ʎʞоdɯɔ qɯɐʚоdиɯdǝʚни ƍоɔоuɔ n̯ıqнqvɐwиɯuо и n̯иʞɯоdоʞ n̯ıqwɐɔ ǝɯиmиuɐн
12 Симпатяга
 
12.11.18
17:40
(10) взять зеркало?)
13 H A D G E H O G s
 
12.11.18
17:40
Буфер=ПолучитьБуферДвоичныхДанныхИзСтроки(Данные);
Буфер.Перевернуть();
ДанныеНовые=ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер);
14 РусКомп
 
12.11.18
17:40
ХХ:
Результат = Результат + Прав(Стр, 1);
Если СтрДлина(Стр)>1 Тогда
Стр =Лев(Стр,СтрДлина(Стр)-1)
Перейти ХХ;
КонецЕСли;
15 ejikbeznojek
 
12.11.18
17:40
(10) Цикл из  (3)  одной строкой?)
16 Волшебник
 
12.11.18
17:42
(13) Это заявка на победу. Оформи в одну строку
17 Tateossian
 
12.11.18
17:42
(10) Поправка - в 900 раз быстрее. Мой способ инве6ртировал модуль общего назначения за 10 наносек, способ из "баяна" - за 9103
18 Tateossian
 
12.11.18
17:43
Без цикла:)
19 Kigo_Kigo
 
12.11.18
17:45
Таки мы в клюшках или в снеговике соревнуемся?
20 Tateossian
 
12.11.18
17:45
(13) ДА! Вот победитель. Только нужно вот так доделать:

    Буф = ПолучитьБуферДвоичныхДанныхИзСтроки(Пут, КодировкаТекста.ANSI).Перевернуть();
    
    
    ИмяДляХешированияИнвертированное = ПолучитьСтрокуИзБуфераДвоичныхДанных(Буф, КодировкаТекста.ANSI);

Кодировку в АНСИ, так как она 1-байтовая.
21 IvanGorbunov
 
12.11.18
17:46
ДанныеНовые=ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(Данные).Перевернуть());
22 formista2000
 
12.11.18
17:46
(16) Результат = ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(Данные).Перевернуть());

так что ли?
23 H A D G E H O G s
 
12.11.18
17:48
(20) А вы забавный.
Все это давно использовалось в моих внешках, пока, хвала 1С-у, она не реализовала это нативно.
24 azernot
 
12.11.18
17:48
Хороший способ делать демо-версии всяких отчётов.
С одной стороны, вроде бы текст есть и соответствует ожиданию, с другой стороны реально использовать невозможно.
25 Tateossian
 
12.11.18
17:49
(22) Написал выше (нужно в однобатовой кодировке). Все молодцы:) Спасибо за участие:)
26 Tateossian
 
12.11.18
17:49
(24) Почему нельзя?
27 azernot
 
12.11.18
17:50
(26) Эээ.. использовать отчёт, в котором текст написан задом-наперёд?
28 Tateossian
 
12.11.18
17:50
(27) Мне для обфускации нужно:)
29 РусКомп
 
12.11.18
17:52
Не, мой вариант короче

Х:Р=Р+Прав(С,1);Если СтрДлина(С)>1 Тогда С=Лев(С,СтрДлина(Стр)-1);Перейти Х;КонецЕсли;              
Р=ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(С).Перевернуть());
30 РусКомп
 
12.11.18
17:53
Х:Р=Р+Прав(С,1);Д=СтрДлина(С);Если Д>1 Тогда С=Лев(С,Д-1);Перейти Х;КонецЕсли;              
Р=ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(С).Перевернуть());
31 Garykom
 
гуру
12.11.18
17:54
Слабо написать рекурсией без явного цикла?
32 Garykom
 
гуру
12.11.18
17:55
(31)+ Чтоб даже в 1С77 работало
33 IvanGorbunov
 
12.11.18
17:56
(29) для обфускации самое то
34 РусКомп
 
12.11.18
18:01
(31) Вроде длинне получается
Х:Р=Р+Прав(С,1);Д=СтрДлина(С);Если Д>1 Тогда С=Лев(С,Д-1);Перейти Х;КонецЕсли;              
Р=ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(С).Перевернуть());
Функция Ф(с) Если СтрДлина(С)>0 Тогда возврат прав(с,1)+Ф(с) иначе Возврат "" КонецЕсли; КонецФункции
35 Tateossian
 
12.11.18
18:06
(34) За сколько ОбщийМодуль.ОбщегоНазначения обработает?
36 РусКомп
 
12.11.18
18:33
(35) За 23 доллора СШа - легко.
37 РусКомп
 
12.11.18
18:42
(31) Прошу пардон. Через рекурсию короче

Функция Ф(с)Д=СтрДлина(С);возврат?(Д>0,прав(с,1)+Ф(Лев(с,Д-1)),"");КонецФункции
~Х:Р=Р+Прав(С,1);Если СтрДлина(С)>1 Тогда С=Лев(С,СтрДлина(С)-1);Перейти ~Х;КонецЕсли;
38 РусКомп
 
12.11.18
18:45
Функция Ф(с)Д=СтрДлина(С);возврат?(Д>0,прав(с,1)+Ф(Лев(с,Д-1)),"");КонецФункции
~Х:Р=Р+Прав(С,1);Д=СтрДлина(С);Если Д>1 Тогда С=Лев(С,Д-1);Перейти ~Х;КонецЕсли;

На 1 Символ.
Если добавить Р=Ф(С), тогда длиннее получается.
39 IvanGorbunov
 
13.11.18
09:16
(38)
Функция Ф(с)Д=СтрДлина(С);возврат?(Д>0,прав(с,1)+Ф(Лев(с,Д-1)),"");КонецФункции
~Х:Р=Р+Прав(С,1);Д=StrLen(С);if Д>1 then С=Лев(С,Д-1);goto ~Х;endif;
40 Serg_1960
 
13.11.18
10:13
Ещё короче :)
Функция Ф(С,х);Возврат Сред(С,х,1)+?(х=1,"",ф(С,х-1));КонецФункции
41 ДенисЧ
 
13.11.18
10:15
(40) Not hired.Next please
42 Serg_1960
 
13.11.18
10:20
tnemmoc oN
43 IvanGorbunov
 
13.11.18
11:08
(40)
Функция Ф(С,х);Возврат Сред(С,х,1)+?(х=1,"",ф(С,х-1));КонецФункции
Функция Ф(С,х);return mid(С,х,1)+?(х=1,"",ф(С,х-1));endfunction

//конкуренция хорошая штука
44 1Сергей
 
13.11.18
11:11
за "Перейти"  бить линейкой по всем торчалкам
45 Вафель
 
13.11.18
11:12
(44) так это же обфускация
46 IvanGorbunov
 
13.11.18
11:12
(44) не в данном случае
47 1Сергей
 
13.11.18
11:13
(45) и нахрен она тут нужна?
48 РусКомп
 
13.11.18
11:18
(40) Только вот надо где-то код "х=СтрДлина(С);"
49 РусКомп
 
13.11.18
11:21
Функция Ф(С,х);Возврат Сред(С,х,1)+?(х=1,"",ф(С,х-1));КонецФункции Р=Ф(С,СтрДлина(С));

Функция Ф(с)Д=СтрДлина(С);возврат?(Д>0,прав(с,1)+Ф(Лев(с,Д-1)),"");КонецФункции Р=Ф(С);
50 Serg_1960
 
13.11.18
15:40
(48) Угу, ты прав, где-то надо. Наверное в вызове этой функции из основной программы ;)