Çok Yönlü Tam Sayılı Yazıcı


93

En az üç farklı dilde çalıştırılabilir bir kod parçası yazın. Kod 1, bir 2numaralı dilde, iki 3dilde , üç dilde vb. Tamsayı vermelidir .

Kurallar:

  • Çıktı yalnızca tamsayı olmalıdır, ancak izleyen satırsonları tamamdır.
  • Kod hiçbir şekilde girdi alamaz
  • Aynı dilin farklı ana sürümleri benzersiz olarak kabul edilir. Bu nedenle, kodunuz Python 2 ve Python 3'te çalıştırılabilir, ancak Python 2.5 ve Python 2.7 benzersiz sayılmaz.
  • Yeni bir dili, eğer sadece bir esolang / wiki makalesi, mevcut tercüman ve dökümanları varsa ve bu mücadelede kullanmadan önce PPCG'de en az iki kullanıcı tarafından kullanılmışsa kullanabilirsiniz. Ayrıca bu 4 kurala da uymalıdır .

Gönderiminizin sonucu, kodunuzdaki bayt sayısı, küp cinsinden çalıştırılabildiği dil sayısına bölünür. Bu nedenle, 3 dilde çalıştırılabilen 54 baytlık bir çözüm 2 puan alacaktır:

54 / 3^3 = 2  

Düşük puan daha iyidir.


Liderler Sıralaması


6
@muddyfish Kod içerisindeki küçük versiyonları getirebilirsiniz, bu size daha sonra herkes için ücretsiz çözümler 2.7.1sunar 2.7.n. (Aslında, sweerpotato sadece büyük sürümleri ile bunu yapar.)
Martin Ender

14
Sanırım, belki de dile göre en kısa çözüm burada anlam ifade etmiyor ...: P
FryAmTheEggman

3
@Mego Ben de, bu yüzden sorun hakkında alaycı yorumlar bırakıyorum, böylece diğer insanlar bunu
öğrendi

12
Sadece puanının ne kadar dengeli olduğu konusunda seni tebrik etmek istedim. Kod zorlukları iki miktarı bir puana karıştırdığında, denge hemen her zaman kapalıdır, öyle ki en iyi cevap diğerini göz önünde bulundurmadan skorlardan birini optimize eder. Dil sayısının kübik ağırlığı burada mükemmeldi ... başka bir dilin eklenmesi her zaman mümkündü, ancak mevcut bayt sayısında bunu yapmak her zaman çok güzeldi (ama yapılabilir). :)
Martin Ender

20
Gelen bu PPCG meydan biz işbirliği içinde birçok dili inşa ediyor. Şimdi bu zorlukta, bu mücadeleye sunulan öncü girdilerden daha iyi bir puan aldı, ancak sürekli geliştirilmekte olan bir grup çalışmasını kopyalamak mantıklı gelmiyor, bu yüzden buradaki yorumlardan bahsetmiyorum.

Yanıtlar:


90

30 dil, 248 bayt, 248/30 ^ 3 = 0.009185

#|#?15g,@           kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{  
###
#`{
25
print(4^2 +7)/2


"""
Jo is here.
$'main'MoO OOM
 7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""

Düzenleme: Beatnik'te ilkellik testi yapılamayacağından Beatnik kaldırıldı.

Kodun içinde (Stack Exchange tarafından yönetilen) sekmeleri ve izleyen bir satırsonu var, işte burada xxd:

00000000: 237c 233f 3135 672c 4020 2020 0920 2020  #|#?15g,@   .   
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b   kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140  \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231  >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360  2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b  {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973  7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f   here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330  O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a  .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929  :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923  .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c  ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974  -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236  e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a                       3))""".

Alternatif olarak, bu kodu "Çevrimiçi deneyin!" Den kopyalayıp yapıştırabilirsiniz. bağlantı .

Bu oldukça kötü bir şekilde golf oynuyor, ancak yeterince diliniz olduğunda bayt sayısının artık çok önemli olmadığı fikrinden vazgeçmek istedim. Kolayca ekleyebileceğim bazı diller olduğunu söyleyerek (örneğin Objeck) ancak şu anda faydalı olmak için çok uzun. Yine de iyi dillerden bitiyorum, o yüzden burada durabilirim.

Tüm programları </dev/null 2>/dev/null(örn. Boş giriş, basılı STDERR) çalıştırın.

Açıklama oldukça uzun, işte yönetici özeti:

No.  Lang.              Non-esolang?     2D esolang?      BF/BF-deriv?
--------------------------------------------------------------------------
1    COW                                                       ✓
2    CoffeeScript            ✓
3    Common Lisp             ✓
4    Retina
5    Befunge-93                               ✓
6    Python 2                ✓
7    Rail                                     ✓
8    ETA
9    Prelude
10   Gol><>                                   ✓
11   evil
12   Foo                                                       ✓
13   Ruby                    ✓
14   ><>                                      ✓
15   Brian & Chuck                                             ✓
16   Whitespace
17   3var
18   Axo                                      ✓
19   Labyrinth                                ✓
20   Starry
21   Fission                                  ✓
22   Brainfuck                                                 ✓
23   Julia                   ✓
24   Lily                    ✓
25   GolfScript
26   Chicken Scheme          ✓
27   Thue
28   Perl 6                  ✓
29   Picolisp                ✓
30   TRANSCRIPT

1. İNEK

COW, biri sayısal çıktı olan ek komutlara sahip bir Brainfuck türevidir. Geçersiz bir şey yoksayılır, bu nedenle yürütülen program yalnızca

MoO OOM

hücreyi 1'e yükselten sayıyı yazdırır.

2. CoffeeScript (tercüman içerir)

CoffeeScript şunları görür:

# comments
###
multiline comment
###;alert 2# comment

hangi sadece 2 uyarır.

(Evet, bu dilimi başka bir dilde almış olsaydı daha iyi olurdu, ama bu noktada değişiklik yapmak için çok tembelim: P)

3. Ortak Lisp | ideone

Common Lisp (clisp) şöyle görür:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5rasyoneldir ve eşittir değildir 0.2, bu nedenle 3 basılır. İşlem """bir sözdizimi hatası.

printCommon Lisp'te bir önceki satırdan ve sondan bir boşluk çıktığını görün . Ancak, neyse ki, writehem Common Lisp hem de Chicken Scheme'de çalışır.

4. Retina | Çevrimiçi deneyin!

Kısıtlamalar : İlk baştan başlayan her ikinci satırın geçerli bir regex olması gerekiyor.

Her satır çifti, ilk satırın regex'in eşleşme örneklerini ikinci satırla değiştirerek değiştirme aşaması oluşturur. Ortada çift var

"""

İlk boş dize ile değiştirir """. Herhangi bir çiftin parçası olmayan son boş satır, regex'in maç sayısını sayarak bir maç aşaması olarak değerlendirilir. Boş dize dört örnekleri de vardır """yani 1"2"3"4.

5. Befunge-93 | tercüman

Befunge 2B bir dildir ve ilgili talimatlar

# # 15g,@

Birinci çizgi, ve 5de 25hat. #Bir sonraki talimat atlar 15gpozisyonda kömürü alır (1, 5)kodu (içinde 5de 25hat), ,kömürü verir ve @durur.

6. Python 2 | ideone

Python görüyor:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6, printed alır .

7. Demiryolu | Çevrimiçi deneyin!

Ray 2B bir dildir ve yürütme $ana işlevden başlar ve güneydoğu yönünde ilerler. Dolayısıyla, kodun ilgili kısmı

$'main'
 7
  o
   J

ile ove Jtranskript tarafından kullanılan hatlar gelen. 7 çıkışından sonra, tren J, programın çökmesine neden olan tanınmayan bir eğitime çarpar .

8. ETA | Çevrimiçi deneyin!

Kısıtlamalar: ETA programından önceki karakterlerde olmamalıdır etaoinsh.

ETA sadece harfleri etaoinshve onların büyük harf versiyonlarını tanır , bu da kodun başlayacağı anlamına gelir.

NSaIeoe

n...esınırlayıcıların içinde ne SaIolduğu 624, ya da ondalık sayıdaki 312 değerine dayanarak bir taban 7 numarasını iter . odaha sonra char olarak çıktı olarak, görünüşe göre modulo 256'dan sonra char'ı verir 8(kod noktası 56). esonra başarısız olan boş bir yığınla bölmeye çalışır.

9. Başlangıç | Çevrimiçi deneyin!

Kısıtlamalar:() Herhangi bir sütunda birden fazla (), bir anda bir sütunu okumakla eşleştirilmiş, neden olduğu sonsuz döngüler yok ().

Bu, Python yorumlayıcısının NUMERIC_OUTPUT = Trueayarlanmış olmasını gerektirir .

Prelude, her satırın ayrı ayrı yürütüldüğü bir dildir. Çok sayıda karakter idam edilir, ancak önemli olan

9!

()Prelude'de 9. basan ikinci satırda bir döngü ifade eder, ancak #s'nin (yığından çıkan) belirginliği sayesinde yığınların üst kısımları bir döngü çarptığında her zaman 0 olur, yani hiçbiri koşuyorlar. Prelude'un kaynak kodu kısıtlamaları ()olsa da bazı yabancı alanlar da getirildi.

10. Gol> <> | tercüman

Bu bölüm (ve> <>) Martin'in cevabı gibi çalışır . İlgili kod

