Вход | Регистрация



Шуточный тест: самый лаконичный код в 1С для реверса строки

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

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

Короче у меня вроде не получается
   РусКомп
 
4 - 12.11.18 - 17:35
(3)
Для Й = 1 По СтрДлина(Стр) Цикл
    Рез = Рез + Сред(Стр, СтрДлина(Стр) - Й, 1);
КонецЦикла;
   Tateossian
 
5 - 12.11.18 - 17:35
(3)
   Tateossian
 
6 - 12.11.18 - 17:35
Результат= "";
Для Й = 0 По СтрДлина(Пут)-1 Цикл
    Результат = Результат + Сред(Пут, СтрДлина(Пут) - Й, 1);
КонецЦикла;
   elCust
 
7 - 12.11.18 - 17:35
   Tateossian
 
8 - 12.11.18 - 17:36
(7) Есть способ лучше и быстрее)
   Tateossian
 
9 - 12.11.18 - 17:36
(7) Его нет в баяне:)
   Tateossian
 
10 - 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) взять зеркало?)
   H A D G E H O G s
 
13 - 12.11.18 - 17:40
Буфер=ПолучитьБуферДвоичныхДанныхИзСтроки(Данные);
Буфер.Перевернуть();
ДанныеНовые=ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер);
   РусКомп
 
14 - 12.11.18 - 17:40
ХХ:
Результат = Результат + Прав(Стр, 1);
Если СтрДлина(Стр)>1 Тогда
Стр =Лев(Стр,СтрДлина(Стр)-1) 
Перейти ХХ;
КонецЕСли;
   ejikbeznojek
 
15 - 12.11.18 - 17:40
(10) Цикл из  (3)  одной строкой?)
   Волшебник
 
16 - 12.11.18 - 17:42
(13) Это заявка на победу. Оформи в одну строку
   Tateossian
 
17 - 12.11.18 - 17:42
(10) Поправка - в 900 раз быстрее. Мой способ инве6ртировал модуль общего назначения за 10 наносек, способ из "баяна" - за 9103
   Tateossian
 
18 - 12.11.18 - 17:43
Без цикла:)
   Kigo_Kigo
 
19 - 12.11.18 - 17:45
Таки мы в клюшках или в снеговике соревнуемся?
   Tateossian
 
20 - 12.11.18 - 17:45
(13) ДА! Вот победитель. Только нужно вот так доделать:

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

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

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

Х:Р=Р+Прав(С,1);Если СтрДлина(С)>1 Тогда С=Лев(С,СтрДлина(Стр)-1);Перейти Х;КонецЕсли;               
Р=ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(С).Перевернуть());
   РусКомп
 
30 - 12.11.18 - 17:53
Х:Р=Р+Прав(С,1);Д=СтрДлина(С);Если Д>1 Тогда С=Лев(С,Д-1);Перейти Х;КонецЕсли;               
Р=ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(С).Перевернуть());
   Garykom
 
31 - 12.11.18 - 17:54
Слабо написать рекурсией без явного цикла?
   Garykom
 
32 - 12.11.18 - 17:55
(31)+ Чтоб даже в 1С77 работало
   IvanGorbunov
 
33 - 12.11.18 - 17:56
(29) для обфускации самое то
 
 
   РусКомп
 
34 - 12.11.18 - 18:01
(31) Вроде длинне получается
Х:Р=Р+Прав(С,1);Д=СтрДлина(С);Если Д>1 Тогда С=Лев(С,Д-1);Перейти Х;КонецЕсли;               
Р=ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(С).Перевернуть());
Функция Ф(с) Если СтрДлина(С)>0 Тогда возврат прав(с,1)+Ф(с) иначе Возврат "" КонецЕсли; КонецФункции
   Tateossian
 
35 - 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 Символ. 
Если добавить Р=Ф(С), тогда длиннее получается.
   IvanGorbunov
 
39 - 13.11.18 - 09:16
(38)
Функция Ф(с)Д=СтрДлина(С);возврат?(Д>0,прав(с,1)+Ф(Лев(с,Д-1)),"");КонецФункции
:Р=Р+Прав(С,1);Д=StrLen(С);if Д>1 then С=Лев(С,Д-1);goto ~Х;endif;
   Serg_1960
 
40 - 13.11.18 - 10:13
Ещё короче :)
Функция Ф(С,х);Возврат Сред(С,х,1)+?(х=1,"",ф(С,х-1));КонецФункции
   ДенисЧ
 
41 - 13.11.18 - 10:15
(40) Not hired.Next please
   Serg_1960
 
42 - 13.11.18 - 10:20
tnemmoc oN
   IvanGorbunov
 
43 - 13.11.18 - 11:08
(40)
Функция Ф(С,х);Возврат Сред(С,х,1)+?(х=1,"",ф(С,х-1));КонецФункции
Функция Ф(С,х);return mid(С,х,1)+?(х=1,"",ф(С,х-1));endfunction

//конкуренция хорошая штука
   1Сергей
 
44 - 13.11.18 - 11:11
за "Перейти"  бить линейкой по всем торчалкам
   Вафель
 
45 - 13.11.18 - 11:12
(44) так это же обфускация
   IvanGorbunov
 
46 - 13.11.18 - 11:12
(44) не в данном случае
   1Сергей
 
47 - 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)),"");КонецФункции Р=Ф(С);
 
 Рекламное место пустует
   Serg_1960
 
50 - 13.11.18 - 15:40
(48) Угу, ты прав, где-то надо. Наверное в вызове этой функции из основной программы ;)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует