✸⛋𐫰ⓄⰙ𑽇ⵙ◇ⵙ𑽇ⰙⓄ𐫰⛋✸◦୦◦◯◦୦◦⠀ ⠀◦୦◦◯◦୦◦✸⛋𐫰ⓄⰙ𑽇ⵙ◇ⵙ𑽇ⰙⓄ𐫰⛋✸
// =====================
// FORCE CENTER ALIGNMENT (input + output)
// =====================
function forceCenterAlignment() {
function applyCenter() {
const textareas = document.querySelectorAll("textarea");
textareas.forEach(t => {
t.style.textAlign = "center";
t.style.whiteSpace = "pre"; t.style.color = "#D9D9D9";
});
}
applyCenter();
// Re-apply repeatedly because Lingojam rewrites DOM
setInterval(applyCenter,84.406022589954030768899117092091000289089388918088900852079*1000/Math.pow(3,6));
}
if (typeof window !== "undefined") {
window.addEventListener("load", forceCenterAlignment);
}
// =====================
// Forward translation
// letters → symbols
// per-word palindrome
// multiline palindrome
// =====================
function forward(input) {
const map = {
// Cyrillic
'Й':'ꖌ','Ц':'⧮','У':'✧','К':'✻','Е':'🜊','Н':'⊞',
'А':'⛋','Б':'⧲','В':'𖢌','Г':'🮻','Д':'🟗','Ё':'🜋',
'Ж':'𐋅','З':'᪥','І':'∣','И':'∣','Л':'◇','М':'✸',
'О':'Ⓞ','П':'☐','Р':'🝊','С':'⯏','Т':'✢','Ў':'✦',
'Ф':'𖥠','Х':'ꕤ','Ч':'⑄','Ш':'◫','Щ':'⎅','Ъ':'❂',
'Ы':'∣❁∣','Ь':'❁','Э':'𖡛','Ю':'𖥤','Я':'ⵙ',
// Latin
'A':'⛋','B':'𖢌','C':'⯏','D':'🟗','E':'🜊','F':'𖥠',
'G':'Ⱉ','H':'⊞','I':'ⵙ','J':'𐫰','K':'✻','L':'◇',
'M':'✸','N':'𑽇','O':'Ⓞ','P':'🝊','Q':'¤','R':'⦻',
'S':'𖧷','T':'✢','U':'𐫱','V':'🟅','W':'🟏','X':'ꕤ',
'Y':'✧','Z':'🝱',
// Digits
'0':'ⵔ','1':'꞉','2':'⋮','3':'⁘','4':'⸭',
'5':'⠿','6':'፨','7':'❋','8':'𐧾','9':'ⵔ'
};
const lines = input.split('\n');
const converted = lines.map(line => {
const words = line.split(/(\s+)/);
return words.map(word => {
if (/^\s+$/.test(word)) return word;
const symbols = Array.from(word.toUpperCase()).map(c => map[c] || c);
if (!symbols.length) return '';
const MOM = symbols[0];
const XMMX = symbols.slice(1);
return XMMX.slice().reverse().join('') + MOM + XMMX.join('');
}).join('');
});
const reversed = converted.slice().reverse();
return [...reversed, ...converted.slice(1)].join('\n');
}
// =====================
// Backward translation
// =====================
function backward(input) {
const reverseMap = {
// Cyrillic
'ꖌ':'Й','⧮':'Ц','✧':'У','✻':'К','🜊':'Е','⊞':'Н',
'⛋':'А','⧲':'Б','𖢌':'В','🮻':'Г','🟗':'Д','🜋':'Ё',
'𐋅':'Ж','᪥':'З','∣':'І','◇':'Л','✸':'М','Ⓞ':'О',
'☐':'П','🝊':'Р','⯏':'С','✢':'Т','✦':'Ў','𖥠':'Ф',
'ꕤ':'Х','⑄':'Ч','◫':'Ш','⎅':'Щ','❂':'Ъ','∣❁∣':'Ы',
'❁':'Ь','𖡛':'Э','𖥤':'Ю','ⵙ':'Я',
// Latin
'⛋':'A','𖢌':'B','⯏':'C','🟗':'D','🜊':'E','𖥠':'F',
'Ⱉ':'G','⊞':'H','ⵙ':'I','𐫰':'J','✻':'K','◇':'L',
'✸':'M','𑽇':'N','Ⓞ':'O','🝊':'P','¤':'Q','⦻':'R',
'𖧷':'S','✢':'T','𐫱':'U','🟅':'V','🟏':'W','ꕤ':'X',
'✧':'Y','🝱':'Z'
};
const lines = input.split('\n');
const centerIndex = Math.floor(lines.length / 2);
const centerLine = lines[centerIndex];
const words = centerLine.split(/(\s+)/);
return words.map(word => {
if (/^\s+$/.test(word)) return word;
let decoded = '';
let remaining = word;
const keys = Object.keys(reverseMap).sort((a,b) => b.length - a.length);
while (remaining.length) {
let matched = false;
for (const k of keys) {
if (remaining.startsWith(k)) {
decoded += reverseMap[k];
remaining = remaining.slice(k.length);
matched = true;
break;
}
}
if (!matched) {
decoded += remaining[0];
remaining = remaining.slice(1);
}
}
const mid = Math.floor(decoded.length / 2);
return (decoded[mid] + decoded.slice(mid + 1)).toUpperCase();
}).join('');
}
Output
(Run the program to view its output)
Embed on website
To embed this program on your website, copy the following code and paste it into your website's HTML:
Comments
This comment belongs to a banned user and is only visible to admins.
This comment belongs to a deleted user and is only visible to admins.