Не меняется list на tuple
Есть работающий код для решения fizz-buzz:
python(`
r = [[15, 'fizzbuzz'], [3, 'fizz'], [5, 'buzz'], [1, '']]
for x in range(1, 33):
for y,m in r:
if x % y == 0:
print(m or x)
break
`)
function python(code) {
with ({
list: Array.from,
*range(l, r, s=1) { for (r ?? (r=l,l=0); l<r; ++l) yield l },
print: console.log,
}) {
eval(code
.replace(/[ \t]+$/g, "")
.replace(/^( *)(?:( +).*\r?\n)(?=(?: *\r?\n)*\1(?![ \r\n]))/gm, (m,s,d) => m + d.replace(/ /g, "}"))
.replace(/^ *(\w+)(.*):\s*$/gm, (m,x,t) => { try { eval(`var ${x}`); return m; } catch { return `${x}(${t}):` } })
.replace(/:\s*$/gm, "{")
.replace(/\b((?=\w+,)[\w,]+\s+)in\b/g, '[$1]of')
.replace(/\bin\b/g, 'of')
.replace(/\band\b/g, '&&')
.replace(/\bor\b/g, '||')
)
}
}
Хочу в нём переменную r
сделать списком tuple'ов, но не получается - код запускается, никаких ошибок не происходит, но и ответ не выводится:
python(`
r = [(15, 'fizzbuzz'), (3, 'fizz'), (5, 'buzz'), (1, '')]
for x in range(1, 33):
for y,m in r:
if x % y == 0:
print(m or x)
break
`)
function python(code) {
with ({
list: Array.from,
*range(l, r, s=1) { for (r ?? (r=l,l=0); l<r; ++l) yield l },
print: console.log,
}) {
eval(code
.replace(/[ \t]+$/g, "")
.replace(/^( *)(?:( +).*\r?\n)(?=(?: *\r?\n)*\1(?![ \r\n]))/gm, (m,s,d) => m + d.replace(/ /g, "}"))
.replace(/^ *(\w+)(.*):\s*$/gm, (m,x,t) => { try { eval(`var ${x}`); return m; } catch { return `${x}(${t}):` } })
.replace(/:\s*$/gm, "{")
.replace(/\b((?=\w+,)[\w,]+\s+)in\b/g, '[$1]of')
.replace(/\bin\b/g, 'of')
.replace(/\band\b/g, '&&')
.replace(/\bor\b/g, '||')
)
}
}
PS: С 1 апреля!