#                                      ;n@0ea

Gol> <> 2B bir dildir ve #IP'yi sola doğru hareket ettirerek yansıtır. Etrafına sarılır, yığına 10, 14 ve 0 basın. @Daha sonra, en üstüne 10 getiren, yığın döner no kadar çıkar ve ;bir program durdurulur.

11. kötülük | Çevrimiçi deneyin!

Bu bölüm aynı zamanda Martin'in cevabına benziyor.

kötülük küçük harfler hariç her şeyi görmezden gelir. Birkaç karakter yoksayıldığında, ilgili kısım

aeeeaeeaww

burada adeğişken artırır A, ebit karıştırır en kötü örgü fonksiyonudur Ave wçıkışları A. Dolayısıyla 1iki kere çıktı vererek veriyoruz 11.

Ancak talimatların geri kalanına ve özellikle wson satırdakilere ne dersiniz ? Diyelim ki, bazen kodla uğraşmak ve dua etmek için en kolay olan şey, hala burada bir şekilde yaptığı her şeyde çalışması için dua etmek ...

12. Foo | Çevrimiçi deneyin!

Foo, çift tırnak arasında herhangi bir şey çıkarır, yani ilgili kısım

"12"

İkinci satırda. Ancak, daha sonra çift alıntıya ihtiyacımız olduğu için, Foo hatasını düzeltmek için bir önceki adı geçen Martin'in cevabına benzer bir yöntem kullanıyoruz #-1@. Neden askerlerin boş yığın ve bölme karşısında sıfır hatayla karşılaştıkları bir dilde işe yaradığı belli değil, ama sevindim.

13. Yakut | ideone

Python gibi, Ruby şöyle görür:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

Ancak, çok satırlı dize aslında üç ayrı dizeleri olduğunu belirtmek gerekir ( "", "...", "") birbirine bağlanır. Baskı çizgisi (4^2+7) = xor(4,2)+7 = 6+7 = 13, 2'ye bölünmeye çalışırken hata vermeden önce çıkar nil.

14. > <> | Çevrimiçi deneyin!

Bu kısım, Gol> <> kısmıyla aynıdır, ancak @bunun yerine 14 tanesini çıkarıp alır.

15. Brian ve Chuck | Çevrimiçi deneyin!

Brian & Chuck, iki kasetli bir BF türevidir; bir kasetin komut işaretçisi diğer kasetin hafıza işaretçisidir. Yokluğunda ```, kaynak kodunun ilk iki satırı bantları başlatmak için kullanılır.

İlk iki satırdaki ilgili karakterler:

   ?15
#     >.>.

?Brian bant hücresi (işaret edilen olarak Chuck'la kontrol geçer #sıfır olmayan). Daha sonra Chuck >.>., iki işareti çıktırarak soru işaretinden sonra yürütür .

16. Boşluk | tercüman

Kullanılması STLsırasıyla uzay, sekme ve satır besleme için, programın başlatılmasının:

SSSTSSSSL
TL
STL
L
L

İlk satır 16'ya basar ( +10000taban 2), önceki TLSTsayı bir sayı olarak basar. Sonraki üç yeni hat programı durdurur.

Ancak, bu programın tercümana özel olduğunu unutmayın. Kod sözdiziminin geri kalanı çoğu tercümanda hata yapar, bu nedenle yukarıda verilen bağlantıda olduğu gibi daha yumuşak bir tercüman gerekir.

17. 3var | Çevrimiçi deneyin!

İlk satırın bir dizi talimatı yerine getirildi, ancak ilgili olanlar

kkmmao#/

ETA'nın kısıtlaması nedeniyle, kB değişkenini azaltmak yerine azaltmak için kullanırız a. kkB ila -2 arasında azalma ve mmB ile iki kez 16 arasındaki kareler, bu sayı 17 ile artırılır a. Bu daha sonra ile verilir o.

#sonra B'yi 0'a sıfırlamak için kullanılır ve /programın 0'a bölünmesiyle hata yapmasına neden olur.

18. Axo | Çevrimiçi deneyin!

Kısıtlamalar: IP yönünü değiştiren Axo programından önce talimat yok

Bir kez daha, ilk satırda bir takım talimatlar yerine getirilir, ancak ilgili talimatlar

# # 15 ,@            9 9  + {   \

Axo, Befunge gibi bir 2D dilidir ve #benzer şekilde bir sonraki talimatı atlayan bir köprüdür, ancak yalnızca yığının üstü sıfırsa. 15,yığına itin, ancak yığın ile boşaltılır @. 99+sonra 18 iter, {çıktılar ve \durur.

19. Labirent | Çevrimiçi deneyin!

Labirent başka bir 2D dilidir ve yürütülen talimatlar

#|#
 [9!@

#ilk kez 0 olan yığının uzunluğunu zorlar. |bittiğinde VEYA, bu noktada yığının sadece 0 değeri olduğundan hiçbir şey değişmez ve ikincisi de #artık sıfır nedeniyle 1 iter. 1 nedeniyle sağa dönüyoruz, 9bunu 1'e dönüştürüyor 1*10+9 = 19, !yazdırıyor ve @duruyoruz.

Bu program [şu anda tanınmış bir talimat olmadığı gerçeğine dayanmaktadır ve bu nedenle duvar olarak değerlendirilmektedir.

20. Yıldızlı | Çevrimiçi deneyin!

Kısıtlamalar tanıtıldı: Tüm +ler en az bir önceki boşluk olmalıdır

Tanınmayan karakterleri kaldırırsak, kodun ilgili kısmı

,       +.. +

,giriştir, ancak biz /dev/nulloradan boru bağlantısı yaptığımız için, 0'ı yığına iterek. Yukarıdaki boşluklara +sahip A n >= 5iter n-5, bu yüzden bir sonraki komut 2'ye basar. ..Sonra bu iki basamağı ters sırada verir.

Daha sonra +, çoğaltan tek bir boşluğa sahibiz . Ancak, yığın boştur, bu yüzden hata veriyoruz.

21. Fisyon | Çevrimiçi deneyin!

Fisyon için tek ilgili bölüm

*"12"L

Lsola hareket eden bir atomun doğuşunu yapar, "21"21 basar ve *durur.

22. Brainfuck | Çevrimiçi deneyin!

Sunulan kısıtlamalar: İlkinden .önce hayır[

Bu, EOF'de 0 veren ve 8 bit hücreli tercüman gerektirir. İlgili kod

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

Girişim -, hücre dengesini bozmaktır +ve ilki [...], hücre 0 olduğu için gerçekleştirilmez. Aşağıdaki -[>+<-----]>-, hücreyi char koduna ayarlar 2ve ..iki kez verir.

23. Julia | Çevrimiçi deneyin!

Julia görüyor:

# comments
25
print(4^2 +7)/2

Basılı 4^2+7 = pow(4,2)+7 = 16+7 = 23olan programdır ve program nothing2'ye bölünmeye çalışırken hata verir. Julia'nın kodun geri kalanının yine de bir sözdizimi hatasına neden olacağı gerçeğine dikkat etmediğini unutmayın.

24. Zambak | tercüman

Lily görüyor:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 yazdırılır.

25. GolfScript | Çevrimiçi deneyin!

GolfScript şunları görür:

# comments
25
print(

GolfScript yığın tabanlıdır, bu nedenle yığın yığına 25 itilir, ardından atılır ve birlikte yazdırılır print. (sonra yığındaki boş boş dizgeyi düşürmeye çalışır, bu da başarısız olur ve programı geçersiz kılar.

26. Tavuk Şeması | ideone

Chicken Scheme, #| ... |#Common Lisp ile aynı multiline yorum sözdizimine sahiptir . Ancak, içinde

(write(if(= 1/5 .2)26 3))

1/5Bir halka açık olan eşit 0.2, yani 26 yerine çıkılır.

27. Salı | Çevrimiçi deneyin!

Thue, dize yeniden yazmaya dayalı bir dildir. İlk ilgili kısım

f::=~27
::=

bu bir ikameyi tanımlar, f -> 27daha sonra ile ikamelerin sonunu belirtir ::=. Sonra yalnız olan fçıktı ifile değiştirilir 27.

28. Perl 6 | ideone

Perl 6 yeni bir yorum sözdizimine sahiptir, yani #`(some bracket)eşleştirme dirseğine kadar çok satırlı bir yorumdur. Böylece, Perl 6 görür:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

hangi yazdırır 7/6*24 = 28.

29. Picolisp | ideone

Picolisp görüyor:

# comment
#{
multiline comment
}#(prin 29)

Bu, 29 yazdırır. Sonra satır, bir sözdizimi hatasına neden olur.

30. TRANSCRIPT | Çevrimiçi deneyin!

TRANSCRIPT, metin maceralarından sonra modellenen tematik bir esolang'dır. Tanınmayan satırlar yoksayılır (bu, gerçek kod yönergelerinin arasına fazladan hikaye / lezzet metni eklemenize izin verir), bu nedenle ilgili satırlar:

Jo is here.
>Jo, 30
>X Jo

İlk satır, bir Joharfli isimler başarısız gibi gözüktüğü için iki harfli bir isim kullanan bir dize değişkeni bildirir . İkinci satır bu dizgiyi üçüncü satırda ("inceleyin") "30"çıktısı olarak ayarlar X.


