|
Шуточный тест: самый лаконичный код в 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
|
Баян.
v8: Инверсия строки |
|||
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) Угу, ты прав, где-то надо. Наверное в вызове этой функции из основной программы ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |