Creazione di una funzione su più righe


9

Sto tentando di creare una funzione su più righe.

Parametri della sfida:

  1. La funzione restituisce 'barbaro'
  2. Solo 2 caratteri per riga
  3. Massimo 40 righe. Continuo a provare a usare una freccia grassa per dichiarare la mia funzione, ma le frecce grasse non sembrano funzionare se non le hai collegate.

Fonte della sfida: https://www.codewars.com/kata/multi-line-task-plus-plus-hello-world

Il mio lavoro attuale:

f=
(
)=>

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

Funziona, ma ') =>' è lungo 3 caratteri. Voglio solo sapere come è possibile persino allungare la creazione di una funzione. Non riesco a trovare alcuna informazione su di esso da nessuna parte in quanto ovviamente non è molto pratico.



2
Benvenuti in PPCG! Sfortunatamente, questa sfida non ha un criterio vincente oggettivo e voterò per chiuderla fino a quando non sarà corretta. In futuro, utilizza la sandbox per ricevere feedback sulla tua domanda prima che venga pubblicata.
FantaC

Anche Stack Overflow sarebbe un posto migliore per questo, se
espresso

5
Penso che questo vada bene come una domanda che richiede suggerimenti per risolvere una particolare sfida del codice e ho votato per riaprire.
Laikoni

6
Concordo con Laikoni sul fatto che ciò stia sicuramente chiedendo consigli su come gestire un vincolo di layout del codice (ovvero, fonte limitata) piuttosto che porre una domanda di programmazione come in SO.
xnor

Risposte:


7

Ecco una soluzione a 38 linee:

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

Crea una funzione usando il Functioncostruttore, a cui accede [].map.constructorusando la notazione con pedice ( []['map']['constructor']). Questo è il metodo utilizzato da JSFuck per creare funzioni.


Non stai accedendo []['map']['constructor']invece di []['sum']['constructor']?
Jonathan Frech,

A meno che non stia leggendo questo male, restituisce il plurale dei "barbari"?
Cole

1
@cole Anche il tentativo della domanda - contrariamente alla dichiarazione del problema della domanda - sembra produrre il plurale.
Jonathan Frech,

> _ <mi dispiace errori di battitura
solo ASCII

Questo è fantastico! C'è un modo per raderlo fino a un numero ancora minore di righe? Solo curioso a questo punto in quanto questo è il primo che ho sentito parlare di costruttori.
theNewfelll

14

35 linee

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

Provalo online!

Usa il fatto che 0è un numero, il costruttore di 0è Numbere il costruttore di Numberè Function.

32 righe

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

Provalo online!

Questo essenzialmente funziona

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

che utilizza la struttura IIFE . Il vantaggio aggiuntivo è che possiamo interrompere alcune parti nel corpo della funzione per ridurre il conteggio delle linee.

24 linee

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

Provalo online!

Versione in linea:

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

Poiché tutto ciò che vogliamo è restituire una stringa, possiamo cavarcela con un metodo stringa associato a una stringa. Usando trim, possiamo anche tranquillamente lasciare una nuova riga iniziale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.