Создание функции в несколько строк


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\
'

Это работает, но ') =>' имеет длину 3 символа. Я действительно просто хочу знать, как можно даже растянуть создание функции. Я нигде не могу найти информацию об этом, поскольку это, очевидно, не очень практично.



2
Добро пожаловать в PPCG! К сожалению, этот вызов не имеет объективного критерия победы, и я голосую, чтобы закрыть этот вызов до его устранения. В будущем, пожалуйста, используйте песочницу, чтобы получить отзыв по вашему вопросу, прежде чем он будет опубликован.
FantaC

Кроме того, переполнение стека было бы лучшим местом для этого, если сформулировать по-другому
FantaC

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это число, конструктор 0is Numberи конструктор Numberis 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.