9 081

Re: Тема для розмов

FakiNyan написав:
гнучкі -- то коли ви окремі букви, які по різноманітних стандартах транслітерації-транслітеризації
перетворюються по-різному, виносите окремо в налаштування,

наведіть приклад, чи шо

https://replace.org.ua/post/132601/#p132601
будь-ласка, перечитайте уважно отриману відповідь на своє запитання,
замість ігнорувати відповідь та повторяти запитання знову та знову

9 082

Re: Тема для розмов

221VOLT написав:
FakiNyan написав:
гнучкі -- то коли ви окремі букви, які по різноманітних стандартах транслітерації-транслітеризації
перетворюються по-різному, виносите окремо в налаштування,

наведіть приклад, чи шо

https://replace.org.ua/post/132601/#p132601
будь-ласка, перечитайте уважно отриману відповідь на своє запитання,
замість ігнорувати відповідь та повторяти запитання знову та знову

тобто, потім ми можемо вказати певний стандарт транслітерації, і будуть використовуватись відповідні літери зі списку? чи шо?

9 083 Востаннє редагувалося 221VOLT (07.12.2019 18:29:53)

Re: Тема для розмов

FakiNyan написав:

тобто, потім ми можемо вказати певний стандарт транслітерації, і будуть використовуватись відповідні літери зі списку? чи шо?

ви написаний мною сервіс на сайті уважно розглянули?

там тих стандартів стільки, що простіше,
і зручніше для користувача,
зробити налаштування-вибір для окремих букв, що і зроблено

для прикладу:
буква "Щ" має наступні допустимі значення: "Sch", "Shch", "Shh" і ще декілька, уже практично не вживаних, тому їх у налаштування даної букви для вибору я вирішив не писати;
буква "Я" : "Ya", "Ia", "Ja";
буква "Ж" : "Zh", "J";

зауважу -- потрібно не лише з кирилиці в латиницю,
а і з латиниці в кирилицю,
і ще і реверс:
якщо в повідомленні є слова на латиниці -- гонимо їх в кирилицю,
якщо є слова на кирилиці -- гонимо їх в латиницю

при цьому в ерлангу та хаскелі така програма пишеться елементарно,
швидко і лаконічно,
без купи зайвих дужечок, порівнянь...

оце власне момент, чому мені js не подобається--
тут треба морочитись з зайвим непотрібним (у хороших сучасних мовах) кодом,
оцим застарілим сішним синтаксисом...

наступний раз отаке писатиму на Elm, на паттерн матчингу

"ще трішки фукань на js"

називають js популярною мовою,
при цьому забуваючи, що на бекенд є величезний асортимент мов "до кольОру-до вибОру",
а на фронт -- тупо "вибір без вибору" -- один js ака "село і коні", і все

уггу, умільці зробили тайпскрипт та elm (ще роблять wasm),
але ж це все браузером напряму не підтримується і не вміє самостійно в DOM (так, wasm також не вміє)

"фуууу"

немає неприємнішого лайна, ніж те, яке "так історично склалось",
вибору "без вибору", і про яке говорять "воно найкраще, бо найпопулярніше" (( фу

9 084 Востаннє редагувалося P.Y. (07.12.2019 19:08:05)

Re: Тема для розмов

при цьому в ерлангу та хаскелі така програма пишеться елементарно,
швидко і лаконічно,
без купи зайвих дужечок, порівнянь...

Мисліть функціональніше:
1) Розбиваєте слово на окремі літери/комбінації літер з допомогою регулярного виразу.
2) Перебираєте отриманий список літер, роблячи заміни з допомогою асоціативного масиву.
3) Збираєте результат у рядок.

Якщо потрібні гнучкі налаштування, регулярку й асоціативний масив замін генеруєте динамічно в залежності від налаштувань.
Вірніше, регулярку в загальному випадку простіше згенерувати з масиву замін (який може бути константою чи генеруватись динамічно), ніж писати руками.

Подякували: 221VOLT, leofun012

9 085

Re: Тема для розмов

Десь приблизно так:

