Створення функції через кілька рядків


9

Я намагаюся створити функцію через кілька рядків.

Параметри завдання:

  1. Функція повертає "варвар"
  2. Всього 2 символи на рядок
  3. Максимум 40 рядків. Я намагаюся використовувати жирову стрілку для оголошення своєї функції, але жирові стрілки, здається, не спрацьовують, якщо у вас їх немає.

Джерело виклику: https://www.codewars.com/kata/multi-line-task-plus-plus-hello-world

Моя поточна робота:

f=
(
)=>

'\
b\
a\
r\
b\
a\
r\
i\
a\
n\
s\
'

Це працює, але ') =>' має три символи. Мені дуже просто хочеться знати, як можна навіть розтягнути створення функції. Я ніде не можу знайти інформацію про нього, оскільки це, очевидно, не дуже практично.



2
Ласкаво просимо до PPCG! На жаль, цей виклик не має об'єктивного критерію виграшу, і я голосую за те, щоб закрити цю проблему до її усунення. Надалі, будь ласка, використовуйте пісочницю, щоб отримувати відгуки на ваше запитання до його розміщення.
— FantaC

Також Stack Overflow був би кращим місцем для цього, якщо
— сказати

5
Я думаю, що це добре, як запитання про поради, щоб вирішити певну проблему з кодом, і проголосували за повторне відкриття.
— Лайконі

6
Я погоджуюся з Лайконі, що це, безумовно, прохання порадити щодо вирішення обмежень щодо макета коду (тобто, з обмеженим джерелом), а не з питань програмування, як у SO.
— xnor

Відповіді:


7

Ось рішення на 38 рядків:

f=
[]
[
'\
m\
a\
p'
][
'\
c\
o\
n\
s\
t\
r\
u\
c\
t\
o\
r'
]`
r\
e\
t\
u\
r\
n\
'\
b\
a\
r\
b\
a\
r\
i\
a\
n\
'`

Він створює функцію за допомогою Functionконструктора, до якого отримує доступ із [].map.constructorвикористання підпису підпису ( []['map']['constructor']). Це метод, який JSFuck використовує для створення функцій.


Ви не звертаєтесь []['map']['constructor']замість до []['sum']['constructor']?
— Джонатан Фрех

Якщо я не читаю це неправильно, він повертає множину "варварів"?
— Коул

1
@cole Спроба запитання - всупереч твердженню проблеми питання - також, здається, виводить множину.
— Джонатан Фрех

> _ <вибачте помилки
— лише ASCII

Це чудово! Чи є який-небудь спосіб розчесати її до ще меншої кількості ліній? Просто цікаво на даний момент, оскільки це перший, що я чув про конструкторів.
— theNewfelll

14

35 рядків

f=
0[
c=
'\
c\
o\
n\
s\
t\
r\
u\
c\
t\
o\
r'
][
c]
`
r\
e\
t\
u\
r\
n\
'\
b\
a\
r\
b\
a\
r\
i\
a\
n'
`

Спробуйте в Інтернеті!

Використовує той факт, що 0є числом, конструктором 0є Number, а конструктором Numberє Function.

32 Рядки

0[
c=
'\
c\
o\
n\
s\
t\
r\
u\
c\
t\
o\
r'
][
c]
`
f=
_\
=>
'\
b\
a\
r\
b\
a\
r\
i\
a\
n'
`(
)

Спробуйте в Інтернеті!

Це по суті працює

Function(`
f=
_=>
'barbarian'`)()

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

24 лінії

f=
''
[
'\
t\
r\
i\
m'
][
'\
b\
i\
n\
d'
]`
b\
a\
r\
b\
a\
r\
i\
a\
n`

Спробуйте в Інтернеті!

Вбудована версія:

f=''['trim']['bind']`
barbarian`

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.