Tek bir kod satırı yazmadan basit bir hesap makinesini "yaz"


25

Bu çok kolay:

Tek bir kod satırı yazmadan bir program oluşturun. Kod yalnızca mevcut Yığın Taşması sorularından ve cevaplarından oluşabilir.

Program iki rasgele sayı oluşturmalı ve sayıların çıktısını almalıdır.

  • ilave,
  • çıkarılmış,
  • ve ile çarpıldı
  • bölü

herbiri.

kurallar

Cevabınızda kullandığınız sorulara / cevaplara bağlantılar eklemelisiniz. Bulduğunuz kodu, aşağıdaki istisnalar dışında değiştiremezsiniz:

  1. Değişkenleri, işlevleri ve yöntemleri yeniden adlandırabilirsiniz. (Bu, değiştirerek, tarayıcı.nextInt () 'ı tarayıcı.nextLine ()' e söyleyerek ve bir yöntem adını değiştirdiğinizi iddia ederek değiştirebileceğiniz anlamına gelmez. Değişiklik tanımda veya başvuruda bulunmalıdır. aynı varlık.). Değişkenler, işlevler veya yöntemler yeniden adlandırılırsa çözüm hala çalışmalıdır.

  2. Girintiyi uygun şekilde ayarlayabilirsiniz.

  3. Kod parçacıklarının çalışması için uygun modüllerin yüklü olduğunu varsayabilirsiniz. (örneğin, C # ve C ++ için ifadeleri ve tüm dillerdeki eşdeğerlerini kullanarak Java ve Python için ifadeleri içe aktarın) Kod snippet'i sizin için içe aktarmaları içeriyorsa, kodun üstüne taşıyabilirsiniz.

  4. Dil, kodun yürütülmesi için bir tür yöntem gövdesinde olmasını gerektiriyorsa (örneğin, public static void main(String[] args)Java, static int Main(string[] args)C #, vb. İçin) kodunuzu uygun yönteme sarabilirsiniz. Ancak bu ana yöntemin içeriği değişmeden kalmalıdır.

  5. Gerçekleştirilen herhangi bir değişken / yöntem / işlev / sınıf yeniden adlandırma için açık bir liste sağlamalısınız.

  6. Snippet snippet'lerini alamazsınız (yani, bir gönderimden bir kod bloğu alırsanız, her şeyi alırsınız) Kodun, kullandığınız dille ilgili olmayan kişiler için ne yaptığına ilişkin kısa bir açıklama yapın. Bu mücadeleye başlamadan önce yayınlanan pasajları kullanmalısın.

Popülerlik yarışması, bu yüzden en fazla kazananlar kazanıyor!

Son tarih

6 Ağustos'un sonunda en çok oyu alan başvuruyu kabul edeceğim.


Merhaba Michael, ve PPCG yığın değişimine hoş geldiniz! Bu sitedeki kodlarla mücadele konusundaki kurallardan biri, amaç kazanma koşullarına sahip olmaları gerektiğidir, bu nedenle bunun için böyle bir koşul seçmelisiniz. Bu , size bazı fikirler verebilecek benzer bir zorluktur.
isaacg

Merhaba @isaacg, teşekkür ederim. Bir göz atacağım ve bunu sileceğim / düzenleyeceğim.
chris p bacon

@ isaacg, umarım şimdi tamamdır. Burada benden daha deneyimli, son tarih çok yakın / uzak mı?
chris p bacon

Böylesi daha iyi. Son teslim tarihi çok fazla, ancak standart yaklaşık 1-2 hafta.
isaacg

Tamam, tekrar teşekkürler.
chris p bacon

Yanıtlar:


17

J, 7 soru / cevap, hiçbiri J hakkında

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

Bunu yapmak için oldukça ucuz bir yol, yalan söylemeyeceğim. İşte kullandığım SO cevapları:

Ben değişkeni değiştirildi fooolarak ave bkodda.


APL'de bu yaklaşımı benimsemenin daha zor olacağını düşünüyorum, ancak kod bloğundaki karakterleri kendi başlarına bulma şansı hala yüksek.
JohnE,

1
@JohnE ASCII gürültüsü olmanın avantajı bu!
15'te

1
Bu cevabı beğendim ama soru “pasajların pasajlarını alamıyorsunuz” - yani hangisi yapıyor?
unclemeat

3
@unclemeat "Eğer bir yazıdan bir kod bloğu alırsanız, her şeyi alırsınız". Bana göre bir gönderide birden fazla kod bloğu varsa, sadece bir tanesini alabilir, ancak bir kod bloğuna katılamazsınız.
15'te

Bunların hepsi eksiksiz kod bloklarından geliyor - kaynaklara bir göz atın.
Sean Latham,

7

Python 2, 7 6 referansları

Bu çözümü oluşturmak göründüğü kadar kolay değildi. Semboller aramaya dahil edilmediğinden, belirli bir kod için Yığın Taşması araması zordur.

Bunu Ref-1 yerine farklı bir cevap kullanarak, 2000-bit rastgele sayılarla yapmanın bir yolunu bulmuştum, ancak kullandığı çevrimiçi ortamlarda test edemedim, çünkü kullandığı , beni getrandbitsçağırıyor , bu yüzden bu tarafa gittim. os.urandomNotImplementedErrorBu aslında şimdi TIO ile birlikte kullanılabilir.

Çevrimiçi deneyin

#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

Referanslar

import random Sorunun izin verildiğini söylediğinden beri yüklendiği varsayılıyor.

  1. lst = []ve lst.append(random.randint(1, 100))- İşte

  2. map(sum, zip(r1, r2)), map(lambda t: t[0] - t[1] ,zip(r1, r2)), r1Ve r2- İşte

  3. result = float(a) / b- İşte

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

  5. first, last = some_list[0], some_list[-1]- İşte

  6. print x- İşte

Yeniden adlandırılan

  1. lstolarak değiştirildi n1ve n2(Ref # 1: kodun tamamını iki kez kullandım)

  2. r1ve r2yeniden adlandırıldı n1ve n2(Ref # 2: Ayrı değişkenleri sonradan kullandım, haritaları atamak ve son baskıda bölmek için cevap onları içerdiğinden beri kullandım.)

  3. resultve ayeniden adlandırıldı abve byeniden adlandırıldı n2(Ref # 3)

  4. ave byeniden adlandırıldı n1ve n2(Ref # 4)

  5. firstve some_listher ikisi olarak değiştirildi r1, r2, ab, veya n2, hangi satır bağlı. (Ref # 5: Bunu dört kez kullandım. Yalnızca ilk ödevin kullanıldığını, bu yüzden yeniden adlandırmadığımı unutmayın last)

  6. xolarak yeniden adlandırılır r1, r2veya ab, hangi satır bağlı. (Ref # 6)


1

Ondalık , 2 referans

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Kullanılan komutlar:

  • 0 SET (varsayılan yığın dizini)
  • 1 İT
    • 2 CHAR
  • 2 POP
  • 3 I / O
    • 00 yinelenen yığın
    • 01 yığından STDOUT'a
  • 4 MATEMATİK
    • 1 EKLEMEK
    • 2 SUBTRACT
    • 3 ÇARPMAK
    • 4 DIVIDE
  • 8 BUILTIN
    • 2 yığmak için rasgele tamsayı itmek

Açıklamalı versiyon:

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

Kaynaklar:

Çevrimiçi deneyin! Otomatik olarak devre dışı bırakılmazsa çıkış önbelleğini devre dışı bırakmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.