12
Daaaaaaaaaang ...
AdmBorkBork

9
Bunun, buradaki herhangi bir soruda sıfır olmayan en düşük puan olabileceğinden şüpheleniyorum.
Morgan Thrapp

Bu inanılmaz. Korkuyorum.
Nic Hartley

2
* Olumlu, ikramiye ile kısa cevaplar için birkaç olumsuz puan var.
Hesap MakinesiFeline

Gelecekten destekleyici: preMarkdown tarzı bir kod bloğu kullanmak yerine, kodunuzu etiketlerle çevreliyseniz sekmeleriniz karışmaz.
Jakob

148

15 dil, 68 66 65 bayt / 15 ^ 3 = 0.019 ...

Retina , Starry , Prelude , ETA , Axo , Labirent , Hexagony , Foo , Brian & Chuck , Gol> <> , kötülük , Boşluk , Bölünme , > <> ve GolfScript .

Büyük bir yeniden yazmadan sonra, dört dile daha sığmayı başardım. Kod, Boşluk için birkaç sekme içerir. Yığın Değişimi onları boşluklara dönüştürdüğü için onları \taşağıda ile temsil ettim :

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

Sanırım dilleri eklemeyi bitirdim (yalnızca bir tane ekleyerek zaten sahip olduğumda bazı baytları kaydedebilir) Acaba golf oynanır mı? Acaba ... 15 dilde 65 bayt, 11 dilde 32 bayttan oldukça fazla atladı ve şimdi Foo'nun çalışması için en az bir işe yaramaz karakterim var.

Retina baskılar 1

Çevrimiçi deneyin.

Neyse ki, ilk satır geçerli bir regex. Bununla birlikte, bu regex açıkça boş girdiyle eşleşmiyor, bu nedenle ilk aşama (ilk iki satırdan oluşan) hiçbir şey yapmıyor.

Üçüncü satır kendi başınadır, bu nedenle varsayılan olarak eşleşme sayısını sayan bir Eşleme aşaması olarak kabul edilir. Ancak, `Retina'ya önündeki kısmın bir yapılandırma dizgisi olduğunu (burada verilen seçeneklerden herhangi birini bilmiyor) ve regex'ten sonraki kısım olduğunu söyleyen bir ayırıcıdır. Yani regex boştur ve Retina tam bir eşleşme bulur.

Yıldızlı baskılar 2

Çevrimiçi deneyin.

Yıldızlı, boşluklar hariç her şeyi görmezden gelir +*,'`.. Her komut, bu karakterlerin sonuncusundan beri boşluklarla birlikte bu karakterlerden biridir. Öyleyse tüm yabancı kodu kaldıralım:

       + +'`. `

Yedi alanlarda ardından +bir iter 2. Bir boşluk ardından +onu kopyalar. 'koşullu bir sıçrama. İstif (pozitif) olan yığının tepesini açar, bu nedenle karşılık gelen etikete atlar (etiketler ile gösterilir `ve "karşılık gelen", aynı sayıda öncü boşlukla "karşılık gelir" ), ki bu ilktir `. .önünde boşluk bırakmadan yığının üst kısmını sayı olarak yazdırır.

Başlangıç ​​baskılar 3

Çevrimiçi deneyin.

Bu, sayısal çıktı kullanan Python yorumlayıcısını varsayar. No-op'ları kaldıralım:

# 5        ?         + +3    8   9
15 7  -- !   31

İlk ses bir sürü şey yapar, ancak hiçbir önemi olmaz, çünkü !sonuçların hiçbirini basmaz. İkinci ses önce a 1, sonra a 5, sonra a a basar 7. Almak için son ikisinin farkını -2alırız ve sonra bunu elde etmek 1için çıkarırız 3. !yazdırır. Üçüncü ses sadece op-op yok.

ETA baskılar 4

Çevrimiçi deneyin.

ETA, karakterler dışındaki her şeyi görmezden gelir ETAOINSH(her durumda). Yani ETA tarafından görüldüğü gibi kod:

IaeeNTHneaSOeea

Igirişi okumayı dener ancak okuyamaz, bu yüzden iter -1. ageçerli satır numarasını artı 1 olan basar 2. eolduğu divmod olanlar değiştirir ki, 0ve 1(ya -1, ben aslında bilmiyorum ama önemli değil). Bir sonraki eikisinin de yerini alır 0.

Şimdi ilginç kısım. NTHnebir üs-7 sayı değişmezdir. Nve esadece sınırlayıcılar ve üç rakam THN. Bu 54( Tbasamak 1, Holduğu 0ve nolduğu 5). abir 2kez daha iter . Ssonuçlanan çıkartır 52ve Obir karakter olarak verir ( 4). Şimdi etekrar divmod'u deniyor, ancak yığın iki sıfır içeriyor, bu nedenle program bir hatayla sonlanıyor (ancak bunu yaparken STDOUT'u kirletmiyor).

Axo baskılar 5

Çevrimiçi deneyin.

Bu dil yeniden yazmaktan hemen hemen tek elle sorumluydu. İlk sırada olamazdım }çünkü Axo'da girişi engellerdi (neden bahsettiğimin revizyon geçmişine bakın). Axo için, kodun sadece bu kısmı geçerlidir:

#I5aeeNTH{\

Neyse ki, Axo da 0yığının altında örtükler var , çünkü yığının #tepesini çıkar (bir sonraki komutun atlanıp atlanmayacağını kontrol etmek için). Harflerin hepsi çalışmaz. Sonra 5a basar 5, {yazdırır \, programı sonlandırır. Gerçekten çok basit.

Labirent baskılar 6

Çevrimiçi deneyin.

Sağ yarım ulaştı asla çünkü kod biraz kesiliyor ediyorum ve ayrıca kullanıyorum tyerine \tsütunları doğru hizaya böylece:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Şimdi, harfler, boşluklar ve sekmeler Labirent'teki duvarlar olduğu için erişilebilir kod gerçekten şöyle görünür:

