Имя: Пароль:
1C
 
v7: Конкурс последнего дня Мисты
,
0 Прохожий
 
27.08.12
13:09
Если есть ПолеВвода1 и ПолеВвода2, то любой пытливый ум напишет очень скоро алгоритм:
...
   с = СтрДлина(ПолеВвода1);
   ПолеВвода = "";
   Для а = 1 по с Цикл
       ПолеВвода = ПолеВвода + Сред(ПолеВвода1, С - а + 1, 1);
   КонецЦикла;
       ПолеВвода2 = ПолеВвода;
...
Но у любой мысли есть тысяча воплощений. Этот алгоритм САМЫЙ ОЧЕВИДНЫЙ.
Пишем свой самый-самый алгоритм.
1 PR
 
27.08.12
13:09
Выдыхай.
2 Sh1ko
 
27.08.12
13:11
В Казахстане трава созрела?
3 Wobland
 
27.08.12
13:11
я думаю, эта трава имеет точное латинское наименование
4 YHVVH
 
27.08.12
13:11
шо это? куда писать, зачем писать, кому писать?
5 Wobland
 
27.08.12
13:11
(4) мы о траве
6 DGorgoN
 
27.08.12
13:12
Лятят перелетные птицы..
7 Рэйв
 
27.08.12
13:12
(0)Пьем,курим или грибоедствуем?
8 Прохожий
 
27.08.12
13:12
(2) Тебе достается самый веселый вариант. Уговорил.
(4) Ты можешь написать самый сомнительный алгоритм.
9 DGorgoN
 
27.08.12
13:13
В общем запишу как вандализм и спам.
10 Рэйв
 
27.08.12
13:13
вроде ж разгар рабочего дня, а ТС уже в хлам:-)
11 Андрюха
 
27.08.12
13:14
(0) Самый короткий
ПолеВвода2 = ПолеВвода1;
12 Андрюха
 
27.08.12
13:15
(11)+ А не, тебе же надо реверс строки
13 DGorgoN
 
27.08.12
13:15
(11) Ему бы протрезветь
14 DGorgoN
 
27.08.12
13:17
Переименовал и открыл снова.
15 Андрюха
 
27.08.12
13:17
(0) Вот так если
ПолеВвода2 = "";
Для Сч = 1 По СтрДлина(ПолеВвода1) Цикл
   ПолеВвода2 = Сред(ПолеВвода1, Сч, 1) + ПолеВвода2;
КонецЦикла;
16 Sh1ko
 
27.08.12
13:18
прекратите, демоны!
17 Прохожий
 
27.08.12
13:19
(15) Самый похожий алгоритм.
18 Прохожий
 
27.08.12
13:19
+(17) Я бы сказал, Самсунг...
19 Sh1ko
 
27.08.12
13:19
полеввода2 = 1адовВелоП;
20 Прохожий
 
27.08.12
13:21
(19) Смело.
21 Sh1ko
 
27.08.12
13:21
(20) у меня работает, ничонезнаю
22 Прохожий
 
27.08.12
13:22
Думаем, не ленимся...
23 oleg_prg
 
27.08.12
13:22
(0) Курить, так курить!!!
тогда уж 4-ю строчку замени на
ПолеВвода = ПолеВвода + Сред(ПолеВвода1, С - а + Число(Сред(Лог10(НачГода(ТекущаяДата())),Число(Сред(Лог10(НачГода(ТекущаяДата())),7,1))+6,Число(Сред(Лог10(НачГода(ТекущаяДата())),7,1)))), Число(Сред(Лог10(НачГода(ТекущаяДата())),7,Число(Сред(Лог10(НачГода(ТекущаяДата())),7,1)))));
24 Прохожий
 
27.08.12
13:24
(23) Самый скурпулезный.
25 Прохожий
 
27.08.12
13:26
(3) Т.Е. ты можешь написать этот алгоритм на латыни?
26 Ranger_83
 
27.08.12
13:27
ПолеВвода2 = Реверс(ПолеВвода1);
27 Wobland
 
27.08.12
13:28
(25) я не употребляю. а когда перепью, на мисту не хожу
28 Прохожий
 
