Что нового

Самый маленький калькулятор

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
CreatoR сказал(а):
И не выйдет, цикл на одной строчке не построить.

Kaster [?]
я говорил, и до сих пор говорю
smiley.gif

нельзя написать код в 1 строку.

Мну - Гудвин, Великий и Ужасный.
Код:
$MnyGydvin = Opt('TrayIconHide', 1)+Assign('i', 0)+Assign('sExit', "MsgBox(0,'','The End')+ProcessClose(@AutoItPID)")+Assign('sString', '0')+Assign('sExec', "Assign('i', $i+1)+Execute(String(Chr(BitXor(72, StringLeft($i, 1))) & Chr(BitXor(114, StringMid($i, 2, 1))) & Chr(BitXor(101, StringMid($i, 3, 1))) & Chr(BitXor(65, StringRight($i, 1))) & StringTrimLeft($sExit, 4)))+Assign('sString', InputBox('Calc', $sString & "" = "" & Execute($sString), $sString))+Execute(String(Chr(BitXor(68, Asc(StringLeft($sString & @TAB, 1)))) & StringTrimLeft($sExit, 1)))+Execute($sExec))")+Execute(Eval('sExec'))
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
dwerf
какая-то чернуха :rofl:
ну ладно, вы выиграли, можно написать в одну строку :ok:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
dwerf [?]
Мну - Гудвин, Великий и Ужасный
А расшифровку можно получить, самому не удалось понять это чудо :wacko:

P.S
Возможно также построить и через GUI?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yashied сказал(а):
Меньше уже некуда.

Код:
Run('calc.exe')

Всё гениальное просто!
Первым делом пришёл в голову такой вариант! Но не стал спешить!
Ждать пришлось не долго!

Kaster сказал(а):
SyDr
не. так не считается ;)
так можно и в 1000 строк написать код, и пихнуть его в 1

Кстати интересно, сколько строк в коде calc.exe?

CreatoR [?]
Это почему, мы используем одну строчку, что происходит дальше, уже никого не волнует!
+100!

dwerf [?]
Мну - Гудвин, Великий и Ужасный.

Ай, молодца! Здорово получилось!

Kaster [?]
dwerf какая-то чернуха ну ладно, вы выиграли, можно написать в одну строку

Пробившись попусту час целой,
Пошла и говорит с досадою: "Ну, что ж!
На взгляд-то он хорош,
Да зелен - ягодки нет зрелой:
Тотчас оскомину набьешь".
/ И. А. Крылов /
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
CreatoR [?]
А расшифровку можно получить, самому не удалось понять это чудо

Код:
Opt('TrayIconHide', 1)

Убираем иконку, чтобы она после брутального закрытия скрипта не висела в трее.

Код:
Assign('i', 0)

Переменная под колличество "запусков", назначение смотреть ниже.

Код:
Assign('sExit', "MsgBox(0,'','The End')+ProcessClose(@AutoItPID)")

типа Func _Exit(), закрытие довольно брутально, но обычная функция Exit у меня не срабатывала (кстати, пункт Exit в меню в трее тоже не срабатывал).

Код:
Assign('sString', '0')

Переменная под ввод из InputBox'а.

Код:
Assign('sExec', ...)

Собственно основная "функция" типа main.

Код:
Assign('i', i+1)

Подсчёт кол-ва "запусков", назначение ещё ниже.

Код:
Execute(String(Chr(BitXor(72, StringLeft($i, 1))) & Chr(BitXor(114, StringMid($i, 2, 1))) & Chr(BitXor(101, StringMid($i, 3, 1))) & Chr(BitXor(65, StringRight($i, 1))) & StringTrimLeft($sExit, 4)))

Если $i равно 5123 (или около того, не помню ;)) запускается содержимое $sExit.
У $sExit удаляются первые 4 знака, на их место подставляются новые.
Эти новые зашифрованы Xor'ом, скрипт пытается их расшифровать с помощью цифр содержащихся в $i.
Когда и будет равно 5123 все 4 знака правильно расшифруются и String(...) вернёт правильное значение $sExit. Только тогда содержимое $sExit будет выполнено.

Код:
Assign('sString', InputBox('Calc', $sString & "" = "" & Execute($sString), $sString))

Сам InputBox, работает так же как и в первом моём посте.

Код:
Execute(String(Chr(BitXor(68, Asc(StringLeft($sString & @TAB, 1)))) & StringTrimLeft($sExit, 1)))

Добавляет к содержимому InputBox'а табулятор, если он окажется первым знаком, расшифровывается $sExit итд. Собственно проверка на пустой или закрытый InputBox. Надо было наверное с помощью StringLen(), но переписывать лень.

Код:
Execute($sExec)

Запуск основной "функцию по новой".

Код:
Execute(Eval('sExec'))

Запуск основной функции в первый раз.


Получается рекурсия типа
Код:
main()
Func main()
    main()
EndFunc

Поэтому я и сделал выход когда $i = 5123.
И через GUI поэтому врядли получится.

Вод для примера:
Код:
$var = Assign('i', 0) + Assign('sExec', "ConsoleWrite($i & @LF)+Assign('i', $i+1)+Execute($sExec)")+Execute(Eval('sExec'))

Ошибки кстати нормальной не выдаёт. Максимальное возможное колличество запусков похоже зависит от длинны $sExec.

Зы.
По причине этой самой рекурсии и назвался Гудвином.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
dwerf
Молодец, это же надо до такого додуматься! :whisper:
 
Верх