# 5      {\
15}7'`--~!@
      `

Talimat işaretçisi otomatik olarak bu yolu izleyecektir. #ana yığının derinliğini ( 0) iter ve 15onu a haline getirir 15. }onu yardımcı yığına götürür ve daha fazla kullanmayacağız. Bu, elverişli bir şekilde istifin üst kısmını sıfır yapar, böylece IP sola dönmez 5. 7Bir halinde sıfır döner 7, 'no-operasyon. `Tek terimli olumsuzluk, bu yüzden olsun -7. Şimdi onu yapmanın altındaki örtük olandan -çıkarır . Bu kez, IP, doğrudan olumsuzlama olan şeye dönüşüyor , bu yüzden tekrar alıyoruz . IP bir çıkmaza bir dönüş yapar. Daha önce olduğu gibi aynı şeyi yapar,-707`7-7bir kez daha. Yığının üstü artık pozitif olduğundan, IP sağa döner. Yine -veren başka biri var -7. Sonra ~bittiğinde DEĞİL, verir 6ve !yazdırır. Bunu yapmak için tam doğru an budur, çünkü şimdi yığın tekrar IP’nin sola dönmeyeceği şekilde boştur, {ancak bunun yerine @programı sonlandıran programa devam eder .

Altıgen baskılar 7

Çevrimiçi deneyin.

Açılan kod şöyle görünür:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

Normalde, bu korkunç bir Hexagony programı olur, ancak gerçekte kullanılan karakterler çok fazla değildir. Aslında Labyrinth'in kullandıklarıyla hemen hemen aynılar ve bence birbirinden farklılaştığımı 5ve 6oldukça hoş olduğunu düşünüyorum . :)

Üst satır temelde yoksayılabilir. #normalde farklı bir IP'ye geçer, ancak mevcut bellek kenarı 0öyledir, öyle değil. Harfler yalnızca sabit bir bellek değeri belirler, ancak kullanmayacağız. İlk satırın sonunda kontrol akışı orta satırda devam eder (baştan }sağa doğru). }Başka bir bellek kenarına doğru hareket eder. 7bu kenarı atar 7. 'geldiğimiz yere geri döner. Kullanılmayan bir bellek kenarından ( ) -ayarlamış olduğumuz bellek kenarını çıkarır , böylece elde ederiz . Sonraki yine aynı şeyi yapar, bu yüzden bir hayır-op. Şimdiye kadar, Labyrinth'e oldukça benziyor (bellek düzeninden ayrı olarak). Ama şimdi70-7-~biti bitmiş DEĞİLDİR ancak Hexagony'deki olağandışı bir olumsuzluktur. Yani bu 7yerine verir 6. !@, Labyrinth'deki gibi değeri yazdırır ve programı sonlandırır.

Foo baskılar 8

Çevrimiçi deneyin.

Programlama Dili Bilgi Yarışması'nın basılmasından beri hepimizin bildiği gibi , kodların çoğu rastgele bir karakter kargaşası olsa bile, Foo'da işler oldukça önemsizdir. Karakterlerin hiçbiri dışında çıkışını etkileyen "8"hangi baskılar 8. Eh, "31"daha sonra var, ancak Foo ilk satırın sonunda bir hatayla sonlanıyor. Bunun neden olduğunu tam olarak bilmiyorum, ama bunun için 3(ya da başka herhangi bir basamağı) başka bir yerde kullanılmamış olarak gerektiriyor.

Brian ve Chuck baskılar 9

Çevrimiçi deneyin.

Üçüncü satırı kaldırdığımız (asla ayrıştırılmadığı) ve alakasız karakterleri (yani no-ops veya okunmamış hücreleri) boşluklarla değiştirdiğimizde bu şeyi tekrar yapalım:

         { ?         + +         9
  }   --   <        .

Hatırlatıcı olarak, her satırda, diğer programın kaynak kodu olan Brainfuck benzeri bir bant var. Kontrol akışı ilk satırda (Brian denir) başlar.

{Tamamen sola hareket eder bant kafası (zaten olduğu) ve ?eller Chuck (ikinci çizgi) üzerinde akış kontrol ederler. Orada, }bant kafasını sıfır hücre bulana kadar sağa kaydırır. Bu programın sonuna kadar olmaz, bu yüzden teyp kafası ondan sonra bir hücreye ulaşır 9. -Bu hücreyi azaltır, ancak bu alakasızdır. <şerit kafasını üzerine hareket ettirir 9ve .yazdırır. Chuck program biter ve sona erer.

Gol> <> yazdırır 10

Burada test edildi.

#bir ayna olduğundan, IP hemen ilk satırın sonuna atlar (ve sola gider). Göz 9ardı edilebilir. aiter 10, eiter 14, "8"karakter kodu iter 8, @ilk üç yığın elemanlarını döner (yukarı çekerek 10bu gibi) nyazdırır 10ve ;programı sonlandırır.

@Bunun yerine kullanmayı önerdiğiniz için Sp3000'e teşekkür ederiz !(ki bu bir bayt kaydetti).

kötü baskılar 11

Tek basamaklı sayılar oluşturmak için bana bazı kaba zorla komut listeleri göndermek için Sp3000 sayesinde.

Çevrimiçi deneyin.

kötü küçük harf dışındaki her şeyi yok sayar, böylece kod şöyle görünür:

aeeneaeeaww

Ayrıca, numursamadığımız bazı durumları da etkiler , bu yüzden bunu da görmezden gelelim. Şimdi a, sicili arttırıyor (başlıyor 0) ve ebitlerin belirli bir şekilde izin veren sihirli "örgü" işlemi. karakterinin karakteri olan aeeeaeeadeğeri 49verir 1. wwiki kere basar.

Boşluk yazdırır 12

Çevrimiçi deneyin.

Tamam, Whitespace'in yalnızca boşluk, sekme ve satır besleme okuduğunu biliyoruz, bu nedenle kodu Whitespace'in yazdığı şekilde yazalım STL:

SSSSSSTTSSLTLST

Bu iki komut:

SSSSSSTTSSL
TLST

İlki sayıyı iter 12. Özellikle, SSbir rakam değişmez başlatır. Bir sonraki Sişaret bitidir (pozitif). Öyleyse, her şey L, sayının ikili bir temsilidir. Starry için ihtiyacımız olan bir sürü ton sıfır var, ancak sayıyı etkilemiyorlar. O zaman TTSSs 12ikilidir. Eğlenceli gerçek: 16. dili Seklersem burada bir bayt kaydedebilirim, çünkü Starry dördünü ikili gösterimde kullanabilirdi 16. Yapacağımdan şüpheliyim ...

TLSTSadece bir sayı olarak istifin üst basar. ( TLkomutu bir G / Ç komutu olarak işaretler ve STnumaraları yazdırıyordur.)

Fisyon baskıları 13

Çevrimiçi deneyin.

Fisyon, kodun sadece bu bölümünü görür:

           <"31"L

Lsoldan giden bir atomla kontrol akışını başlatır. "geçiş yapar, 31sadece yazdırır 13. Sonra atom, <programı sonlandıran kama içinde yakalanır .

> <> yazdırır 14

Burada test edildi.

> <> Ve Gol> <> arasında ayrım yapmak düşündüğüm kadar kolay değil, çünkü Gol> <> hemen hemen her zaman her ikisinde de var olan komutlar için> <> ile aynı şeyi yapar ve yalnızca Gol> de bulunan komutlar için <> > neden> <> çökmesine neden. Bununla birlikte, @diğer şekilde> <> yönünde döner, 7yukarı çekmek yerine aşağı doğru iter 10ve sonra 14yerine basılır 10.

GolfScript baskılar 15

Çevrimiçi deneyin.

Bu bir basittir: #ilk satırı yorumlar. Sonra 15kendini iter ve }programın geri kalanının tamamını görmezden gelen bir "süper yorum" dur. Böylece 15programın sonunda yazdırılır.


34
Bu gerçekten etkileyici!
tatlı patates

1
@YassinHajaj Teşekkürler, düzeltildi.
Martin Ender

2
Niiice. 15 dilde harika iş!
ev3 komutanı

1
@SoringFrog Peki, işte gidiyorsunuz.
Martin Ender

1
@Eumel Teşekkürler, ancak ödül özellikle tarifinde listelenen “normal” diller içindir, bu yüzden ödül böyle bir cevaba gitmelidir (Sp3000'in çok güzel bir çözümü gibi). Sanırım yine de bu konuda yeterince rep var. ;)
Martin Ender

42

Python 1.x, 2.x ve 3.x, 32 bayt / 3 ^ 3 = 1.1851 ...

import sys
print(sys.version[0])

1Python 1.x, 2Python 2.x ve 3Python 3.x sürümlerinde ilk sayıyı yazdırır .

Python 9.x'e ulaştığımızda skorum şanlı olacak 0.04389!

: ~)!


10
Sohbetten: Evet, bu hem ucuz hem de geçerli =) Bu, yalnızca büyük sürümlerin yeterince benzersiz sayılmasının nedeninin bir parçası. Kaç tane Python sürümü olduğunu bilmiyorum, ama böyle bir şey kullanarak puanınızı oldukça düşük seviyelere çıkarabilirsiniz ... Aslında neler olduğunu anladığım birkaç çözümden biri, yani benden +1; )
Stewie Griffin,

6
Python 10.x'ta (var olduğunda), 1"10.whatever" dizesinin ilk karakteri olduğu için yazdırılmaz mı?
ev3 komutanı

1
@ ev3commander Bununla birlikte, bu gönderim python10'da doğru çıktı üretmek için yeterli değildir.
Tyzoid

Sabit! Gelecek geçirmez bir sürümde çalışıyor ancak Python 1.x diğerleri kadar kullanıcı dostu değil: ~)!
tatlı patates

1
Tek yapmam gereken üç ana versiyonu olan bir dil oluşturmak. Bu üç ana sürümde, boş bir dosyayı çalıştırırken ana sürüm numarasını döndürür. Sonuç 0/3 ^ 3 = 0 Mükemmel olur.
Braden Steffaniak

32

3 dil, 2 bayt / 27 = 0.074

1P

Eh, en azından başvuruların yarısını yener: P

1. GolfScript

GolfScript yok sayar, Pyalnızca 1 çıktısını alın . Çevrimiçi deneyin .

2. Par

Pyani, gücü 2'ye 1P = 2^1 = 2. Çevrimiçi deneyin .

3. cidden

Pnn üssünü verir, sıfır indeksli. İkinci asıl olandan beri 3 alıyoruz. Çevrimiçi deneyin .


notlar

Benim ilk hedefim 1 baytta geçerli bir cevap bulmaktı. İlk denemem \x12hangisi Bubblegum ve gs2'de çalışıyordu , fakat zorluk asgari üç dil gerektiriyor. \x131 çıktısı olan bir dil varsa işe yarar.

1 baytlık bir cevap vererek, iki bayta taşındım. Japt'ta3u 1, GolfScript'te 3 ve Cidden de 4 yazan bir çağrıdır, ancak boşluğu doldurmak için 2 çıktısı olan bir dil bulmak zordu.

Bütün bunlar beni çok uzun sürdü:


20

6 Dil - 44 bayt / 6 ^ 3 = 0.204 ...

SnoringFrog'a 10 byte tasarruf ettiğin için teşekkürler!

Çalışır:

  • Befunge
  • Pyth
  • brainfuck
  • Hexagony
  • Beyaz boşluk
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

Not: Çevrimiçi denemeden önce, S'yi boşluklarla ve T'yi sekmelerle değiştirdiğinizden emin olun veya aşağıdaki hexdump'ı ASCII'ye dönüştürün

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Daha fazla programlama dili kullanmaya çalışacağım :)

Befunge (baskılar 1):

Çevrimiçi deneyin

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (baskılar 2):

Çevrimiçi deneyin

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (baskılar 3):

Çevrimiçi deneyin

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Altıgen (baskılar 4):

Çevrimiçi deneyin

2# "1",@"-[----->+<]>.*@@@!4<   

Daha okunaklı bir sürüm:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

Boşluk (baskı 5):

Çevrimiçi deneyin

Diğer karakterler göz ardı edilse de boşluk ve sekmeler olduğundan, aşağıdakilerden ayrıldık:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

AniRad sürüm 0.2 (yazdırır 6):

Her nasılsa, bu sürüm 0.2 için çalışıyor, ancak sürüm 0.4 için hata veriyor. neden olduğuna dair bir fikrim yok. Sürüm 0.2'yi burada bulabilirsiniz . Bunu çalıştırmak için, tercümanın kodunu kopyalayıp yapıştırarak repl.it'e koyabilir ve çalıştırabilirsiniz. Ondan sonra programı sadece STDIN'e yapıştırmanız ve çalıştırmanız yeterlidir.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates

1
Daha fazla dil kesinlikle gidilecek yol olduğunu düşünüyorum ... kübik payda gerçekten cömert, bu yüzden 5 ya da 6 dile sahip olduğunuzda puanımı geçmek çok zor olmamalı.
Martin Ender

@ MartinBüttner, Evet, nasıl yeni bir dil ekleyeceğimi göremesem de
Adnan

2
@Martin evet, bu cömertçe. Kübik paydanın amacı, daha fazla dili şiddetle teşvik etmekti. 50 baytta 6 dilin 30 baytta 5 dilin değerinde olması gerektiğini düşünüyorum. :-) kullandığınız dilleri daha da zorlaştıracak.
Stewie Griffin

Whitespace kodunuz biraz azaltılabilir (ve diğer dillerinizden herhangi birini etkileyeceğini sanmıyorum. (Satır beslemesi için L kullanma), SSSSSSSSSSTTSTSTLTLSSşimdi sahip olduğunuz yerine , bunu yapabilirsiniz SSSTSTLTLST. yığın, sonra tamsayı olarak yazdırır
SnoringFrog

@SnoringFrog Teşekkürler! Düzenledim
Adnan

14

6 7 dil, 32 37 bayt, skor 0.148 ... 37/7 3 ≈ 0.107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

Brainfuck-ng

+mevcut hücreyi artırır, !tam sayı olarak yazdırır, @çıkar. #ve "NOP'lardır.

Python 2

İlk satır yorumdur. Tamsayı bölme kullanarak 4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2sonucu hesaplar ve yazdırır.

Python 3

Önceki ile aynı, ancak şamandıra bölümü ile. 4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3.

Lua

--bir yorum başlatır ve #ilk satırda bir yorumdur, yani temelde print(4).

> <>

#IP'yi yansıtır, 55'e nbasar, bir sayı basar ve ;çıkar.

Befunge

#üzerinde atlar +, !mantıksal olarak, yığının tepesine negates "@\"dizesini iter @\, 66 iter, .bir numara yazdırır ve @kapanıyor.

Pyth

#Sonsuz bir döngü başlatır ve hataları giderir. 7baskılar 7, ardından programı sonlandırmak +!"string")için iki işlenene sahip olmadığı için temelde bir hataya neden olur +.


13

JavaC ++ C, 363/27 = 13,4 ....

Java 1, C ++ 2, C 3 basar.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

Bu bir karmaşa. İşte nasıl çalıştığının bir dökümü. Unicode değişmezleri ( \u000aaksi halde satır başı olarak da bilinir ve \u002aaksi halde olarak da bilinir *) Java derleyicisi tarafından gerçek karakterlerine genişletilir. İşte Java derleyicisinin gördüğü:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

Tüm bunlar başlangıçta yok sayılıyor çünkü hepsi çok satırlı bir yorumda ( /* ... */) sarılıyor . Daha sonra, tek satırlı ve çok satırlı yorumların karıştırılmasının, hangi dillerin hangi dilde yorumlandığını tam olarak kontrol etmemizi sağladığını görüyoruz. Ana yöntemde çok satırlı bir yorum başlattık ve sonra //*/. Normalde, bu tek satırlı bir yorum olur, ancak çok satırlı bir yorumda //bulunduğumuzdan */, kapanmasına izin veren hiçbir şey yapmaz .

Bu, eşdeğer Java kodudur ve yorumlar kaldırılmıştır:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

İşte C / C ++ derleyicisinin gördüğü şey (Unicode değişmezlerini kaldırdım, çünkü derleyici tarafından genişletilmediler ve hiçbir şey yapmıyorlar):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Burada, tek satırlı yorumlar, başlangıçtaki çok satırlı yorum sınırlayıcıları geçersiz kılar, bu nedenle tüm #defines ve #includeönişlemeli hale getirilir. Sonra, çok satırlı yorumlar, Java'nın boiletplate kodunu yorumlamak için kullanılır. Bu, eşdeğer koddur ve yorumlar kaldırılmıştır:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

Standart bir C / C ++ polyglot hilesi ( #ifdef __cplusplus), kodu belirten bir C ++ veya C derleyicisinin olmasına bağlı oolarak belirteci ya "2"da olarak tanımlamak için kullanılır "3". Daha sonra, yeni tanımlanmış belirtecimizi kullanarak ptek bir (yoksayılmış) intargüman ve çağrı alan bir işlev tanımlarız . Her zamanki gibi katı modda olmadığımız için dönüş değeri dışlanır. Daha sonra, imzasıyla eşleşen bir işlev işaretçisi olan tek bir üyeyle bir tanımladık ve adında tek bir örnek oluşturduk . Ana yöntemde ( her zamanki gibi bırakıyoruz ), adresi (bu nedenle aramaları yapmak ) için atanır ve denir.printfostructpoutintpout.printout.printp

C ++ dillerinde dahil edilmemiştir, biz önişlemci tüm kod bırakın ve tanımlayabiliriz polarak int p(int a){puts("2");}. Ne yazık ki, C ++ ' #includeı yapmak için bir G / Ç gerektirir . C dahil edilmediyse, önişlemci makrosunun tanımını pve #ifdefönişlemci makrosunu bırakabilir ve structbir işlev işaretçisine ihtiyaç duymak yerine doğrudan bir üye işlevini tanımlayabiliriz . Ne yazık ki, C üye işlevlerini desteklemiyor.


12

4 dil, 28 bayt / 64 = 0,4375

print((0 and 3^1or 1/2>0)+1)

1. Python 2

0sahte ve /tamsayı bölmeli

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (ayrıca Python 3)

0sahtekar ve /kayan bölme,

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. Yakut

0truthy ve ^bitsel xor, yani

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Lua

0truthy ve ^üstel.

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Lua ve Ruby'nin tamsayıymışlar gibi boolean ekleyemediklerini, dolayısıyla onların bir arada gruplandığını unutmayın. Maalesef 0andLua'da çalışmıyor, o yüzden bir bayt kaydedemiyoruz.


1 (Lua), 2 (Ruby), 3 (Python / Perl) yazdıran önceki 17 bayt sürümü:

print(2^(0 or 1))

-3 byte, bu sürüm için @xnor sayesinde çok daha düzenli hale getirir :)


Çalışır 2^(0 or 1)mı?
xnor

@ xnor Ah evet olur, teşekkürler :)
Sp3000

8

BFSRS> <> funge93thon123, 73/343 ≈ 0.212827 ...

Brainfuck, Cidden ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Yazdırılamaz, hexdump (ile geri dönüşümlü xxd -ps -r) içerir:

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

Zamanla daha fazla dil ekleyeceğim (ve muhtemelen bayt). Başlıktaki diller yazdırdıklarına göre listelenir. 8-bitlik sarma hücreleri ve Brainfuck için başlangıç ​​pozisyonundan (sarma veya sonsuz) sola gitmekten şikayet etmeyecek bir bant olduğunu varsayar.

brainfuck:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Cidden :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (teşekkürler çamur balığı):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Python 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Python 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7

Python 1 de çalışır. Bkz codegolf.stackexchange.com/a/65652/32686 . Herhangi karakter eklemek (ama değişmez 3için 4)
Mavi

8

14 dil, 73 bayt, puan = (73/14 ^ 3) = 0.02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

Daha fazla dil ekleyebilirim, fakat burada olanları ekleyeceğimi düşünüyorum.

1. Brainbool ; Çevrimiçi deneyin!

İlgili kod:

    [>+<         ]>+.

               + 

Bu gerçekten sadece +.+, 1 çıktı.

2. Jolf ; Burada dene!

(Relavent kodudur böylece karakter, kaynak kodu yorumlama durur:

#Y2

Bu eşittir (JavaScript'te)

var Y = []; toHex(Y); alert(2);

Hangi çıktı 2.

3. Öğe; Çevrimiçi deneyin!

İlgili kod:

    3`

