¡Escriba un programa que escriba una función PERO en un idioma diferente!


30

Escriba el programa más corto que toma una entrada (n) de STDIN (o equivalente) y genera una función de incremento simple con un argumento (x) que devuelve x + n pero la función debe estar en un idioma diferente. ¡Bastante simple!

Este es el código de golf, se aplican reglas normales, el programa más corto gana.

Ejemplo:> <> a Python (Ungolfed)

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

Entrada:

3

Salida:

def i(x):
    return x+3

EDITAR: ¡Se permiten funciones anónimas y expresiones lambda!


¿Qué tan grande puede ser la entrada? Por lo que puedo decir, su ejemplo solo funciona con números de un solo dígito para la mitad> <>.
Sp3000

En teoría, debería poder usar cualquier entrada (razonable), pero las respuestas que solo usan una entrada que podría mantener 1 dígito son completamente aceptables, consideré reelaborar el ejemplo para corregir esto antes de publicarlo, pero pensé que lo dejaría por razones de simplicidad .
Blake Lockley, el

44
No veo ninguna definición para function BUTeso que se supone que debemos escribir ... -_-
Optimizer

1
Cuando una función devuelve otra función, se llama cierre . Sin embargo, no sé si esto se aplica en
varios

@ETHproductions Supongo que el objetivo no es devolver un objeto de función, sino el código fuente de una función en ese otro idioma.
Paŭlo Ebermann

Respuestas:


23

GS2 → K, 2 bytes

•+

Esto imprime una función tácita y monádica. El código fuente usa la codificación CP437 . Pruébalo en línea!

Prueba de funcionamiento

$ 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

Cómo funciona

GS2

  • GS2 lee automáticamente desde STDIN y empuja la entrada en la pila.

  • indica que el siguiente byte es un literal de cadena singleton.

  • Antes de salir, GS2 imprime todos los elementos de la pila.

K

El argumento izquierdo curry es automático en K.

Aquí, n+convierte la función diádica +en una función monádica al establecer su argumento izquierdo en n.


1
¿Qué codificación estás usando?
Conor O'Brien el

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ "El código fuente utiliza la codificación CP437 ".
ETHproductions

16

ShapeScript → J, 4 bytes

"&+"

Esto imprime un verbo tácito y monádico. Pruébelo en línea: ShapeScript , J

Prueba de funcionamiento

$ 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

Cómo funciona

ShapeScript

  • ShapeScript lee automáticamente desde STDIN y empuja la entrada en la pila.

  • "&+" empuja esa cuerda en la pila.

  • Antes de salir, ShapeScript imprime todos los elementos de la pila.

J

& realiza argumentos curry.

Aquí, n&+convierte el verbo diádico +en un verbo monádico estableciendo su argumento izquierdo en n.


Estoy bastante seguro de que hay un idioma en el que no necesita la cita cerrada.
lirtosiast el

Hay una buena posibilidad de que tenga razón, pero no puedo recordar uno con entrada implícita y salida implícita.
Dennis

13

GolfScript → CJam, 4 bytes

{+}+

Esto imprime un bloque de código (función anónima). Pruébelo en línea: GolfScript , CJam

Prueba de funcionamiento

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

Cómo funciona

GolfScript

  • GolfScript lee automáticamente desde STDIN y empuja la entrada en la pila.

  • {+} empuja ese bloque en la pila.

  • + realiza la concatenación, que felizmente concatena una cadena y un bloque.

  • Antes de salir, GolfScript imprime todos los elementos de la pila.

CJam

{n +}es un bloque de código que, cuando se ejecuta, primero empuja nla pila, luego se ejecuta +, que saca dos enteros de la pila y empuja su suma.


2
¡Sólo iba a publicar esto!
Loovjo

Wow, eso es impresionante. {n +}empuja 42, luego ejecuta +. (Probablemente debería ser {42 +}o "empuja n")
Justin

@Justin De hecho. ¡Gracias!
Dennis

12

BrainF *** a JavaScript ES6, 57 bytes

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

(Asume que la entrada está compuesta de caracteres numéricos)

Decir 1337es su aporte. Entonces, esto se compilaría para:

x=>x+1337


10

O a K, 5 bytes

i '++ o

Gracias a @ kirbyfan64sos

Otra versión que usa características agregadas después de que se creó el desafío.

i '+
  • Obtiene entrada, empuja para apilar
  • Empuja '+' como una cadena
  • Salidas de contenido de la pila

K tiene curry automático, así que puedes hacerlo i'++p.
kirbyfan64sos

La distancia entre K y O es 4. Debe acortarlo un byte.
mbomb007

@ mbomb007 wat. El código tiene una longitud de 5 bytes
fase

2
Las cartas. En el abecedario ¿Consíguelo?
mbomb007

1
@ mbomb007 que fue demasiado complicado para mí
fase