мій APL-транслітератор, написаний на NodeJS
rem='';/*
@node "%~f0" %*
@goto :eof
  :mode=javascript:

:: convert APL characters <=> multigraphs
:: `a `w `e `i `o `y `u `s `d `g `h `j `l `z `x `c `v `b `n  <=> chars placed on keys
::  ⍺  ⍵  ∊  ⍳  ○  ↑  ↓  ⌈  ⌊  ∇  ∆  ∘  ⎕  ⊂  ⊃  ∩  ∪  ⊥  ⊤
:: `-> `<- `/\ `\/ `>< `* `<> `@ `== `# `/= `<= `>= `- `%    <=> chars looking similar
::  →   ←   ∧   ∨   ×   ×  ⋄   ∘  ≡   ≢  ≠   ≤   ≥   ¯  ÷
:: `MUL `DIV  `QUAD `IDX `INF                                <=> names
::  ×    ÷     ⎕     ⍳    ∞
:: `` ``O ``j ``* ``> ``~                                    <=> diaeresis
::  ¨   ⍥   ⍤   ⍣   ⍩   ⍨
:: `[] `['] `[=]  `]  `[/] `[<>]                             <=> quad
::  ⎕    ⍞    ⌸    ⌷    ⍁    ⌺
:: `() `(*) `(-) `(|) `(\)                                   <=> circle
::   ○   ⍟    ⊖    ⌽    ⍉
:: `-/ `-\ `-,                                               <=> hor. strike
::   ⌿   ⍀   ⍪
:: `~0 `~|                                                   <=> tilde
::   ⍬   ⍭
:: `|g `|h `|<-                                              <=> ver. strike
::   ⍒   ⍋   ⍅
:: `_a `_w                                                   <=> underline
::   ⍶   ⍹
:: `_A_B_C_Z_ `_X_ `_Y_Y  Y`_Y_                              <=> underlined letters
::  ⒶⒷⒸⓏ   Ⓧ   ⓎY   YⓎ

*/
const charmap={
    '⍺':['a'],
    '⍶':['_a'],
    '⍵':['w'],
    '⍹':['_w'],
    '∊':['e'],
    '⍷':['_e'],
    '⍴':['r'],
    '∼':['t', '~', 'NOT'],
    '⍨':['`~'],
    '⍭':['~|', '|~', '|t'],
    '↑':['y', 'TAKE'],
    '⍏':['-y'],
    '↓':['u', 'DROP'],
    '⍖':['-u'],
    '⍳':['i', 'INDEX'],
    '⍸':['_i'],
    '○':['o', '()', 'CIRC'],
    '⍥':['`o', '(")', '`()', '(``)'],
    '⋆':['p'],
    '⍣':['`*', '`p'],
    '⍟':['(*)', '(p)'],
    '⌈':['s', 'MAX', 'CEIL'],
    '⌊':['d', 'MIN', 'FLOOR'],
    '∇':['g', 'DEL', 'FN'],
    '⍫':['~g'],
    '⍢':['`g'],
    '⍒':['|g', 'DESC'],
    '∆':['h', 'DELTA'],
    '⍙':['_h'],
    '⍋':['|h', 'ASC'],
    '∘':['j', '@', 'JOT'], 
    '⍤':['`j', '`@', 'RANK'],
    '⎕':['l', '[]', 'QUAD'],
    '⍞':["[']"],
    '⌷':[']', 'SQUISH'],
    '⍠':['[:]'],
    '⌸':['[=]'],
    '⍁':['[/]'],
    '⍂':['[\\]'],
    '⌺':['[<>]'],
    '⍰':['[?]'],
    '⌹':['[%]'],
    '⌻':['[j]', '[@]'],
    '⌼':['[o]', '[()]'],
    '⍯':['[|=]', '[!=]', '[/=]'],
    '⍃':['[<]'],
    '⍄':['[>]'],
    '⍌':['[V]'],
    '⍓':['[^]'],
    '⍇':['[<-]'],
    '⍈':['[->]'],
    '⍐':['[y]'],
    '⍗':['[u]'],
    '⍔':['[g]'],
    '⍍':['[h]'],
    '⊂':['z'],
    '⊆':['_z'],
    '⊃':['x'],
    '⊇':['_x'],
    '∩':['c'],
    '⍝':['@c', 'REM', 'BULB'],
    '⋔':['|c'],
    '∪':['v'],
    '⍦':['|v'],
    '⊥':['b', '_|_', '|_', '_|', '_L'],
    '⍎':['@b', '@_L', 'EVAL', 'EXEC'],
    '⍊':['_b'],
    '⊤':['T', 'n'],
    '⍕':['@T', '@n', 'FMT', 'FORMAT'],
    '⍡':['`T', '`n'],
    '⍑':['-T', '-n', '_n', '_T'],
    '⊢':['|-'],
    '⊣':['-|'],
    '¯':['-'],
    '∞':['INF', '8'],
    '⍬':['~0'],
    '⌶':['I', 'IBEAM'],
    '⍩':['`>', '>"'],
    '«':['<<'],
    '»':['>>'],
    '≤':['<='],
    '≥':['>='],
    '≠':['|=', '!=', '/='],
    '≡':['=='],
    '≢':['#', '|==', '!=='],
    '⍀':['-\\'],
    '⌿':['-/'],
    '×':['*', '><', 'MUL', 'X', '+'],
    '÷':['/', '%', 'DIV'],
    '←':['<-'],
    '⍅':['<+', '|<-', '<|-'],
    '→':['->', 'GOTO'],
    '⍆':['+>', '|->', '-|>'],
    '¨':['"', '`', '..', ':'],
    '∵':['`.'],
    '⌽':['(|)'],
    '⍉':['(\\)'],
    '⊖':['(-)'],
    '∨':['OR',   '\\/',  'V'],
    '⍱':['NOR', '~\\/', '~V'],
    '∧':['AND',  '/\\',  '^'],
    '⍲':['NAND','~/\\', '~^'],
    '√':['ROOT'],
    'π':['PI'],
    'λ':['LAMBDA', 'LAMDA'],
    'χ':['AXIS', 'CHI'],
    '⍮':['_;'],
    '⍛':['_j'],
    '⍜':['_o'],
    '⍪':['-,'],
    '⍚':['_<>'],
    '⋄':['<>', ';'],
    '⊙':['(.)'],
    '⌾':['(j)', '(@)'],
    //і т.д. ......
    '`':[' ']
    };
    // Ⓐ...Ⓩ:
    for(i='A', j='Ⓐ'; i<='Z'; 
            i=String.fromCharCode(i.charCodeAt(0)+1),
            j=String.fromCharCode(j.charCodeAt(0)+1))
        charmap[j]=['_'+i+'_'];