Bu yakalar 3ve basar.

4. Brainfuck ; Çevrimiçi deneyin!

İlgili kod:

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

  -    -      + 

Bu 4'ün karakter kodunu oluşturmanın ve çıktının ve ondan sonra başka şeylerin standart yoludur.

5. Reng; Burada dene!

~ programı sonlandırır, bu nedenle burada ilgili kod:

#Y2(3`5n~

#YBu durumda TOS olmayı yeniden tanımlıyor 0,. 22 iter; (yığını N'den döndürerek yığını N kere döndürür; 3`-3 iter; ve son olarak, 5nyazdırır 5.

6. ETA; Çevrimiçi deneyin!

ETA sadece E, T, A, O, I, N, S, H harflerini okur, bu nedenle yalnızca çalıştırılan kod şöyledir:

       n thneo e         n     


  int int          

Süper alakalı kod:

       n thneo

Ya da eşdeğer şekilde: nthne o. n...ebir üs-7 değişmezidir ve thn54 için üs-7 sayısıdır o. Bu karakteri çıkarır . Gönderim yanlış çıktı, ama nedenini bilmiyorum.

7. Python 3

Ne görüyor:

# comment
# comment
14
print(int(15/2))+3

15/2/şamandıra bölümü olduğu gibi 7.5 verir . int(...)sayıyı int yapar, sonra yazdırılır. Program +3karşılaşıldığında hata veriyor.

8. Julia