27.08.12
13:28
(26) ты, наверное, архитектор...
29 Прохожий
 
27.08.12
13:28
(27) Боишься нас?
30 ILM
 
гуру
27.08.12
13:28
Через массивы букв и СтрЗаменить ещё не писали?
31 Прохожий
 
27.08.12
13:29
(30) Писали, много раз. Но признаться боятся.
32 Прохожий
 
27.08.12
13:31
Через регистр расчета и правила вытеснения разных видов расчетов ещё не было...
33 zladenuw
 
27.08.12
13:31
Процедура Сформировать()
   ПолеВвода = "";
  ПолеВвода2 = "";
  ПолеВвода = СокрЛП(ПолеВвода1);
   Для Сч = 1 По СтрДлина(СокрЛП(ПолеВвода1)) Цикл
       Символ = Прав(ПолеВвода,1);
       ПолеВвода2 = СокрЛП(ПолеВвода2)+Символ;
       ПолеВвода = СтрЗаменить(ПолеВвода,Символ,"");
   КонецЦикла;
       
       
КонецПроцедуры
34 ILM
 
гуру
27.08.12
13:31
Я тоже уже весь дрожу
35 del123
 
27.08.12
13:34
Извращаться так извращаться :D

   Сообщение = ЭлементыФормы.Полеввода1.Значение;
   Длина = СтрДлина(Сообщение);
   Стр1 = "";
   Стр2 = "";
   
   для ы = 1 по окр(Длина / 2, 0,0) цикл
       Стр1 = Сред(Сообщение, ы, 1) + Стр1 ;
       Стр2 = Стр2 + Сред(Сообщение, длина - ы + 1, 1);
   конеццикла;
   если окр(Длина / 2, 0,0) <> Длина / 2 тогда
       Сообщить(Стр2 + Сред(Сообщение, окр(Длина / 2, 0,0) + 1, 1) + Стр1);
   иначе
       Сообщить(Стр2 + Стр1);
   конецесли;
36 Прохожий
 
27.08.12
13:35
(34) Пить не умеешь.
37 Прохожий
 
27.08.12
13:35
(35) Это прием в артиллерии называется "вилка"...
38 Прохожий
 
27.08.12
13:36
Народ отхлынул, но оставшиеся стали трудиться продуктивно...
39 D_Pavel
 
27.08.12
13:38
Пока ЗначениеЗаполнено(ПолеВвода1) Цикл
   ПолеВвода2 = ПолеВвода2 + Прав(ПолеВвода1, 1);
   ПолеВвода1 = Лев(ПолеВвода1, СтрДлина(ПолеВвода1) - 1 );
КонецЦикла;
40 le_
 
27.08.12
13:39
В VBS есть StrReverse().
41 D_Pavel
 
27.08.12
13:40
(38) Народ не отхлынул, скрипты отлаживают
42 Андрюха
 
27.08.12
13:41
... и пишут внешние компоненты
43 zladenuw
 
27.08.12
13:42
перем Скрипт;

