Scrivi un programma che scrive una funzione MA in un'altra lingua!


30

Scrivi il programma più breve che accetta un input (n) da STDIN (o equivalente) e genera una semplice funzione di incremento con un argomento (x) che restituisce x + n ma la funzione deve essere in una lingua diversa. Abbastanza semplice!

Si tratta di code-golf, si applicano le normali regole, il programma più corto vince.

Esempio:> <> in Python (Ungolfed)

!v"def i(x):"a"    return x+"ir!
 >l?!;o

Ingresso:

3

Produzione:

def i(x):
    return x+3

EDIT: sono consentite funzioni anonime ed espressioni lambda!


Quanto può arrivare l'ingresso? Per quanto ne so, il tuo esempio funziona solo con numeri a una cifra per> <> metà di esso.
Sp3000,

In teoria, dovrei essere in grado di utilizzare qualsiasi input (ragionevole), ma le risposte che utilizzano solo un input in grado di mantenere 1 cifra sono pienamente accettabili, ho considerato di rielaborare l'esempio per correggerlo prima di postare, ma ho pensato che avrei dovuto lasciarlo per semplicità .
Blake Lockley,

4
Non vedo alcuna definizione per function BUTcui dovremmo scrivere .. -_-
Ottimizzatore

1
Quando una funzione restituisce un'altra funzione, si chiama chiusura . Non so se questo si applichi al cross-language, però ...
ETHproductions

@ETHproductions Immagino che l'obiettivo non sia restituire un oggetto funzione, ma il codice sorgente di una funzione in quell'altra lingua.
Paŭlo Ebermann,

Risposte:


23

GS2 → K, 2 byte

•+

Ciò stampa una tacita funzione monadica. Il codice sorgente utilizza la codifica CP437 . Provalo online!

Prova

$ xxd -c 2 -g 1 sum-func.gs2
00000000: 07 2b  .+
$ printf 42 | gs2 sum-func.gs2
42+
$ kona
K Console - Enter \ for help

  (42+) 69
111
  f : 42+
42+
  f 69
111

Come funziona

GS2

  • GS2 legge automaticamente da STDIN e invia l'input nello stack.

  • indica che il byte successivo è una stringa singleton letterale.

  • Prima di uscire, GS2 stampa tutti gli oggetti dello stack.

K

Il curriculum argomento sinistro è automatico in K.

Qui, n+trasforma la funzione diadica +in una funzione monadica impostando il suo argomento sinistro su n.


1
Quale codifica stai usando?
Conor O'Brien,

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ "Il codice sorgente utilizza la codifica CP437 ."
ETHproductions

16

ShapeScript → J, 4 byte

"&+"

Questo stampa un verbo tacito e monadico. Provalo online: ShapeScript , J

Prova

$ cat sum-func.shape; echo
"&+"
$ printf 42 | shapescript sum-func.shape; echo
42&+
$ j64-804/jconsole.sh 
   42&+ 69
111
   f =: 42&+
   f 69
111

Come funziona

ShapeScript

  • ShapeScript legge automaticamente da STDIN e invia l'input nello stack.

  • "&+" spinge quella stringa in pila.

  • Prima di uscire, ShapeScript stampa tutti gli elementi dello stack.

J

& esegue il curriculum degli argomenti.

Qui, n&+trasforma il verbo diadico +in un verbo monadico impostando il suo argomento sinistro su n.


Sono abbastanza sicuro che ci sia una lingua in cui non è necessaria la citazione ravvicinata.
Lirtosiast

Ci sono buone probabilità che tu abbia ragione, ma non riesco a ricordarmene uno con input e output impliciti.
Dennis,

13

GolfScript → CJam, 4 byte

{+}+

Questo stampa un blocco di codice (funzione anonima). Provalo online: GolfScript , CJam

Prova

$ cat sum-func.gs; echo
{+}+
$ printf 42 | golfscript sum-func.gs
{42 +}
$ cjam
> 69 {42 +} ~
111
> {42 +}:F; 69F    
111

Come funziona

GolfScript

  • GolfScript legge automaticamente da STDIN e invia l'input nello stack.

  • {+} spinge quel blocco in pila.

  • + esegue la concatenazione, che concatena felicemente una stringa e un blocco.

  • Prima di uscire, GolfScript stampa tutti gli elementi dello stack.

CJam

{n +}è un blocco di codice che, una volta eseguito, preme prima nsullo stack, quindi viene eseguito +, il che estrae due numeri interi dallo stack e ne spinge la somma.


