"Escribir" una calculadora simple sin escribir una sola línea de código

25

Es muy fácil:

Cree un programa sin escribir una sola línea de código. El código solo puede consistir en preguntas y respuestas existentes de Stack Overflow.

El programa debe crear dos números aleatorios y generar los números.

  • añadido a,
  • extraído de,
  • multiplicado con y
  • dividido por

El uno al otro.

Reglas

Debe incluir enlaces a las preguntas / respuestas que utilizó en su respuesta. No puede modificar el código que encuentre, con las siguientes excepciones:

  1. Puede cambiar el nombre de variables, funciones y métodos. (Esto no significa que pueda cambiar la invocación de un método, cambiando, digamos scanner.nextInt () a scanner.nextLine () y alegando que está cambiando el nombre de un método. El cambio debe estar en la definición o referencia al misma entidad). La solución aún debería funcionar si las variables, funciones o métodos serían renombrados nuevamente.

  2. Puede ajustar la sangría adecuadamente.

  3. Puede suponer que se cargan los módulos adecuados para que funcionen los fragmentos de código. (p. ej., declaraciones de importación para Java y Python, usando declaraciones para C # y C ++, y sus equivalentes en todos los idiomas) Si el fragmento de código incluye las importaciones por usted, puede moverlas a la parte superior del código.

  4. Si el lenguaje requiere que el código esté en algún tipo de cuerpo de método para ejecutarse (por ejemplo, public static void main(String[] args)para Java, static int Main(string[] args)para C #, etc.), puede ajustar su código en el método apropiado. Pero el contenido de ese método principal debe permanecer sin modificaciones.

  5. Debe proporcionar una lista explícita de cualquier variable / método / función / cambio de clase realizado.

  6. No puede tomar fragmentos de fragmentos (es decir, si toma un bloque de código de una publicación, lo toma todo) Proporcione una breve descripción de lo que hace el código para las personas que no tienen intimidad con el idioma que está utilizando. Debe usar fragmentos publicados antes de que se inicie este desafío.

¡Concurso de popularidad, por lo que gana la mayoría de los votos!

Fecha tope

Aceptaré la presentación que tenga más votos a fines de agosto, 6.

baao
fuente
Hola michael, y bienvenido al intercambio de pila PPCG. Una de las reglas para los desafíos de código en este sitio es que deben tener una condición ganadora objetiva, por lo que debe elegir dicha condición para este. Este es un desafío similar que podría darle algunas ideas.
isaacg
Hola @isaacg, gracias. Echaré un vistazo y eliminaré / editaré este.
baao
@isaacg, espero que esté bien ahora. Usted tiene más experiencia que yo aquí, ¿la fecha límite es demasiado cercana / lejana?
baao
Es mucho mejor. El plazo está demasiado cerca, sin embargo, el estándar es de aproximadamente 1-2 semanas.
isaacg
Ok, gracias de nuevo.
baao

Respuestas:

17

J, 7 preguntas / respuestas, ninguna sobre J

echo a%b[echo a*b[echo a-b[echo a+b[b=:?2147483647 [a=:?2147483647

Es una forma bastante barata de hacerlo, no voy a mentir. Aquí están las respuestas SO que utilicé:

Cambié el nombre de la variable foocomo ay ben el código.

Fatalizar
fuente
Me imagino que adoptar este enfoque sería mucho más difícil en APL, pero todavía hay una buena posibilidad de encontrar los caracteres en un bloque de código por sí mismos.
JohnE
1
@JohnE ¡Esa es la ventaja de ser ruido ASCII!
Fatalize
1
Me gusta esta respuesta, pero la pregunta dice "No puedes tomar fragmentos de fragmentos", lo que está haciendo, ¿verdad?
unclemeat
3
@unclemeat "si tomas un bloque de código de una publicación, tomas todo". Para mí, parece que si hay varios bloques de código en una publicación, puede tomar solo uno, pero no puede tomar parte de un bloque de código.
Fatalize
Todo esto proviene de bloques de código completos: eche un vistazo a las fuentes.
Sean Latham
7

Python 2, 7 6 referencias

Crear esta solución no fue tan fácil como parecía. Buscar el desbordamiento de pila para código específico es difícil, ya que los símbolos no se incluyen en la búsqueda.

Había encontrado una manera de hacer esto con números aleatorios de 2000 bits, usando una respuesta diferente en lugar de la Ref. # 1, pero no pude probarlo en los entornos en línea que uso, ya que involucra getrandbits, qué llamadas os.urandom, dándome un NotImplementedError, así que fui por este lado. Esto realmente podría usarse ahora, con TIO.

Pruébalo en línea

#assumed to be loaded
import random

n1 = []
n1.append(random.randint(1, 100))

n2 = []
n2.append(random.randint(1, 100))

r1 = map(sum, zip(n1, n2))
r2 = map(lambda t: t[0] - t[1] ,zip(n1, n2))

ab = [n1[i]*n2[i] for i in range(len(n1))]

r1, last = r1[0], r1[-1]
r2, last = r2[0], r2[-1]
ab, last = ab[0], ab[-1]
n2, last = n2[0], n2[-1]

print r1
print r2
print ab
ab = float(ab) / n2
ab = float(ab) / n2
print ab

Referencias

import random se supone que está cargado, ya que la pregunta dice que está permitido.

  1. lst = []y lst.append(random.randint(1, 100))- aquí

  2. map(sum, zip(r1, r2)), map(lambda t: t[0] - t[1] ,zip(r1, r2)), r1, Y r2- aquí

  3. result = float(a) / b- aqui

  4. ab = [a[i]*b[i] for i in range(len(a))]- aqui

  5. first, last = some_list[0], some_list[-1]- aqui

  6. print x- aqui

Renombrado

  1. lstrenombrado a n1y n2(Ref. # 1: Usé el código completo dos veces)

  2. r1y r2renombrado como n1y n2(Ref. # 2: sin embargo, utilicé las variables separadas más adelante, para asignar los mapas y dividir en la última impresión, ya que la respuesta los incluyó).

  3. resulty arenombrado a ab, y brenombrado a n2(Ref # 3)

  4. ay brenombrado como n1y n2(Ref # 4)

  5. firsty some_listtanto a llamarse a r1, r2, ab, o n2, dependiendo de la línea. (Ref. # 5: Usé esto cuatro veces. Tenga en cuenta que solo se usa la primera asignación, así que no cambio el nombre last)

  6. xse cambia el nombre a r1, r2o ab, dependiendo de la línea. (Ref # 6)

mbomb007
fuente
1

Decimal , 2 referencias

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Comandos utilizados:

  • 0 SET (índice de pila predeterminado)
  • 1 EMPUJAR
    • 2 CARBONIZARSE
  • 2 POPULAR
  • 3 I / O
    • 00 pila duplicada
    • 01 de la pila a STDOUT
  • 4 MATES
    • 1 AÑADIR
    • 2 SUSTRAER
    • 3 MULTIPLICAR
    • 4 DIVIDIR
  • 8 INCORPORADO
    • 2 empujar entero aleatorio para apilar

Versión explicada:

82D       ; push random INT    - stack contains {r1}
82D       ; push random INT    - stack contains {r1, r2}

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
41D       ; math +             - stack contains {r1, r2, r1+r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
42D       ; math -             - stack contains {r1, r2, r1-r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
43D       ; math *             - stack contains {r1, r2, r1*r2}
301       ; print from stack to output
2         ;                    - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
44D       ; math /             - stack contains {r1, r2, r1/r2}
301       ; print from stack to output

Fuentes:

Pruébalo en línea! Tendrá que deshabilitar el caché de salida si no se deshabilita automáticamente.

MD XF
fuente