Комментарии 15
www.sql.ru/forum/1135451/elka-c
A еще на TSQL
;WITH cteDummy AS (
SELECT 1 as Number, convert (varchar(39),convert (decimal(19,19), rand())) as rnd
UNION ALL
SELECT Number+1, convert (varchar(39),convert (decimal(19,19), rand(Number + DATEPART(ms,GETDATE()))))
FROM cteDummy
WHERE Number < 100
)
, q AS (
SELECT 25-((Number/5)+1)*3 + (-Number % 5)*2 as num, rnd
FROM cteDummy
)
, cteTree as (
SELECT
--right(replicate(' ',num + 2),num + 2) +
right(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(rnd,'0','*'),'1',' '),'2',' '),'3',' '),'4',' '),'5',' '),'6',' '),'7',' '),'8',' '),'9','*'),'.',' ')
,ISNULL(num,1) + 2) +
right(replicate('/',Max(num) over() — num + 1) + '/',Max(num) over() — num + 1) +
right(replicate('\',Max(num) over() — num + 1) + '\',Max(num) over() — num + 1) +
--right(replicate(' ',num + 2),num + 2) as col
left(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(rnd,'0','*'),'1',' '),'2',' '),'3',' '),'4',' '),'5',' '),'6',' '),'7',' '),'8',' '),'9','*'),'.',' ')
,ISNULL(num,0) + 2)
AS e2015
FROM q where num > 0
)
SELECT * FROM cteTree WHERE e2015 IS NOT NULL
A еще на TSQL
;WITH cteDummy AS (
SELECT 1 as Number, convert (varchar(39),convert (decimal(19,19), rand())) as rnd
UNION ALL
SELECT Number+1, convert (varchar(39),convert (decimal(19,19), rand(Number + DATEPART(ms,GETDATE()))))
FROM cteDummy
WHERE Number < 100
)
, q AS (
SELECT 25-((Number/5)+1)*3 + (-Number % 5)*2 as num, rnd
FROM cteDummy
)
, cteTree as (
SELECT
--right(replicate(' ',num + 2),num + 2) +
right(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(rnd,'0','*'),'1',' '),'2',' '),'3',' '),'4',' '),'5',' '),'6',' '),'7',' '),'8',' '),'9','*'),'.',' ')
,ISNULL(num,1) + 2) +
right(replicate('/',Max(num) over() — num + 1) + '/',Max(num) over() — num + 1) +
right(replicate('\',Max(num) over() — num + 1) + '\',Max(num) over() — num + 1) +
--right(replicate(' ',num + 2),num + 2) as col
left(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(rnd,'0','*'),'1',' '),'2',' '),'3',' '),'4',' '),'5',' '),'6',' '),'7',' '),'8',' '),'9','*'),'.',' ')
,ISNULL(num,0) + 2)
AS e2015
FROM q where num > 0
)
SELECT * FROM cteTree WHERE e2015 IS NOT NULL
Ну, тут много латинских букв и цифр, так неинтересно =)
Эхх… не удержался… сделал SQL параметрическую елочку на postgres 9.3.
height — высота, igr — вероятность игрушек, rost — угол наклона елки, fon — кол-во символов обрамления, penok — высота пенька елки.
В pgAdmin — выглядит нормально :) елка just for fun, без цифр :) С новым годом!
height — высота, igr — вероятность игрушек, rost — угол наклона елки, fon — кол-во символов обрамления, penok — высота пенька елки.
DO $_$
DECLARE param text :=
'20 height,0.2 igr,0.7 rost,5 fon,0.06 sneg,2 penok';
tt text; pp text;xx text;zz
text;___ text;elka
CONSTANT
refcursor
:='elka';
BEGIN
xx:= 'select';
zz:='from' ;___:=
'::text'; pp := $$
WITH b as ($$ ||xx ||
$$ 'tr' $$||___|| $$ a,
'r' $$ || ___ || $$ b,'a'
$$ || ___ || $$ c , 'in' $$
||___|| $$ v), a as ($$||xx||
$$ 's'||a||v || 'g' s,c||b||b||
c||'y' a,'en' $$ ||___|| $$ e,'l'
||c $$||___||$$ l,b|| 'e' $$||___||
$$ r,'ne' $$||___||$$ n, 'el' $$||___||
$$ k,'e'||b $$||___||$$ d, 'to_'$$||___||
$$ _,'e'||c $$||___|| $$ g,'ow' $$||___||$$
w,'oup' $$||___||$$ p,'by' $$||___||$$ b,'nio'
$$||___||$$ i,'ig'||b rg, 'dom' $$||___|| $$ o,c
||'s' $$||___||$$ z,'o'||b $$||___||$$ t,'ch' $$||
___||$$ f,'p' $$||___||$$ h,'on' $$||___||$$ y,b||'o'
$$||___||$$ j,v, c||b||c c $$||zz||$$ b),d as ($$||xx||
$$' f'||j||'m ' $$||___||$$ f,'s'||k||'ect ' s,'sub'||s||
'(' u,' f'||t||' ' r,'::'||v||'t' $$||___||$$ i,'i,g'||e||d
||'ate_s'||d||'ies(' g,a||'_'||_||s||'('||a||'_agg(' a,'c'||z
||'e wh'||e||' ' w,'v'||d||'si'||y||'(),_,_-_))' v,' gr'||p||' '
||b||' _' o,'ran'||o||'()' n,h||'i()' p,'th'||e t,k||'se' e,e||'d'
d,rg,y mm,f||'r(' c,'ne'$$||___||$$ sg,z z,'l'||e||'gth' l,'::'||r||
'al' q,''||h||'c' __,'u'||i||'n ' un,r||h||g||'t(' re,r||h||l||'ce('pl
,'un'||n||'st('||a ua,'deg'||r||'es' de,t||'d'||d||' '||b y,'ov'||d||l||
'y(e '||h||l||'c'||v||'g'||' '||_||f||'ar(n'||w||'(),___)' ov, n||'w_y'||g
||'r_t'||r||'e' ne,'hei'$$||___||$$||'ght'$$||___||$$ b,'p' ||c||'m' ar,'os'
$$||___||$$ rt,'eno'$$||___||$$ pk $$||zz||$$ a)$$||xx||$$ '),c '||z||'('||s||
'('||p||'/'||p||')'||i||' _,('||p||'*'||p||'*'||p||')'||i||' '||__||'),i '||z||'
('||s||'('||s||a||'c),'||u||v||f||'('||s||c||ua||'['||__||'+_+_,'||__||'+'||p||i||
'+_+_,'||__||'+('||p||'+'||p||')'||i||'+_,('||__||'+'||__||q||'/(_+_)-'||p||')'||i||
','||__||'+_+'||__||'+_,'||__||'+'||__||'+'||__||'/(_+_)+(_+_)])) c) h) j, '||c||__||'
+_) q, '||c||__||'+'||__||'/(_+_)) z,'||c||__||'+'||__||'/(_+_)+_) n,'||c||__||'+'||__||
'+'||__||'-_)$$||___||$$ m,'||re||c||__||'+_+'||p||i||'),_+_+_) pe,'||c||__||'+'||__||'/(_
+_)-'||p||i||'-_) v,'||c||'('||__||'+'||__||')*(_+_)) b,r'||rt||'t'||q||' r,'||rg||''||q||',
'||b||''||i||' h,f'||mm||i||' f,s'||sg||'g'||q||' u,p'||pk||'k'||i||' y,('||b||'*r'||rt||'t+('
||p||'/'||p||'))'||i||' '||z||' o, _,_+_ _t,'||c||'('||__||'+_)'||i||')||'||re||c||'(('||de||'(
'||p||')/(_+_))-_)'||i||'),('||p||'+'||p||'-_-_)'||i||')||'||c||'('||__||'+_)'||i||')___ '||f||' '
||ar||',c),l '||z||'('||s||'g, (g*r)'||i||' '||z||' l'||f||g||'_,h)g '|| un||s||'_-_,_-_'||f||'i '||
un||s||'g+h,('||l||'(pe)-_)/_t l'||f||g||'_,y)g),s '||z||'('||s||a||w||n||'> u '||t||' q '||e||' z '||
d||'),'||u||v||'x'||f||g||'_,((h+_+y+f)*h*(_+_+_)))g'||o||'),v '||z||'('||s||a||w||n||'>'||rg||' '||t||'
n '||e||'('||s||u||'j||p,('||n||'*('||l||'(j)-_)+_)'||i||',_)'||f||'i)'||d||'),'||u||v||' '||z||' w'||f||g
||'_,((h+_)*h*(_+_+_)))p'||o||'),e '||z||'('||s||'g,'||w||'g<=h '||t||' '||u||'x'||f||'g*h*_t+_'||r||'(o-l+f
))||'||u||'w'||f||'g*h*_t+_'||r||'l)||'||w||'g=_-_ '||t||' v '||e||' b '||d||'||'||pl||u||'w'||f||'g*h*_t+h+_'
||r||'l),n,m)||'||u||'x'||f||'g*h*_t+h+_'||r||'(o-l+f))'||e||' '||u||'x'||f||'g*h*_t+_'||r||'(o-l+f))||pe||' ||u
||'x'||f||'g*h*_t+h+_'||r||'(o-l+f))'||d||' e'||f||'i,l,s,v '||y||' g)'||s||w||'g=h-_ '||t||' '||ov||f||l||'(e)/_t-
_t)'||e||' e '||d||' '||ne||' '||f||'e,i' $$||zz||$$ d $$;
EXECUTE PP INTO TT;
OPEN ELKA FOR
EXECUTE'WITH
PARAM AS('
||XX||' '||
PARAM||TT;
END ; $_$;
FETCH ALL
FROM ELKA;
В pgAdmin — выглядит нормально :) елка just for fun, без цифр :) С новым годом!
PATH= LANG=ru_RU.UTF-8Это бы тоже внутрь скрипта и без букв :)
Второе легко, но как‐то не хочется: это ведь увеличение кода без каких‐либо качественных изменений. Лучше попробовать LANG=C: при этом
(#)
будет работать с байтами, а для UTF-8 придётся либо писать свою функцию, либо увеличивать число «символов».PATH=
не нужно вообще, это присваивание здесь просто для контроля выполнения первого условия (я бы его не писал вообще, если бы не strace
: про NULLCMD
я помнил, но как‐то теоретически и считал, что конкретно к <<<
оно не относится).Вот вариант с
LANG=C
:(){__=$# } !;___=$[__<<__];____=$[__<<___];_____=$[___<<___]
______=$[_____<<____-___<<____+____]
________=${(#):-______+__}${(#):-______-__}${(#):-______+____}${(#):-______+_____+___+__}
@()$________ $________
^()`@` ${(#):-$@[1]}${(#):-$@[2]}
''(){(($@<(_____<<____)))&&`@` ${(#)@}||^ $[($@)>>(____+___)|(_____<<____+_____<<(___+__))] $[($@)&(__<<(____+___)-__)|(_____<<____)]}
_______=$[__+(__<<(__+____))+(__<<(__+____))<<(__+____)]
______=$[_______+__+__<<____]
\*(){((${@[-__]}<${@[__]}))&&{`@` $[$@[-__]] `\* $@[__] $[$@[___]+____]` }}
+(){(($#))&&`@` $('' $@[__])$(+ $@[___,-__])}
/()`@` "${${(#)@}// }"
`() {/ $@[__] $@[-__]+____+__ $@[__]-____ $@[-___]-__} $(\* $[#________+(_____<<__)] $[#________])` \
`() {/ $@[-__] $@[__]+__ $@[-__]+___ $@[___+__]-__} $(\* '(____<<____)+_____*___' '____<<____')`=${(#):-$[_____<<(___+__)+___+__]}
(){(){`@` $@} `+ _______` `+ ${@[____]}-__ ${@[____]} ______ ${@[-__]}+__ ${@[____]}-___` `+ ${@[__]}+__ ${@[____]} ${@[__]}+___ ${@[____]} ${@[____]}-___ '____<<(____-__)+__'` } `\* '______+(______-_______)+_____' ______`
.> ^()`@` ${(#):-$@[1]}${(#):-$@[2]}
Что я вижу? Цифры! Ай-яй-яй!
Что я вижу? Цифры! Ай-яй-яй!
Как‐то пропустил. Ну здесь тривиально: единица — два подчёркивания, двойка — три:
(){__=$# } !;___=$[__<<__];____=$[__<<___];_____=$[___<<___]
______=$[_____<<____-___<<____+____]
________=${(#):-______+__}${(#):-______-__}${(#):-______+____}${(#):-______+_____+___+__}
@()$________ $________
^()`@` ${(#):-$@[__]}${(#):-$@[___]}
''(){(($@<(_____<<____)))&&`@` ${(#)@}||^ $[($@)>>(____+___)|(_____<<____+_____<<(___+__))] $[($@)&(__<<(____+___)-__)|(_____<<____)]}
_______=$[__+(__<<(__+____))+(__<<(__+____))<<(__+____)]
______=$[_______+__+__<<____]
\*(){((${@[-__]}<${@[__]}))&&{`@` $[$@[-__]] `\* $@[__] $[$@[___]+____]` }}
+(){(($#))&&`@` $('' $@[__])$(+ $@[___,-__])}
/()`@` "${${(#)@}// }"
`() {/ $@[__] $@[-__]+____+__ $@[__]-____ $@[-___]-__} $(\* $[#________+(_____<<__)] $[#________])` \
`() {/ $@[-__] $@[__]+__ $@[-__]+___ $@[___+__]-__} $(\* '(____<<____)+_____*___' '____<<____')`=${(#):-$[_____<<(___+__)+___+__]}
(){(){`@` $@} `+ _______` `+ ${@[____]}-__ ${@[____]} ______ ${@[-__]}+__ ${@[____]}-___` `+ ${@[__]}+__ ${@[____]} ${@[__]}+___ ${@[____]} ${@[____]}-___ '____<<(____-__)+__'` } `\* '______+(______-_______)+_____' ______`
Параметры запуска содержающие симвлы и цифры- это чит.
В параметрах можно передать что угодно, например строку «Happy new year!» и тогда задача значительно упрощается.
В параметрах можно передать что угодно, например строку «Happy new year!» и тогда задача значительно упрощается.
Вообще‐то предполагается, что у вас уже юникодная локаль (любая, не обязательно
ru_RU
). Да и, как я показал выше, засунуть туда этот параметр запуска можно, можно даже засунуть туда код, который собирает UTF-8 по байтам (именно он там и есть). Просто это уже тривиально по сравнению с основной задачей.Ну вы, батенька, и извращенец!
Кстати, никто не хочет попытаться обойтись без подчёркиваний? Или без подчёркиваний и без fork? Я знаю, что это возможно и как это сделать, но процедура ещё более муторная. Второе без генератора я бы писать не стал.
Если никто не напишет вариант до середины следующего дня (или даже несколько позже), то я обновлю статью.
Если никто не напишет вариант до середины следующего дня (или даже несколько позже), то я обновлю статью.
А под Oracle есть? :)
Собственно, обновил. Без
fork
и подчёркиваний получилось как‐то неинтересно.Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Zsh: fucky new year