Tworzenie funkcji w wielu liniach


9

Próbuję utworzyć funkcję w wielu wierszach.

Parametry wyzwania:

  1. Funkcja zwraca „barbarzyńca”
  2. Tylko 2 znaki w wierszu
  3. Maksymalnie 40 linii. Wciąż próbuję użyć grubej strzały, by zadeklarować moją funkcję, ale grube strzały nie działają, jeśli nie masz ich połączonych.

Źródło wyzwania: https://www.codewars.com/kata/multi-line-task-plus-plus-hello-world

Moja obecna praca:

f=
(
)=>

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

Działa, ale „) =>” ma 3 znaki. Naprawdę chcę po prostu wiedzieć, jak można nawet rozciągnąć tworzenie funkcji. Nigdzie nie mogę znaleźć żadnych informacji, ponieważ jest to oczywiście mało praktyczne.



2
Witamy w PPCG! Niestety to wyzwanie nie ma obiektywnego kryterium wygranej i głosuję za jego zamknięciem do czasu jego sprostowania. W przyszłości skorzystaj z piaskownicy, aby otrzymać opinię na temat pytania przed opublikowaniem.
FantaC

Również przepełnienie stosu byłoby lepszym miejscem do tego, gdyby było inaczej sformułowane
FantaC

5
Myślę, że jest to w porządku jako pytanie z pytaniami o wskazówki do rozwiązania konkretnego problemu z kodem i głosowałem za ponownym otwarciem.
Laikoni

6
Zgadzam się z Laikoni, że zdecydowanie prosi o radę w kwestii ograniczenia układu kodu (tj. Ograniczonego źródła), zamiast zadawać pytania programistyczne, takie jak w SO.
xnor

Odpowiedzi:


7

Oto rozwiązanie z 38 liniami:

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

Tworzy funkcję za pomocą Functionkonstruktora, do którego uzyskuje dostęp [].map.constructorza pomocą notacji indeksu dolnego ( []['map']['constructor']). Jest to metoda używana przez JSFuck do tworzenia funkcji.


Nie uzyskujesz dostępu []['map']['constructor']zamiast []['sum']['constructor']?
Jonathan Frech

O ile nie czytam tego źle, zwraca liczbę mnogą „barbarzyńców”?
cole

1
@cole Próba pytania - w przeciwieństwie do opisu problemu - wydaje się również dawać liczbę mnogą.
Jonathan Frech

> _ <przepraszam literówki
tylko ASCII

To jest świetne! Czy jest jakiś sposób, aby ogolić go do nawet mniejszej liczby linii? Ciekawe w tym momencie, ponieważ jest to pierwsza informacja o konstruktorach.
theNewfelll

14

35 linii

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

Wypróbuj online!

Wykorzystuje fakt, że 0jest liczbą, konstruktorem 0jest Number, a konstruktorem Numberjest Function.

32 linie

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

Wypróbuj online!

To zasadniczo działa

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

który wykorzystuje strukturę IIFE . Dodatkową zaletą jest to, że możemy przełamać linię niektórych części w ciele funkcji, aby zmniejszyć liczbę linii.

24 linie

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

Wypróbuj online!

Wersja Inline:

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

Ponieważ wszystko, czego chcemy, to zwrócić ciąg, możemy uciec od metody ciągu powiązanej z ciągiem. Korzystając z niego trim, możemy również bezpiecznie pozostawić początek nowej linii.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.