//tranToAPL={'w':'⍵', '∘':'j', '∘':'@'...}
tranToAPL={};
tranlist=[];
for(i in charmap)
    {
    transl=charmap[i];
    for(j in transl)
        {
        tranToAPL['`'+transl[j]]=i;
        tranlist.push(transl[j]);
        }
    }
// згенерувати регекс для пошуку:
//tranlist - повний список усіх позначень
//відсортувати, щоб довші були першими:
tranlist.sort(function(a,b){return b.length-a.length});
//console.log(tranlist);
//заескейпити спецсимволи ().*?[]\ 
reToAPL='`(';
for(i in tranlist)
    reToAPL+=tranlist[i].replace(/([\\\[\]\)\(\.\*\?\|\{\}\+])/g, '\\$1')+
    (i<tranlist.length-1?'|':')|.');
//reToAPL=/`(LONGEST|MID|[1chr])|./ :
//console.log(reToAPL);
reToAPL=new RegExp(reToAPL, 'g');

tranFromAPL={};
for(i in charmap)
    tranFromAPL[i]=charmap[i][0];

function pseudo2apl(s)
    {
    //розгорнути підкреслені групи літер `_A_B_C_=>`_A_`_B_`_C_.....
    while(/`_[A-Z]_[A-Z]_/ .test(s))
        s=s.replace(/`_([A-Z])_([A-Z])_/g, '`_$1_`_$2_');
    //знайти й замінити: 
    s=s.match(reToAPL);
    //console.log(s);
    res=''
    for(i in s)
        if(repr=tranToAPL[s[i]])
            res+=repr;
        else res+=s[i];
    return res;
    }
function apl2pseudo(s)
    {
    res='';
    for(i in s)
        if(tr=charmap[s[i]])
            res+='`'+tr[0];
        else    res+=s[i];
    s=res
    //`_A_`_B_ => `_A_B_....
    while(/`(_[A-Z])+_`_[A-Z]_/ .test(s))
        s=s.replace(/`((_[A-Z])+)_`_([A-Z])_/g, '`$1_$3_');
    return s;
    }
    