2
Stavo per pubblicare questo!
Loovjo,

Wow, è impressionante. {n +}spinge 42, quindi esegue +. (Probabilmente dovrebbe essere {42 +}o "spinge n")
Giustino l'

@Justin In effetti. Grazie!
Dennis,

12

Cervello da *** a JavaScript ES6, 57 byte

----[-->+++<]>--.[-->+<]>+.+.--[->++<]>.[--->+<]>+++.[,.]

(Suppone che l'input sia composto da caratteri numerici)

Di 1337'il tuo contributo. Quindi, questo verrebbe compilato per:

x=>x+1337


10

Da O a K, 5 byte

i '++ o

Grazie a @ kirbyfan64sos

Un'altra versione che utilizza funzionalità aggiunte dopo la creazione della sfida.

I '+
  • Ottiene l'input, spinge per impilare
  • Spinge '+' come stringa
  • Emette i contenuti dello stack

K ha il curry automatico, quindi puoi semplicemente farlo i'++p.
Kirbyfan64sos,

La distanza tra K e O è 4. È necessario accorciarla di un byte.
mbomb007,

@ mbomb007 wat. Il codice è lungo 5 byte
fase

2
Le lettere. In alfabeto. Prendilo?
mbomb007,

1
@ mbomb007 che era troppo complicato per me
fase

9

R a Julia, 19 byte

cat("x->x+",scan())

Questo legge un numero intero da STDIN usando scan()e scrive una funzione Julia senza nome su STDOUT usando cat(). La funzione Julia è semplicemente x->x+n, da dove nproviene il programma R.


9

Malbolge a JavaScript ES6, 71 byte

('&%@9]!~}43Wyxwvutsr)Mon+HGi4~fBBdR->=_]:[875t4rT}0/Pf,d*((II%GEE!Y}Az

È sempre divertente generare codice Malbolge.


8

Minecraft da 1.8.7 a K, 7 6 + 33 + 27 + 62 = 129 128 byte

Questo sta usando questa versione del conteggio dei byte .

il sistema

Blocchi di comando (da sinistra a destra):

gli obiettivi del tabellone segnapunti aggiungono K manichino
i giocatori del tabellone segnano JK <input>
tellraw @a {punteggio: {nome: "J", obiettivo: "K"}, extra: [{text: "+"}]}

Probabilmente questo potrebbe essere giocato un po 'di più, ma è abbastanza semplice: generare una variabile Jcon l'obiettivo Ke impostare il punteggio per quell'obiettivo sull'input (non c'è STDIN - ho pensato che fosse abbastanza vicino). Quindi, dopo un segno di spunta, genera il punteggio della variabile Jper l'obiettivo Kseguito da a +. Vai tranquillo.


Si noti che il .dat bytecounting non è applicabile per questo sistema, poiché la versione di Minecraft elencata non supporta i file di struttura.
Addison Crump,

Per il secondo, non è possibile rimuovere extra, posizionare il punteggio JSON in un array e posizionare una stringa dopo? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
Programmi di Redwolf il

@RedwolfPrograms Non al momento della presentazione, quattro anni fa.
Addison Crump,

8

Seriamente a Python, 15 byte

,"lambda n:n+"+

Si aspetta che l'input sia in forma di stringa, ad es "3"

Spiegazione:

,: read value from input
"lambda n:n+": push this literal string
+: concatenate top two values on stack

Provalo online (dovrai inserire manualmente l'input perché ai permalink non piacciono le virgolette)


Ehi, qualcuno ha davvero affrontato seriamente! : D
ETHproductions

2
Sul serio? Hai finito seriamente prima di Simplex? D:
Conor O'Brien,

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Non è ancora del tutto finito (vedi il tracker dei problemi), ma funziona abbastanza bene da usare in alcuni campi da golf.
Mego

7

Mathematica a C #, 22 byte

"x=>x+"<>InputString[]

Emette un C # Func<int, int>del modulo

x=>x+n

1
L'output è anche Javascript (ES6 / 7) valido.
Ismael Miguel,


6

Pyth in APL, 7 5 byte

+z"--

Il codice Pyth concatena semplicemente l'input ( z) con la stringa "--". Questo crea un treno monadico senza nome in APL con la forma n--, da dove nproviene Pyth. Quando lo si chiama in APL, (n--)xper alcuni argomenti viene xcalcolato n--x = n-(-x) = n+x.

Prova: Pyth , APL

Salvato 2 byte grazie a Dennis!


5

> <> in Python, 25 + 3 = 28 byte

"v+x:x adbmal
o/?(3l
;>~n

Accetta input tramite -vflag, ad es

py -3 fish.py add.fish -v 27

e genera un lambda Python, ad es lambda x:x+27.

Per un bonus, ecco una versione di input STDIN per 30 byte:

i:0(?v
x+"r~/"lambda x:
o;!?l<

5

Mouse per Ruby, 19 byte

?N:"->x{x+"N.!"}"$

Ungolfed:

? N:       ~ Read an integer from STDIN, store in N
"->x{x+"   ~ Write that string to STOUT
N. !       ~ Write N
"}"$       ~ Close bracket, end of program

Questo crea una funzione Ruby senza nome della forma da ->x{x+n}cui nproviene il mouse.


Ottimo lavoro, mi piace questo post.
fase


5

Brainfuck a Java, 273

+ [-----> +++++ +++++ ++++++ [----> ++++ + [-....> ++++ .- [- > +++ -.----- [-...> +++ +++++ ++++++ [----> ++++ .- [---> ++ -. [-----> ++ -. [-..> +++ --------- .------------- [---> + --- + --- ---- .- [-...> +++++ -.- [---> ++ -.. [-----> +++, [. ,] + [---------> +++ .- [---> +++.

Emette un metodo simile int d(int i){return i+42;}(che non sembra un metodo Java, ma ... Java!)


1
Sai, perché Java.
Conor O'Brien,

1
Cosa significa che non sembra un metodo Java? In quale altro modo dovrebbe apparire questo tipo di metodo?
Paŭlo Ebermann,

@ PaŭloEbermannpublic static int method(int argument){return argument+42;}
fase

1
Va bene. (Anche se se stai programmando solo in public static, non stai davvero facendo Java. argumentSarebbe anche meglio summandnominarlo ;-). )
Paŭlo Ebermann l'

@ PaŭloEbermann Stavo solo facendo la modellapublic static void main(String[] arguments){}
fase

4

PHP → JavaScript (ES6), 20 24 byte

Leggere da STDIN è sempre costoso in PHP. Sembra un po 'strano:

x=>x+<?fgets(STDIN);

Stampa x=>x+e attende l'input dell'utente per completare la stringa, termina con la funzione JavaScript anonima completa, ad es x=>x+2.

Prima versione (24 byte )

<?='x=>x+'.fgets(STDIN);

Perché non solo x=>x+<?=$x;? È PHP4.1 valido e puoi passare i valori su POST, GET, SESSION, COOKIE, ... e funzionerà perfettamente. O su PHP5.3 con register_globals=on(sul tuo php.inifile).
Ismael Miguel,

@IsmaelMiguel I requisiti della sfida dicono che ci vuole un numero da STDIN. Ogni volta che ho ignorato che è stato criticato. Quindi prendo sul serio i requisiti ora. :)
inserireusernamehere il

Bene, penso che GETsia passato STDIN. Posso provarlo tra poco.
Ismael Miguel,

1
serverfault.com/questions/187025/… <- Prove sul mio reclamo. Usa semplicemente il codice che ho fornito, schiaffeggia questo link e nessuno può lamentarsi
Ismael Miguel

1
Ho capito! È davvero intelligente!
Blackhole,


4

Python 2 a CJam, 18 20 byte

Grazie a LegionMammal978 per aver corretto la funzionalità.

print"{%f+}"%input()

Python esegue un formato di stringa di base. %fè il codice per un float, e dato che non perderei byte per la gestione dei float, sono andato avanti e l'ho fatto.

La CJam è molto simile alla risposta Golfscript-> CJam. Sembra qualcosa del genere:

{7.4+}

o:

{23+}

È un blocco che toglie il valore più alto dallo stack, spinge il numero speciale, quindi li aggiunge.


@ LegionMammal978 Alla fine della domanda dice che sono consentite funzioni anonime ed espressioni lambda. Tuttavia, modificherò la mia risposta con un programma completo alternativo.
bkul,

1
L'OP significa che l'uscita può essere una funzione.
LegionMammal978,

3

Shell POSIX per Haskell, 19 byte

read n;echo "($n+)"

Essendo consentite funzioni anonime, Haskell è una buona scelta di output con le sezioni dell'operatore.


3

Retina in Pip , 4 byte

Utilizza un file per ciascuna di queste righe + 1 byte di penalità; oppure, inserisci entrambe le righe in un singolo file e usa il -sflag.

$
+_

Abbina la fine dell'input con $e inserisce +_lì. Ciò si traduce in qualcosa del modulo 3+_, che è una funzione anonima in Pip.


3

Bash → C / C ++ / C # / Java, 33 byte

e forse altri

echo "int f(int a){return a+$1;}"

3

Da Vitsy a K, 5 byte

\ o / K verrà utilizzato molto presto se può farlo.

N '+' Z

o forse...

N '+' O

Se l'input viene considerato come una stringa (solo per input 0-9) ...

i '+' Z

Tutti questi, per l'ingresso 2, produrranno:

2+

3

Piccolo Lisp a Ceylon , 68 61

(d u(q((n)(c(q(Integer x))(c(q =>)(c(c(q x+)(c n()))()))))))

Tiny Lisp non ha input e output reali, ha solo una valutazione delle espressioni. Questo codice sopra crea una funzione e la lega a u. È quindi possibile chiamare ucon l'argomento nin questo modo: (u 7)che valuterà a questo valore piccolo Lisp:

((Integer x) => (x+ 7))

Questa è un'espressione di Ceylon valida, per una funzione anonima che aggiunge 7 a un numero intero arbitrario.

Grazie a DLosc per un miglioramento di 7 byte.


Bel lavoro lavorando con capacità di output molto limitate!
DLosc,

3

JavaScript a Lambda Calculus , 39 byte

(Questo utilizza il documento collegato come base.)

alert((x=>`λa(${x}(add a))`)(prompt()))

Dire input è 5. Quindi questo diventa:

"λa(5(add a))"

1
Dov'è un interprete per Lambda Calculus?
febbraio

@feersum Controlla il link. Non sono sicuro che esista un vero interprete, ma mi è stato detto che ero in grado di inviare in questa lingua.
Conor O'Brien,

1
Cosa intendi con "ti è stato detto"? Le risposte che non vengono eseguite in nessuna implementazione linguistica non sono valide.
febbraio


1
Essendo il calcolo lambda abbastanza noto, suppongo che ci debba essere un interprete valido da qualche parte. Il punto è che devi identificare un tale interprete e scrivere il codice nel formato accettato da quell'interprete.
febbraio


2

GNU sed a C, 46 byte

sed -r 's/^([0-9]+)$/f(int x){return x+\1;}/'

2

Ceylon a Tiny lisp , 76

shared void run(){print("(q((x)(s ``process.readLine()else""``(s 0 x))))");}

Questo produce (dopo aver letto una riga di input) output come (q((x)(s 5(s 0 x)))), che valuta in Tiny Lisp ((x) (s 5 (s 0 x))), una funzione che prende un argomento x, lo sottrae da 0 e sottrae il risultato da 5. (Sì, ecco come si aggiunge in Tiny Lisp , c'è solo una funzione di sottrazione integrata. Naturalmente, si potrebbe prima definire una funzione di addizione, ma questa sarebbe più lunga.)

Puoi usarlo in questo modo come una funzione anonima:

((q((x)(s 5(s 0 x)))) 7)

(Questo valuterà a 12.)

Oppure puoi dargli un nome:

(d p5 (q((x)(s 5(s 0 x)))))
(p5 7)

Correzioni e suggerimenti sul golf di DLosc, l'autore di Tiny Lisp.


2

Javascript (ES6)> PHP / Javascript, 38 48 47 byte

Questo codice è una funzione anonima che crea una funzione VALID PHP e Javascript chiamata anonymous.

P=prompt;P(Function('$x',`return $x+${P()};`));

A partire dalla stesura di questo codice, solo Firefox ha implementato ES6 nativelly (senza flag e simili).

Questo codice utilizza la prompt()funzione per richiedere input e output. Firefox supporta la copia dell'output di prompt(), rendendolo un metodo di output legale per Javascript.


considerazioni:

  • Alla ;fine è richiesto per PHP
  • Lo spazio in return $xè richiesto da Javascript
    • Ignorarlo dirà che return$xnon è definito
  • Il nome della funzione è automatico: non ho scelta
  • Scegliere solo PHP o solo Javascript ridurrà il codice in 1 byte e ridurrebbe la metà del fattore divertimento
  • Può funzionare con altre lingue

Vecchia risposta (48 byte):

alert(Function('$x',`return $x+${prompt()};`));

Vecchia risposta non valida:

y=>''+Function('$x',`return $x+${y};`)

@ LegionMammal978 Fatto. Aggiustato.
Ismael Miguel,
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.