„Napisz” prosty kalkulator bez pisania ani jednego wiersza kodu


25

To jest bardzo łatwe:

Utwórz program bez pisania ani jednego wiersza kodu. Kod może składać się tylko z istniejących pytań i odpowiedzi dotyczących przepełnienia stosu.

Program powinien utworzyć dwie liczby losowe i wyprowadzić liczby

  • dodano do,
  • Odejmowane od,
  • pomnożone przez i
  • podzielony przez

wzajemnie.

Zasady

Musisz dołączyć linki do pytań / odpowiedzi użytych w odpowiedzi. Nie możesz modyfikować znalezionego kodu, z następującymi wyjątkami:

  1. Możesz zmieniać nazwy zmiennych, funkcji i metod. (Nie oznacza to, że możesz zmienić wywołanie metody, zmieniając, powiedzmy scanner.nextInt () na scanner.nextLine () i twierdząc, że zmieniasz nazwę metody. Zmiana musi być w definicji lub odwołaniu do ten sam podmiot). Rozwiązanie powinno nadal działać, jeśli zmienione nazwy, funkcje lub metody zostaną ponownie zmienione.

  2. Możesz odpowiednio dostosować wcięcie.

  3. Możesz założyć, że zostały załadowane odpowiednie moduły do ​​działania fragmentów kodu. (np. importuj instrukcje dla Javy i Pythona, używając instrukcji dla C # i C ++ oraz ich odpowiedników we wszystkich językach) Jeśli fragment kodu obejmuje importowanie, możesz przenieść je na początek kodu.

  4. Jeśli język wymaga, aby kod był w jakiejś formie metody do wykonania (np. public static void main(String[] args)Dla Javy, static int Main(string[] args)dla C # itd.), Możesz owinąć swój kod odpowiednią metodą. Ale zawartość tej głównej metody musi pozostać niezmodyfikowana.

  5. Musisz podać jawną listę wykonanych nazw zmiennych / metod / funkcji / klas.

  6. Nie możesz pobrać fragmentów (czyli jeśli weźmiesz blok kodu z postu, weź całość). Podaj krótki opis tego, co robi kod dla osób, które nie są zażyłe z językiem, którego używasz. Musisz użyć fragmentów opublikowanych przed rozpoczęciem tego wyzwania.

Konkurs popularności, więc najwięcej entuzjastów wygrywa!

Ostateczny termin

Przyjmę zgłoszenie, które uzyska najwięcej głosów pod koniec sierpnia, 6.


Cześć Michał i witaj na wymianie stosu PPCG! Jedną z zasad dla wyzwań kodu na tej stronie jest to, że muszą one mieć obiektywny warunek wygranej, więc powinieneś wybrać taki warunek dla tego. To podobne wyzwanie, które może dać ci kilka pomysłów.
isaacg

Cześć @isaacg, dziękuję. Spojrzę i usunę / edytuję ten.
chris p bekon

@isaacg, mam nadzieję, że teraz jest w porządku. Jesteś tutaj bardziej doświadczony niż ja, czy termin jest zbyt blisko / daleko?
chris p bekon

Jest dużo lepiej. Termin jest jednak zbyt bliski, standard wynosi około 1-2 tygodni.
isaacg

Ok, jeszcze raz dziękuję.
chris p bekon

Odpowiedzi:


17

J, 7 pytań / odpowiedzi, żadne o J

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

To cholernie tani sposób na zrobienie tego, nie będę kłamać. Oto odpowiedzi SO, których użyłem:

Zmieniłem nazwę zmiennej foona ai bw kodzie.


Wyobrażam sobie, że takie podejście byłoby znacznie trudniejsze w APL, ale nadal istnieje spora szansa na znalezienie znaków w bloku kodu samodzielnie.
JohnE

1
@JohnE To zaleta bycia hałasem ASCII!
Fatalize

1
Podoba mi się ta odpowiedź, ale pytanie brzmi: „Nie możesz wziąć urywków urywków” - co to robi, prawda?
nieprzyzwoite

3
@unclemeat „jeśli weźmiesz blok kodu z postu, weźmiesz całość”. Dla mnie brzmi to tak, jakby w poście było wiele bloków kodu, możesz wziąć tylko jeden, ale nie możesz wziąć udziału w bloku kodu.
Fatalize

Wszystkie pochodzą z kompletnych bloków kodu - spójrz na źródła.
Sean Latham

7

Odnośniki do Python 2, 7 6

Stworzenie tego rozwiązania nie było tak proste, jak się wydawało. Wyszukiwanie przepełnienia stosu dla określonego kodu jest trudne, ponieważ symbole nie są uwzględniane podczas wyszukiwania.

Znalazłem sposób na zrobienie tego za pomocą 2000-bitowych liczb losowych, używając innej odpowiedzi zamiast Ref # 1, ale nie mogłem przetestować jej w środowiskach internetowych, z których korzystam, ponieważ obejmuje to getrandbits, które połączenia os.urandom, daje mi NotImplementedError, więc poszedłem tą drogą. Można to właściwie wykorzystać teraz z TIO.

Wypróbuj 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

Referencje

import random zakłada się, że został załadowany, ponieważ pytanie mówi, że jest to dozwolone.

  1. lst = []i lst.append(random.randint(1, 100))- tutaj

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

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

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

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

  6. print x- Tutaj

Zmiana nazwy

  1. lstzmieniono nazwę na n1i n2(Ref # 1: Użyłem całego kodu dwa razy)

  2. r1i r2przemianowałem na n1i n2(Ref # 2: Użyłem jednak oddzielnych zmiennych później, aby przypisać mapy i podzielić na ostatnim wydruku, ponieważ odpowiedź zawierała je.)

  3. resulti aprzemianowany na abi bprzemianowany na n2(Ref # 3)

  4. ai bzmieniono nazwę na n1i n2(Ref # 4)

  5. firsti some_listzarówno zmieniona na r1, r2, ablub n2, w zależności od linii. (Ref # 5: Użyłem tego cztery razy. Pamiętaj, że używane jest tylko pierwsze przypisanie, więc nie zmieniam nazwy last)

  6. xzmienia nazwę na r1, r2lub ab, w zależności od tego, która linia. (Ref # 6)


1

Dziesiętny , 2 odniesienia

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Użyte polecenia:

  • 0 SET (domyślny indeks stosu)
  • 1 PCHAĆ
    • 2 ZWĘGLAĆ
  • 2 MUZYKA POP
  • 3 I / O
    • 00 zduplikowany stos
    • 01 od stosu do STDOUT
  • 4 MATEMATYKA
    • 1 DODAJ
    • 2 ODEJMOWAĆ
    • 3 ZWIELOKROTNIAĆ
    • 4 PODZIELIĆ
  • 8 BUILTIN
    • 2 push losową liczbę całkowitą na stos

Wyjaśniona wersja:

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

Źródła:

Wypróbuj online! Musisz wyłączyć wyjściową pamięć podręczną, jeśli nie zostanie ona automatycznie wyłączona.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.