/* test 
console.log(t=apl2pseudo('∘.×⍨⍳10 ⍝ ``Pythagorean table"'));
console.log(pseudo2apl(t));
console.log(pseudo2apl('`@c 2`MUL2`!=5'));
/* end test */

var toTranslit=false;
process.argv.slice(2).forEach(function(arg)
    {
    // -t --to-translit
    if (arg==='-t'|arg==='--to-translit')
        toTranslit=true;
    // -u --to-unicode
    else if (arg==='-u'|arg==='--to-unicode')
        toTranslit=false;
    });
translate=toTranslit? apl2pseudo: pseudo2apl;

processLine=function(s)
    {
    process.stdout.write(translate(s)+'\n');
    }

process.stdin.resume();
process.stdin.setEncoding('utf8');

var lingeringLine = "";

process.stdin.on('data', function(chunk) 
    {
    lines = chunk.split("\n");
    
    lines[0] = lingeringLine + lines[0];
    lingeringLine = lines.pop();
    
    lines.forEach(processLine);
    });

process.stdin.on('end', function() 
    {
    if(lingeringLine!=='')
        processLine(lingeringLine);
    });

// I/O.....
Подякували: 0xDADA11C7, /KIT\, 221VOLT, dot4

9 086

Re: Тема для розмов

дюже складно

9 087

Re: Тема для розмов

FakiNyan написав:

дюже складно

Так, звісно, phpшне strtr тут було б ідеальним варіантом (до речі, саме той випадок, коли всі мають вклонитися перед могуттю php). Те, що я роблю, фактично, є реалізацією аналога strtr, плюс деякі додаткові можливості — усього декілька невеличких функцій. Більша ж частина коду — самі масиви, що описують транслітерацію.

Подякували: 221VOLT, leofun01, dot3

9 088 Востаннє редагувалося 221VOLT (07.12.2019 22:46:46)

Re: Тема для розмов

2 mr. P.Y. :
за вийнятком регулярок, я саме так і зробив

прикол в тому, що при наявності паттерн матчингу
регулярки є непотрібними
(виключення -- якісь дуже складні ситуації)

+ регулярка = додатковий спосіб вистрілити собі в ногу
а браузери сьогодні і без них вміють вистрілити в пару Гб оперативки на рівному місці...


-------


а давайте напишемо APL не на js, а на haskell ?
а в браузер пісочницю з сервера прокинемо
(у цьому ж прикол на js писати, так?)

буде і акуратніше, і швидше працюватиме :)

я би над таким посидів, та не в одиночку...

9 089 Востаннє редагувалося P.Y. (08.12.2019 03:52:13)

Re: Тема для розмов

+ регулярка = додатковий спосіб вистрілити собі в ногу

Забобони.

а давайте напишемо APL не на js, а на haskell ?
а в браузер пісочницю з сервера прокинемо
(у цьому ж прикол на js писати, так?)

буде і акуратніше, і швидше працюватиме :)

я би над таким посидів, та не в одиночку...

Коли я займався APL, то в моїх мріях було зробити код, що виконуватиметься на GPU. Це можливо зробити в браузері, але значну частину коду доведеться переписати на GLSL (що має схожий сішний синтаксис і дуже несхожу систему типів. Маю підозру, подібний задум був і в автора NGN APL (від якого я відштовхувався) — деякі задіяні там класи несуть якусь користь переважно в контексті WebGL). Це щодо швидкодії.

Що ж до синтаксичних можливостей APL (чим я, власне, займався), для продовження проекту було б краще взяти щось синтаксично схоже на JS (бо там купа коду, і переважно не мого, який мені лінь переписувати з нуля), хіба що, можливо, з більш послідовною реалізацією прототипної моделі (яку було б зручно задіяти, якби JS'івські прототипи могли хоч щось, крім свого недоООП).

Подякували: leofun01, 221VOLT2

9 090

Re: Тема для розмов

та які забобони, пишу з власного досвіду --
накалякав невеличку регулярку, нагодував її невеличким текстом з трьох строк,
а вона 2Гб+ оперативки віджерла  :D

називається пиши регулярки на сервер -- і від декількох користувачів оперативка закінчиться))

і так, я регулярки готувати вмію поки ще не дуже *CRAZY*

9 091

Re: Тема для розмов