Функция ИнверсияСтроки(Стр)
   Скрипт.language="vbscript";
   Возврат Скрипт.Eval("StrReverse("""+Стр+""")");
КонецФункции


Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
44 Прохожий
 
27.08.12
13:44
(40) Вопрос: как сделать простую страницу, которая будет выворачивать мисту наизнанку? 15:45
45 Прохожий
 
27.08.12
13:44
(43) Назовем его Алгоритм перехватчика...
46 Шевген
 
27.08.12
13:45
ПолеВвода = "";
   Для Сч = 1 По СтрДлина(ПолеВвода1) Цикл
       ПолеВвода = ?(Сч = СтрДлина(ПолеВвода1), "", " + ") + "Сред(ПолеВвода1, " + Сч + ", 1)" + ПолеВвода;
   КонецЦикла;
   Сообщить(Шаблон("[" + ПолеВвода + "]"));
47 Прохожий
 
27.08.12
13:46
(39) Алгоритм шифрования. ПолеВвода1 стирается и повторить нельзя.
48 D_Pavel
 
27.08.12
13:47
(47) Вместо ПолеВвода1 можно использовать временную переменную если нужно сохранить.
49 Прохожий
 
27.08.12
13:50
(48) Типичное решение 1С: Если хотите чтобы работало корректно можете переписать...
50 pofigos
 
27.08.12
13:54
(0)
  с = СтрДлина(ПолеВвода1);
  ПолеВвода = "";
  Для а = 1 по с Цикл
      ПолеВвода = ПолеВвода + Прав(ПолеВвода1,1);
ПолеВвода1 = Лев(ПолеВвода1,)
  КонецЦикла;
      ПолеВвода2 = ПолеВвода;
51 pofigos
 
27.08.12
13:55
не то блин (
52 zladenuw
 
27.08.12
13:57
(45) тут явно грибами попахивает. надо дунуть. а то чуда не будет :)
53 YHVVH
 
27.08.12
13:57
косяк по кругу пустили, заразная вещь.
54 Прохожий
 
27.08.12
14:01
(52,53) У вас слишком много странных букв в никах. Даже подозрительные встречаются.
55 Шевген
 
27.08.12
14:02
Вот еще вариант для любителей грибов:

Процедура Сформировать()
   ПолеВвода = """""";
   С = СтрДлина(ПолеВвода1);
   Для Сч = -С По -1 Цикл
       ПолеВвода = ПолеВвода + " + Сред(ПолеВвода1, " + (-Сч) + ", 1)";
   КонецЦикла;
   ПолеВвода2 = Шаблон("[" + ПолеВвода + "]");
   //Сообщить(Шаблон("[" + ПолеВвода + "]"));
КонецПроцедуры
56 Прохожий
 
27.08.12
14:03
(55) Осталось через мнимые числа закоординироваться и мы перейдем к приличной алгебре...
57 Азазелло
 
27.08.12
14:04
Функция ПодСтр(Стр)
   ДлСтр = СтрДлина(Стр);
   Если ДлСтр > 0 Тогда
       Возврат Прав(Стр, 1) + ПодСтр(Лев(Стр, ДлСтр - 1));
   КонецЕсли;
КонецФункции


Процедура Сформировать()
   ПолеВвода2 = ПодСтр(ПолеВвода1);
КонецПроцедуры
58 Прохожий
 
27.08.12
14:04
(57) Чё она делает?
59 Азазелло
 
27.08.12
14:05
(58) как что? строку переворачивает...
60 Азазелло
 
27.08.12
14:06
+(59) согласен, название не удачное )
61 Прохожий
 
27.08.12
14:07
+(58) Единственный алгоритм без цикла. Ещё и с рекурсией... Щаз проверим, щаз проверим, щаз проверим, щаз проверим, щаз проверим.....
62 Азазелло
 
27.08.12
14:09
(61) ну тогда озвучивай критерий "самой-самости" алгоритма )
63 Шевген
 
27.08.12
14:09
Интерпретация

Процедура Сформировать()
   С = СтрДлина(ПолеВвода1);
   Для Сч = 1 По С Цикл
       ПолеВвода2 = ПолеВвода2 + Лев(Прав(ПолеВвода1, Сч), 1);
   КонецЦикла;
   Сообщить(ПолеВвода2);
КонецПроцедуры
64 Шевген
 
27.08.12
14:10
Хм... рекурсия...
65 zladenuw
 
27.08.12
14:11
я за +(57)
66 orefkov
 
27.08.12
14:15
Функция Реверс(стр)
   Возврат ?(СтрДлина(стр) = 0, "", Прав(стр, 1) + Реверс(Лев(стр, СтрДлина(стр) - 1)));
КонецФункции
67 Прохожий
 
27.08.12
14:16
(62) У тебя самосамый одинэсный алгоритм. Всегда побеждает тот, к то пишет небесконечную рекурсию. Ибо ничего сложнее рекурсии одноэснеги писать не умеют.
Если только черными запросами не перебьют...
68 orefkov
 
27.08.12
14:20
Блин, опередили с рекурсией.
69 Прохожий
 
27.08.12
14:22
(68) Теперь нужно ждать новую платформу...
70 Азазелло
 
27.08.12
14:22
(68) у (0) рекурсия не в почете )
(67) нет, мы еще умеем без использования доп. переменных поместить в А мин. значение, в Б - максимальное ))
71 Прохожий
 
27.08.12
14:23
(70) С сохранением значений?
72 Азазелло
 
27.08.12
14:29
(71) нет. Есть 2 переменные. А и Б. Числовые. нужно сделать так, чтобы в А было мин. значение, в Б - максимальное. Без использования вспомогательных переменных.
73 Ranger_83
 
27.08.12
14:32
(66)твой вариант рекурсии более точный,чем в (57)
74 Азазелло
 
27.08.12
14:35
(73) ну да, у меня там после проверки условия не хватает Возврат "";
75 Ranger_83
 
27.08.12
14:36
(73)значит пока второе место :)
76 Прохожий
 
27.08.12
14:37
(75) Ну конечно, первое место у (0)
77 Ranger_83
 
27.08.12
14:42
(76)участник (0) вне конкуренции(конкурса)
78 Прохожий
 
27.08.12
14:46
(77) Только для (0) весь конкурс и устраивался. Пора бы уже привыкнуть.
"Когда-то я был первым из однёрки певцов" (с) Макаревич.
79 Азазелло
 
27.08.12
14:46
(76) ну не знаю, мне больше самым очевидным кажется
Для Сч = 1 По СтрДлина(ПолеВвода1) Цикл
       ПолеВвода2 = Сред(ПолеВвода1, Сч, 1) + ПолеВвода2;
   КонецЦикла;
80 Aleksey
 
27.08.12
14:49
(0) Если ПолеВвода1 реквизит на форме, тогда у тебя ошибка в коде ибо в случае если реквизит ограниченной длины строка

с = СтрДлина(ПолеВвода1);

вернет длину реквизита, а не длину его значения
81 Прохожий
 
27.08.12
14:51
(80) Он неограниченный и многострочный... И мультиязычный.
82 smaharbA
 
27.08.12
14:55
Берите из зада
83 Прохожий
 
27.08.12
15:03
Самый ленивый алгоритм:
...
Сообщить("Внимательно скопируйте все буквы в обратном порядке используя левую и правую кнопки мыши. Благодарим за содействие.");
...
84 Азазелло
 
27.08.12
15:06
Еще один вариант рекурсии, с меньшим числом итераций
Функция Перевертыш(Стр)
   ДлСтр = СтрДлина(Стр);
   Если ДлСтр >= 2 Тогда
       Возврат Перевертыш(Прав(Стр, Цел(ДлСтр / 2))) + Сред(Стр, Цел(ДлСтр / 2) + 1, ДлСтр % 2) + Перевертыш(Лев(Стр, Цел(ДлСтр / 2)));
   КонецЕсли;
   
   Возврат Стр;
КонецФункции
85 Прохожий
 
27.08.12
15:08
(84) Ты чемпион. Уверенное второе место.
86 Азазелло
 
27.08.12
15:09
(85) вот блин ))
87 Skylark
 
27.08.12
15:22
А кто имеем ум, тот сочти число Зверя...
88 smaharbA
 
27.08.12
15:22
Пока ПустоеЗначение(Стр1)=0 Цикл
       Стр2=Стр2+Прав(Стр1,1);
       Стр1=Сред(Стр1,1,СтрДлина(Стр1)-1);
   КонецЦикла;

   Для Сч=1 По СтрДлина(Стр1) Цикл
       Стр2=Стр2+Симв(КодСимв(Прав(Стр1,Сч)));
   КонецЦикла;

   Х="";
   Для Сч=1 По СтрДлина(Стр1) Цикл
       Х="Сред(Стр1,"+Сч+",1)+"+Х;
   КонецЦикла;
   Сообщить(Шаблон("["+Х+"""""]"));
89 Прохожий
 
27.08.12
15:42
(88) Самый красный алгоритм.... Хотя у (23) тоже могло получиться красно
.
90 Прохожий
 
28.08.12
06:35
Расслабились?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn