"Scrivi" una semplice calcolatrice senza scrivere una sola riga di codice


25

È molto facile:

Crea un programma senza scrivere una singola riga di codice. Il codice può comprendere solo domande e risposte Stack Overflow esistenti.

Il programma dovrebbe creare due numeri casuali e generare i numeri

  • aggiunto a,
  • sottratto da,
  • moltiplicato con e
  • diviso per

l'un l'altro.

Regole

È necessario includere collegamenti alle domande / risposte utilizzate nella risposta. Non puoi modificare il codice che trovi, con le seguenti eccezioni:

  1. È possibile rinominare variabili, funzioni e metodi. (Ciò non significa che è possibile modificare l'invocazione di un metodo, cambiando, ad esempio scanner.nextInt () in scanner.nextLine () e affermando che si sta modificando il nome di un metodo. La modifica deve essere nella definizione o nel riferimento al stessa entità.). La soluzione dovrebbe comunque funzionare se variabili, funzioni o metodi vengano rinominati nuovamente.

  2. È possibile regolare il rientro in modo appropriato.

  3. Puoi supporre che vengano caricati i moduli corretti affinché gli snippet di codice funzionino. (ad esempio istruzioni di importazione per Java e Python, utilizzo di istruzioni per C # e C ++ e loro equivalenti in tutte le lingue) Se lo snippet di codice include le importazioni per te, puoi spostarle all'inizio del codice.

  4. Se la lingua richiede l'esecuzione del codice in una sorta di corpo del metodo (ad esempio, public static void main(String[] args)per Java, static int Main(string[] args)per C # e così via), è possibile racchiudere il codice nel metodo appropriato. Ma i contenuti di quel metodo principale devono rimanere non modificati.

  5. È necessario fornire un elenco esplicito di qualsiasi variabile / metodo / funzione / rinominazione di classe eseguita.

  6. Non puoi prendere frammenti di frammenti (il che significa che se prendi un blocco di codice da un post, prendi tutto) Fornisci una breve descrizione di ciò che fa il codice per le persone che non hanno familiarità con la lingua che stai utilizzando. È necessario utilizzare i frammenti pubblicati prima dell'inizio di questa sfida.

Contest di popolarità, quindi vince il maggior numero di voti!

Scadenza

Accetterò la richiesta che ha più voti verso la fine del 6 agosto.


Ciao michael, e benvenuto nello scambio di stack PPCG! Una delle regole per le sfide del codice su questo sito è che devono avere una condizione vincente obiettiva, quindi dovresti scegliere tale condizione per questa. Questa è una sfida simile che potrebbe darti alcune idee.
isaacg,

Ciao @isaacg, grazie. Darò un'occhiata ed eliminerò / modificherò questo.
baao,

@isaacg, spero che ora vada bene. Sei più esperto di me qui, la scadenza è troppo vicina / lontana?
baao,

È molto meglio. La scadenza è troppo vicina, lo standard è di circa 1-2 settimane.
isaacg,

Ok grazie ancora.
baao,

Risposte:


17

J, 7 domande / risposte, nessuna su J

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

È un modo dannatamente economico per farlo, non mentirò. Ecco le risposte SO che ho usato:

Ho rinominato la variabile foocome ae bnel codice.


Immagino che adottare questo approccio sarebbe molto più difficile in APL, ma ci sono ancora buone probabilità di trovare i personaggi in un blocco di codice da soli.
Giovanni,

1
@JohnE Questo è il vantaggio di essere rumore ASCII!
Fatalizza il

1
Mi piace questa risposta, ma la domanda afferma "Non puoi prendere frammenti di frammenti" - cosa sta facendo, giusto?
Unlemeat

3
@unclemeat "se prendi un blocco di codice da un post, prendi tutto". Per me sembra che ci siano più blocchi di codice in un post, puoi prenderne solo uno, ma non puoi prendere parte a un blocco di codice.
Fatalizza il

Tutti questi provengono da blocchi di codice completi: dai un'occhiata alle fonti.
Sean Latham,

7

Python 2, 7 6 riferimenti

Creare questa soluzione non è stato facile come sembrava. La ricerca di Stack Overflow per un codice specifico è difficile, poiché i simboli non sono inclusi nella ricerca.

Avevo trovato un modo per farlo con numeri casuali a 2000 bit, usando una risposta diversa al posto del Rif. N. 1, ma non ho potuto testarlo sugli ambienti online che utilizzo dal momento che comporta getrandbits, che chiama os.urandom, dandomi un NotImplementedError, quindi sono andato così. Questo potrebbe effettivamente essere utilizzato ora, con TIO.

Provalo online

#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

Riferimenti

import random si presume che sia caricato, poiché la domanda dice che è consentito.

  1. lst = []e lst.append(random.randint(1, 100))- qui

  2. map(sum, zip(r1, r2)), map(lambda t: t[0] - t[1] ,zip(r1, r2)), r1, E r2- Qui

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

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

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

  6. print x- Qui

rinominato

  1. lstrinominato in n1e n2(Rif # 1: ho usato l'intero codice due volte)

  2. r1e r2rinominato in n1e n2(Ref # 2: In seguito ho usato le variabili separate, per assegnare le mappe e per dividere nell'ultima stampa, poiché la risposta le includeva.)

  3. resulte arinominato in ab, e brinominato in n2(Ref # 3)

  4. ae brinominato in n1e n2(Ref # 4)

  5. firste some_listsia rinominato r1, r2, ab, o n2, a seconda di quale linea. (Rif # 5: l'ho usato quattro volte. Nota che viene utilizzato solo il primo compito, quindi non rinomino last)

  6. xviene rinominato in r1, r2o ab, a seconda di quale riga. (Rif. 6)


1

Decimale , 2 riferimenti

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Comandi utilizzati:

  • 0 SET (indice stack predefinito)
  • 1 SPINGERE
    • 2 CHAR
  • 2 POP
  • 3 I / O
    • 00 pila duplicata
    • 01 dallo stack allo STDOUT
  • 4 MATEMATICA
    • 1 INSERISCI
    • 2 SOTTRARRE
    • 3 MOLTIPLICARE
    • 4 DIVIDERE
  • 8 BUILTIN
    • 2 spingere un numero intero casuale per impilarlo

Versione spiegata:

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

fonti:

Provalo online! Dovrai disabilitare la cache di output se non viene disabilitata automaticamente.

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.