Хтось може пояснити мені, який це тип лампочки?https://replace.org.ua/uploads/images/2564/6b965f0844b444bf1e59267378fbaf62.jpg

9 092

Re: Тема для розмов

На вигляд — якийсь різновид діодних, мабуть.

Подякували: 221VOLT1

9 093

Re: Тема для розмов

221VOLT написав:

та які забобони, пишу з власного досвіду --
накалякав невеличку регулярку, нагодував її невеличким текстом з трьох строк,
а вона 2Гб+ оперативки віджерла  :D

називається пиши регулярки на сервер -- і від декількох користувачів оперативка закінчиться))

і так, я регулярки готувати вмію поки ще не дуже *CRAZY*

Можете спробувати продати свою регулярку кулхацкерам — вони знайдуть для неї застосунок.  ;)

Подякували: 221VOLT1

9 094

Re: Тема для розмов

FakiNyan написав:

Хтось може пояснити мені, який це тип лампочки?https://replace.org.ua/uploads/images/2564/6b965f0844b444bf1e59267378fbaf62.jpg

Можу продати тобі biom'івський світильник смарт зі знижкою, якщо є бажання.

Подякували: 221VOLT1

9 095

Re: Тема для розмов

Сьогодні замовляв аксесуар на подарунок в одному українському інтернет-магазині, який продає та виробляє (як я зрозумів) українську продукцію. Проте консультант абсолютно не знає української мови, він був десь перші 15 секунд після початку нашої розмови (де я заговорив українською) в шоковому стані, бо не міг навіть слова сказати, хоча б російською. І як виявилося сайт у них теж не має перекладу на українську.

Харків вроді ще не губернія РФ?..
P.S. - замовляти в них передумав

Подякували: 0xDADA11C7, flatliner2

9 096

Re: Тема для розмов

Google слідкує
http://mva.name/files/20191208_140411.mp4

9 097 Востаннє редагувалося 221VOLT (13.12.2019 22:08:01)

Re: Тема для розмов

хробацьке написав:

Зеленський подав https://hromadske.ua/posts/zelenskij-po … a?tg_group у Раду законопроєкт, який спрощує надання українського громадянства людям, що воювали на Донбасі чи втекли з Росії

:D шо, хлопці, пора вчити російську, бо розпочинається "раша велкам" з хлібом-сіллю ?)

жарт, жарт) ну, чи не зовсім жарт... реальність наша, президентсько-парламентська :)

Прихований текст

або англійську з німецькою та іспанською)

примітка:
це новина для всіх, хто розпочинає нити від посилання на український сайт,
на якому десь російське слово зустрічається
( https://replace.org.ua/post/132956/#p132956 ) --
не там ви фукаєте,
не в ту сторону фукаєте,
не на тих людей фукаєте ))

9 098

Re: Тема для розмов

одне вже приїхало і здохло, бо курка була недостатньо заморожена

Подякували: 221VOLT1

9 099

Re: Тема для розмов

221VOLT написав:
хробацьке написав:

Зеленський подав https://hromadske.ua/posts/zelenskij-po … a?tg_group у Раду законопроєкт, який спрощує надання українського громадянства людям, що воювали на Донбасі чи втекли з Росії

:D шо, хлопці, пора вчити російську, бо розпочинається "раша велкам" з хлібом-сіллю ?)

жарт, жарт) ну, чи не зовсім жарт... реальність наша, президентсько-парламентська :)

Прихований текст

або англійську з німецькою та іспанською)

примітка:
це новина для всіх, хто розпочинає нити від посилання на український сайт,
на якому десь російське слово зустрічається
( https://replace.org.ua/post/132956/#p132956 ) --
не там ви фукаєте,
не в ту сторону фукаєте,
не на тих людей фукаєте ))

Украынськи патриоти == росыйськы довбойоби. Але не тільки російські
- у Азові різних вистачає.
Навіть упоротий попяра з правоцлавної церкви україни - й той москаль.
СЮРПРИЗ.
Бо справжні патріоти(ТМ) - у Полоничної сотні у Польщі та на митінгах "ніт капітулирен" коли у Польщі не сезон. Всрався їм той східний фронт.

Подякували: 221VOLT1

9 100

Re: Тема для розмов

Ого, в темі вже 10000 повідомлень

Подякували: 0xDADA11C7, 221VOLT2