9

R a Julia, 19 bytes

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

Esto lee un número entero de STDIN usando scan()y escribe una función de Julia sin nombre en STDOUT usando cat(). La función de Julia es simplemente x->x+n, de dónde nviene el programa R.


9

Malbolge a JavaScript ES6, 71 bytes

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

Siempre es divertido generar código Malbolge.


8

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

Esto está usando esta versión de conteo de bytes .

el sistema

Bloques de comando (de izquierda a derecha):

los objetivos del marcador agregan K ficticio
los jugadores del marcador establecen JK <input>
tellraw @a {puntaje: {nombre: "J", objetivo: "K"}, extra: [{texto: "+"}]}

Probablemente esto se pueda jugar un poco más, pero es bastante simple: generar una variable Jcon el objetivo Ky establecer su puntaje para ese objetivo en la entrada (no hay STDIN, pensé que esto estaba lo suficientemente cerca). Luego, después de una marca, genera el puntaje de la variable Jpara el objetivo Kseguido de a +. Pan comido.


Tenga en cuenta que el conteo de bytes .dat no es aplicable para este sistema, ya que la versión de Minecraft enumerada no admite archivos de estructura.
Addison Crump

Para el segundo, ¿no podría eliminar el extra, colocar el puntaje JSON en una matriz y colocar una cadena después? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
Programas Redwolf

@RedwolfPrograms No en el momento de la presentación, hace cuatro años.
Addison Crump

8

En serio a Python, 15 bytes

,"lambda n:n+"+

Espera que la entrada esté en forma de cadena, es decir "3"

Explicación:

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

Pruébelo en línea (deberá ingresar manualmente la entrada porque a los enlaces permanentes no les gustan las comillas)


¡Oye, alguien realmente lo hizo en serio! : D
ETHproductions

2
¿Seriamente? ¿Terminaste en serio antes de Simplex? D:
Conor O'Brien el

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Todavía no está completamente terminado (vea el rastreador de problemas), pero funciona lo suficientemente bien como para usarlo en algunos campos de golf.
Mego

7

Mathematica a C #, 22 bytes

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

Emite un C # Func<int, int>de formulario

x=>x+n

1
La salida también es Javascript válido (ES6 / 7).
Ismael Miguel


6

Pyth a APL, 7 5 bytes

+z"--

El código Pyth simplemente concatena la entrada ( z) con la cadena "--". Esto crea un tren monádico sin nombre en APL con el formulario n--, de donde nproviene Pyth. Al llamarlo en APL, (n--)xpara algunos argumentos xcomputa n--x = n-(-x) = n+x.

Prueba: Pyth , APL

¡Ahorré 2 bytes gracias a Dennis!


5

> <> a Python, 25 + 3 = 28 bytes

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

Toma entrada a través de la -vbandera, por ejemplo

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

y genera una Python lambda, por ejemplo lambda x:x+27.

Para obtener una bonificación, aquí hay una versión de entrada STDIN para 30 bytes:

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

5

Mouse to Ruby, 19 bytes

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

Sin golf:

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

Esto crea una función Ruby sin nombre del formulario de ->x{x+n}donde nproviene el mouse.


Buen trabajo, me gusta esta publicación.
fase


5

Brainfuck a Java, 273

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

Emite un método como int d(int i){return i+42;}(que no se parece a un método Java, pero ... ¡Java!)


1
Ya sabes, porque Java.
Conor O'Brien

1
¿Qué significa que no parece un método Java? ¿De qué otra forma debería verse ese tipo de método?
Paŭlo Ebermann

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

1
Hmm, ok. (Aunque si está programando solo en public static, realmente no está haciendo Java. argumentTambién sería mejor nombrarlo summand;-). )
Paŭlo Ebermann

@ PaŭloEbermann Estaba modelandopublic static void main(String[] arguments){}
fase

4

PHP → JavaScript (ES6), 20 24 bytes

Leer desde STDIN siempre es costoso en PHP. Se ve un poco extraño:

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

Imprime x=>x+y espera la entrada del usuario para completar la cadena, termina con la función completa de JavaScript anónimo, por ejemplo x=>x+2.

Primera versión (24 bytes )

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

¿Por qué no solo x=>x+<?=$x;? Es válido para PHP4.1 y puede pasar los valores por POST, GET, SESSION, COOKIE, ... y funcionará sin problemas. O en PHP5.3 con register_globals=on(en su php.iniarchivo).
Ismael Miguel

@IsmaelMiguel Los requisitos del desafío dicen que toma un número de STDIN. Cada vez que ignoré que fue criticado. Así que ahora me tomo en serio los requisitos. :)
insertusernamehere

Bueno, creo que eso GETse pasó por alto STDIN. Puedo probarlo en un momento.
Ismael Miguel