Julia görüyor:

# comment
# comment
14
print(int(15/2))+3

15 / 2'yi kesmek yerine, Julia bunu yuvarlar, 8 değerini verir. Bunu basar, sonra +3 ile karşılaşıldığında hata verir.

9. Fisyon; Çevrimiçi deneyin!

İlgili kod:

        <"9"L         

Bu fikri Martin'in Fisyon bölümünden aldım (çaldığı gibi). Lsola dönük bir şey başlar, yakalar 9ve ile biter <.

10. Boşluk; Burada dene!

İlgili kod, boşlukları Sve sekmeleri tercüme T:

SSSTSTS
T
ST

10'u yığına iter ve sayı olarak ( T\nST) çıkarır .

11. Python 2

Python 2 bunu görür:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 11 olarak değerlendirilir ve bu basılır.

12. Gol> <>; Burada dene!

İlgili kod:

#                      ;n@0d c

Bu kullanılan hile kullanan Martin'in cevabı@ > <> ve Gol> <> farklı yönlere döner. #aynalar, c12 diter, 13 0iter, 0 iter ve yığının üstüne @getirir c, sonra dışarı çıkarılır ve basılır ;n.

13.> <>; Çevrimiçi deneyin!

İlgili kod:

#                      ;n@0d c

Yine bunu kullanmak @>>>> ve >>>> farklı yönleri döndürür. #aynalar, c12 diter, 13 0iter, 0 iter ve yığının üstüne @getirir d, sonra dışarı çıkarılır ve basılır ;n.

14. Golfscript; Çevrimiçi deneyin!

Ne görüyor:

# comment
# comment
    14
print(-int(-15/2))+3

İter 14, prints ve hatalar. Çalıntı esinlenerek SP3000 cevabı .


7

Subskin , Brainfuck ve Fob 27 bayt / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

derialtı

0
31

Talimat göstergesini (burada önemli değil) 0ve çıkış yazıcısını ayarladık 31. Çıkış yazmacının içeriği ise >= 0, içerilen değeri achar . Diğer tüm kodlar dikkate alınmaz.

brainfuck

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

Kayıt cihazına koyar 3, değeri bir kez azaltır -ve sonunda çıktı verir ..

köstek

#>&$3#<>$

Bu biraz daha zor, çünkü Brainfuck Fob'daki talimatları <ve >talimatları okuyor . #Brainfuck'ın işaretçisi ile yürütme moduna giriyoruz ve daha sonra bizim için daha kolay hale getiriliyor. Henüz yürütecek bir şeyimiz yok, o yüzden hiçbir şey yürütülmedi.

Akümülatör moduna girer $, a ile atar 3, yürütme moduna tekrar girer, akümülatör içeriğini yığına iteriz <ve son olarak içeriği çıkarırız >.

Brainfuck'ın programla oynamasını önlemek için, yeniden biriktirme moduna giriyoruz $.


7

7 Dil, 55/7 ^ 3, 0.16035

PowerShell v1, v2, v3, v4 ve v5, Foo ve Pyth öğelerinde çalışır

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

1-5 Basamakları, sweerpotato'nun cevabını vermek için benzer bir mantık kullanır . $PSVersionTableÖzel değişken PowerShell v2 tanıtıldı ve tam inşa listesini, revizyonları, vs. Burada değişkenin bir örnek çıktısı var içerir edildi:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

Bu kodda, ilk önce $pkod uzunluğu daha kısa olacak şekilde depolanır . Ardından, değişkeni iki maddeli bir dizine bir dizin olarak kaldırarak varlığını kontrol ederiz:

  • Değişken yoksa, PowerShell dinamik olarak oluşturmak ve atar $NULL, !olduğu $TRUEya da 1çıkış olarak dizideki ikinci eleman, karşılık gelen,1 .
  • Değişken mevcutsa (v2 + 'da olduğu gibi), !değişkenin türü , sürüm numarasını çıkaran ilk öğeye endeksleyen $FALSEveya ile sonuçlanır 0.

Foo'yu 6 için kullanarak #, bu PowerShell'deki bir yorumdan yararlanıyoruz , bu nedenle PS ortamında çalıştırıldığında yok sayılıyor. Ancak, Foo mutlu bir şekilde sayıyı tükürecek6 ve daha sonra hiçbir şey yapmadan, programın geri kalan kısmında ilerleyecektir.

Pyth'i 7 için kullanarak, geri döndük 7, sonra hemen bıraktık .q, böylece başlayan sonsuz gerçek döngü #önemli değil. Zaten örtük basılmış bir şey kaldığından. Bu ekleme için @ FryAmTheEggman'a teşekkürler .

Düzenleme - Mauris Düzenleme sayesinde bir avuç baytlık golf yaptı - Sp3000 sayesinde netleştirilmiş Pyth açıklaması


Nasıl hakkında $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]? Bu Powershell'imde çalışıyor, ancak önceki sürümlerde olmayabilir.
Lynn

7

7 dil, 287/7 ^ 3 = 0.836

Muhtemelen giren en düşük puan, yine de C polyglot'un bu 3 versiyonunu beğendim.

Sıkıcı Python çözümü, en azından "3 benzersiz" dil ödülüne hak kazanmak için eklendi.

Farklı yorum görüşleri için C trigraph'ları kötüye kullanarak Java eklendi.

Çalışır:

  • Python 1

  • Python 2

  • Python 3

  • C89

  • C99

  • C ++

  • Java

golf versiyonu:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Ungolfed:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

Tamam, bu muhtemelen biraz yorgun oluyor ve ingilizce becerilerimin sıradan açıklamak için yeterince iyi olduğunu umuyorum.

Öncelikle, dil yapılarını her biri için ayrı ayrı ele almak için kullandığım farklı yorum türlerini açıklayacağım.

Öyleyse ilk bloğu alalım:

/*
*??/
/

Java için bu sadece çok satırlı bir yorumun başlangıcıdır. Ama ... C99 / 89 / ++ 'da

/*
*/

Yana ??/bir sesli üç harf olan \C müddet \karakteri tür tutarlı ve hatta commandfunctionality satır sonlarını tüketir. Bu, bir \narının satır arızası yerine sadece "görüntülenmesine" neden olur . bu, ilk bloğu temsil eden bu bayt dizisine verilen anlamına gelir: [ /] [ *] [ \n] [ *] [ ?] [ ?] [ /] [ \n] [ /], trigraph değerlendirmesinden sonra olur: [ /] [ *] [ \n] [ *] [ \] [ \n] [ /] \Tetikleyicilerin tutarlı işlevsellik gösterdiği ve "tükettiği" durumlarda, \nbu yüzden C dillerinde kalan ve sonuncular byte'lar: [ /] [ *] [ \n] [ *] [ /]

Ancak tüm bu java hiçbir şey bilmiyor ve bu numara geri dönene kadar izleyenleri yorum olarak görüyor.

(devam edecek!)


7

4 Dil (Befunge-93, Mikroscript II, Mikroscript ve Foo), puan 7/64 = 0.109

"4"1.@2

Befunge: 4'e basın, 1'e basın, 1'e basın ve sonlandırın.

Microscript II: "4" stringini üret, at, birinin karekökünü al, at ve son olarak x'e 2 ayarla. Bu daha sonra örtük olarak basılır.

Mikroskopik: 52'yi (programın geri kalanında aslında hiçbir zaman kullanılmayacak olan) yığına itin, kaydı birer birer (başlangıçta sıfır) birer birer artırın, daha sonra birer ikier arttırın. Bu daha sonra örtük olarak yazdırılır.

Foo: "4" dizesini yazdırın, ardından 2 düğmesine basın.


6

Python 1 | 2 | 3, 27 bayt / 27 = 1

print(len("\xabc")+(1/2>0))

@ sweerpotato'nun sürüm numaralarını kullanması, Pytons'u daha az ayırt etmenin mümkün olup olmadığını merak etmemi sağladı. İşte bulduğum en iyisi.

açıklama

Python 3'ü önceki sürümlerden ayırmak için standart tamsayı bölme - kayan nokta bölme hilesinden yararlanırız. (1/2>0) == (0>0)0 öncesi Python 2.3 veya FalsePython 2.3'ten sonra (1/2>0) == (0.5>0)döndürür Trueve Python 3 için döndürür .

Python 1'i diğerlerinden ayırmak için Python 1'de "\xabc"bir uzunluk ve Python 2'den iki uzunluk olan dizenin uzunluğunu alırız . Neden? Çünkü

Dize değişmezleri \ x kaçış şimdi tam olarak 2 onaltılık basamak alır. Önceden, 'x' işaretini izleyen tüm onaltılık basamakları tüketir ve sonucun en düşük 8 bitini alırdı, bu nedenle \ x123456 \ x56 ile eşdeğerdi.

( Python 2.0'daki Yeniliklerden )


6

Python 3, Ruby, Perl, C, C ++, Amaç-C 202 bayt / 6 ^ 3 = 0.935 ...

Bu aslında oldukça eğlenceliydi ve booleanlarla çokça oynadık.

Kodun yorumlayıcıya kopyalayıp yapıştırarak aşağıdaki sitedeki kodun tüm sürümlerini yapabilirsiniz .

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3, yazdırır 1

Püf noktası şudur:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Bu yazdıracak 1

Ruby, baskılar 2

Ruby için yorumlanan kod:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Yani bu yazdırır 2

Perl, baskılar 3

Perl için yorumlanan kod:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Her şeyden önce, __DATA__belirteç Perl derleyicisine derlemenin bittiğini söyler. Sonra her şey göz ardı edilir.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Ve yazdırır 3

C, yazdırır 4

Yorumlanan kod diğerlerinden oldukça farklı:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

Bu sadece char basacak 4.

C ++, yazdırır 5

C kodu ile aynı

Bu char yazdıracak 5.

Amaç-C, yazdırır 6

C kodu ile aynı

Bu char yazdırır 6.


5

5 Dil, 18 bayt / 5 ^ 3 = 0.144

Çalıştırır Brainbool , Mathematica , Foo , > <> ve Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool brainfuck gibi, ama sadece bit üzerinde çalışır, ve giriş ve çıkış sadece oluşur 0ve 1.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

Mathematica

Mathematica'da her şey bir ifadedir ve bir değeri vardır. simgesi Print@2yazdırır 2ve döndürürNull . Bundan sonra, kod bazı sembolik hesaplamalar yapar, ancak hiçbir şey yazdırmaz.

varsayılan değer

"3" yazdırır 3. Diğer parçaların ne yaptığını bilmiyorum.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Befunge

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

12 Dil, 35 bayt / 12 ^ 3 = 0.0202546 ...

Sweerpota'nın hilesini kullanarak , ucuz ama güçlü.

Çalıştırır Brainbool , Mathematica'nın 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 ve 10.0 , Foo ve > <> .

cn;+"11".Print@Floor@$VersionNumber


5

6 Dil, 38/6 ^ 3 = 0.17592̅5̅9̅

Boşluk , Brainfuck, Yakut, Labirent , Foo, Cidden

Açıklama:

£: sekme

: alan, boş yer, mekan

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Bu, yazdırılamayan karakterler içeriyor, bu yüzden burada hexdump:

7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a

Açıklama:

Beyaz boşluk

Çevrimiçi deneyin. (Not: programım, programı sonlandırmak için kapanış üç satır atlamayı ihmal ediyor, bunu Whitelips'e yazdım / test ettim ve orada doğru çıktıyı elde ettim , ancak Çevrimiçi Denemede yazmıyor , bu nedenle bağlantılı program bu iki karaktere sahip. söyleyebileceğim gibi, bazı tercümanlar bunu yapmanıza izin veriyor, diğerleri ise kesin bir fesih olmadan sonsuz bir döngü içinde kalmış durumda)

(yok sayılan karakterleri atlamak)

spacespacespacetabenter: yığına bir 1 basın

tabenterspacetab: yığının tepesini çıkarır

Yakut

Açıklamaya gerek yok. 2. Baskı, bu satırın kalanını (ergo, beyin fırtınası programı) bir yorum olarak değerlendirir, dosyanın kalanını boş olarak değerlendirir.

brainfuck

Çevrimiçi deneyin.

Akışı destekleyen bir tercüman gerektirir. Alttaki ilk hücreyi 255'e akar sonra bunu, bir döngü sayacı için 3'ü (ascii kodu olan 51) üretmek üzere kullanır.

Labirent

Çevrimiçi deneyin.

(okunamayan son iki satırı göz ardı etmek;

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

varsayılan değer

Çevrimiçi deneyin.

Çıktıyı etkileyen tek şey 5'i basan "5" dir.

Ciddi anlamda

Çevrimiçi deneyin.

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program

5

5 dil, Chaîne , Minkolang , Foo , Brainf ** k-ng ve Vitsy , 21/5 ^ 3 = 0.168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chaîne

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

varsayılan değer

2|<«+!@"3".N+m

5N»
       "3"     print three

Minkolang

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Vitsy

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Muhtemelen> <> veya başka bir şey ekleyebilirim.


1
Bilirsin, ayna için asla iyi bir kullanım bulamadım. xD
Addison Crump,

5

Craneflak , Brain-Flak Klasik , Rain-Flak , BrainHack , Brain-Baca , miniflak , miniHack : .1020

(([]()()()<()()()>)()()){}#{}({}())

Çevrimiçi deneyin!

açıklama

Burada olan ilk şey, yorumların okunma biçiminde BrainHack, CraneFlak ve Rain-Flak tercümanları arasında bir fark olduğu. Craneflak adlı kullanıcının yorumu yok, Rain- #Flak'ta hattın geri kalanını yorumluyor ve BrainHack'teki #{...}iç kısımları yorumluyor .

İşte her dilin okuduğu:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

Bir sonraki şey, beyin ve miniflaks arasındaki farktır. Hem Rain-Flak hem de BrainHack, tüm ekstra işlemlerin kolayca kaldırıldığı miniflak'ı destekliyor. Bu onların kaybettikleri []ve<...>

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Sonra Brain-Flak ve Brain-Flak Classic arasındaki fark var. Klasik []olarak-1 bunun yerine sonuç, 2 adrestir, normal Yağmur-Flak göre 1 daha az olduğu anlamına gelir, istif yüksekliği, bir.

Son olarak, beyin-flak ve beyin-baca arasındaki fark var. Beyin bacalarında yığın yerine kuyruk kullanılır. Normalde beyin flakası 3'ü 5'e iter ve 5'i uzağa fırlatır, ancak beyin-bacalarında pop 5'ten değil, 3'ten kurtulur.


4

Samanyolu 1.0.2 , CJam ve STXTRM , 20 bayt / 3 ^ 3 = 0.741

Ekleyebileceğim en az bir dil olduğunu hayal ediyorum.

'2"3""1"1<<1>;;"2"3;

açıklama


Samanyolu ,1

Samanyolu'nda, dizeler yalnızca çift tırnak işareti ile gösterilir. Tek bir alıntı komut satırından girdi okur; yok ise boş bir dize iter. İşaretlerden daha büyük ve daha küçük olan işaretler tüm yığını sırasıyla sırasıyla sağa ve sola döndürür. Son olarak, bir noktalı virgül, üstteki iki yığın öğesinin yerini alır.

İşte yığın görselleştirme (gösterilen yığın, gerçekleştikten sonra listelenen işlemin sonucudur):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

CJam ,2

CJam'da, dizeler çift alıntı çiftleri ile de belirtilir. Tek bir alıntı, aşağıdaki karakterin karakter kodunu iter. Bir karakter kodu çıktığında, karşılık gelen karakter olarak çıkar. Daha büyük ve küçük işaretler beklendiği gibi hareket eder ve ilk iki yığın öğesinin sırasını değerlendirir. Son olarak, bir noktalı virgül, üst yığın öğesini atar. Programın sona ermesi üzerine yığının içeriği çıkar.

İşte yığın görselleştirme (gösterilen yığın, gerçekleştikten sonra listelenen işlemin sonucudur):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

STXTRM ,3

MSM'de, operatör olmayan herhangi bir şey yığına karakter olarak basılır. Bir noktalı virgül, üst yığın öğesini çoğaltır. Program, daha fazla operatör olmayana veya yığında tek bir öğe bulunana kadar devam eder.

Yığın üzerindeki son karakter 3, son operatör tarafından kopyalanan karakterdir . 3programın sonundaki en üst öğedir, bu nedenle çıktı verilir.


4

5 dil, 18 bayt / 5 ^ 3 = 0,144

Ouroboros , Pip , QBasic, Foo ve Pyth

5'"4"()"
1?3'@n()2

1. Ouroboros

Programın her satırı kuyruğunu yiyen bir yılanı temsil eder.

Yılan 1

Push 5, 'bir op-olmayan, push 52(ASCII kodu "4"). (yılanın bir sayı patlamasına ve kuyruğunun o kadar çok karakterini yemesine neden olur. Bu komut göstergesinin (ve tüm yılanın) yutulmasıyla sonuçlandığından uygulama durur.

Yılan 2

Bas 1, rastgele bir sayı bas ( ?), bas 3, çalışma 'yok. yığını üste @döndürür ve 1üst üste nbırakarak sayı olarak 3çıkarır. Sonra (yılanın ucundan bu kadar çok karakter yiyor, talimat göstergesini yutuyor ve duruyor.

Sen Yığın Pasaj tercüman online bu programı çalıştırabilirsiniz burada .

2. Pip

Programın çoğu, değerlendirilen ve atılan ifadelerden oluşur:

  • 5
  • '" (karakter değişmez)
  • 4
  • "()"
  • 1?3'@ (üçlü ifade)
  • n (değişken, = yeni satır)
  • () (Sıfır)

Son olarak, son ifade, 2yazdırılır.

3. QBasic

Sonra her şey 'bir yorumdur. Böylece ilk satır 5bir satır numarasına dönüşür . İkinci satırda, 1satır numarasıdır ve ?3için kısa yoldur PRINT 3.

(Görünüşe göre sıra numaralarının sıra dışı olması bir sorun değildir, ancak olması durumunda düzeltilmesi kolay olacaktır.)

4. Foo

Neredeyse her şey ameliyat dışı. "4"yazdırır 4. Parantezler (x2), geçerli dizi hücresi sıfıra gelinceye kadar çalışan ve hemen doğru olan ve döngüden çıkan bir döngüdür. @, bir sayı tarafından takip edilmediğinde, geçerli dizi hücresinin değerini alır (0'a sıfırlanır) ve bunu yığına iter.

Eşi benzeri olmayan ikinci "şeyin nasıl ele alınması gerektiğinden tam olarak emin değilim . Online versiyonu meydan kuralları izin çıktı, bir yeni satır eklemek gibi görünüyor.

5. Pyth

5çıktı. Ardından, program '"4", adında bir dosyadan okumaya çalışan karşılaşır 4. Böyle bir dosya olmadığı sürece, bunun programı bir hata ile sonlandırması gerektiğini düşünüyorum. ( Çevrimiçi sürümde der ki name 'open' is not defined- çevrimiçi dosya açmaya izin verilmediğinden dolayı.)

"1. satırın sonundaki başıboş , 2. satırın yürütmeden önce sözdizimi hatasına neden olmamasını sağlar.



@Dennis Teşekkürler! Esolangs sayfasının bu tercümana bir bağlantısı yoktu.
DLosc

İşte mevcut dillerin indeksi . Bir tane eklememi istiyorsan, sohbete beni at.
Dennis,

4

4 dil, 24 bayt, 24/4 ^ 3 = 0.375

print(1//0.5--1+1/2*2
);

1. PHP

PHP print(1);hangi eşittir yürütür 1

2. Lua

Lua print(1//0.5);2'ye eşit olanı çalıştırır

3. Python 2

Python 2 print(1//0.5--1+1/2*2);hangisine eşittir 3 (tamsayı bölme)

4. Python 3

Python 3 print(1//0.5--1+1/2*2);hangisine eşittir 4 (yüzer bölüm)


Güzel cevap, geleneksel dillerdeki cevapları seviyorum :-) umarım ppcg'de golf oynayacaksınız :-) lütfen ilginç olduğunu düşünüyorsanız önceki zorluklarımı deneyin :-) bazıları biraz zor ve bazıları daha temel :-)
Stewie Griffin

Meydanda açıklanan 100 açık ödülle ilgilenebilirsin. Outgolf Sp3000 (28 bayt, 4 dil), yalnızca geleneksel dilleri kullanıyor (linkte tanımlanmıştır) ve sizin :-) maalesef python 2 ve 3, ödül mücadelesinde benzersiz sayılmıyor.
Stewie Griffin

3

Brainfuck-ng, Foo,> <>, 9 bayt / 3 ^ 3 = 0,333 ...

#+!"2";n3

Brainfuck-ng

Tanıdığı tek karakterler +ve !:

+ Increment cell by one
! Print as integer

Baskılar 1

varsayılan değer

Her şeyi tırnak içinde yazdırır.

"2"

Baskılar 2

> <>

#Noktayı sola yansıtır, 3'ü yığına 3iter , bir tamsayı olarak verir, programı durdurur.n;

#      ;n3

2

3 Dil, 82 83/3 ^ 3 = 3.074 ...

Çalışır ??? , Boşluk ve Beatnik . Daha doğrusu, bu dillerde çalışması gerekir , ancak birkaç gün boyunca bunları test edemeyeceğim. Neyse, işte kod:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

1. ???

.................................................!

??? temelde beyinsizdir ancak geleneksel karakterler yerine komutlar olarak ortak noktalama işaretleri kullanır. .49 kez yapılan geçerli bellek hücresini artırır. !Geçerli bellek hücresini alır ve burada bir karakter olarak yazdırır 1.

2. Boşluk

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

Boşluk, boşluk olmayan tüm karakterleri yok sayan bir dildir. Burada kolayca okunabilir bir forma dönüştürdüm. İlk satır 2yığının üzerine itilir ve ikinci iki satır yığının tepesini bir sayı olarak yazdırır 2.
Birleştirilmiş kodda, teknik kısıtlamalar nedeniyle dört boşlukla değiştirilmiş sekmelere sahip olduğumu unutmayın.

3. Beatnik

K Jax
Jy Jy
My My
XO

Beatnik, her kelimenin Scrabble puanına dönüştürüldüğü bir dildir, daha sonra bu puanlar komut olarak yorumlanır. İlk satır 17yığına iter . İkinci satır, iki yığının üst çoğaltır ve üçüncü satır etkili bir şekilde üç kat, birbirine iki yığın elemanlarına üst ekler 17halinde 51. Son satır, karakteri yığının üstüne, burada yazdırır 3.
Orijinal Beatnik şartnamesinde bir hata olmadığını varsayarak Beatnik’i Face Value olarak kullandığımı unutmayın. Ayrıca Kuzey Amerika İngilizcesi Scrabble puanlama sistemini kullanıyorum.

Şimdilik açık değilse, bu dillerin her biri sadece belirli bir karakter tipini kabul eder (noktalama işaretleri, boşluklar ve harfler), bu yüzden bu çok parçayı yazmak bireysel programları yazmak kadar kolaydı. Tek gerçek "numara", kelimeleri Beatnik'ten ayırmak için Whitespace kodunu kullanmak. Bunun ötesinde, bireysel programlar hiçbir şekilde örtüşmez.


2
3 ^ 3 = 27 ==> 82/27 = 3.037037037037037 ...
AdmBorkBork

1
Whitespace kodunuz 2 değil 0 yazdırır . Burada ve burada test edilmiştir .
Dennis,

@Dennis Teşekkürler, işaret biti ihmal etmişti.
Mike Bufardeci

2

5 dil, 175/5 ^ 3 = 1.4

Ödül, gereklilikleri ilk cevabımla kendimi yetersiz hissettirecek şekilde değiştirdiği için farklı bir cevap göndermeye karar verdim (ancak bu beni hala genel meydan okuma karşısında tatmin ediyor!)

İşte ödül ödülü kazanmaya hak kazanan çözümüm:

İçinde derler

  • C99
  • objC90
  • C ++ 0x
  • Yakut
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif

2

3 dil, 15 bayt, skor 0.555 ...

Daha sonra daha fazla dil ekleyeceğim.

2//1+1#😅😨

1. Emotinomicon

Emotinomicon bir dize olmayan herhangi bir metni hemen hemen yok sayar. 😅istiflemek için 1'e basar ve 😨TOS'u bir sayı olarak çıkarır.

2. Javascript

Javascript'teki yorumlar ile başlar //, böylece sadece 2bölüm yürütülür.

3. Python 2/3 REPL

Python'daki yorumlar ile başlar #, böylece sadece 2//1+1bölüm yürütülür. //Python 3'te tamsayıdır ve /Python 2'deki ile aynıdır . 2 bölü 1, 2'dir, artı 1, 3'tür.


2

4 dil, 97 bayt, 0.37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Yakut

Bu ayarlar siçin "1", kullanan karşılaştırır =~karşı -3bir boşluk bağlamda, bölme dener 2tarafından /2;'''/.to_s.orddaha sonra içeren yeni bir dize başlatır =;print 4; __DATA__ =1;, sonra bir yorum vurur printlar shala hangi 1.

piton

Kümeler siçin "1", daha sonra tekrar ayarlar yukarıdaki başına ~-3hangi 2. Biz bir tamsayı bölümündeyim 2//2sonra içeren bir docstring'ini var, /.to_s.ord;"=;print 4; __DATA__ =1; ";#bir yorumun, nihayet ardından printing shâlâ 2.

JavaScript

Ayarlar siçin "1"daha sonra tekrar ayarlar ~-3, sonra orada yukarıda uyarınca 2bir açıklama izledi hatta. Sonra değişkeni ayarlamak __DATA__için 1. Bir sonraki satırda çağrılan çıkışı 3 olacak şekilde kodlayan ;#'''#işlevin bir tanımını içeren kısa bir dize var print.

Perl

Bir ikame eşdeğeri olarak çalışır s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/, prints 4ve dize geri kalanı maskelendiyse __DATA__tanımlayıcı.


2

QBasic, QBIC ve> <>, 18 bayt / 3 ^ 3 dil = 0.66666 puan

1:?v+1'-5`
''`>3n;

Yıkmak:

1. QBasic (IDE'yi alın )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Tercümanı al )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( Çevrimiçi deneyin )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program

1
Puanınızdaki dillerin sayısını küplemek istediğinizi düşünüyorum (örneğin, 18 / (3 ^ 3))
matematik bağımlısı

1

JavaScript, HTML ve PHP, 72 bayt / 3 ^ 3 = 2,67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

HTML’de bu, öncü 1’i yazdıracak, <!window?2:2//> etiketi ve gerisi bir HTML yorumu olacaktır.

JavaScript'te 1<!window?2:22 değerlendirir ve çıktı verir (bu bir konsolda çalıştırılmalıdır) ve gerisi bir yorumdur.

: PHP, aşağıdaki sunucudan çıkışı 1<!top?2:2//><!----><script>document.body.innerHTML=3</script>HTML 's değiştirir 1olan 3.


1
PPCG.SE'ye Hoşgeldiniz! Harika ilk mesaj! İki şey: genellikle REPL-temelli cevapları sevmiyoruz (Javascript programı). Ayrıca, bir çevrimiçi tercümana koyduğumda PHP kodu çalışmıyor gibi görünüyor , PHP tam olarak nasıl çalışıyor?
GamrCorps

Teşekkürler! Eh, teknik olarak PHP + HTML (yani., Bu code.php için kaynak kod ise, tarayıcıda site / code.php adresini ziyaret edin . 3 görüntüler
cuniculus

Burada deneyin: mowbl.com/se.php .
cuniculus,
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.