1
serverfault.com/questions/187025/… <- Evidencia en mi reclamo. Simplemente use el código que proporcioné, abofetee este enlace y nadie puede quejarse
Ismael Miguel

1
Ho, entendido! Eso es inteligente, de hecho!
Blackhole


4

Python 2 a CJam, 18 20 bytes

Gracias a LegionMammal978 por corregir la funcionalidad.

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

Python tiene un formato de cadena básico. %fes el código para un flotante, y como no perdería ningún byte para manejar flotadores, seguí adelante y lo hice.

El CJam es muy similar a la respuesta Golfscript-> CJam. Se ve algo como esto:

{7.4+}

o:

{23+}

Es un bloque que toma el valor superior de la pila, empuja el número especial y luego los agrega.


@ LegionMammal978 Al final de la pregunta dice que se permiten funciones anónimas y expresiones lambda. Aún así, editaré mi respuesta con un programa completo alternativo.
bkul

1
El OP significa que la salida puede ser una función.
LegionMammal978

3

POSIX shell a Haskell, 19 bytes

read n;echo "($n+)"

Al permitir las funciones anónimas, Haskell es una buena opción de salida con las secciones del operador.


3

Retina a Pip , 4 bytes

Utiliza un archivo para cada una de estas líneas + 1 byte de penalización; o, ponga ambas líneas en un solo archivo y use la -sbandera.

$
+_

Coincide con el final de la entrada $y los pone +_allí. Esto da como resultado algo de la forma 3+_, que es una función anónima en Pip.


3

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

y tal vez otros

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

3

Vitsy a K, 5 bytes

\ o / K se usará muy pronto si puede hacer esto.

N '+' Z

o tal vez...

N '+' O

Si la entrada se toma como una cadena (solo para la entrada 0-9) ...

i '+' Z

Todos estos, para la entrada 2, generarán:

2+

3

Diminuto Lisp a Ceilán , 68 61

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

Tiny Lisp no tiene entradas y salidas reales, solo tiene evaluación de expresiones. Este código anterior crea una función y la vincula u. Luego puede llamar ucon el argumento de nesta manera:, (u 7)que evaluará este valor de Tiny Lisp:

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

Esta es una expresión válida de Ceilán, para una función anónima que agrega 7 a un entero arbitrario.

Gracias a DLosc por una mejora de 7 bytes.


¡Buen trabajo trabajando con capacidades de salida muy limitadas!
DLosc

3

JavaScript para cálculo Lambda , 39 bytes

(Esto utiliza el documento vinculado como base).

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

Decir entrada es 5. Entonces esto se convierte en:

"λa(5(add a))"

1
¿Dónde está un intérprete para el cálculo de Lambda?
Feersum

@feersum Verifique el enlace. No estoy seguro de si existe un intérprete real, pero me dijeron que podía enviar en este idioma.
Conor O'Brien

1
¿Qué quieres decir con "te dijeron"? Las respuestas que no se ejecutan en ninguna implementación de idioma no son válidas.
Feersum


1
Como el cálculo de Lambda es bastante conocido, supongo que debe haber un intérprete válido en alguna parte. El punto es que debe identificar dicho intérprete y escribir el código en el formato aceptado por ese intérprete.
Feersum



2

Ceylon a Tiny lisp , 76

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

Esto produce (después de leer una línea de entrada) como (q((x)(s 5(s 0 x)))), que se evalúa en Tiny Lisp ((x) (s 5 (s 0 x))), una función que toma un argumento x, lo resta de 0 y resta el resultado de 5. (Sí, así es como se agrega Tiny Lisp , solo hay una función de resta incorporada. Por supuesto, primero se podría definir una función de suma, pero sería más larga).

Puede usarlo así como una función anónima:

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

(Esto evaluará a 12.)

O puedes darle un nombre:

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

Correcciones y pistas de golf de DLosc, el autor de Tiny Lisp.


2

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

Este código es una función anónima que crea una función PHP y Javascript VÁLIDA llamada anonymous.

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

A partir de la redacción de este código, solo Firefox ha implementado ES6 de forma nativa (sin banderas y demás).

Este código usa la prompt()función para solicitar entrada y salida. Firefox admite la copia de la salida de prompt(), lo que lo convierte en un método de salida legítimo para Javascript.


Consideraciones:

  • Al ;final se requiere para PHP
  • El espacio en return $xes requerido por Javascript
    • Ignorarlo dirá que return$xno está definido
  • El nombre de la función es automático: no tengo otra opción
  • Elegir solo PHP o solo Javascript solo reducirá el código en 1 byte y reduciría el factor diversión a la mitad
  • Puede trabajar con otros idiomas.

Respuesta anterior (48 bytes):

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

Antigua respuesta inválida:

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

@ LegionMammal978 Hecho. Arreglado.
Ismael Miguel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.