Bir polyglot'a dil ekleyin


239

Bu, her bir cevabın önceki cevaba dayandığı bir mücadelesidir. Yazıların yapıldığı sıradan emin olmak için ipliği "en eski" ye göre sıralamanızı öneririm.

Not : Bu oldukça uzun süren bir zorluk haline geldi ve yeni cevaplar göndermek oldukça zor. Bu nedenle, potansiyel bir cevabın belirli bir kısmı hakkında öneride bulunmak istemeniz durumunda, eklenebilecek diller veya benzerleri hakkında fikir sahibi olmak için, şimdi bu zorluk için uygun bir sohbet odası bulunmaktadır. Sormak veya söylemek istediğiniz bir şey varsa, bırakmak için çekinmeyin!

Görev

N çalıştırmak zorundadır sunulacak programda inci n farklı dilleri; Özellikle, önceki programlara eklenmiş tüm diller ve bir tane daha. Program, bu soruya verilen cevaplarda kullanılan ilk dilde çalıştırıldığında 1, ikinci dilde çalıştırıldığında ise vb. Çıktı vermelidir. Örneğin, ilk cevap Python 3'te çalıştırıldığında 1 yazdırabilir, ikinci cevap Python 3 ve 2'de JavaScript çalıştırıldığında çalıştırılabilir; Bu durumda, üçüncü cevabın Python 3'te çalıştırıldığında 1, JavaScript'te çalıştırıldığında 2, başka bir dilde çalıştırıldığında 3 vermesi gerekir.

Ek kurallar

  • Programınız hata vermeden veya çökmeden çalışmalıdır. Uyarılar (ve diğer stderr çıkışları) kabul edilebilir, ancak program normal şekilde çıkmalıdır (örneğin programın bitmesiyle veya exitnormal program sonlandırması yapan bir komutla ).

  • Çıktı yalnızca tamsayı olmalıdır, ancak izleyen satırsonları tamamdır. Diğer önlenemeyen stdout çıkışlarına da izin verilir. Örnekler: tercüman adı ve Befunge-93'teki sürüm , Zephyr'de basılan dizeden sonra boşluk . Bazı diller iki yazdırma yöntemi sunar - arka boşluklu ve boşluksuz; Bu durumda iz bırakmayan boşluk kullanılmalıdır.

  • Her cevap, önceki cevaptan en fazla% 20 veya 20 bayttan (hangisi daha büyükse) daha uzun olmamalıdır. (Bu Lenguage gibi dillerin kullanılmasını engellemek ve ipliği en az miktarda golf oynamayı teşvik etmek içindir.)

  • Aynı dilin farklı sürümlerinin kullanılmasına izin verilir (açıkçası, farklı sayılar yazdırmaları gerekecek olsa da, çoklu sürümde bir sürüm denetimi sığdırmanız gerekir). Ancak, dilin sürüm numarasını döndüren bir dil özelliği kullanamazsınız. Tam olarak aynı dili tekrarlamak elbette imkansızdır (programın iki farklı sayıdan birini deterministik olarak yazdırması gerektiği için).
  • Bazı poliglot yarışmalarında yasaklanmasına rağmen aşırı yorum istismarı gibi hileler burada gayet iyi.
  • Önceki cevapları kendiniz yazmak için bir rehber olarak kullanmak zorunda değilsiniz (isterseniz, spesifikasyona uygun olduğu sürece tüm programı yeniden yazabilirsiniz); bununla birlikte, cevabınızı çoğunlukla önceki bir cevaba dayandırmak ve bir çözüm oluşturmanın en kolay yoludur.
  • Üst üste iki cevap gönderemezsiniz. Aralarına başka birinin göndermesine izin ver. Bu kural zafer koşulu sağlanıncaya kadar geçerlidir.
  • Bu zorluk diğer yarışmacıların aynı dillerde yayınlamalarını gerektirdiğinden, sadece ücretsiz bir uygulamayla dilleri kullanabilirsiniz (sanki yarışmasıymış gibi).
  • Bir dilin birden fazla tercümana sahip olması durumunda, o dilde başarılı bir şekilde çalışması gereken tüm programlar bu tercümanda olduğu sürece, herhangi bir dil için herhangi bir tercüman seçebilirsiniz. (Başka bir deyişle, eğer bir program birden fazla tercümanda çalışıyorsa, gelecekteki yayınlar bir dil için belirli bir tercüman seçiminde "kilitleme" yerine, bu tercümanlardan birini seçebilir.)
  • Bu zorluk artık dil seçimi ile ilgili yeni PPCG kurallarını kullanmaktadır: sorudan daha yeni olsa bile, bir dil veya dil yorumlayıcısı kullanabilirsiniz. Bununla birlikte, eğer a) dilin çok dilimleme amacıyla tasarlanması veya b) dilin bu sorudan ilham alması halinde, sorudan daha yeni bir dil / tercüman kullanamazsınız. (Yeni tasarlanan pratik programlama dilleri, ilgisiz esolanlar gibi neredeyse kesinlikle tamam olacak, ancak bu sorudan ilham alan Armut Ağacı gibi şeyler yasaklandı.) Bunun, tasarlanan dillerin geçerliliğini değiştirmeyeceğini unutmayın. Bu sorudan daha eski olan polyglotting için.
  • Zafer koşulunun (aşağıya bakınız), zinciri kırmanın (yani, başkalarının çok dilli olması çok zor bir dil kullanarak sizden sonra cevap vermesini imkansız kılmanın) kazanmanın diskalifiye edeceği şekilde tasarlandığını unutmayın. Amaç mümkün olduğunca devam etmektir ve kazanmak istiyorsan buna saygı duymalısın.

Cevap biçimi

Tüm cevaplar birbirine bağlı olduğundan, tutarlı bir cevap formatına sahip olmak yardımcı olacaktır. Cevabınızı aşağıdaki gibi biçimlendirmenizi öneririm (bu, zincirdeki ikinci linke bir örnektir):

2. JavaScript, 40 bayt

(program goes here)

Bu program Python 3'te 1 ve JavaScript'te 2 yazıyor.

(programı, poliglot tekniklerini vb. açıklamak istiyorsanız, bunları buraya yerleştirin)

Zafer durumu

14 gün boyunca yeni bir cevap alınmadığında , kazanan ikinci en yeni cevabı kim gönderirse, yani zinciri kırmadığı kanıtlanmış en büyük poliglot olacak. Bundan sonra zinciri genişletmek, yine de çok açığız!

Kazanan Şans bkz 194 (TEMPLAT) cevap .

Dil listesi


3
Silinen yayınları görebilen kişiler için: Sandbox yayını buradaydı .

5
Bir önceki programı kopyalamanıza gerek yok, elbette bir rehber olarak kullanabilirsiniz; Programı sıfırdan tekrarlamak daha uzun sürecektir! Cevaplara kalıcı bağlantı yapmaya gerek yoktur; en eskiye göre sıralama, tüm cevapları sıralı olarak gösterir.

3
@ ais523 Bence ne demek istediğimi yeni cevapların yeni kodla bağlamayı denemesinin gerekli olduğunu mu düşünüyorsun?
Mavi,

5
Kodun onaltılı dökümünü alan ve otomatik olarak tüm dillerde çalıştıran bir komut dosyasına ihtiyacımız olduğunu düşünüyorum ...
mbomb007 20

3
Bu, farklı türde bir sorun olarak gönderilen Çok Yönlü tam sayı yazıcıdır . (İlham?) Nihai cevap (şu anda) 0.0127, sadece Sp3000’in 30 dilde gönderiminde yenilen golü verirdi :) :)
Stewie Griffin,

Yanıtlar:


80

Not: Önce bunu görürseniz, en eskiye göre sıralamak isteyebilirsiniz.

17. Julia (128 bayt)

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);# =#;print(17)
#gg99ddi2` |1|1+6

Son satırda, biri ilk önce, gdiğeri sonra iki ESC vardır 2. Bu daha çok golf oynayabilirdi ama V ve Pyth sayesinde işler karmakarışık değildi.

Python 3, 2'de V, Minkolang'da 3,> <>, Python 2'de 6, SMBF'de 6, Japt'de 7, Retina'da 8, Perl'de 9, Befunge-93'de 10, Befunge'de 11 -98, Fission'da 12, Ruby'de 13, Turtléd'de 14, Haystack'ta 15, Pyth'te 16 ve Julia'da 17 .


İpuçları:

  • Dördüncü çizginin başlangıcı Python 2/3, Perl, Ruby'dir. Sonunda Julia, #=çok satırlı yorumlar sayesinde (Julia'nın sahip olmadığına dikkat edin and/or).
  • V, <ESC>gg99ddi2<ESC>kesinlikle golf oynamaktadır ancak V, test etmek için can sıkıcıdır Çevrimiçi deneyin! tercüman oldukça yavaş olduğundan.
  • Minkolang ve Haystack ilk başta iniyorlar v. Befunge-93 ve -98, yapmaz ve a'ya bağlıdır b.
  • Retina, dördüncü satırdaki boşluk ve 1 sayısını sayar ve V, Retina için konfigürasyonda gizlenir (yani, geri tepmeden önce).
  • ETHproduction'ın ipucuna göre, Japt kodun çoğunluğunu bir dizgede gizlemek için geri tepmeler kullanıyor.
  • Bölünme olduğunu R"12"*.
  • SMBF <.ilk sırada ve sonda golf oynadı 6.

24
Herkesin kodu olsa nereye gitti?
Alfie Goodacre

13
159 bayt - 128 bayt? Vay, bu mükemmel bir golf!
İnekler, aralık

6
Güzel, 2 ^ 7 bayt
15

7
Vay ... inanılmaz! Her şey söylendiğinde ve yapıldığında her dil için yeni bir açıklama yazmak zorunda kalacağız ;-)
ETHproductions

4
@AlfieGoodacre "Önceki cevapları kendiniz yazmak için bir rehber olarak kullanmak zorunda değilsiniz (dilediğiniz takdirde, belirtime uygun olduğu sürece tüm programı yeniden yazabilirsiniz)"
mbomb007

52

23. Altıgen , 186 bayt

Üzgünüm, bu planların üstesinden gelirse ...

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#0\32=""<0]#echo 21
#8␛dggi2␛` |1|6

␛ değişmez bir ESC karakterini temsil etmek için kullanılır.

Baskılar:

Hexagony'de 23, Underload'da 22 , Nim'de 21, Prelude'de 20, Reng'de 19 ( burada test edilebilir ), Kardinal'de 18, Julia'da 17, Pyth'de 16, Haystack'ta 15, Turtlèd'de 14, Ruby'de 13, 12'de Fission, Befunge-98'de 11, Befunge-93'de 10, Perl'de 9, Retina'da 8, Japt'de 7, SMBF'de 6, Python 2'de 5,> <> 4, Minkolang'da 3, Vim / V'de 2 ve Python 3'te 1.

Bağlantısız dillere ulaşmak için change language, Hexagony bağlantısının sağ üstündeki butona tıklayın.


Hexagony bu formatta (ALL'de) okunamaz. Buna altıgen formda bakmamız gerekiyor.
2 ESC karakterinin s ile değiştirildiğini ve böylece onları görebildiğinize dikkat edin - yok sayılırlar, böylece programda başka hiçbir kişi yoktur:

        # v 1 6 / " < " 6
       / b . q @ " ( : : )      A lot more readable, right?? No?
      : : : ( 2 2 ) S # ; n
     4 " 1 4 " # > 3 N 6 @ 1
    5 o | > ^ * t t t * ~ + +
   ~ ~ ~ % # = ~ n J < R " 1 2
  " ; # [ p r i n t ( ( 1 / 2 a
 n d 9 o r 1 3 ) - ( 0 a n d + 4
) ^ 1 < < 6 5 > > 6 2 ) # 4 6 ( 8   | Note that the 0s below can be replaced
 9 9 9 9 + + + + + ! ) = # p r i    | With anything (except "`" or " "), 
  n t ( 1 7 ) # 0 \ 3 2 = " " <     V as far as Hexagony is concerned
   0 ] # e c h o 2 1 # 8 ␛ d g
    g i 2 ␛ | 1 | 6 . . . . .    <-- the ␛ represents an esc
     . . . . . . . . . . . .         character
      . . . . . . . . . . .
       . . . . . . . . . .       A "." is a no-op
        . . . . . . . . .
                ^
                | Mirror wraps to here, going NW

Hexagony ile aşina olmayanlar için, 6 köşeden başlayan 6 IP var. Bir seferde sadece 1 aktif ve kullanılarak değiştirilir #][. Bellek modeli bu program için o kadar önemli değil, ancak gelecekte anlamak için gerekli olabilir. Bilmeniz gereken tek şey, 1 int'nin bir "bellek kenarında" (kısaca ME) saklanması ve '"}{aktif olan ME'yi değiştirmesidir.

\/|_>< program akışını kontrol eden aynalardır.

Bu nasıl çalışır:

İlk satır yapıldı:

#       A no-op (sets active IP to 0, the currently active one)
 v      letter chars set the ME to their ASCII value - so ME is now 118
  16    Like Labyrinth, 0-9 multiplies ME by 10 and is added - ME now 11816
    /   A mirror that sends IP going NW by wrapping to the bottom

Alt kısım (snippet dikey olarak ters çevrilir, böylece aşağı doğru okuyabilirsiniz):

    .   
   .    A series of no-ops. The IP is going NW now,
  .     because of the mirror on the top.
 .
|       Another mirror. This one sends the IP NE, into the h
 h      sets the ME to 104, the ASCII value for h
  #     104 % 6 == 2, so IP 2 is now active instead of 0

Sağ kenar:

        8  IP #2 is moving SW, starting in the right corner 
       i   Sets the ME to 105
      <    Mirror. Sends the IP going due West
    ""     These change the Active ME - just know that the new edge is 0
   =       Changes the MP (more in specs) - effectively a no-op used to fill space
\32        pushes 23, and mirrors up NE to the !

İlgili kodun son kısmı:

!          Prints the current value of the ME as an int. Success!
 20(R~     Does things to the ME - irrelevant now
      @    Ends the program!

Dikkat edilecek şeyler:

  • Hexagony , çalıştırmadan önce tüm s ve s'leri bırakır `, bu nedenle yapılan değişiklikler Hexagony'yi etkilemez
  • Kodu, 8'in yerine 9 uzunluğunda altıgen olarak yorumlanacak şekilde doldurmam gerekiyordu - 169'un altında veya 217'nin üzerindeki karakterlerin üzerinde dikkatli olun
  • Bu nedenle , sondaki ve son ~~~2 0s kodlara zarar vermeden değiştirilebilir
  • =""Sadece ME değiştirilebilir yeni böylece öncekinden uzak ME taşır. 'Örneğin altıgen programına zarar vermeden aynı şeyi yapan diğer karakterlerle değiştirilebilirler.
  • Bu teknik olarak Befunge 93 teknik özelliklerine uygun değildir, çünkü kodun sınırlayıcı kutusunu 80 x 25 karakter ile sınırlar. Ancak, çoğu tercüman bu açıklamayı görmezden geliyor (TIO gibi), Bu yüzden şahsen bir sorun olduğunu düşünmüyorum. Bunu yaparsanız, yorum yapmaktan çekinmeyin. (Eğer gerçekten onu gerçekten değiştirmemi istiyorsan, deneyeceğim)
  • Umarım şimdi çok zor değildir.

1
Doğru yapılırsa bu kolayca en çılgın program akışı haline gelebilir. Bazı çılgın @ ## yöntemiyle 8 boyutunda bir altıgen ile halletmeye yakındım, ancak bunu denediğimde 9 çok daha kolaydı. Ayrıca, TIO'nun v1'i çok daha hızlı çalışır, ancak dilleri kolayca değiştiremezsiniz.
MildlyMilquetoast

Bir sonraki labirenti önerebilirim ama bunu yapmak istiyorum.
MildlyMilquetoast

Kendim böyle bir şey yazacak kadar yetenekli değilim ama bu arada Cubix'in ortaya çıkmasını bekliyorum.
Pavel

@pavel Bu dile aşina değilim. 3D olduğunu varsayıyorum. Kulağa hoş geliyor. Ayrıca 3D olan bazı mantarlar var, ilginç bir ek olabilir
MildlyMilquetoast

Hala bu boyda olduğumuz sürece, bu akış gibi bir şeyi sürdürmenin en kolay yollarından biri olduğunu düşünüyorum ve bir sonraki boyuta ulaştığımızda Hexagony kodunu tekrar yazmanız yeterli. 3B dillerle ilgili olarak, mevcut dillerden hiçbirinin form beslemelerinin görülmesi üzerine panik yapmadığı varsayılarak, Trefunge'nin sığması oldukça kolay olmalıdır. (Ayrıca, Cubix daha önce gönderildi ancak silindi, çünkü poster bunun çok zor olabileceğini düşünüyordu; Hexagony ve Cubix'i bir kerede tutmak oldukça kafa karıştırıcı

52

50. bash, 1024 bayt

#16  "(}23!@)" 3//v\D(@;'[af2.qc]GkGGZ'#)"14";n4
#/*` "[!PPP(22)SP(>7 7*,;68*,@;'1,@ ␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=<xR+++++[D>+++++++L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh@O6O4/]>+.-- -. >][
#Rx%>~~~+ +~*ttt*.x
#D>xU/-<+++L
#R+.----\).>]|
#[#[/v/v(/0l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e00m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#ssseemeePaeueewuuweeeeeeeeeeCisajjapppp/*/
#define z sizeof'c'-1?"38":"37"
#include<stdio.h>
main(  )/*/
#()`#`\'*/{puts(z );}/*'``
<>{# }//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#< >"3"O.
=end #//
"""#"#//
#}
#|o51~nJ;#:p'34'\
#ss8␛dggi2␛ `|1|6$//''25  =#print(17)#>27.say#]#print(47)#]#echo 21#ss*///nd^_^_Z222999"26

Daha fazla bilgi edinmek ister misiniz? Polgot sohbeti deneyin !

Onları çevrimiçi deneyin!

Her zaman olduğu gibi, Stack Exchange'in sınırlamaları nedeniyle değişmez sekmeleri ve değişmez ESC karakterlerini değiştirdim. Programın kolayca kopyalanabilen bir versiyonunu yukarıdaki TIO bağlantısının "giriş" kutusundan alabilirsiniz.

Bitkin

Bu program basar 50 , bash 49 , Octave 48 Deadfish ~ bölgesi 47 Lily, 46 Cubix içinde, 45 PicoLisp içinde, 44 alphuck içinde, 43 retiküler içinde, 42 kötülük, 41 ***, Brainf içinde 40 En az olarak -2D, 39 CoffeeScript içinde, 38 ° C de, 37 ° C ++, içinde 36 Labirent'teki, 35 INTERCAL içinde, 34 Rail, 33 olayda, 32 dönüyordu, 31 Modüler SNUSP olarak,30 Boşluk, içinde 29 Tetikleyicide, 28 Beyin Flak içinde, 27 Perl 6'ya 26 05AB1E içinde, 25 Pip içinde, 24 Thutu içinde, 23 Hexagony içinde, 22 düşük yük olarak, 21 Nim içinde, 20 Prelude, 19 Reng bölgesindeki , 18 Cardinal, içinde 17 Julia, 16 Pyth içinde, 15 samanlýkta, 14 Turtlèd içinde, 13 Ruby, 12 fizyonda, 11 Befunge-98, 10, Befunge-93,9 Perl 5, içinde 8 Retinal, 7 Japt içinde, 6 SMBF içinde, 5 Python 2'ye 4 içinde> <>, 3 Minkolang içinde, 2 V / Vim ve 1 Python 3.

Doğrulama

Dillerin çoğu yukarıdaki test sürücüsü tarafından test edilir. Her zamanki dört suçlu için ayrı ayrı test yapılması gerekiyor:

  • Olay , resmi tercümanı, çevrimdışı kullanılarak test edildi;

  • Deadfish ~ ayrıca resmi tercümanı olan offline kullanılarak test edildi;

  • Modüler SNUSP burada çevrimiçi olarak test edildi ;

  • Reng burada çevrimiçi olarak test edildi .

açıklama

Eklenecek diller için çeşitli ipuçlarına bakıyordum. Bir olasılık, #"betik dili" satırına (Perl, Python 2 ve 3 ve Ruby'yi idare eden) anlaşılır bir şekilde eklenebilecek satır yorumlu bir dil bulmaktı .) Yine de zaten orada olanlarla sözdizimi ile uyumlu olabilecek bir dili düşünmek biraz zaman aldı.

Cevabım beni yıllardır yüzüme bakıyordu. Yukarıdaki TIO bağlantısını tıklarsanız, bash ile yazılmış polyglot test sürücüsünü açar. Tüm bu zaman boyunca, "Bash - TIO Nexus" diyen bir sekmem vardı. Bunun bir ipucu olacağını düşünürdün, ama görünüşe göre kaçırdım. Bir bonus olarak, bash ayrıca bir betik dilidir, bu nedenle "betik dil satırı" terimi hala uygundur.

Bash programı diğer betik dilleriyle aynı yerde başlar. Ancak, onu onlardan ayırmanın oldukça basit bir yolu var; tek tırnaklı dizgelerde, \çoğu dilde bir kaçış karakteri, ancak bash cinsinden değil. Böylece bash kodunu '\'…';Perl, Python ve Ruby'de dejenere edilmiş bir ifade (etkisiz) olan, ancak bash'te yürütülen diğer dillerden gizleyebiliriz . echo 50;exitbash programını sonlandırmanın oldukça basit bir yoludur. Neredeyse.

Buradaki en büyük sorun, bash'ın çalıştırıldıktan exitsonra geçerli satırın sonuna kadar ayrıştırmaya devam etmesidir (söz konusu kodu çalıştırmasa da), bu nedenle geri kalanında sözdizimi hatası olmadığından emin olmamız gerekir. çizgi. Hemen eşleşmemiş olan (ve olamaz) hemen 'sonra bizde exit;. Satırda daha sonra, '…'bazı Brain-Flak kodlarını kodlama dillerinden gizlemek için kullanılır, ancak bu onu bash'tan gizler. Sonuç olarak, tek tırnaklıdan çift tırnaklı dizgilere kadar kodu gizlemek için ne tür bir dize değişkeni kullandığımızı değiştirmemiz gerekir. or"'"hile Perl, Python veya Ruby'yi rahatsız etmeden yapar (soldaki argüman her durumda truthy olduğu için).

Şimdi gelecekteki bir çizgiye uzanan eşsiz bir ikili fiyat teklifimiz var. En az bir başka dili rahatsız etmeden kapatmak oldukça zordu; gerçekte yaptığımız şey, bash kodundan çift alıntıdan, bir sonraki satırdaki Python / Ruby yorumunda eşleşmemiş tek bir alıntıya geri dönme biçimini değiştirmek ve bundan sonra satırın sonundaki tek alıntıyı kapatmaktır.

Pyth ve 05AB1E

İkili tırnak ile dolaşmak ayrıca Pyth ve 05AB1E kodlarını gizlemek için çift tırnaklı dizeler kullanan dilleri de rahatsız eder. Burada kullandığımız asıl püf nokta, eklediğimiz her çifte fiyat teklifinin mümkün olan en küçük kodu göstermek için kısa bir süre sonra başka bir çifte fiyat teklifi olmasını sağlamaktır. (Bu, __DATA__bash için gerekli olmayan , satırdaki ekstra çift alıntıyı açıklar .) Pyth, \kaçış karakteri olarak kullanır ; Bunun ana sonucu, kodlama dillerinde karakterlerle uğraşmak için kullandığım kapsamı sınırlandırmasıydı, beni yukarıdaki oldukça karmaşık yöntemi kullanmaya zorladı ( \bash ve her şey arasındaki davranış farkını kolayca kullanamadığım için) Başka). 05AB1E'de, dışarıda' bir kaçış karakteri olarak işlev görür.dizeleri ve liderden kaçması "işe yaramaz. Bu yüzden bash alıntılama stilleri arasında geçiş yapmak için kullanılan yapıların xiçine gereksiz bir dolgu karakteri (varsayılan zaman varsayılan ; okumayı kolaylaştırıyor!) Koymak zorunda kaldım "'".

başlangıç

Burada düzeltilmesi en zor dil. Sorun, komut satırının, tüm parantezleriyle birlikte, yanlara doğru kaydırılması ve böylece Prelude kontrol akışının (parantezlerin dikey olarak hizalanma şeklini çok önemseyen) tamamen yok edilmesidir. Bu yüzden işe yarayan bir şeyi yeniden inşa etmeye çalışmak zorunda kaldım.

Daha kötüsü, şu anki ilk satır (gerçekten yeniden yazmak istemediğim), parantezlerin görünebileceği yerlere zor bir sınır koyar. Sıfır olmayan bir rakamla başlıyor (aslında ikisi!) Ve yakında bir parantez izliyor. Bu, Prelude'deki bir döngüdür ve Prelude'deki kontrol akışının başındaki döngüler birçok farklı soruna neden olur (çoğunlukla daha az değil, daha fazla kodun çalışmasına neden olurlar). Bu nedenle, bu kodu atlamak için başka bir satırda 0 yineleme döngüsü açmam gerekti. mainC programı için çizgi son derece uygundur, ama biz eşleştirme kapanış ayracı bulunduğu yerden çok dikkatli olmak gerekir; çok fazla sağ ve#R+satır çok fazla sola sorun çıkarır ve yeterince kod yorum yapmaz. (Bir satırdaki açılış parantezinin farklı bir satırdaki bir kapanış paranteziyle eşleşebileceğini unutmayın.)

Bir kez yapıldıktan sonra, Olay satırındaki açılış parantezine yapıştırmak için yeterli alana sahibiz ve sonunda programın ilk birkaç karakterini güvenle geçtik. Bununla birlikte, parantez yerleşimlerindeki fark, bazı Olay / Whirl kodunun aslında Prelude'de çalıştığı ve yığını bozduğu anlamına gelir. Bunu önlemeye çalışmak yerine, Whirl'in sıfır sırasının bir kısmını sağa doğru kaydırdım, bize tekrar çalışan bir Prelude programı vermelerini sağladım.

Diğer bir küçük değişiklik programın ilk satırındaydı; Çizginin son parantezi, kaçınılması çok zor bir pozisyondaydı. cPyth kodundan hemen sonra sağa kaydırmak için bir ekstra ekledim . (Pek çok dil, programın bu noktasını ayrıştırıyor, bu nedenle en az bir dili bozmayacak bir dolgu karakteri bulmak şaşırtıcı derecede deneme ve yanılma aldı!)

olay

Prelude kendi başına yeterince zordu, ama Prelude ve Incident'in aynı anda çalışması kabus oldu. Prelude, serbestçe dolaşmamı engelleyen kod üzerine birçok kısıtlama getirdi ve böylece kazara belirteç yapımını golf oynamak için zorlaştırdı. Örneğin, Prelude'un yalnızca birinin 0sağa taşınmasına ihtiyacı var , ancak bunun 00başarısız bir belirteç olmasına neden oldu, Olay programının bir parçası olarak istediğimiz jetonların bir kısmını kırdı (çünkü iki jeton çakışırsa, ikisi de reddedilir ve Bu 00, üst üste binmenin yanı sıra istediğimiz bir jetonla çakışıyordu). Dördüncü bir kopya çıkarmak için ikisini de taşımak zorunda kaldım ve bir token olarak bile değerlendirilmesini engelledim.

Daha zekice belirteçler ;'ve ␠␠(yani iki boşluk karakteri). Mesele, bunların her ikisinin de programın başlangıcına atlamak için kullanılmadan önce ortaya kGçıkması ve böylece Olay'ın kontrol akışını (programın merkez noktasını kırmaya ek olarak) kırmasıdır.

Kopyasını alarak kopyasını çıkartmak ␠␠uygun görünmüyor. Üst üste bindirerek ␠=çıkarmak mümkün olabilir ( ümit vaat eden bir potansiyel çakışmadır), ancak dördüncü bir kopyasını eklemek neredeyse kesinlikle daha az ayrıntı, ki burada ne yaptım.

Bu arada, farklı bir numara kullanabiliriz ;'. Ayrılmak, oldukça fazla aralıklara duyarlı durumlarda kullanılmasından dolayı denemek istediğim bir şey değil. Ancak, o değil o (ilk satırda görünen rağmen) programın başlangıcında yakın, bu yüzden biz daha çok var olmayan gerek daha (böylece kontrol akışını etkilemez neden) üzerine atlamak olabilir makul bu. Diğer dillerden herhangi birini mahvetmeyen atlama için kullanmak için uygun bir jeton aradım. /vİlk satırda biraz daha erken görünür ve hiçbir şeyi bozmaz ve bu yüzden kullandım.

1 Kib kodunda 50 dil

@MistahFiggins, 1025 bayt gönderimimin 1024 bayt olsaydı daha temiz olacağını belirtti (özellikle ellinci dil kendi başına bir kilometre taşı olduğu için). Bu, bir yerde tasarruf bayt bulmak gerekli. Bu durumda, Ölü Balıklarda ~ üç bayt biriktirdim, Olay belirteçlerinin doğru şekilde sıralanması için kullanılan iki ekstra bayt pahasına ve böylece programı tam olarak 1024 bayta indirdim.

Daha önce, kullanılan Deadfish ~ kodunun formülü (2² + 2) ² + 10 × 1 + 2 = 48 idi. Yeni formül (3²-2) ²-1, ayrıca 48 üretiyordu. Şaşırtıcı bir şekilde, öyle değil. Çok daha basit olmasına rağmen, Deadfish'de yazmak için çok daha kısa ~.

Bu da bize .008192 VIP puanı verir . Bu sadece yeni bir kayıt değil, aynı zamanda başlı başına güzel bir tur sayısıdır (açıkçası, formülün girişi olarak güzel tur numaralarının olması sonucudur).


2
TIO almadığım için üzgünüm> _> (Saygılarımızla, Reng'in yaratıcısı)
Conor O'Brien

@ ConorO'Brien Ping Dennis? Ayrıca, ais523, tek bir bayt kapalı golf oynamayı denemelisiniz;)
MildlyMilquetoast

1
Eğer yer puts(z )değiştirirseniz (ve Psatır 2’de boşluk bırakabilirsiniz , yarattığınız başlangıç ​​yolu sayesinde. Bravo bu cevapta. # 50in1k
Şans

1
Olduğu gibi, farklı bir bayt golf oynadım. Şimdi 1024'te tam olarak değiştirmek istemiyorum :-) Belki de daha sonraki bir cevap sahip olduğumuz tasarrufların bir kısmını koruyabilir; Muhtemelen çok daha fazlası var (örneğin, artık gerekmeyen eski Muhtemel eski dolgu yastığı / detokenizasyon).

6
@ ais523 kabul etti. Bu cevap her zaman 1024 bayt olacaktı.
Şans

38

37. C ++ (gcc), 776 bayt

#  1"16" 2//v\(;@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#*/
#include<iostream>␉
int main()  /*/
#()"`#"\'*/{std::cout<<37;}/*'"`"
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/3!@"26

bir hazır bilgi sekmesidir, bir hazır bilgi ESC karakteridir; Yığın Değişimi, programı tersine çevirir. Üzerinde çalışmak istiyorsanız, programı aşağıdaki TIO bağlantısının "giriş" kutusundan kopyalamanızı öneririm.

Onları çevrimiçi deneyin!

Bitkin

Bu program, baskılar 37 C ++, içinde 36 Labirent'teki, 35 INTERCAL içinde, 34 Rail, 33 olayda, 32 dönüyordu, 31 Modüler SNUSP içinde, 30 Boşluk içinde, 29 Tetikleyicide, 28 Beyin Flak içinde, 27 Perl 6'da , 05AB1E'de 26 , Pip'de 25 , Thutu'da 24 , Hexagony'de 23 , Underload'da 22 , Nim'de 21 , Prelude'de 20 , Reng'de 19 , Kardinal'de 18 ,17 , Julia içinde 16 Pyth içinde, 15 samanlýkta, 14 Turtlèd içinde, 13 Ruby, 12 fizyonda, 11 Befunge-98, 10, Befunge-93, içinde 9 Perl 5, 8 Retinal, 7 Japt içinde, 6 SMBF, içinde 5 Python 2'ye 4 içinde> <>, 3 Minkolang içinde, 2 V / Vim ve 1 Python 3.

Doğrulama

Dillerin çoğu yukarıda gösterilen test sürücüsü tarafından test edilir. Burada Reng'i ve Modüler SNUSP'yi burada test edebilirsiniz ; gerektiği şekilde sırasıyla 19 ve 31 çıktılar.

Satır besleme değişikliklerinin yanı sıra çift tırnaktan kaçan test sürücüsü çıkışına başka bir format ekledim. Bu, tek satırlı dizgiyi burada @feersum tarafından oluşturulan fonksiyonun etrafına sardığım ac (gcc) programına besleyebilirim . Umarım diğerleri de olduğu gibi yararlanabilir.

İşte Olay belirteç programı . İdeal olarak, belirteçleri ortadan kaldırmak istiyorum, çünkü okunması biraz zor, "merkez" belirtecini belirtin ve test sürücüsüne ekleyin. Ancak, çeşitli programların sıralı tamsayılar basmasını sağlamaktan başka bir şeyi nasıl yapacağımı bilmiyorum, bu yüzden edindiğim kadarıyla.

Başlangıç ​​ve bitiş zıplama jetonları ve yabancı görünen herhangi bir şey gibi belirgin Olay problemlerini çözmeye çalıştım, fakat 0omerkeze koymak için jetonları dengelemedim . Merkezi belirlemek için tam olarak mantığın ne olduğundan emin değilim. @ Ais523'ün orada yardım edeceğini umuyorum. Sona yakın bu dize 7LEintndus({})!<>+kodda bu dördüncü ekleme için olmasaydı hepsi belirteç olacaktır. Bunların tümü ., merkez belirteçini ayarlamak için çıkarılabilir (ve bir Hexagony hizalamasıyla değiştirilebilir).

Bu gönderiyi kodda gezinmek için ertesi gün veya iki gün boyunca güncelleyeceğim, (Olayın bayt sayımını geçmeden doğrulanabileceğini / düzeltilebileceğini varsayarak). Ama şimdi çok geç oldu ve çoğunlukla Labyrinth benzeri başka bir problemi çözmek zorunda kalmadan önce bunu oradan çıkarmak istedim. : P

açıklama

C ++ kodu nasıl çalışır?

Bence çoğu insan C ++ ile yeterince tanıdık geliyor, bu yüzden fazla ayrıntıya girmeyeceğim. Blok yorum şeklinde gelir /* comment */. Satır yorumları şeklindedir //comment. Cevabı üretmek için C ++ tarafından kullanılan asıl koddur int main() {std::cout<<37;}. Ve STDOUT ile arayüz oluşturmak için kullanılan kütüphaneye bu ifade referans olarak verilmiştir #include<iostream>.

/ * Yorumlar Kötüye Kullanımı * /

Benim için, C ++ 'in hikayesi Brain-Flak cevabına geri dönüyor.

Sonunda # 28'i bulduktan sonra, PPCG'de yayınlanan diğer bazı çok bölgeleri incelemeye başladım ve tüm bu çalışmalar beni birkaç basit cevaba yol açtı (bunların birçoğu bu kadar meyilli ise bulunmaya müsait). Fakat daha da önemlisi, genel olarak polyglots hakkında bir sonuca vardım: büyük polyglots iki geniş kategoriden birine girme eğilimindedir: #yorum istismarı veya /*yorum istismarı.

Bu, yine de bir gerçek ya da kısıtlama değil, sonraki birkaç cevabımı yönlendiren kişisel bir zihinsel çerçeveden ibarettir.

Buradan, bunun şu anda olduğunu varsaydığım dünyanın en büyük poliglotu olsaydı, her iki yorum ailesinden gelen yorumların kötüye kullanılmasından en iyi şekilde yararlanabileceğini düşündüm. Bu yüzden bir /*yorum dili içeren bir yol bulmaya başladım ve çoğunlukla kişisel bir tanıdık nedeniyle C ailesine doğru ittim.

C ++ İlk Test

Bunun için ilk düşünce sürecim, C # 'yı çoğunlukla benim tanıdıklığımdan dolayı kullanmaktı ve C # için ilk engel, çok dilimi #betik dilleri tarafından kod olarak ele alınmadan başlamamış bir çizgiyi kabul edebileceği bir duruma sokmaktı. . Demiryolu cevabı, ona eşlik eden birkaç byte şişirme cevabı ile birlikte, bu parçayı çözdü.

Daha sonra ilk /*yorum bloğunun nasıl başlatılacağı sorunu geldi . #Perl, Ruby ve Python için görünmez kalmak için çizginin a ile başlaması gerekeceğini biliyordum , ancak /*daha önce gelenler C # tarafından okunacaktı. #regionİlk başta bir C # etiketini denedim, ancak 2D dilleri için fazla kaba olduğu ortaya çıktı. C ++ girin.

C ++, #2B dillerin geçiş yapması için birçok seçenek sunan ve hepsiyle başlayan birkaç önişlemci direktifine sahiptir . Ancak, bunların hepsinin en az bir dille uyumsuz olduğu ve C ++ ile açık kodlu bir alanda bulunduğum için sınırlı bir geçici çözüm olduğum ortaya çıktı. Hayal kırıklığı ve çaresizlikten dolayı, C ++ ' #nın yorum bloğundan sadece bir tanesini kabul edeceği gerçeğine rastladım . Tamam, her neyse, uygulanabilir. Bu yüzden #/*polyglot'taki ilk üç karakter olarak çalışabilecek varsayımla ilerledim .

Temel doğrulama işleminin ikinci parçası, asıl baskı ifadesinin diğer kodlarla mutlu bir şekilde yaşamasını sağlamaktı. Brain-Flak'ın cevabından Japt'un kaçmayı sevmediğini {ve C ++ 'nın söylemesi için gerekli olduğunu int main() {std::cout<<37;}ve C ++ ' un Jap'in kodunun ortasında kaçış karakterine izin vermediğini biliyordum. Bu kez, Japt'in edebi dizesinden sadece bu ifade için ayrılsaydım, Japt'un yine de aynı sonucu vereceğini öğrendiğim için şanslıydım.

Bu arada, Brain-Flak da ondan hoşlanmadı {}, ama yine de C ++ ' #ın int main()ve {std::cout<<37;}ifadeleriyle tamam olduğunu, şanslı kaşlıların Brain-Flak'ın perspektifinden yorum yapmasını sağladığını gördüğüm için şanslıydım .

Bu nedenle, C ++ 'nın temel problemleri teorik olarak çözülebilir olduğu kanıtlanmış olarak, ortaya attığım tüm hataları çözme zorlu bir sürecine başladım.

2D Peyzaj

Bu cevabın en zor kısmı, poliglotun ilk iki çizgisinin yeniden yapılandırılmasıydı. Ve en önemli sorun şuydu *. Düşük yük bir *önceye izin vermez (. Bunu boş bir yığında matematik işlemi olarak görüyor, bunun bir hata olduğunu düşünüyor. Poliglot (önceden yapılması gereken bir şeydi /*ancak C ++ buna izin vermedi. Yani çözüm bize bir C ++ satırını //ilk satırda a ile gizleyip (ikinci satıra a ile başlattı #/*.

Ardından, Befunge /, bölünmüş bir şey olmadığı fikrinden gerçekten hoşlanmadı, ancak mevcut Begunge'in cevabını inceledikten sonra 16/"<"6/b.q@, bir sayı fikri üzerinde durdum ve bir araya dize dizilmiş bir ip //. İşe yaradı ve neden C ++ 'ın bu konuda tamam olduğu hakkında hiçbir fikrim yok, ancak # 1"16" 2açılış ifadesi olarak kabul ediyor . Sorgulamayacağım, ama boşlukların çalışması için gerekli olduğunu biliyorum.

Satır Bir

Japt, uzaya duyarlı olduğu ortaya çıktı ve en üst sıradaki backtick tabanlı dizisine gerçekten girmek istemedi, bu yüzden ve bu sıradaki Pip ikinci sıraya taşındı ve 1. sıradaki birçok dilbilimci jimnastiği zorladı.

  • Pip, satır 1'in çoğundan hoşlanmadığı için, ilk #yorumdan sonra ikinci bir boşluk bırakıldı .
  • (İçin yük bir önceki ile Japt dışına kaçmış gerekiyordu \.
  • #Turtlèd’de bir atlama sonlandırıcısı olması gerektiğine göre gerekliydi, ancak Pyth bunu bir hata sonlandırma döngüsü olarak görüyordu, bu yüzden Pyth’in boşuna bir bölmeye ihtiyacı vardı / .#
  • @İlk satırda artık ne yaptığından emin değilim, ancak Pyth ve Japt, Pyth'un @dokümantasyonuna göre anlamlı bir karakter olmasa da , varlığından daha iyi göründüğü görülüyor .
  • İlk bakışta ;bu noktada sonuç alınmadan kaldırılabilir gibi görünüyor , bu yüzden Pyth ile ilgili olduğundan şüphelenmeme rağmen, orada neyin çözüldüğünden emin değilim. Ancak, gelecekteki çözümler bu durumu atlayarak bir bayt kurtarabilir gibi görünüyor.
  • <> <ve Turtlèd, her ikisi de temelde öncekiyle aynı şekilde çalışır ve <> <ile ilkine yansır ve birinci #satırın sonuna kadar sarılır. Ve Turtlèd dediğim #gibi atlar ve bastığı ip ile biter "14".

2B yönlendirme

Bu sorunların çözülmesiyle bir sonraki aşama 2B dilleri yönlendirmekti. Önceleri, vönceleri Befunges'ler tarafından göz ardı edildi #, ancak Haystack ve Minkolang'ı aşağı indirdi. Şimdi, başlangıçtaki boşluk Minkolang'ı 3. boyut boyunca göndermeye çalışır, bu onun belgelerinin zaman boyutu olduğunu gösterir.

Minolang'ın 3. boyutunda bir kenara hızlıca: Bana göre bu, bir zaman boyutu olarak adlandırmak, benim için zamansal olmaktan çok daha uzaylı görünüyor. Kavramı gösteren bu bağlantıyı bulana kadar gerçekten anlamadım ve 3D satranç tahtasının çoklu katmanlarına benziyor. Benim inancım, 3B dillerin genel olarak işleyişinin böyle olduğudur. Fakat bu benim için yeni bir kavram olduğundan, bu bilgiyi başkalarına dağıtacağımı düşündüm.

Yani Minkolang çoklu katmanlar biten çizgilerle sınırlanmış $$$Burada Raylı kodunun sonuna üzerine attı ki: #-3o4o#$$$. Şimdi, Minkolang alanı vurur ve ilk düşer >içinde <>3N.<> ␉//ve 3. çıkışı sağa ilerler #>böylece, bir Perl6 yorum bloğu sonlandırmak girişiminde çünkü bu çizgiyi başlatılmasına izin edilememiştir <yerine kullanılır #SMBF ve Beyin için denge -Flak. Bununla birlikte, bu bir Brain-Flak yığını değiştirme prosedürüdür, bu nedenle <>Binko-Flak'ın doğru cevabına geri dönmek için Minkolang Terminates'den sonra ikinci bir set kullanılır.

Labrynth benzer şekilde uzaya 3çarpıyor ancak Labrynth'in sütun 1'de aşağı doğru hareket etmesine neden oluyor. Daha sonra 2. çizgiyi aşağıya doğru çevirerek başka bir duvara çarparak tekrar güneye dönmesine neden oluyor ve ;bu da 3'ün patlamasına neden oluyor. . Daha sonra program, 36 nolu bir @çıkış bulmadan önce depolandığı ve basıldığı yerde sağa devam eder . Bu yol olması gerekenden daha uzun, ancak !göründüğü çizgiden bağımsız olarak, soldan daha ileride olsaydı, Prelude'nin normal 20 çıktısından önce bir boş bayt çıkardığını buldum . Böylece daha doğru yaptım çünkü yapacak yerim vardı.

Daha sonra, Haystack'ın rotasyonu değişti çünkü /şimdi v1. hatta öncekinden geliyor ve Reng gibi yolunu yansıtıyor. Neyse ki, Reng barış içinde birlikte yaşar. Bir aksaklık, Haystack'ın iğnesinin |Reng'de bir yansıtıcı olmasıydı, bu yüzden bir Reng, #Reng'i doğru şekilde sonuçlandırmak için iğnenin üzerine Befunge gibi bir atlama ( ) kullanıyordu .

Befung'lar satır 1 boyunca devam eder vve aşağı doğru yönlendirilir ve daha sonra kullanılan kod ile sonuçlanmak üzere ikinci satırda sağa doğru yönlendirilir. Anladığım kadarıyla, bu parça biraz daha aşağıya atılabiliyor, çünkü daha az dil kodları anlamlı bir şekilde değiştirmeye çalışıyor, ancak başımı çarpmak için daha fazla duvara ihtiyaç duymadım, bu yüzden olduğu gibi bıraktım.

Son olarak, Kardinal'in başlangıç ​​noktası, %zaten yoğun olan en üstteki iki satıra atılmak için özel bir ihtiyaç duyulmamış olması. Bu yüzden onu Python'un dizisine taşıdım. Birden çok kod yolu artık xişaretçisinin hareketine son veren 'ler tarafından sınırlandırılmıştır .

Satır 2 ve 3

Buradaki tek önemli değişiklik, hepsinin :bir nedenden ötürü golf oynadığıdır. Belki Prelude'un (ihtiyaçları ya da belki basit bayt sayma problemleriydi - muhtemelen ikisi de. Diğer bir şey ise, tetikleyicinin atlama kodu geri taşındı ve olarak yeniden markalandı auaaZ. Befunge'nin kod yolunu karşılayacak kadar yerim vardı ve bu en iyi gibi görünüyordu. Ayrıca <bu parçanın ardından SMBF'nin takibini dengelemek gerekir >. Nihayetinde, ikinci çizginin sonuna yakın yalnız 05AB1E'nin ipini tutmaktır. Ayrıca, yy3. satırda Labyrinth için yalnızca dolgu karakterleri bulunur.

Büyük Dize Esolangs

En üstteki iki satır çözümlendiğinde, daha dolgun ayrıştırma sütunlarına kazmaya başlamanın zamanı gelmişti ve Pip'in bir sorunu olduğu ortaya çıktı. Hatırlarsanız {std::cout<<37;}, Japt 'in kod olarak görmesine izin vermek için Japt string' inden çıkarak küme parantezleriyle uğraştığımızı gördük. Pip aynı dize sözdizimini kullanıyor ve bu satırı kod olarak beğenmedi ve Pip, Japt ile benzer dize bildirim seçeneklerine sahip. Her ikisi de 'bir karakter dizgisi bildirmek için bir tane kullanır, ikisi de aynı kaçış bildirimini kullanır \ve her ikisi "de dize tanımlayıcıları olarak kabul edilir. Bu yüzden Pip'in Japt'un aynı inancını vermeden bunun bir ip olduğuna inanmasını sağlamak zordu.

Japt'in bir istismara uğradığı fark olduğu ortaya çıktı - bir #sonraki karakterin ascii değerini alır. Bu yüzden, #"`Japt / pip dizesini sonlandıracak, ardından Pip'e "yeni bir dizge başlatmasını söylerken, Japt'a asci değerini almasını söyleyiniz . "Muhtemelen bunun yerine bir ters tırnak olabilirdi ve muhtemelen daha iyi olurdu, ama düşünce benim hat dize manipülasyon başka noktası olarak içeride farklı bir dizesi tanımlayıcı kullanmaktı. Demek yoldan birkaç byte tasarruf edebileceğin başka bir yer.

Daha sonra, Pip'in bir ipte kalmasına izin verirken, küme parantezlerinden sonra Japt ipini başlatmak zorunda kaldım. Bunu, '"`tek bir alıntı, çift alıntı ve bir backtick ile yaptım . Japt'e göre 'karakter bir dizgede değildir ve bu nedenle bir sonraki karakteri tek bir karakter dizgisi olarak almanın bir göstergesidir. Pip ', dizenin bir parçası olarak görür ve dizesini sonlandırır ". Ve son olarak, `hem Pip hem de Japt'e, her iki dilin de mutlu bir şekilde tamamlandığı son satıra kadar çokgen boyunca devam eden başka bir dize başladığını gösterir.

Şimdi, hem Japt hem de Pip bu noktada çalıştı, ancak 05AB1E, "bazı hatalara neden olan kod pozlamasına neden olduğu için başarısız oldu . Neyse ki bu ", her şeyin etrafına başka bir dizi koyarak , dizi manipülasyonlarını olduğu gibi bırakarak çözmek için kolaydı "`#"\\'*/{std::cout<<37;}/*'"`".

Sonunda, şu an bu çizgiyle bakıldığında, int main() #/*"`#"\'*/{std::cout<<37;}/*'"`"Underload ile bir problem vardı. Ardışık *'s, başka bir sözdizimi hatasıydı, bu yüzden onu yatıştırmak ()için *' nin ortasına fırlattım .

Kırılgan Esolangs

Şimdi büyük engel Beyaz Uzay'dı. Burada bir ton ayrıntıya girmeyeceğim, çünkü Whitespace çözümünün çoğu daha önce verilmiş olan açıklamaların içine yerleştirilmiş ve sadece boşlukların birkaç kararı zorladığı örnekleri açıkladım. Sana bakıyorum labirent. Yine de büyük değişiklik, Whitespace'in cevabını çıkaran gerçek kodun 1-3 yerine 2 - satırda olması. Bu büyük ölçüde Japt’in satır 1’deki kod pozlaması nedeniyledir.

Thutu Başlangıçta bu hat olmuştu ne sorunları vardı: int main() #/*()"`#"\'*/{std::cout<<37;}/*'"`". Bu yüzden, #bir yorum göstergesinin arkasındaki tüm sorunları gizlemek için ilk önce tam bir satır attı ve daha sonra /kodun açıklandığı her yerde iz bıraktı.

Bu noktada Hexagony'yi hizaladım ve yeni bir sorun buldum. Olarak hayatına başlayan başında kod, # 1"16" 1yapılan +içinde /+23!@artık net yığını. Bu yüzden, sadece şimdi kaldırdım +ve şimdi 123 çıkışını buldum. Bu, açılış # 1"16" 2oyununu değiştirerek ve Hexagony parçasını aşağıya indirerek düzeltmek için kolaydı /3!@.

Whirl bazı değişiklikler yaptı, ancak çoğunlukla Whirl-Incident çizgisinden önce doğru sayıda lider 1'in görünmesini sağlamak meselesiydi. Olay olsa da, özellikle zor olan bir belirteç vardı. Tam olarak 3 kopyası vardı /*ve */.

Başlangıçta *//*her birinin 4. kopyasını oluşturmak için kodda eski herhangi bir yeri atmak istedim , ancak Underload ardı ardına *geçti, ki bu bir sorun değildi. Sonunda , belirteçlerin üst üste binmesini sağladığımı düşünerek sonlandırmak için /bu çizginin int main() /*sonuna /*/atmıştım, ancak yalnızca iki belirteçten birinin 4 kopyasını oluşturmayı başardım. Doğru doğru. Bu böyle çalışır. Oh /, finalde benzerini */4'üncü sıraya koyacağım. Bundan sonra, son satırdaki bu dizgideki birkaç olay belirtecinin 4. kopyasını içeren bir grup altıgen numarayı değiştirdim 7LEintndus({})!<>+.

Sonuç

Tamam, bu muazzam refactor için sahip olduğum tüm detay bu. Bir dahaki sefere yazacak fazla bir şey kalmayacağına söz veriyorum. C ++ 'ın bu polyglot için iyi veya kötü bir seçim olup olmadığı hakkında hiçbir fikrim yok, ama benim açımdan bazı seçenekler açılıyor. Umarım bu iyi şeylere yol açar.

Mutlu kodlama.


2
g++Bir gerektirir gibi görünüyor .cpp, bu yüzden bunu dosya uzantısına özel bölüme ekledim. Sonra sadece run-wrapper.shbaşa çıkmak için kullanmak zorunda kaldı . Düzenleyeceğim.
SnoringFrog

1
Bu sembolik beynini basit bir eklenti olarak eklemek istiyorum , ama unicode karakterler python2'yi çökertiyor - _ -
SnoringFrog

1
@SnoringFrog Emoji
Şans,

1
Ayrıca, **Underload'da bir sözdizimi hatası değildir; sadece o zamanlar müsait olmadığını varsaydığım bir sürü yığın tüketiyor (muhtemelen sütunları fırlattığınız için). Yığını parantezli gruplarla veya iki noktadan önce veya aralarında parantez ile doldurabilir veya bazen parantez içine alarak kodu Alt Yük'ten gizleyebilirsiniz.

2
@ ais523 C'nin ilk günlerinde, gereksiz olduğu durumlarda zaman kazanmak için, ilk satır # ile başlamadıkça önişleyici çalıştırılmadı. Ancak, ilk satırınızın önişlemci ifadesi olmasını istemiyorsanız, ilk satırın aslında herhangi bir şey yapmadan # ile başlamasının bir yoluna ihtiyacınız olacaktır, bu nedenle boş yönergeye sahip olmalısınız. Bu standarda dahil edilmesinin gerekçesi olan bu kodu kullanan geriye dönük uyumluluktan kesinlikle şüpheleniyorum.
Muzer

34

3. Minkolang v0.15 (26 bayt)

#>>>>>>>>v
print(1)#>3N.i2

Bu program yazdırır 1 Python 3, içinde 2 Vim ve 3 Minkolang v0.15 içinde

Umarım bir 2d dili tanıtarak işleri karıştırmam.

Çevrimiçi deneyin!

açıklama

#                     stops program from moving through time (really does nothing)
 >>>>>>>>             I can't use a space because then the program will move through time
         v            go down
         >            go right
          3N.         Outputs 3 and end program
                      Anything afterward is ignored since program has ended

Vim bir şekilde Minkolang'ı görmezden geliyor, yani bu iyi

Ve Python ile ilgili bir problem yoktu, çünkü yorumları görmezden geliyor. #

Sonraki...

Bir sonraki dil için, #yansıtıcı gibi davrandığından > <> gibi bir şey öneriyorum (böylece yön sola dönecek ve sağdaki tüm yöne kayacak), böylece diğer diller tarafından göz ardı edilebilecek bir kod ekleyebilirsiniz


16
“Zaman içinde hareket” wat?
TuxCrafting

5
@ TùxCräftîñg Minkolang 3 boyuta sahiptir (2d = normal, 3'üncü zamandır). TBH, anlamıyorum, sadece TIO bağlantısındaki açıklamada
İnekler, 19: 28'de

@ mbomb007 Tam olarak neyi kastediyorsunuz?
İnekler,

1
@ TùxCräftîñg Bunu yapabileceğimi sanmıyorum
dkudriavtsev

1
@wat Hm bu beni anlamak için çok uzun sürdü
TuxCrafting

34

5. Python 2 (35 bayt)

#3N.;n4
print('1'if 1/2else'5')
#i2

Bu program, baskılar 1 Python 3, içinde 2 Vim, 3 Minkolang v0.15, içinde 4 içinde> <> ve 5 Python 2.

Çevrimiçi Deneyin beta!

Python 2'de 1/2, Python'u 5 yapan sahte bir değer olan 0'dır. Python 3'te 1/2, Python'u 1 yapan bir gerçek değer olan 0,5'tir.


1
Minkolang'da çalıştığını onaylayabilirim
İnekler 19

1
print('1'if 1/2else'5')sistemimde 1/2 ile boşluklar arasında boşluk
kalmaz

Eh, TIO'da her iki sürümüyle de çalışır.
16'da

28

4.> <> (29 bayt)

#>>>>>>>>v;n4
print(1)#>3N.i2

Bu program, baskılar 1 Python 3, içinde 2 Vim, 3 Minkolang v0.15 ve 4 > 'de <>

Çevrimiçi Deneyin!

Kod koştu

#             - change direction to left
            4 - add 4 to stack
           n  - print as a number
          ;   - end the program

Yine başka bir 2D dili.

Minkolang üzerinde hiçbir etkisi yoktur, yön değiştirdikten sonra karakter ekler, Vim tarafından bir nedenle ihmal edilir. #Python'da bir yorumdur, bu yüzden onların da hiçbirini değiştirmez.


28

28. Brain-Flak , 280 bayt

#v`16/"<"6/b.q@"(::):::   (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and (9) or (13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'#@46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛ Her zamanki gibi hazır bilgi ESC karakterini temsil eder.

Bu program basar 28 Beyin Flak içinde , 27 Perl 6'da , 26 05AB1E içinde , 25 Pip içinde , 24 Thutu içinde , 23 Hexagony içinde , 22 düşük yük olarak , 21 Nim içinde , 20 Prelude , 19 (test edilen Reng olarak burada ,) 18 Cardinal , 17 Julia , 16 Pyth içinde , 15 samanlýkta , 14 Turtlèd olarak ,13 Ruby , 12 fizyonda , 11 Befunge-98 , 10, Befunge-93 , 9 Perl 5 , 8 Retinal , 7 Japt içinde , 6 SMBF içinde , 5 Python 2 , 4 içinde> <> , 3 içinde Minkolang , 2 um / V , 1 Python 3

Öncelikle, bu zorluğa katkıda bulunmanın bir ayrıcalık olduğunu söylemek istiyorum. Birkaç hafta önce sadece golf kodunu duydum ve o zamandan beri kesinlikle kancayı taktım. Bu zorluğu bulduğumda yaptığım ilk şey, birlikte çalışabileceğim bir şey bulabilir miyim diye görmek için kodu çeşitli dillerde olduğu gibi çalıştırmaya çalışmaktı. Bu, 6 numaradayken geri döndü. Dürüst olmak gerekirse, bu zorluğun engelleyicilerin imkansız olduğunu düşündüm, ama işte buradayız (# 28 Wow!). O zaman bulduğum şey Brain-Flak'ın 2 değerini vermesiydi. Bunu öğrenmek için yola çıktım.

Brain-Flak bu tür bir meydan okuma için oldukça iyi olduğu ortaya çıktı çünkü öğrenmesi oldukça kolay ve dışındaki karakterleri yok sayar (){}[]<>. #aynı satırda bir sonraki yorumdan sonra da olur, bu yüzden Brain-Flak için şimdiye kadar düşünülmüş olan son gönderimin tek kısmı o zamandan beri print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)eşleşmiştir ((())()<<>>). Böylece plan, python kodu olarak düşündüklerime gereksiz parantezler eklemeye başladı.

Python bitlerini Brain-Flak'ta ayrıştırmak için değiştirdim, ((() () ())()()<<()>>)bunlardan ilki 5, ikincisi 3 olacak şekilde 2 yığına denk geliyor. Bundan sonra 5'i karıştırarak ({({})({}[()])}{})sonucu 3'e ekliyorum ({}{}). Bu kare alma ve ekleme, Python bakış açısıyla bir dizgede devam ediyor. Python'un mantığını burada anlama iddiasında bulunamıyorum, ancak bu dizginin başka diller tarafından anlamlı bir şekilde, sadece birkaç istisna dışında değerlendirilmediğinden eminim.

Japt, çıkıyor, bir dizginin içindeki küme parantezlerini kod içeren olarak yorumluyor, ancak bunlar bu dizgiden \önce çıkacak kadar kolaydı {. Ama bu bayt sayısını şişirdi. Hayat böyledir.

Prelude parantezimin tümü için oldukça bağışlayıcıydı. Daha önceki bir yorum Prelude'un dikey olarak hizalanmış Pparentheses ile uyuştuğuna işaret etti ve ben sadece bir tane yarattım. Tatlı! (Üst satırda ile ve dizilmiş (9büyük çizgide. Bu yüzden (en üst satırda önce ek bir boşluk eklemek zorunda kaldı . Buradaki varsayım, çift boşluğun bir şey için bir yorum göstergesi olduğu, bu nedenle ek bir boşluk eklemek önemsiz görünüyordu ve işe yaradı. Bunun (9)yerine ek bir boşluk eklemeye çalıştığımı belirtmeliydim , ancak Kardinal işbirliği yapmadı.

05AB1E, Python string'deki ilk denememin çift tırnak işareti içine alınmasından hoşlanmadı ama herkes tek tırnak işareti kullanmak için uygun görünüyordu. Orada önemli bir şey değil.

Hexagony bu noktada kalan tek dildi ve bir sonraki onaltılık eĢik değer barajını geçiyordum, bu yüzden kirlenmenin zamanı gelmişti. Bu /^23!@Hexagony kodu ve bu konuda çok heyecanlıyım, çünkü gelecekteki ilaveleri daha kolaylaştıracağını düşünüyorum. Bu küçük parça, herhangi bir kodu bozmadan temel olarak python dizesinde herhangi bir yere taşınabilir. Bu tam dizgedir, bu yüzden hepimiz aynı sayfadayız '(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'. /Biz hareket alanı çok şey var ki> NW W- için> E aşağı bu dize, - burada SE Hexagony yolunu belirler. (Birincisi \kaçmak/thutu BTW için). Buradaki fikrim, değişiklik yaparsanız, olasılıklar bu dizgeden bir noktadan geçmenizdir ve kod yolunu yakalamak ve doğru sonuca göndermek için Hexagony parçasını dizginin içinde kaydırabilirsiniz. Sadece Japt'la aranızda olmamaya dikkat \edin {. Bu konuda sorun varsa, @dize sağındaki sadece başka Hexagony çözümü arta kalan ve diğer dillere sonucu olmadan kaldırılabilir. Ve tabii ki, Hexagony'nin kod yolunu ters yöne giden yakalarsanız, elbette @!32^\yerine kullanabilirsiniz /^23!@. Ayrıca, çözümümün kaldırıldığını fark edebilirsiniz.===2şeyleri bayt sınırı altında tutmak için koddan Burada birisi bunun Hexagony'nin uyumu için olduğunu ve artık buna ihtiyacım olmadığını belirtti.

Nihayetinde burada bir metin satırını Hexagony okunabilir altıgene dönüştüren codegolf'u keşfederken bulduğum küçük bir kod parçası var, böylece hata ayıklayabilirsiniz. Eminim birçok insan bu konuda bilgi sahibidir, ancak burada yayınlandığını görmedim, bu yüzden başkalarına da yardımcı olabilir. Adil uyarı, geri tepme ve taşıma dönüşlerini kaldırmak için girişi değiştirmek zorundasınız ve aynı zamanda kodları kaçmak için normal bir alan kaplayan bir şey için basit kaçış alanını değiştirmek zorundasınız.

PS Bunu yazarken bir hatamın olduğunu anladım. Onlarla Hexagony'nin hafıza kenarını temizlediğime inanmıştım ^, ama görünüşe göre hiçbir sonucu olmayan bir şeyle değiştirebilirim. Bu bölümü manipüle etmeye çalışırsanız ^muhtemelen bir olmalı +. Görünüşe göre bundan +önce geçiyordum , ancak gelecekteki polyglotters çok şanslı olmayabilir.

İyi şanslar!


Oy vermeden önce özet ve açıklamaları bekliyordum, ancak özet iyi görünüyor, bu yüzden açıklama bekliyorum oy vereceğim :-). Tüm fazladan ters eğik çizgi Thutu bir sözdizimi hatası önlemek için olduğunu varsayalım? Ayrıca, kodunuzu nereye eklediğinize ilişkin ilginç bir yaklaşım, tahmin ediyorum Hexagony ile bir ilgisi var. Açıklamanın tamamını görmek güzel olacak. (Ayrıca, PPCG'ye hoş geldiniz!)

Ve şimdi açıklamayı görüyorum; Okumaktan zevk aldım. "Python kodu" aslında birçok komut dosyası dili tarafından kullanılır (Python, Perl 5, Ruby), ancak hepsi aynı andve oraynı şekilde yorumlanır; hepsinde.

1
Teşekkürler @ ais523. Kodumun yerleştirilmesinden bahsettiniz. Bu yüzden, beyin-plak operatörlerini betik dillerinin görebileceği bir yere yerleştirmem gerektiğini biliyordum ve ilk yanlış düşüncem bunun yeni bir satırda en kolay olacağıydı. Bu, Retina için işe yaramadı ve eğer mümkünse, Retina'yı düzeltmeye çalışırken yarattığım 2D ve dil problemleriyle uğraşmak istemedim. Mevcut yerleşime rastladığım için şanslıydım.
Şans

2
Harika cevap ve çok ayrıntılı bir açıklama! Beyin kırığından hoşlandığınızı duyduğuma gerçekten sevindim. : D
DJMcMayhem

25

38. C, 804 bayt

#  1"16" 3//v\(@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#
#*/␉
#define␉z  sizeof 'c'-1?"38":"37"
#include␉<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);;}/*'``
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/(3!@)"26

bir hazır bilgi sekmesidir, bir hazır bilgi ESC karakteridir; Yığın Değişimi, programı tersine çevirir. Üzerinde çalışmak istiyorsanız, programı aşağıdaki TIO bağlantısının "giriş" kutusundan kopyalamanızı öneririm.

Onları çevrimiçi deneyin!

Bitkin

Bu program, baskılar 38 ° C, de 37 ° C ++, içinde 36 Labirent'teki, 35 INTERCAL içinde, 34 Rail, 33 olayda, 32 dönüyordu, 31 Modüler SNUSP içinde, 30 Boşluk içinde, 29 Tetikleyicide, 28 Beyin Flak olarak, 27 Perl 6'ya 26 05AB1E içinde, 25 Pip içinde, 24 Thutu içinde, 23 Hexagony içinde, 22 düşük yük olarak, 21 Nim içinde, 20 Prelude, 19 Reng içinde, 18Cardinal, içinde 17 Julia, 16 Pyth içinde, 15 samanlýkta, 14 Turtlèd içinde, 13 Ruby, 12 fizyonda, 11 Befunge-98, 10, Befunge-93, içinde 9 Perl 5, 8 Retinal, 7 içinde Japt, 6 SMBF, içinde 5 Python 2'ye 4 içinde> <>, 3 Minkolang içinde, 2 V / Vim ve 1 Python 3.

Doğrulama

Dillerin çoğu yukarıda gösterilen test sürücüsü tarafından test edilir. Burada Reng'i ve Modüler SNUSP'yi burada test edebilirsiniz ; gerektiği şekilde sırasıyla 19 ve 31 çıktılar.

İşte biraz daha golf oynamak için biraz daha kullanışlı ama biraz daha kullanışlı olması için tasarlanan Incident tokeniser'ın hafifçe düzeltilmiş versiyonum .

açıklama

Her zaman küçük çokgenler yapmayı sevdim ama asla bu kadar büyük olmadı; Muhtemelen gitmem gerektiğini düşündüm!

@ Chance'in harika C ++ cevabından sonra, C bir sonraki mantıksal seçenek gibi görünüyordu ve (bazı önceki cevaplara göre) ekleyerek göreceli kolaylığı göz önüne alındığında, şansım varken gitmeye karar verdim!

C ve C ++ arasındaki farkı anlatmak için çok bilinen bir numara kullandım; karakter sabitinin büyüklüğü C ++ 'ta 1 byte'dır, ancak C'deki int (en az 16 bit olması garantilidir) büyüklüğü bu kod çok taşınabilir olmalıdır (belki bir int sığdırmak için yeterli bitli bayt kullanan sistemler hariç). Aptalca bir hata yaptım.

Öncelikle printfher şeyi satır içi ile yapmaya çalıştım , ancak çoklu braketler Japt için sorunlara yol açıyor gibiydi, bu yüzden çizgiyi daha basit hale getirdim;

Daha sonra, Cardinal bundan hoşlanmadı, printf'in içeriğinden dolayı tahmin ettim %, bu yüzden dizgileri değiştirerek onu çözmek zorunda kaldım.

Bir dize atamaya çalışan bir sonraki denemem, sonra C davranışına bağlı ikinci baytı değiştirdi, çok uzun sürdü ve Hexagony'yi bir sonraki boyuta itecekti; Oynamak zorunda olduğum ekstra karakterler içinde tutarak tekrar yapmaktan kaçınmak istedim! Bunun için alabileceğim her bayta ihtiyacım vardı, bu yüzden @Chance tarafından önerilen bayt tasarrufu değişikliklerini yaptım.

Bu yüzden, C kodunu biraz aşağıya düşürdüm ve puts(sizeof'c'-1?"38":"37");neredeyse işe yarayan bir şey buldum , ancak Underload, muhtemelen parantez içindeki karmaşık ifadeden dolayı segfaulting.

Perl6'da >>eşleştirmek için gereken ekstraları çıkardıktan sonra bile <<, onun daha karmaşık kısmını bir karakter dizisi atamasına bölmek için yeterince kısa bir yol bulamadım. Ben de bunun yerine önişlemciyi kullanmaya başladım.

Çok fazla deneme yanılmasından sonra Retina'nın hoşuna gittiği bir çözüm buldum. Beni baştan beri sıkıntıya sokan başıma neden olan Prelude, neden kırıldığına bakmadan önce kendimi düzelttim (sanırım parantezler ya da !ben üçlü bir aşamada üçlü olarak vardı; önceki cevaplar).

Bu süre zarfında, Whitespace'in isteyeceği bir şeyi elde etmek için boşluk bırakıyordum; Bunu oldukça kolay buldum. Özellikle, tab space space spaceçok yararlı bir kombinasyondu (yığına ilk iki öğeyi ekleme talimatı), çünkü her şeyin senkronizasyondan çıkmasına gerek kalmadan diğer boşluk olmayan satırlara boşluk ekleyebileceğim anlamına geliyordu. program aslında hiç çalıştırılmadığı anlamına gelir, bu yüzden burada yığın alt akışları için endişelenmiyorum).

Şimdi Olayı test ettim ve işe yarıyor! Anladığım kadarıyla @Chance ve @LliwTelracs'a teşekkür ediyorum, onunla başa çıkmamda bana yardımcı olduğu için Galce bir isim değil. Bu sözdizimi vurgulamasına bakın . ;Belirteçten önce görünen belirteçleri kaldırdım #yy. Ben sadece fazladan ekleyerek bunu ;sonra gets(önceki girişimi yerine dahil deyimi sbir ile "detokenising" dizesinde şimdi öncekinden mi daha C programında çok daha göründüğü () ;ama ben ortaya çıktı aslında Hexagony için kısa bir karakter (teşekkürler @Chance), bu yüzden bu son satıra fazladan bir karakter eklemeye çalıştıktan sonra, tekrar değiştirdim ve başka bir noktalı virgül ekledim).

Ayrıca merkezleme girişiminde bulunmak için bazı belirteçleri değiştirmek, Sekme Satırını yeniden ayarlamak için ( #includeçizginin sonundaki sekmeyi ortaya taşıyarak , böylece üç belirteç yaparak) ve boşlukları biraz değiştirdim . Satırda bir boşluk hareket ettirerek üçlü boşluk belirtecinin işaretini kaldırın define.

Son olarak, ilk gönderimden bir gün sonra, gcc'nin ürettiği (ve Clang'ın başarısız olmasına neden olan) korkutucu önişlemci uyarısının en altına gitmeye karar verdim. İlk satırın bütünüyle çalışmasının sebebinin, orijinal dosya adları ve satır numaralandırması gibi hata ayıklama bilgisi sağlayan önişlemciden çıkması nedeniyle olduğunu belirledim. İlk satırdaki ilk "2" yi beğenmediler, çünkü bu "dahil edilmiş bir dosyadan verilen dosyaya geri dönme" anlamına geliyordu ve açıkçası bu hiçbir dosya dahil edilmemiş olması mümkün değildi. Bir "1" olarak değiştirdikten sonra (normal başlığa başla) birkaç çok fazla dil boğmasına neden oldu, şimdi 2'ye dayandığından beri sadece Hexagony'yi kıran "3" (iç bileşen başlığını başlat) olarak değiştirdim. Bu yüzden Hexagony kodunun başlangıcında açık bir ayraç ekledim(3'ü 2'ye düşürmek, ardından altıgen kodunun )sonundan ( @) sonra tüm beklenen eşleşen braketleri olan Retina, Prelude ve Düşük Yükü karşılamak için yakın bir braketi düşürmek için. Reng ve Modüler SNUSP'yi yeniden test etmek hiç sorun çıkarmadı ve Olay belirteçleri doğru görünüyordu, bu yüzden şimdi düzelttim! Bunu çeşitli egzotik mimariler üzerinde test ettim ve işe yarıyor. Bir kod golfü için önemli olmadığını biliyorum ve gelecekteki göndericilerin bir bayt sayısında veya her neyse (veya bu çözüme bağlı olarak daha önce başlamışsa ve kendilerinin değişmesini istemiyorsanız) bunu tekrar kırmak zorunda olup olmadıklarını umursamıyorum çok fazla), ama bunu yapmamın iyi bir nedeni var - TIO'nun Objective-C derleyicisi sadece Clang'ı destekliyor, bu yüzden eğer birileri eklemek isterse bu çok faydalı olacak!

Unutmayın, bu dillerin çoğunu hiç kullanmadım, umarım başarım bu denemeye daha çok yeni başlayanları teşvik eder!


@LliwTelracs Huh, cevabında Chance tarafından bağlanan C programının belirteçlerin listesi için farklı çıktılar vardı:; #yy; ^ _ ^ _
Muzer

Hata, değeri programıma yapıştırarak kopyalamamdı, böylece sekmeleri veya
kaçmaları tanıyamazdı

@LliwTelracs Sadece tokenizasyonu kendim anlamaya çalışıyorum, görünüşe göre şimdi üç kez görünen bir noktalı virgül var. Ekstra bir tane daha ekleyebilirim, çünkü onaltılığınızı Hexagony'yi yanlış hizalayacağı için boşaltabilirim. Hmm ...
Muzer

1
Olay çalışıyor!
Muzer

1
@Chance C Ön İşlemcisindeki ilk satırın nasıl geçerli olduğuna bakıyorum, hata ayıklama bilgisi vb. İçin kullanılan Ön İşlemciden çıkan çıktı gibi görünüyor. Bu, şimdi "16" adında bir dosyaya (2) dönüyor. satır 1". Bence Clang'ı boğan (ve gcc'nin uyardığı) 2, ilk etapta hiçbir zaman dosyaya girmediği için, bu yüzden geri dönecek bir şey yok. Şansımı bulduğumda, Clang'da derlemek için başka bir şeyle değiştirmeyi deneyebilirim. Bakınız gcc.gnu.org/onlinedocs/cpp/…
Muzer

25

65. ALGOL 68 (Genie) , 1634 bayt

#16  "(}+?23!@)-("//*\Dv;'[af2.q]PkPPX'#CO)"14";n4
#/*0|7//```"`   [-'][!(>77*,;68*,@;'1,@10␉␉11)(22)S␉␉(1 P''53'S^'q
#>␉
# 36!@␉`
#
#_>++++.>.}+?
#`<`
#<]}} +<[<.>>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++59L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52DO,2SUB#2<-#32DOREADOUT,2PLEASEGIVEUPFACiiipsddsd4O6O@oh]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\).>]|
#[#[(?2?20l0v0x1k1kMoOMoOMoOMoOMOO0l0ix0jor0h0h1d111x0eU0yx0y0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_00)
[ "]56p26q[puts 59][exit]" ,'\[' ];#/s\\/;print"24";exit}}__DATA__/
#
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.

#
'(((p\';a=a;case $argv[1]+${a:u} in *1*)echo 50;;*A)echo 54;;*)echo 58;;esac;exit;';print((eval("1\x2f2")and 9or 13)-(0and 4)^1<<(65)>>62)or"'x"or'{}{}{}{}({}<(((((()()())){}{})){}{})>){(<{}(({}){})>)}{}({}())wWWWwWWWWwvwWWwWWWwvwWWWwWWWWWWWWwWWWWwWWWWWWWwWWWWWWWW li ha '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("'3)3)3)"'
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39
""""
=begin
<>{nd
#sseeeemPaeueewuuweeeeeeeeeeCis:ajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( ){puts(p);}/*
print 61
#}
disp 49;
#{
}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.s
=end
"""#"
#}
#s|o51~nJ;#:p'34'3\=#print (17)#>27.say#]#print(47)#]#echo 21# xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi ax fwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWwvwWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm 
# sss8␛dggi2␛`|$// ''25  16*///~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#

VIP puanı ( Çok Yönlü Tam Sayı Yazıcısı ): .005949 (iyileştirmek için bir sonraki giriş 1710 bayttan fazla olmamalıdır)

Çevrimiçi deneyin!

Bitkin

Bu program yazdırır 65 ALGOL 68, içinde 64 Agony içinde, 63 Brian & Chuck, içinde 62 Grass, içinde 61 silolarda, 60 , moorhens 2.0 59 Tcl, içinde 58 Ksh içinde, 57 Wise, 56 dc içinde, 55 Beyindeki -Flak Klasik, 54 Zsh bölgesi 53 dürtme içinde, 52 inek, 51 montajda, 50 Bash, 49 Octave, 48 Deadfish ~ bölgesi 47 Lily, 46 Cubix içinde, 45PicoLisp bölgesi 44 alphuck içinde, 43 retiküler içinde, 42 kötülük, 41 brainfuck içinde, 40 az-2D, 39 CoffeeScript içinde, 38 ° C de, 37 C ++, 36 Labirent'teki, 35 INTERCAL içinde, 34 Rail, 33 Olay, 32 , Whirl, 31 , Modüler SNUSP, 30 , Boşluk, 30 , Tetik, 29 , Brain-Flak, 28 , Perl, 6, 26 , 05AB1E, 25 ,24 Thutu bölgesi 23 Hexagony içinde, 22 düşük yük olarak, 21 Nim içinde, 20 Prelude, 19 Reng içinde, 18 Cardinal, 17 Julia, 16 Pyth içinde, 15 samanlýkta, 14 Turtlèd içinde, 13 Ruby, 12 içinde Bölünme, 11 Befunge-98 bölgesi , 10 Befunge-93, içinde 9 Perl 5, içinde 8 Retinal, 7 Japt içinde, 6 SMBF içinde, 5 Python 2'ye 4 > <> 'de, 3Minkolang'da, V / Vim'de 2 , Python 3'te 1 .

Doğrulama

Çoğu dil, yukarıdaki test sürücüsü ile test edilebilir, ancak 6 dilin yerel olarak test edilmesi gerekir.

  • Buradaki Reng 19 çıkışı için test edilebilir .

  • Modüler SNUSP burada 31 çıkışı için test edilebilir .

  • Jetonların manuel olarak dengelenmesi ile 33'ü test etmek için olay doğrulandı.

  • Deadfish ~ bu tercümanı kullanarak yerel olarak 48 çıkışı elde etmek için test edilebilir . Deadfish®'in stdin üzerinden beslenecek olan polyglot'u aldığına, ancak >>herhangi bir Deadfish ~ programının çalıştırılmasının kaçınılmaz sonucu olan standart çıktıya bir dizi bilgi yazdırdığını unutmayın.

  • Moorhens 2.0, bu yorumlayıcı kullanılarak 60 çıkışına test edilebilir .

ALGOL 68

Muhtemelen ALGOL, programlamanın ilk günlerinden beri dört yüksek seviye programlama dilinden en az bilinen olanıdır - bu korkunç ayrımın kalan dilleri COBOL, FORTRAN ve Lisp'tir. ALGOL o zamanlar akademik ve matematiksel çevrelerde daha iyi biliniyordu, ancak günümüzde en iyi modern diller üzerindeki büyük etkisi ile bilinir. Aslında, en modern ve pratik diller, en azından C olan ve elbette kendi etki ve türevlerine sahip olan “Algol benzeri” olarak tanımlanabilir.

ALGOL'u eklemek beni çok heyecanlandırıyor, çünkü bilgisayar tarihinde bu anıta ekleyeceğimiz çok önemli bir basamak taşı. Bu harika şeyler.

ALGOL68, üç ana ALGOL spesifikasyonunun en sonuncusu, diğerleri ise ALGOL60 ve ALGOL58. İlginçtir ki, belirtimin sabit bir sözdizimi yoktur; bu, belirteçlerin tanımlandığı, ancak yazımların olmadığı anlamına gelir. Bu, dili tercümana bağımlı kılar çünkü herhangi bir tercüman, örneğin bir yorum bloğu başlatmak için farklı bir sembol kullanabilir. Şartname, ¢bir yorum bloğu başlatan olarak tanımlamaktadır . Ancak ¢temel 127 ascii kodları arasında olmadığı için anlaşılabilir bir şekilde mevcut tercümanlar arasında yorum göstergesi olarak kullanıldığını görmüyor. Anlaşılan Genie yorumlayıcısının , karakter 1'i geçip bir poliglot yapmamız için gereken tüm açıklık olduğu ¢gibi #büyüdüğü ortaya çıkıyor.

Aslında Genie üç comment sözdizimi seçenekleri, diğer iki varlık vardır cove commentkoyu olarak yazılıyor olarak belirtilir, her ikisi de. Evet kalın. Eğer italik kullanırsak, bu değişken. Genie, bizim için tekrar bütün harfleri kalın yazarak çözdü. Beri COher yerde polyglot değil, biz ayrıştırıcı gelen Polyglot'u gizleme kolay bir yöntem var. COBir dil için yolun aşağısına ihtiyaç duyulursa, daha ayrıntılı COMMENTsözdizimine geçebiliriz .

ALGOL'de satır yorumu yoktur - hepsi blok stildir, bu da sonlandırılmaları gerektiği anlamına gelir. Poliglot'un başlangıç ​​durumu göz önüne alındığında, ALGOL blok yorumumuz derhal açılır ve Turtlèd benzer şekilde #bir atlama jetonu olarak kullanıldığından, satır 1'in sonuna kadar sonlandırılır . Neyse ki Turtlèd, Cve Okarakterler arasında dolaşmakta bir sorun yaşamıyor, bu yüzden 1. satırda , ALGOL68 için bir yağ bloğu yorumu başlatmak için sadece COsaniyeden hemen sonra ekleyebiliriz #.

Buradan sadece bir COprint("65")yere yerleştirmek zorundayız . Son satırı seçtim çünkü satırı başka bir #yorumla bitirmeyi tercih ettim ve yorumun #son satırın başında sonlandırılmasını istemedim . Böylece ALGOL print deyimini polyglot'taki son karakter olarak #sve a ile takip ediyoruz #. Giriş s, #salphuck'ın pyazdırmadaki baskıyı dengelemesi içindir .

Polyglot'un sonunu cevap 59 ile açmak ve bunları mümkün kılmak için @ ais523'e teşekkürler.

SMBF

ALGOL'un son yorumunu sonlandırmak için poliglotun sonuna farklı bir karakter ekledik ve SMBF daha önce cevabının son karakterini okuyordu. Bu durumu düzeltmek için, ben 8. satırda bu kodu değiştirerek son karakterine ikinci okumaya SMBF değiştirmek zorunda [.>-]Buna [<.>>-]. Bu bir SMBF özel kod bloğudur, çünkü BF MP, döngü başlatıldığında 0'dadır.

tetik

Bu noktada, SMBF ile bazı garip davranışlar fark ettim ve bu kod bölümleri ile poliglotun sonu arasındaki ilişkilerle ilgisi vardı.

• Olayın atlama hedefi: ^_^_

• Tetikleyicinin Atlama hedefi artı cevabı: X222999

• ALGOL68'in cevabı: COprint("65")#s

ALGOL’un cevabı, kod segmentinde bir çift Olay simgesi belirledi, bu yüzden ALGOL’in kodunun Olay kod bölümünden önce gelmesi gerekiyordu. ALGOL ayrıca ilk sıraya girdiyse ikinci veya üçüncü sıraya geçmek zorundayken bir ön uyum sorununa neden oldu. Bu arada SMBF, Olay kodu en son geçtiğinde açıklanamayan bir başarısızlık yaşadı, bu yüzden Olay ilk veya ikinci gitmek zorunda kaldı. Bunun çözülemeyen görünen bir giriş mantığı problemi olduğunu anladım, bu yüzden açıklanamaz olanı daha kolay hale getirmek için yola koyuldum.

SMBF'de yürüdükten sonra, sonunda ^ _ ^ _ ile ilgili sorunun Wise'den kaynaklandığını buldum. Wise'nin kodu ( ~-<~-<~-<<<~-), polyglot'un çoğunun aksine, yürütücü olmayan bir döngünün arkasına gizlenmiyor. Ancak Wise kodunda SMBF baskı kodu yoktur. Sadece hafıza değerlerini değiştiriyordu. Masum görünüyordu. Peki sorun neydi? BF'nin önünde o lanet olası SM idi.

Wise’ın kodu, koddaki karakterlerin yürütülmek üzere olduğu hallerini değiştiriyor ve ascii değerinin komşusunun ne olduğunu tahmin edebiliyor musunuz ^? Bu ]. Wise, çok dilimin sonuna bir SMBF döngü sonlandırıcı koyuyordu ve SMBF'nin sonsuz bir döngüye düşmesine neden oluyordu. Bu kötü mojo.

Bazı düşündükten sonra ben sorununa 0 bayt çözümünü aldı ve Tetikleyicinin atlama hedef (ayrılmış Xolan cevap itibaren) ( 222999) ve böylelikle, Polyglot'u bitirdi: ~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#. Bu sadece işe yarar, çünkü Tetikleyicinin cevabı olmayan Tetikleyicinin atlayışından sonra arka arkaya hiçbir karakter görünmez.

Sarma

Bu turdaki tüm önemli değişiklikler bu kadar. c1. satırda tartışılanların çoğunu kesmek için küçük bir değişiklik yaptım , ancak bu tamamen golf değişiklikleri için geçerli.

İyi şanslar!

Olay raporu

#<q>"3"O.soldu #<T>"3"O.sdetokenizing çünkü Tyerine qdengeleme daha verimli oldu

<>{oldu <>{nddetokenize için ndve{␊

Arasına boşluk koyun }}ve +içinde #<]}} +<[<.>>-]>[detokenize için }}+daha ucuza.


25

2. V (11 bayt)

print(1)#i2

Bu program Python 3'te 1 ve V'de 2 olarak basılır .

Sadece topu yuvarlamak ve en sevdiğim dili karışımın başında atmak için. :)

Çok basit bir cevap.

print(1)#

sadece V'de NOP olur (benim için şanslı) Sonra i2ekleme moduna girer ve '2' ekler. Burada çevrimiçi olarak V deneyebilirsiniz

Tabii ki, python içinde

print(1)

'1' yazdırabilir ve

#i2

bir yorum.


2
Bu V mi yoksa Vim mi? Bağlandığın tercüman teknik olarak "V".
mbomb007

@ mbomb007 Eh, V neredeyse tamamen geriye dönük olarak uyumludur, bu yüzden amaç vim idi. Teknik olarak V olsa sanırım. Değişmek için çok mu geç?
DJMcMayhem

2
Pek sayılmaz, sadece cevaplardaki başlığı değiştir.
mbomb007

1
@ mbomb007 Bir hazır bilgi ESC karakteri bunu yapacak (bu yüzden gönderimimde bir tane kullanmak zorunda kaldım).

1
Bunu test edenler için not: Bir önceki Vim oturumunda taşınan bir klibin olmadığından emin olmanız gerekir.
Riking,

24

20. Başlangıç, 167 bayt

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^*ttt*~++%
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);#35(99999+++++!) =#;print(17)
#       ~nJ<
#
#gg99ddi2` |1|1+6

(Arada önceki gönderimleri ile aynı yerde Değişmez ESC karakterler #ve gve aralarında 2ve `son satırında), sen yazdırılabilir karakterleri ile ekleme modundan Vim alamaz çünkü.

Bu program yazdırır 20 Prelude , 19 Reng içinde (test edilebilir Burada ), 18 Cardinal , 17 Julia , 16 Pyth içinde , 15 samanlýkta , 14 Turtlèd içinde , 13 Ruby , 12 fizyonda , 11 Befunge-98 , 10 Befunge-93 , 9 Perl , 8 Retinal , 7 Japt içinde , 6 SMBF olarak ,5 Python 2 , 4 içinde> <> , 3 Minkolang içinde , 2 um / V , 1 Python 3 vea partridgeiçinde bir armut ağacı .

Var olan kod, Prelude’de kendini tamamen iptal eder, sadece falsey argümanları olan döngüler ve umursamadığımız yığınlardaki bazı istifleme işlemlerinden oluşur. Daha da iyisi, (aralarında onlara sahip tüm dillerde bir yorumun kodunda bir nokta var #ve =#önceki gönderme). Prelüdün buna takılmasının zor kısmı sadece bir istif ile ve bayt sayımını şişirmeden sayılar oluşturmaktı. Bu program, her yığın elemanına 45 ekleyen ve ASCII olarak çıktı veren bir döngü kullanır, böylece yığının üzerine 3'ün üstüne 5 yerleştirerek 20çıktı elde ederiz . (Düzgün bir şekilde, 20 çıkış için 19'dan daha kolay bir sayıdır, bu yüzden cevaplanan 19 cevap aslında bana biraz yardımcı oldu.)


Prelude gelecekteki programlarda çalışmak oldukça kolay olmalı. Sorun çıkarmasına neden olabilecek herhangi biri için bazı tavsiyeler: parantezlerin dikey olarak hizalanmasına izin vermeyin; ünlem işaretlerinin parantez dışında bırakılmadığından emin olun; ve parantezin dışına rakam yerleştirdikten sonra, aynı satıra daha fazla parantez koymayın. Prelude programını koyduğum boşluk hala açık ve diğer 1D dillerinin gitmesi için verimli bir yer olabilir (Prelude'nin 1½D'lık sıralaması ve bu programda bir 1D dili gibi davranıyor).

Güzel, Prelude ile beni dövdükleri :) Aslında yalnızca ASCII V ile mümkün olabileceğini düşünüyorum :%sdeğiştirin ama o zaman bile biraz zor (ve V test etmek can sıkıcı)
SP3000

:Vim'de bir komut başlatmak için a kullanırsanız , aynı zamanda yazdırılamayan bir satır başı gerekir. : /
Zwei

4
+10000000000 için a partridgeArmut Ağacı. Ancak 5 GOLDHALKALAR'da yazdırıyor mu?
immibis

23

30. Boşluk , 296 bayt

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999"26

Lite değişmez kaçışları temsil eder.

Lite değişmez sekmeleri temsil eder.

Bu program yazdırır 30 Boşluk içinde , 29 Tetikleyicide , 28 Beyin Flak içinde , 15 samanlýkta , 14 Turtlèd içinde , 13 Ruby , 12 fizyonda 27 Perl 6'da , 26 05AB1E içinde , 25 Pip içinde , 24 Thutu içinde , 23 Hexagony içinde , 22 düşük yük olarak , 21 Nim içinde , 20 Prelude , 19 (test edilen Reng olarak burada ), 18 Cardinal , 17 Julia , 16 Pyth olarak , , 11 Befunge-98 , 10, Befunge-93 , 9 Perl 5 , 8 Retinal , 7 Japt içinde , 6 SMBF içinde , 5 Python 2'de , 4 > <> 'de , 3 Minkolang içinde , 2 V / Vim ve 1 Python 3 .

Boşluk, sınırlı bir karakter kümesine sahip başka bir esolang'dır. Bu sadece sekmeleri, boşlukları ve satır beslemelerini okur.

Bu yüzden, Whitespace'in okumadığı tüm şeyleri çıkardığımızda, aşağıdaki kodla kalırız:

[space][space][space][LF]
[space][LF]
[LF]
[LF]
[LF]
[space][space][space][space][space][LF]
[space][space][space][space]

Ve 30 çıkış kodunu şudur:

[space][space][space][tab][tab][tab][tab][space][LF]
[tab][LF]
[space][tab]

Böylece, mevcut kodun ilk 3 satırına, gereksinimlerin karşılanması için satır sonlarında fazladan boşluklar verildi. Satır 1'in sekmelerinin ve takip boşluğunun,> <> gereksinimlerini karşılamak için satırın ortasında olduğuna dikkat edin.

Satır 2'nin alanı burada bir sekmeyle değiştirildi. Bu, 2B dilleri için bir alan ile aynı şekilde işlev görüyor gibi görünüyor, ancak görsel olarak artık sıraya girmiyor. ¯ \ _ (ツ) _ / ¯

30 nolu çıktıdaki talimatların ardından oyun, gerekli alanların geri kalanını alıyordu ve satır, anlamsız şeyler yapmak ve doğru şekilde derlemek için besleniyor.

Beyaz alan, kod satırını, rasgele sayıda sekme ve boşluk sağlayan etiketli bir etiketle işaretleyen / alan komutlarına sahip olur, böylece uzun satır boşluklarını döşemeye yardımcı olur. Ayrıca satır besleme ile başlar ve biter, böylece satır beslemelerinin bir kısmını 3-6 satırlarında bize yardımcı oldu.

Son satır, Retina'yı kırmadan satır beslemesi yapamadı, bu yüzden talimatları bazı matematik ve yığın manipülasyonlarını yapmak.

İşte notasyonumuzla değiştirilen boşluk, sekme ve satır öğelerinin bulunduğu kodun tamamı:

#v`16/"<"6/b.q@"(:[Space]::T):[Space][Space][Tab][Tab][Tab][Tab][Space]:(22)S#;n4"14"[LF]
#>3N6@15o|>[Tab]^*ttt*~++~~~%[LF]
#=~nJ<R"12";[Space][Tab][LF]
#[[Tab][LF]
#`<`|[LF]
print((eval("1\x2f2")and[Space](9)or(13))-(0and[Space]4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo[Space]21#|/=1/24=x=90/[LF]
#8␛dggi2␛[Tab]`[Space]|1|6$//''25[Space][Space]#>say[Tab][Tab][Space]27#T222999"26[LF]

Ve işte sadece Boşlukların yorumlanmış bir sürümü:

Push 30 onto the stack
[space][space][space][tab][tab][tab][tab][space][LF]

Output the number at the top of the stack
[tab][LF][space][tab] 

Jump to label null if the top of the stack is negative. (it's not)
[LF][Tab][LF]

Label this location as [Space]
[LF][Space][Space][Space][LF]

Add the top two items on the stack and replace them with the result. 
[Tab][Space][Space][Space]

Store the stack.
[Tab][Tab][Space]

Düzenlemeler: Hexagony, önceki iddiamın tersine, tıpkı boşluklar gibi sekmeleri atlamak için çıkıyor. @ ais523, değişmez kaçışları ve sekmeleri hesaba katarak @ Kenney'in Altıgenleştiricisini güncellemeye nezaket gösterdi. Sekmelerin no-op olarak okunması konusundaki önceki iddiamı düzeltmek için düzeltmek zorunda kaldım .ve karakterin diğer karakterlerden daha geniş olması nedeniyle değişmez kaçışların yerini aldım, çünkü altıgenin biraz yanlış hizalanmasını sağladım. İşte link .

Ve bu bizim düzeltilmiş güncel Hex'imiz:

          # v 1 6 / " < " 6 /
         b . q @ " ( : : : T )
        : : ( 2 2 ) S # ; n 4 "
       1 4 " # > 3 N 6 @ 1 5 o |
      > ^ * t t t * ~ + + ~ ~ ~ %
     # = ~ n J < R " 1 2 " ; # [ #
    < | p r i n t ( ( e v a l ( " 1
   \ x 2 f 2 " ) a n d ( 9 ) o r ( 1
  3 ) ) - ( 0 a n d 4 ) ^ ( 1 ) < < (
 6 5 ) > > 6 2 ) o r ' ( \ { ( \ { } )
  ( \ { \ / + 2 3 ! @ } [ ( ) ] ) } \
   { } ) ( \ { } \ { } ) ' # 4 6 ( 8
    + 9 + 9 + 9 + 9 + = ! ) = # p r
     i n t ( 1 7 ) # ] # e c h o 2
      1 # | / = 1 / 2 4 = x = 9 0
       / # 8 . d g g i 2 . | 1 |
        6 $ / / ' ' 2 5 # > s a
         y 2 7 # T 2 2 2 9 9 9
          " 2 6 . . . . . . .

Sonunda, Prelude parantezi ve Hexagony altıgenlerini sıralamak için daha önce eklenmiş bazı gereksiz karakterleri kullandım.

Nim'in kod için geri döndü echo 21danecho 5+5+11

Hexagony's #@46şimdi#46

Hexagony kod için geri döndü /+23!@=dan/+23!@

Ait Prelude parantez hizalama (9) or (13)oldu(9)and(13)

Elimdeki tek şey bu. Herkese iyi şanslar!


1
Tüm bağlantıları düzelttiğimi ve kopya yapıştırmalarımdan kaynaklanan boşluğa added eklediğimi düşünüyorum. Sekmelerin SE'de nasıl sekmeleri alacağından emin değilken, Tio'daki kodun belirsizleşmesi gerekir. Ayrıca çözümümü bu cevaptaki yönergelerden yeniden oluşturmak zorunda kaldım, ancak bir şekilde daha az 2 bit verdi ... Hata!
Şans

1
Açıklamanızda bir hata olduğunu fark ettim: satır başı (ASCII 13) satır beslemesinden (ASCII 10) farklı bir karakter. Dillerin büyük çoğunluğu (Whitespace dahil), 13'leri değil, 10'ları önemser (ve PPCG gönderimindeki bir satır sonunun, aksi belirtilmediği sürece, yalnızca bir ASCII 10 olduğu varsayılır, çünkü 13'lerin, bayt sayınızı hayır olarak şişirme eğilimindedir. yarar).

1
Altıgenli açıklama resminiz, ilk yansımadan sonra NW'ye geldiğinde e sonrası için yanlıştır ( basare23 ) ;. Yukarıdaki bağlantı tho çalışır?
MildlyMilquetoast

1
Hexagony için TIO'nun sekme karakterlerini boşluk / yeni satırlar olarak gördüğü sonucuna vardım. Altıgen program için sağladığınız görüntü, izlerseniz (veya TIO’ya koyarsanız, sekmeleri .s ile değiştirerek ) çıkmaktan başka bir şey yapmaz . Ancak, eğitim .s'lerini (gerçek kodun bir parçası değil) ve tüm removes'leri kaldırmak dışında görüntüdeki kodu TIO'ya kopyalayın. 23:
MildlyMilquetoast

1
Vay canına, teşekkürler @ MistahFiggins! Görünüşe göre bazı kesin hatalar yaptım ve bunları açıklamam için kullandım. Hexagony açıklamasını, hex diagramını ve Hexagonoizer Perl betiğini düzelttim ve sonuçları doğrudan Hexagony'ye karşı kontrol ettim. Şimdi her şey iyi olmalı. İyi Bul!
Chance

23

100. brainbool, 2953 bayt

#16  "?63(o?23!*# #@"/*\DZZCv;'[af2.q]PkPPX)\('#CO"14"; */
#/*0|7//```"`  [>.>.])[-'][(>77*;,68*,@,1',;# l1011)(22)S\4n;iiipsddpsdoh coding:utf8ââââ(1P''53'S^'????!?!??!??!!!!???!?!??!!?!?!!!!!?!!!!?????!????????????????????!) (qx
#>â
# 36!@â`  e++++++::@ 
#~
#y
#`<`
#<<<#>>]}}+-[.+..]+-+<[<<.>>x>-]>[
#{
#x}
#2""/*\*
#=x<R+++++[D>+++++++q   L+++<-][pPLEASE,2<-#2FAC,2SUB#1<-#52FAC,2SUB#2<-#32FACREADOUT,2PLEASEGIVEUPFACs]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\   \).>]4O6O@|
#[#[(?2?20l0v01k1kMoOMoOMoOMoO MOO0l0ix0jor0h0h1d111x0eU0y0yx0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_0 )0\\
[  "]56p26q[puts 59][exit]" ,'\[999'];#/s\\/;print"24";exit}}__DATA__/
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.<!\
'(wWWWwWWWWwvwWWwWWWwvwWWWw WWWWWWWWwWW/"78"oo@WWwWWWWWWWwWWWWWWWWwwwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWw              (([5]{})))â\';';print((eval("1\x2f 2")and 9or 13<< (65)>>65or 68)-(0and 4)^1<<(65)>>62)or"'x"or' {}{}{}{}({}<(((((()()())){}{})){}{})>)(({})5){}x{(x<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)wWW no no no no no no no no no no no no no no no no no no no no no no no no no no no no no no os sp '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("3'3)))"'a'[[@*3*74[?]*]*(<*.*\>]xxxxxxxxxxxxx)'# \\
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39;'(******* **********819+*+@[*99[?]*]***|!)'
#\\
""""#\
' ( <><        (          )>  ){ ({}[()]  )}{\';      a=$(printf \\x00    );b=${#a};#\\
" }"';           ((   ( (';case "{"$ar[1]"}"${b} in *1)echo 54;;*4)echo 78;; *1*)echo 50;;*)echo 58;;esac;exit;# (((('))))#\
=begin
#p             +555/2+55x%6E2x
;set print "-";print 89;exit#ss 9
utpb now 70 dollar off!
utpb has been selling out worldwide!
#9999 9 seeeemPaeueewuuweeeeeeeeeeCis:ajjappppppp😆😨😒😨💬95💬👥➡
👋🔢🌚🌝🌝🌚🌚🌚🌚🌚

set ! 57
set ! 51
More 91 of thiset of re9
How much is it*/
#if 0
.int 2298589328,898451655,12,178790,1018168591,84934449, 12597
#endif//*
#1"" //*
#include<stdio.h> 
#defineâ x(d)â#d
#define u8 "38\0 "
main ( ) {puts( sizeof (0,u8)-5?u8"67":*u8""?"37":     x( 0'0  "'\"")[9]?"75":'??-'&1? "79":"77");"eg5""6 27""e ' Zing  ";}//*/
#if 0
#endif//* --... ...--
/*/
p=sizeof("9( 999 99\"    ); print'(''72'')';end!"            );main( ){puts(  "92");return(9-9+9 -9);}
#if 0â
#endif//* rk:start | print: "69" rk:end<(9    >5b*:,1-,@
print 61
#}
disp 49 ;9;
#{
}{}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.</+++++++>/+++<-\>+++.---.
#<<<#>>> /
reg end="";print(85);reg s#++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-.
=end
;"""#"#xxxxxxxy"78"\++++>/<~#class P{        function:Main(a:String[] )~Nil{83->Print();} }
#}pS9^7^8^MUOUOF@:8:8\\
#s|)o51~nJ;#:p'34'3  \=#print(17)#>27.say#]# print(47) #]#echo 21#fwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm>++++
#s8âdggi2âM`|$//''  1$6~-<~-<~-<<<~-COprint ("65")#asss^_^_#
#9 "25"  +/ *///X222999686#

VIP puanı ( Çok Yönlü Tam Sayı Yazıcısı ): .002953 (iyileştirmek için bir sonraki giriş 3042 bayttan fazla olmamalıdır)

Bitkin

Bu program, baskılar 1 Python 3, içinde 2 V / um, 3 Minkolang içinde, 4 içinde> <>, 5 Python 2'ye 6 SMBF içinde, 7 Japt de, 8 Retinal, 9 Perl 5, içinde 10 Befunge- bölgesindeki 93, 11 Befunge-98 bölgesi , 12 fizyonda, 13 Ruby, 14 Turtlèd içinde, 15 samanlýkta, 16 Pyth içinde, 17 Julia, 18 Cardinal, 19 Reng içinde, 20 Prelude, 21Nim bölgesi 22 düşük yük olarak, 23 Hexagony içinde, 24 Thutu içinde, 25 Pip içinde, 26 05AB1E içinde, 27 Perl 6'da, 28 Beyin Flak içinde, 29 Tetikleyicide, 30 Boşluk içinde, 31 Modüler SNUSP içinde, 32 Burguda , 33 Olay bölgesi 34 Rail, 35 INTERCAL içinde, 36 Labirent'teki, 37 C ++ 03, 38 C99, 39 CoffeeScript içinde, 40 az-2D, 41 brainfuck olarak, 42 şer içinde, 43 retiküler içinde, 44 alphuck içinde, 45 PicoLisp içinde, 46 Cubix içinde, 47 Lily, 48 Deadfish ~ bölgesi 49 Octave, 50 Bash, 51 montajda, 52 inek, 53 dürtme içinde, 54 Zsh bölgesi 55 Beyin Flak Klasik, 56 DC, 57 Wise, 58 ksh içinde, 59 Tcl'de, 60 moorhens içinde, 61 silolarda, 62 Grass, 63 Brian ve Chuck, 64 acı içinde, 65 ALGOL 68'e 66 Yüzey, 67 C11, 68 Python 1, 69rk-lang bölgesi 70 Ticari olarak, 71 ne de, 72 Fortran, 73 Morse, 74 Archway içinde, 75 ° C ++ 11, 76 Trefunge-98, 77 ° C ++ 14, 78 çizgi içinde, 79 C 17, ++ 80 Klein 201, içinde 81 Klein 100, içinde 82 , Beyin-Akışkan, Objeck'te 83 , 84 Klein 001, 85 ZKL içinde, 86 Miniflak içinde, 87 Alice, 88 PingPong içinde, 89 gnuplot içinde, 90 RunR içinde, 91 Cood içinde, 92 . Beyin teknesinde 100C89 içinde 93 Set, 94 Emotinomicon içinde, 95 Emojiye içinde, 96 EmojiCoder içinde, 97 kübik olarak, 98 Archway2 içinde, 99 içinde 99

Doğrulama

Çevrimiçi deneyin! TIO'da mevcut olmayan diller:

açıklama

100 dilde yaptığımıza inanamıyorum. Sadece bu sürece dahil olan herkese teşekkür etmek için zaman ayırmak istiyorum. Eğlenceli bir yolculuk oldu ve umarım sizlerle beraber 100 tane daha eklerim.

Brainbool bir süredir gözümün önündeydi. Ancak beyin boğazı sadece iki sayı verebildiğinden 1ve0 şimdiye kadar ekleyemedim (10 ve 11 civarında değildim).

Brainbool tıpkı beyin sargısı gibidir, 256'da sarmak yerine 2'ye sarılır. Brainbool'da ayrıca -fazlalık yoktur çünkü +. Beyin boolol kodumuz 100 çıktısı oldukça basittir:

+.+..

Beyin fırtınası için çıktıları maskelemek için bir döngü ve eksi ekleriz:

+-[.+..]

Şimdi tek gereken şey, kodun gireceği bir yer bulmak. Tercih ettiğim yer ilkti +içinde değişiklik için hat 8. brainfuck kodunun en üst düzeyinde artı bizim kodu ve bir ilave +-+bir görevi görür +brainfuck ve brainbool bir NOOP içinde.

+-[.+..]+-+

Cubix

Kodumu, aynanın işaretçinin yoluna girmesine neden olan Cubix kapsülünün önüne koydum. Bunu düzeltmek için kapsülü, kırıcı aynanın önünde birkaç adım öne taşıdım ve her şey yolunda gitti.

Şaşırtıcı bir şekilde başka hiçbir şey, ünlü olayı bile kırmadı.


Aslında, brainbool yardımcı metin çıkartabilir. Bunu geçerseniz -bargüman, bu bayt içine 1'ler ve 0'lar inşa etmek ve daha sonra karakter olarak verir olacaktır.
Pavel,

1
@WheatWizard Archway2'de çalıştığını onaylıyorum.
stasoid

1
Tebrikler! VIP puanının 0,003 seviyesinin altına düştüğünü fark ettim.
Ørjan Johansen

1
İtiraf etmeliyim ki, başlangıçta 100/101 için bunu eklemekle ilgili mesaj gönderdiğinde, aslında buraya geleceğimizi düşünmedim. Bu oldukça havalı.
SnoringFrog

1
@stasoid TIO'dan Archway'i almaya çalışıyorum, sadece FYI.
MD XF

21

27. Perl 6 , 235 bayt

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)#@46(8+9+9+9+9+=!)=#print(17)#3]#echo 21#===2|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛ Her zamanki gibi hazır bilgi ESC karakterini temsil eder.

Bu program yazdırır 27 Perl 6'da , 26 05AB1E içinde , 25 Pip içinde , 24 Thutu içinde , 23 Hexagony içinde , 22 düşük yük olarak , 21 Nim içinde , 20 Prelude , 19 (test edilen Reng olarak burada ), 18 Cardinal , 17 içinde Julia , 16 Pyth içinde , 15 samanlýkta , 14 Turtlèd içinde , 13 Ruby ,12 fizyonda , 11 Befunge-98 , 10, Befunge-93 , 9 Perl 5 , 8 Retinal , 7 Japt içinde , 6 SMBF içinde , 5 Python 2 , 4 > <> 'de , 3 Minkolang içinde , 2 içinde Vim / V , 1 Python 3'te ve (öyle Noel)a partridgeiçinde bir Armut Ağacı .

Stack Exchange'in bu cevap için ürettiğini vurgulayan sözdizimi tamamen yanlıştır. #`<Perl 6'nın çok satırlı yorum işaretleyicilerinden biridir ve biter, #>yani aslında Perl 6'da çalışan tek kod çok basittir say 27. Bu özel yorum işaretleyiciyi seçtim çünkü <>çoğu dilde eşleşen bir çift değil ve bu nedenle eşleştirilemez< Retina gibi dilleri ayrıştırmaya çalışan dilleri bozmuyor.

Hexagony'nin artık nasıl çalıştığını tam olarak bilmiyorum. Bozulduğunda, vurulduğunu görmek +için kullandığı karakterlerden birini a'dan a'ya değiştirdim 0; olduğu ortaya çıktı ve programın bu sorunu çözdüğü ortaya çıktı, ancak neden olduğundan emin değilim (bir #uygulama nedeniyle kırıldığını biliyorum , ancak +düzeltmeleri neden kaldırdıklarının net olmadığı anlaşılıyor ). (Söz konusu karakter Thutu tarafından da ayrıştırılıyor, fakat neyse ki bu, Thutu programının işleyişinde bir fark yaratmıyor, programın bu noktasında olduğu gibi, daha önce hiçbir şeyin =çalışmadan kopyalanması string.) Unutmayın ki 0and+4önceki satırdan0and 4, bir karakteri Hexagony'nin bakış açısından kısaltmak için (Hexagony boşlukları görmez); bu,#| bir önceki satırın oluşmasını telafi#`<`|Bu, Hexagony'nin bakış açısından daha uzun olan bir karakterdir (çünkü her ikisini de geri alıntılar görmez). Kodun artık Altıgen kenar uzunluğunu genişletmekten ve mevcut Altıgen koduyla ilgili her şeyi kırmaktan yalnızca beş bayt uzakta olduğunu unutmayın. Yine de bunu yapmanı ve kodun Hexagony bölümünü yinelemeyi tavsiye ederim; Bir genişlemeden sonra her şeye sığması daha zor olmaktansa, muhtemelen daha kolay olacaktır.

Diğer bazı diller de değişti, çoğunlukla son satırda rastgele koda sığabilecek kadar sağlamlık eklemek için. $//Japt'ta, satırda daha sonra boşluk bırakılmasına izin veren ve eklenen programı Japt'ta daha az kırılgan yapan bir yorum işaretleyicisidir (bu arada, Retina içindir); önceki girişteki karşılık gelen satırdan farklı olarak ayrıştırılır, ancak bu kadar uygun bir şekilde. Kardinal aynı zamanda önceki kayıtlardan biraz daha basittir, ancak bu, her şeyin dikey olarak sıralanmasıyla tam bir çakışmadır ve değişiklik, yine de hiçbir şey yapmayan kodlamadır.// satırda sonradan parantez parantezi varsa kırılır ve boşluk Japt'ta bir tür parantez şeklindedir). Bir çift boşluk Pip'deki bir yorum işaretidir, yani Pip kodunun burada büyük ölçüde basitleştirilebileceği anlamına gelir. Bu aynı zamanda 05AB1E'yi önemsiz hale getirebileceğimiz anlamına geliyor "26. Retina'nın beşinci çizgiye ihtiyacı var (eşleştirmede iyi olan yasal bir regex olması)|

Onaltılık ifadesini yinelediğinizi varsayarsak (muhtemelen yapmanız gerekir), son üç satırın tümüne kod eklemek için güvenli yerler vardır: 3giriş #3]#yalnızca Altıgenler içindir (ve kolayca değiştirilebilir); Son satırdaki #ve arasındaki boşluk ", dillerin büyük çoğunluğu tarafından göz ardı edilir; ve hiçbir şey, Retina'dan başka beşinci çizginin sonunu çözemez. (Kodun eklenebileceği başka yerler de var, ancak bunlar muhtemelen en uygun olanıdır.)


1
Yanlışlıkla bu cevabı düşürdüm ve temsilcimin 1'e düştüğünü fark ettiğimde düşürdüğümü fark ettim. Yanıtı düzenleyebilir misiniz? : D
17'de

4
@betseg: Sadece sizin için Hexagony ile ilgili biraz daha bir tartışma ekledim.

2
Ödül için tebrikler! Bu
yazının

Uzun zamandır devam etmeyi planlıyordum, sadece zamanı bulmaya çalışan bir durumdu. (Aslında per 6'da Perl'de başarısız oldum, bir süre önce zincirin

21

31. Modüler SNUSP , 326 bayt

program

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999+/+23!@"26

Her zamanki gibi, değişmez bir ESC karakteri ve değişmez bir sekme.

Bitkin

Bu program yazdırır 31 Modüler SNUSP bölgesi 30 Boşluk içinde, 29 Tetikleyicide, 28 Beyin Flak içinde, 27 Perl 6'ya 26 05AB1E içinde, 25 Pip içinde, 24 Thutu içinde, 23 Hexagony içinde, 22 düşük yük olarak, 21 Nim bölgesindeki , 20 Prelude, 19 Reng bölgesi 18 Cardinal, 17 Julia, 16 Pyth içinde, 15 samanlýkta, 14 Turtlèd içinde, 13 Ruby, 12 fizyonda,11Befunge-98 içinde 10 Befunge-93, içinde 9 Perl 5, içinde 8 Retinal, 7 Japt içinde, 6 SMBF içinde, 5 Python 2'ye 4 > <> 'de, 3 Minkolang içinde, 2 V / Vim ve Python 3'te 1 .

Doğrulama

Neden sonuçta bağlantı yok? Testi çok daha kolaylaştıracak bir şey üzerinde çalıştığım için, programı burada listelenen dillerin çoğunda çalıştıran ve sonucu basan bir test sürücüsü. Bu, umarım gelecekteki dilleri polyglot'a eklemeyi çok daha kolaylaştırır. Aşağıdaki TIO bağlantısını çalıştırarak (Bash, Perl ve A Pear Tree karışımı ile yazılmış bir test sürücüsü olan), bu programın 31 dilden 28 sonuçlarına ulaşabilirsin:

Onları çevrimiçi deneyin!

Bağlantı aynı zamanda yukarıda görülen / -biçimli kod bloğunu üretir ve kodu sizin için altıgen olarak biçimlendirir:

          # v 1 6 / " < " 6 / b
         . q @ " ( : : : T ) : :
        ( 2 2 ) S # ; n 4 " 1 4 "
       # > 3 N 6 @ 1 5 o | > ^ * t
      t t * ~ + + ~ ~ ~ % # = ~ n J
     < R " 1 2 " ; # [ # < | p r i n
    t ( ( e v a l ( " 1 \ x 2 f 2 " )
   a n d ( 9 ) o r ( 1 3 ) ) - ( 0 a n
  d 4 ) ^ ( 1 ) < < ( 6 5 ) > > 6 2 ) o
 r ' ( \ { ( \ { } ) ( \ { } [ ( ) ] ) }
\ { } ) ( \ { } \ { } ) ' # 4 6 ( 8 + 9 +
 9 + 9 + 9 + = ! ) = # p r i n t ( 1 7 )
  # ] # e c h o 2 1 # | / = 1 / 2 4 = x
   = 9 [ < $ + @ + - @ @ @ @ = > + < @
    @ @ = > + < ? # > + . - - . ] / #
     8 . d g g i 2 . | 1 | 6 $ / / '
      ' 2 5 # > s a y 2 7 # T 2 2 2
       9 9 9 + / + 2 3 ! @ " 2 6 .
        . . . . . . . . . . . . .
         . . . . . . . . . . . .
          . . . . . . . . . . .

Üç dil eksik: V çok yavaş ve Reng ve Modüler SNUSP TIO'ya yüklenmemiş. Neyse ki, üçünün de çevrimiçi tercümanları var:

  • : Sen / Vim (2 amaçlanan çıktı) V programı test edebilirsiniz burada TIO üzerinde.
  • Burada çevrimiçi bir Reng tercümanı (amaçlanan çıkış: 19) var .
  • Burada çevrimiçi bir Modüler SNUSP yorumlayıcısı (amaçlanan çıktı: 31) var . (Sadece bir SNUSP tercümanı olarak ilan edilir, ancak Modüler SNUSP, @sayfanın her yerindeki işaretlerde görüldüğü gibi uyguladığı lehçedir .)

Üçü de amaçlanan çıktıyı üretir, bu nedenle 31 programın tamamı doğru bir şekilde test edilir. (Beni biraz ilgilendiren bir şey, Boşluk programının doğru bir şekilde sonlandırılıp sonlandırılmadığıdır; ancak, buradaki boş alan önceki başvuru ile aynıdır, bu yüzden her ikisi de haklıdır veya her ikisi de yanlıştır. Programın gerçekten sonlandırıldığı ortaya çıkarsa yanlış, her iki programın da aynı şekilde tamir edilebilir olması muhtemeldir.)

açıklama

Öncelikle, her zaman değişmeye ihtiyaç duyduğu anlaşılan Hexagony. Aslında öncekinden çok daha basit; Hexagony kodunu Tetikleme kodunun hemen arkasına taşıdım, bu da programın sonuna çok yakın olduğunu gösteriyor ve 23'u basan ve çıkan Hexagony "kapsülü" hemen çalışmaya başlıyor. Son satır genellikle kapsülü koymak için iyi bir yer gibi görünmektedir, çünkü Hexagony'nin çalışmasına neden olabilecek daha az komut anlamına gelir.

Diğer tüm değişiklikler Modüler SNUSP kodunun eklenmesi ile ilgilidir. Unutulmaması gereken ilk şey, SNUSP'nin $programdaki ilk karakterde çalışmaya başladığı ve programın dışına çıktıktan sonra çıkan ve böylece SNUSP programını uzun satırın sonuna yerleştiren (içeride olan) bir 2D dilidir. Thutu kodu, Thutu'nun hemen hemen her şeyi kabul edeceği bir noktada), SNUSP'nin diğer dillerden herhangi bir kod görmemesini sağlayabiliriz ve diğer birçok dil SNUSP'yi önemsemez. Bir dil yaptığımız bakım açılı ayraç ayrıştırma Perl 6, vardı; Onu <mutlu etmek için hemen SNUSP kodunun önüne koydum (braketler doğal olarak neredeyse aynıydı). Umurunda olan diğer dil ise SMBF;.Hem SMBF hem de SNUSP'de çıktılar ve ekstra çıktı oluşturmak istemiyoruz. Neyse ki, SMBF tarafından görüldüğü gibi, bu programı <.>>[…]SNUSP kodu, yani geçerli bant elemanı 0 izler. Bu yüzden SNUSP kodunu köşeli parantez içine almak SMBF'nin bakış açısından "yorumlar" dır.

Kodun kendisine gelince, art arda çok sayıda "start yordam" komutu yazdığınız ve etkin bir şekilde baz-Fibonacci numarası oluşturduğunuz Modüler SNUSP'de sabitler yazmak için iyi bilinen bir numara kullanır. Temel fikir şudur: +1 sayı; @sonradan gelen kodla gösterilen sayıyı ve ilk karakterini çıkardıktan sonra kodla gösterilen sayıyı birlikte ekler; ve =no-op'tur (bu nedenle @=sayı sağdaki ikiye katlanır). Bu sistemde @@@@=+@@@=+#48 sayısının temsili olarak seçildim .

Yine de burada bir sorun var; SNUSP'de sabit yazma standart yöntemi, programın başlangıcının arkasındaki kontrol akışını terk eder ve oneliner ile (burada açık nedenlerle yazmak istediğim) IP'yi herhangi bir yöne işaret edecek şekilde değiştiremezsiniz. Bu, bir şekilde IP'nin tüm sabit tanımı geçmesi ve programdan çıkmadan ( #normalde yapacağı gibi) sağa devam etmesi gerektiği anlamına gelir . Bunu çözmek için +, her zaman önce geldiği sayının tanımını dikkatlice kullandım =. Bu, ikinci hücreyi 48'e ayarlamak için kod yazabileceğim anlamına gelir @@@@=>+<@@@=>+<#, >komutlardan hiçbirinin atlanmayacağı bilgisine güvende@komut (ve böylece şerit göstergesinin kontrolünü bizde tutarız). Ayrıca, finalde #ilk bant hücresinin hala başlangıç ​​değerine sahip olacağını biliyoruz . Bu nedenle, ilk teyp hücresini, işlem tanımından geri dönüp dönmeyeceğinizi veya sağa devam edip etmeyeceğinizi bilmek için bir işaretleyici olarak kullanabiliriz (bunu yaparken bir ton prosedür içindeyiz, ancak programdan düşerek programdan çıkıyoruz. kenar önemli ki önemli değil).

Son SNUSP kodu, bu nedenle $+@+-@@@@=>+<@@@=>+<?#>+.--.. Programın $başlangıcını işaretler. +@+-ilk bant elemanını 1'e ayarlar ( ++-ancak prosedür @geri dönüşlerle başladığında, kodu baştan -itibaren çalıştırmaya başlar , böylece bant elemanını 0'a geri ayarlamak, ?#sadece ilk bant elemanı sıfır değilse işlemi sonlandırır; biz sonunda sonra varacağı #(ikisinden sürekli tanımından 48, artı 2 50'ye ayarlanır ikinci bant elemanı ile >+<. sonra yapmamız gereken tek şey sonradan sağa giderken karşılaşılan) >+.--.(çıkış ASCII kodları 51 3) ve 49 ( 1), ve programın kenarından düşer ( ]SNUSP’de çalışmaz, ve /kontrol akışını dikey olarak yansıtır, böylece programın üst kenarından taşar); bu bit, beyin tıkanmasına benzer şekilde çalışır.


20

11. Befunge 98 , 102 bayt

#v;2^0;7||"<+0+0+0+<;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Baskılar:

Dürüst olmak gerekirse, neden Vim kodunun çıktının 1 dakika sürdüğü konusunda hiçbir fikrim yok. Ayrıca, Retina'nın nasıl çalıştığına dair hiçbir ipucu yok.

Açıklama:

#v          Skips the v, which would send the IP down
  ;         Unlike '93, where ; is a no-op, '98 skips to the next ;
            and doesn't execute anything in between
   2^0;     Not executed, unlike Befunge 93
       7|   Pushes 7 onto the stack, and then sends the IP up, because 7 is not 0
n0b1        n clears the stack, and #s are pushed until the stack is [0, 11, 1
    *.      multiplies the top 2 values of the stack to give 11, and prints it (yay!)
      _     Sends the IP right, because the top value of the stack is 0
       q    Ends the program (no-op for '93, which continues to @)

Dikkat edilecek şeyler:

  • 0Yanındaki bkodun geçerli durumda kesinlikle gerekli değildir ve yığın temizlendi. Gerekirse kaldırılabilir, ancak gelecekteki olası bir programın parçası olarak önceden diğer istif işlemlerine izin verir.
  • _q@(Nedenini bana sormayın, onsuz çalışmaz) Retina bir parçası olarak vardır. Eklenmesi qde çalıştırmak '98 kod sağlayan t(Retina programı baskı 8 yapma yerine 7) ile birlikte IP böler operasyon,
  • Bu _basit değil, >çünkü bu SMBF parçasını karıştırır.

Düzenleme: Gelecekte programı daha esnek hale getirmek için _q@büyük olasılıkla @00(0s ~ herhangi bir karakter olabilir) olması gerektiğini fark ettim . Şu anda tüm bağlantıları değiştirmek için çok tembelim (ve yorgunum). Sonunda bunun etrafında olacak ...

Düzenleme 2: Bu kadar hızlı 6 cevap beklemiyordum. Sanırım olduğu gibi kalıyor. Herkese iyi iş!


Heh, 11. cevabımı yazdım, sadece çoktan gönderildiğini fark etmek için, şimdi 12. cevaba değiştirdim :)
İnekler

Vim'in yürütmesi neden bu kadar uzun sürüyor?
MildlyMilquetoast

@MistahFiggins Kodun tuş vuruşlarına dönüştürülmesi gerektiğinden sanırım, fakat bunun dışında hiçbir ipucum yok
İnekler

Vim tercümanını yazdım ve neden bu kadar uzun sürdüğü konusunda hiçbir fikrim yok. Daha önce pek çok performans sorunu fark etmedim, ancak bunun nedeni V / Vim cevaplarımın çoğunun 40 bayttan az olması. Buna neyin sebep olduğunu tam olarak bilmiyoruz, ama bu konudaki birçok insan bundan şikayet ediyor.
DJMcMayhem

20

35. ARA (C-ARA), 631 bayt

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#8␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q222999/+23!@1#"26

bir hazır bilgi sekmesidir, bir hazır bilgi ESC karakteridir; Yığın Değişimi, programı tersine çevirir. Üzerinde çalışmak istiyorsanız, programı aşağıdaki TIO bağlantısının "giriş" kutusundan kopyalamanızı öneririm.

Onları çevrimiçi deneyin!

Bitkin

Bu program basar 35 INTERCAL bölgesi 34 Rail, 33 olayda, 32 dönüyordu, 31 Modüler SNUSP içinde, 30 Boşluk içinde, 29 Tetikleyicide, 28 Beyin Flak içinde, 27 Perl 6'ya 26 05AB1E içinde, 25 PİP'de , 24 Thutu bölgesi 23 Hexagony içinde, 22 düşük yük olarak, 21 Nim içinde, 20 Prelude, 19 Reng içinde, 18 Cardinal, 17 Julia, 16 Pyth olarak,15 Haystack bölgesi 14 Turtlèd içinde, 13 Ruby, 12 fizyonda, 11 Befunge-98, 10, Befunge-93, içinde 9 Perl 5, 8 Retinal, 7 Japt içinde, 6 SMBF, içinde 5 Python 2'de, 4 > <> 'de, 3 Minkolang içinde, 2 V / Vim ve 1 Python 3.

Doğrulama

Dillerin çoğu yukarıda gösterilen test sürücüsü tarafından test edilir. Burada Reng'i ve Modüler SNUSP'yi burada test edebilirsiniz ; gerektiği şekilde sırasıyla 19 ve 31 çıktılar. Resmi tercümanı kullanarak Olayı yerel olarak kendi sistemimde test ettim.

Gizli karakterleri daha kolay belirleyebilmek için test sürücüsüne birkaç değişiklik yaptığımı unutmayın; çeşitli NUL baytları, programın çıktısını belirli dillerde çıkardı. Bunun muhtemelen bir sorun olmadığına karar verdim, çünkü a) çok çeşitli bildirimler yapıyor ve b) Befunge tercümanları, programda hiçbir şey olmadığı anlamına gelse de, ekstra NUL baytları ekliyor gibi görünüyor. bir şeyi özledim), bu yüzden uzun zamandır devam ediyor olmalı ve muhtemelen tercümanın çalışma biçiminin bir parçası. (NUL baytları çıktıran dillerin - Befunges ve Minkolang - bu gönderim için kodlarının değiştirilmediğini unutmayın.)

Önceki Demiryolu teslimi, izin verilmeyen çökme ile çıkıyor, ancak bu kolayca düzeltilebilir ( #Demiryolu programının sonuna ekleyerek ve Altıgen'i eşleşecek şekilde ayarlayarak) ve bu yüzden bunun büyük bir sorun olduğunu düşünmedim. Bu çözümdeki Ray doğru bir şekilde çıkıyor.

açıklama

INTERCAL kodu nasıl çalışır?

INTERCAL tüm programı ayrıştırır. Ancak, sözdizimi hataları INTERCAL'deki bir çalışma zamanıdır, derleme zamanı değildir ve bu genellikle yorumlar oluşturmak için kullanılır. (Eğer bir sözdizimi hatası yürütmeye çalışırsa, Vikipedi'nin yanlış iddia ettiği şeylerin aksine, programı ICL000I hatasıyla çökertir. Fakat eğer bir şekilde çalışmasını engelleyebiliyorsanız - ve INTERCAL komutlarının çalışmasını engellemenin birçok yolu vardır - oldukça mutlu bir soruna neden olmadan yürütmek değil.

Bu nedenle, yalnızca programın ilk önce programdan çıkılmasıyla çalışan dosyanın sonunda ortaya çıkan çöpleri önleyebiliriz (zaten gerekli olan bir şey, çünkü programın sonuna açık bir çıkış komutu olmadan ulaşıldığında INTERCAL çöküyor). Programın başlangıcını idare etmek daha ilginç ve ayrıştırıcı bir hata kullanıyor. % 20 olasılık ile DO %20 READ OUT #8çıktı almak gibi bir şeyler yazabilirsiniz VIII(ve aksi halde hiçbir şey yapmayın). Söyleyebileceğim kadarıyla, C-INTERCAL, ilk komutun çalışması için% 0 olasılığını gösterdiği için ikinci satırdaki yalnız% 'yi ayrıştırır ve böylece her seferinde sürekli olarak çalışmayacak şekilde biter. ( Neden böyle ayrıştırdığından emin değilim , ancak derlenen koda bakmak rasgele bir sayı oluşturduğunu ve 0 ile karşılaştığını gösterir.)

INTERCAL programının polyglot'ın diğer kısımlarına yerleştirmeden önce nasıl göründüğü:

DO,1<-#2
DO,1SUB#1<-#52
DO,1SUB#2<-#32
DOREADOUT,1
PLEASEGIVEUP

Bu oldukça basittir: 2 elemanlı bir dizi başlat; elemanları sırasıyla 52 ve 32 (ondalık) olarak ayarlayın (INTERCAL'in dize kodlaması en iyi şekilde belirtilmeden bırakılmıştır; nasıl çalıştığını ve bu sayıların neden kodlandığını anlamak için çeşitli deneyler yapmak zorunda kaldıklarını unuttum 35); standart çıktıya oku; ve programdan çıkın. Sonunda GIVE UP deyimini sonlandırmak için ek bir LÜTFEN ekledim, program sonunda çöp için yeni bir ifade başlatarak kibarca konuşma için kabul edilebilir sınırlarda kaldım. Tabii ki, INTERCAL bitmiş üründe öyle görünmüyor; Neden gideceğimizi açıklayacağım.

SEs yükü altında gömülü

INTERCAL programındaki en belirgin sorun mektubu içermesidir S. Söz konusu harfi kullanmadan bir diziyi dizine sokmanın bir yolu olmadığından, bu kesinlikle kaçınılmazdır. Ancak, SUnderload'da bir çıktı komutu vardır ve programın tamamını ayrıştırmasını engellemenin bir yolu yoktur. Tek çözüm INTERCAL kodunu Underload'ın bir dize değişmezine eşdeğer parantez içine yerleştirmesidir, böylece hemen çalışmaz.

Ancak, ^programın sonunda Underload kodunu çalıştıran iki karakterimiz var ; Bu yüzden S, eğer bir şey yapmazsak, onlar zaten idam edilecekler. Başka bir karakterle değiştirebilirdim, ancak kodu korumanın daha kolay olduğuna karar verdi, böylece anlamsız hale geldi. aUnderload'da bir dizgiden kaçar (bu ^, dizginin çalıştırılması üzerine, zararlı yan etkiler üretmekten ziyade tekrar basitçe kaldırılacağı anlamına gelir ). Biz zaten bir ade say(kod bu düzenlemede nedeniyle ilgisiz değişikliklere aslında yeterlidir) Perl 6 kodunda kullandı. Ancak, insanlar buna güvenmek zorunda kalmayacak şekilde başka bir tane daha ekledim.asatırın sonunda (izleyen boşlukları görünür kılmak için zaten bir karakter istedim, çünkü Hexagony'nin olduğu gibi doldurmaya ihtiyacı vardı; Hexagony'nin bu programda düzeltmesi oldukça kolaydı, ve gerçekten ayrı tartışmalara ihtiyacınız var). Dolayısıyla, Underload kodu, olabileceğinden biraz daha az kırılgan.

Çok çalışma ve karışıklığa hazırlık

Ah, Prelude. Normalde en zor dil değil, ama kesinlikle bu seferdi. İki gerçek sorun var: Birincisi, çok uzun bir çizgiye fazladan parantez eklemek, Prelude programının kontrol akışını bozma riskini taşır (bir whiledöngünün eşdeğerini yarattıkları için ) ve birincisi bunların astarlanmasını önleme sorunudur. dikey olarak yukarı doğru hareket eder (bu, satırlardaki beyaz boşluğun etrafındaki rasgele hareketin çoğundan sorumludur). Whitespace'in bana da biraz sorun çıkardığına dikkat edin, ancak bu program Whitespace'in bakış açısına göre bir öncekine eşdeğerdir, bu yüzden hemen hemen "Whitespace'i kırmadan Prelude'yi düzelt" durumuydu.

Prelüdün gerçekte bu noktada nasıl çalıştığını bilmiyorum. Sol alt köşeye yakın olan 0 gibi, bunun için amaçlanan birkaç düzeltme var, ancak açıkça hedeflediğim şekilde çalışmıyorlar. (Julia kodu ayrıca satırın dibine de taşındı, çünkü printifadesindeki parantezlerin üstesinden gelmek gerçekten zordu.) Belki de sadece bir gizem bırakmak zorunda kalacağız.

Fisyon reaktöründe arıza

Yukarıdaki değişiklikler düzeltilmesi zor olan oldukça ince problemler için olsa da, çok daha belirgin bir problem var; DOREADOUTregex ile eşleşir R...Ove bu nedenle Fission'ın dördüncü döngüde istenmeyen çıktılar üretmesine neden olur; bu, istenen çıktının çıktısını almak için yeterli zaman değildir 12. INTERCAL'te yalnızca çıktı üreten bir komut vardır (çıktı olarak çökmeyi saymazsanız). Bunun bir düzeltmesi, arasına boşluk bırakmayı denemek READve OUTbize çıktıyı kesmek için zaman kazandırmaktır, ancak bu, Boşluğu sinirlendirir. Dolayısıyla bir süre bu programın imkansız olduğunu düşündüm; R, L, UVe Dtüm giriş noktaları fisyon içindedir ve potansiyel çalışan sorunlu tüm kod yetenekli ve INTERCAL anahtar kelimeler büyük harf olmalıdır.

Ancak, bir düzeltme ve oldukça şaşırtıcı bir tane var. Uluslararasılaştırma çabasının bir parçası olarak, C-INTERCAL, hem İngilizce hem de Latince desteği ile anahtar kelimeleri birden çok dilde kabul eder. Biz kaçamadı Sböyle, ama biz olabilir kaçının O; FACbunun için iyi bir alternatiftir DOve aynı şekilde aynı LEGERE EXanlama gelir READ OUT. (Bu nedenle program İngilizce ve Latince'nin bir karışımı olarak sonuçlandı, ama sorun değil; daha az okunaklı hale getiriyor.) Bu nedenle, Fission'in sağ alt köşede delirmesine ve herhangi bir şekilde üretmesine izin vermeyiz. çıktı. Gerçek Fisyon kodunu bitmek *yerine bitirmek için değiştirebiliriz.;tek bir iş parçacığı yerine tüm programdan çıkanlar; Bu kod oldukça hızlı bir şekilde çalışır, bu nedenle tüm başıboş giriş noktalarının herhangi bir hasar vermesi için zamana girmeden programdan çıkar.

Örgü 6, Perl 6

Bir sonraki problem: Perl 6 yorumu <ve 'ye göre çalışması >. INTERCAL'in görev operatörüdür <-. Neyse ki, bu ekstra açılış parantezleri ekliyor , böylece programdaki ayrıştırılmamış bir konumda (bu örnekte Pip kodundan hemen sonra) iptal etmek için birkaç kapatma braketi ekleyebilirim.

Ancak, programın boşluk bütçesini değiştirmek istemedim, ancak Julia kodunu taşımak (Prelude için) son satıra fazladan bir boşluk eklemekle sonuçlandı; Bir yerden birisini çıkarmak zorunda kaldım. Çift boşluk Pip'deki bir yorum işaretidir, bu yüzden bunları zor değiştirebilirdim; Geriye kalan tek seçenek içindeki alandır say 27. Perl 5 golfçüler derhal "sadece say+27sonra yaparlar" diye düşünürlerdi (unary +şaşırtıcı bir şekilde sık sık işe yarar !), Fakat ne yazık ki bu geçerli Perl 6 sözdizimi için geçerli değil.

Ne olabilir yapmak olsa da, değiştirmektir sayişlevi sözdizimi gelen yöntem sözdizimi. Tamsayı değişmezleri, birini basmak için de dahil olmak üzere bir dizi yönteme sahiptir, bu nedenle 27.sayaynı uzunluktaki mükemmel geçerli bir programdır.

Kare olun? Orada olma

Yani bir sonraki konu .programa fazladan bir şey ekledim . SMBF kullanıcıları bunun açıkça o dilde bir sorun olduğunu anlayacaklar ve bu da başıboş çıktılar (bu durumda NUL baytları). Orada zaten bir .üretim başıboş çıktı son program, ama ben bunu düzeltmek için fırsat sürmemelidir anlamına gelmez.

Buradaki temel fikir, rahatsız edici talimatları yorumlamak için bir SMBF döngüsü oluşturmaktır. Bu, köşeli parantezlerin çevresinde hareket etmek anlamına gelir. Onları SNUSP kodunun çevresinden aldım (çünkü onlar zaten sadece Olay uğruna oradaydılar ve Olay programın neresinde olduklarını umursamıyor ) ve açılış braketini INTERCAL kodunun başlangıcına ve Tetikleyiciden hemen önce kapama dirseği (böylece her iki .s'yi de düzgünce gizleyin ).

Maalesef köşeli parantezler Retina için anlamlıdır; görür […<-#…ve "anlamsız, o aralığı yaratamazsın çünkü <daha önce gelmez #" diyor. Neyse ki, bu stratejik olarak yerleştirilmiş bir ters eğik çizgi ile kolayca sabitlenebilir.

Programın merkezi olayı

Bu son cevap oldu ve muhtemelen bundan sonra tekrar tekrar olacak; çeşitli dizeler rastgele üç kez meydana geldi ve programın merkezinde Olay bakış açısından kaydırıldı.

Ele alınması gereken en acil belirteç 1#, bu değişiklikleri naif bir şekilde yaparsanız üç kez beliriyordu: #= >␉1#üçüncü satırın başında __DATA__=1#, ve echo 21#. Bu neden bir problem? Çünkü 1#üçüncü satır, #vhemen arkasından örtüşüyor ve üst üste binen iki simge, ikisinin de sayılmasına neden olmuyor. Ve #vbiz Olayı programından dışarı önce kodu yorum yapmak kullanılan bir simgedir! Bunu 1#, programın sonuna çok yakın bir yere gizlice sokarak düzelttim (sadece üç karakter takip etti); Programın bu bölümünü çözümleyen dillerin hiçbiri onunla hiçbir şey yapmaz.

Başa çıkılacak başka problemli belirteçler vardı. Birkaç tek harfleri vardı Pve U; Ben gelen Olay kodunda dolgu no-op bir çift değişen yoluyla bu ele xiçin Pveya Usırasıyla dördüncü kopya veren. Fission kodunda yapılan değişiklik *bir belirteç olarak kalır , ancak özellikle bu, normal koddan farklı olarak bölünür, Olay kodundan önce iki kez görünür ve yalnızca bir kez sonra görünür. Bu nedenle, kaldırmak yerine LE, INTERCAL kodunda görünen yeni kodu kısmen dengelemek için kullandım . Programın merkezini geriye döndürmek için bu yeterli0ojeton. Tabii ki, programda yapılacak değişikliklerin bunu rahatsız etmesi muhtemeldir. (TIO üzerine Olayı almak denemelerim var mümkündür değil libdivsufsort nedeniyle başarısız, bu yüzden çevrimiçi çalıştırmak böylece özellikle JavaScript, yeni tercüman yarar olabilir gibi görünüyor. Eğer ilgileniyorsanız, bir göz atın bu soru .)


1
Vay canına, bu zorluk şaşırtıcı derecede uzun bir yol kat etti. İyi iş!
MildlyMilquetoast

Latin?! Vay, ne harika bir çözüm! Kodun "lütfen vazgeç" demesini seviyorum. Ayrılmam için cesaret ediyor gibi.
Chance

19

1. Python 3 (8 bayt)

print(1)

Bu program Python 3'te 1 yazdırır .

Bunu Python 3 ile başlatmak, çünkü çokgenler için iyi olduğunu ve çok sayıda farklı yöne alınabileceğini biliyorum (ayrıca, ilk cevabın çokgene yayılması zor bir saçma esolang yerine nispeten normal bir dilde olmasını sağlamak istedim. ile).


2. dil için <>> iyi bir seçim olabilir mi (2d boşluğuna başlayalım diye)?
İnekler,

Yani bir sonraki cevap 9 bayttan fazla olamaz demek oluyor? Başka bir tane bulmak gerçekten zor olacak.
DJMcMayhem

1
@DJMcMayhem Her cevap,% 20 veya 20 bayttan (hangisi daha büyükse) daha uzun olmamalıdır
İnekler

19

10. Befunge , 95 bayt

#v02^0;7||"<+0+0+0+<;n4
#v0#@00
#>3N.
#|\w*
#8
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Son satır arasında jve dsatırında değişmez bir ESC karakteri var (grr, @ ais523). Bu koda dahil değildir. Asıl kodu almak için lütfen Try it onlinebağlantıya gidin .

Bu baskılar 1 Python 3, içinde 2 Vim, 3 Minkolang içinde, 4 , <<> 'de 5 Python 2'ye 6 SMBF içinde, 7 Japt de, 8 Retinal, 9 Perl ve 10 Befunge içinde.

Bu kod *Retina ve .Minkolang ve SMBF ile paylaşılmaktadır.

Çevrimiçi deneyin

açıklama

Gerçek program

#v02^
    @
    .
    *



    t
    5
#v02^

Son satır netlik için yazılmıştır ( Befunge oyun alanı döngüseldir.)

#

Trambolin, atlar v

02^

0Önce ve sonra 2yığın halinde itin ve yukarı gidin.

5t*.@

Push 5, no-op, yığın ( 2ve 5) ' daki iki elemanı çarp , yazdır, sonlandır.


1
Bu, SMBF'nin ilk önce boş bir bayt yazdırmasını sağlar ..
PurkkaKoodari

@ Pietu1998 düzeltildi!
JungHwan Min

Hey, en önemli komutların çoğunun yazdırılamayan karakterler olduğu bir dili kullanmayı seçen ben değildim… (Diğer yandan, Befunge'yi bu polyglot'a eklemek için güçlü bir olasılık olarak görüyordum; diğer diller

@ ais523 Bu kodu değiştirmenin zor olabileceğine katılıyorum. Bunu hafifletmek 0için, bu karakterlerin herhangi bir şey olabileceğini ( "<+0+0+0+<;n4kısım hariç ) ve Befunge kodunun bölümlerinin etrafta hareket edilebileceğini belirtmek için bazılarını yazdım . Ve bir sonraki kişi için bir ipucu: Befunge'de karakterlerin çoğu kullanılmıyor, bu yüzden daha fazla satır eklemek muhtemelen Befunge kodunu etkilemeyecek.
JungHwan Min

Befunge-98 (ya da benzeri funge) gönderimi yapmayı düşünün, çünkü normalde 'op-op olmayan' işlemlerin adil bir miktarını eklerler '93. Yine de sığması zor olabilir ve diğer tüm dillerin nasıl çalıştığını
bulmam gerekecek,

19

21. Nim (161 bayt)

#v`16/"<"6/b.q@#;n4"14""
#>3N6@15o|> ^*ttt*~++ %
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#]#echo 21
#8dggi2` |1|6

İki satır, son satırda <ESC>arasında 8dve arasında 2`. Bir öncekinin aceleyle golf oynadığını söyleyebilirsin, çünkü bu sabah uyandım ve bir demet daha çıkarabileceğimi fark ettim. 152 byte'ım vardı ama bu sadece Perl 5.24.0'da çalışıyor gibi görünüyor, bu yüzden TIO ile uyumluluk amacıyla orijinal ifadeyi şimdilik tuttum.

Python 3, 2'de V, Minkolang'da 3,> <>, Python 2'de 6, SMBF'de 6, Japt'de 7, Retina'da 8, Perl'de 9, Befunge-93'de 10, Befunge'de 11 -98, Fission'da 12, Ruby'de 13, Turtléd'de 14, Haystack'ta 15, Pyth'te 16, Julia'da 17, Kardinal'de 18, Reng'de 19, Prelude'de 20 ve Nim'de 21 .

İdeone.com'daki Nim'in biraz eski olan 0.11.2 sürümünü kullandığını, çünkü bu programın #[ ... ]#2016'nın başlarında eklenen çok satırlı yorumlara dayandığını unutmayın .

Cardinal'in Windows tercümanı sayesinde iş akışım şimdi iki dizüstü bilgisayar ve http.serveraradaki bir Python'dan oluşuyor .


Düzenle - biraz daha ipucu:

  • 8Son satırın başında Retina çıkış alacaktı onsuz aksi takdirde ilk 8 maçlara Retina en limitini ayarlamaktır 2. Bunun, son satır regex'inin son ikinci satırda sadece en az 8 kez eşleşmesi gerektiği anlamına geldiğini, tam olarak 8'e karşılık geldiğine dikkat edin - benim karışma sırasında Prelude'yi Retina'yı doğru yapmak için değiştirdim, ancak sonunda gereksiz olduğu ortaya çıktı .
  • İlk satırın sonundaki yanlış teklif, Pyth'in kodun geri kalanı için geçersiz sözdiziminden şikayet etmemesidir.
  • İkinci çizgiyi değiştirirseniz 6@, imleci üzerine inmek için 6 boşluk atlayan Minkolang için değiştirmek zorunda kalabilirsiniz ^.
  • []Şimdi bir çift var , bu yüzden SMBF'nin vurmadan önce 0 hücresinde olması [veya iç mekanın hücreyi temizlemek için alternatif olması gerekiyor.

Golf oynamak için muhtemelen daha çok şey var (şimdi bile %, Kardinal için daha önce boş bir yer görüyorum ), ancak sabahın erken saatlerinde golf oynamayı bırakmalıyım.


1
TIO şimdi Kardinal'i destekliyor
MildlyMilquetoast 19

19

51. Montaj (x64, Linux, AS) , 1086 bayt

#16  "(}23!@)(" 3//*v\D@;'[af2.qc]'#)"14";n4
#/*` PkPPZ (22)S"[!(>7 7*,;68*,@;'1,@␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++EAL+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh]>+.-- -. >][
#x%+>+=+~tt .
#D>xU/-<+++L
#R+.----\).>]|
#[#[(}2}20l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e0@O6O4/0m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#sseemeePaeueewuuweeeeeeeeeeCisajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( )/*/
#
#"`#"\'*/{puts (p);}/*'"`"
/*
<>{#65}//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#<R>"3"O.
=end #//
"""#"#//
#}
#s|o51~nJ;#:p'34'\=#print (17)#>27.say#]#print(47)#]#echo  21
#sss8␛dggi2␛ `|1|6$//''25  16*///89^_^_Z222999"26

bir hazır bilgi sekmesidir, bir hazır bilgi ESC karakteridir; Yığın Değişimi, programı tersine çevirir. Üzerinde çalışmak istiyorsanız, programı aşağıdaki TIO bağlantısının "giriş" kutusundan kopyalamanızı öneririm.

Daha fazla bilgi edinmek ister misiniz? Polgot sohbeti deneyin !

Çevrimiçi deneyin!

VIP puanı ( Çok Yönlü Tam Sayı Yazıcısı ): .008186 (iyileştirmek için bir sonraki giriş 1151 bayttan fazla olmamalıdır)

Bu program basar 51 Kurul bölgesi 50 Bash, 49 Octave, 48 Deadfish ~ bölgesi 47 Lily, 46 Cubix içinde, 45 PicoLisp içinde, 44 alphuck içinde, 43 retiküler içinde, 42 kötülük, 41 *** Brainf içinde , 40 az-2D, içinde 39 CoffeeScript üzere 38 ° C de, 37 ° C ++, içinde 36 Labirent'teki, 35 INTERCAL içinde, 34 Rail, 33 olayda, 32 dönüyordu,31 Modüler SNUSP bölgesi 30 Boşluk içinde, 29 Tetikleyicide, 28 Beyin Flak içinde, 27 Perl 6'da, 26 05AB1E içinde, 25 Pip içinde, 24 Thutu içinde, 23 Hexagony içinde, 22 düşük yük olarak, 21 Nim içinde, 20 içinde başlangıcı, 19 Reng bölgesi 18 Cardinal, 17 Julia, 16 Pyth içinde, 15 samanlýkta, 14 Turtlèd içinde, 13 Ruby, 12 fizyonda, 11 Befunge-98,10 Befunge-93, içinde 9 Perl 5, içinde 8 Retinal, 7 Japt içinde, 6 SMBF içinde, 5 Python 2'ye 4 > <> 'de, 3 Minkolang içinde, 2 V / Vim ve 1 Python 3.

Doğrulama

Dillerin çoğu yukarıda gösterilen test sürücüsü tarafından test edilir.

  • Buradaki Reng 19 çıkışı için test edilebilir .

  • Modüler SNUSP burada 31 çıkışı için test edilebilir .

  • Cubix'in küp şekli burada görüntülendi

  • Belirteçleri önceki cevaplarda açıklandığı gibi dengede tutarak olay kontrol edilir.

  • Deadfish ~ için, çıkış 48 test edilebilir , bu ile . Deadfish®'in stdin üzerinden beslenecek olan polyglot'u aldığına, ancak >>herhangi bir Deadfish ~ programının çalıştırılmasının kaçınılmaz bir sonucu olan standart çıktıya bir dizi bilgi yazdırdığına dikkat edin.

  • Montaj 51'inci çıkış için burada test edilebilir

Teşekkürler ve tebrikler

@ Ais523'ün 50'si 1 arada k yanıtı 2 hafta önce düştüğünde, yanağımdan bir gözyaşı yuvarlandı. Çok güzeldi. Ve Bash'taydı. Çok mükemmeldi.

Karıma döndüm ve “poliglotun bittiğini düşünüyorum” dedim ve büyük gurur duydum.

Bana bakmak için döndü, bir an duraksadı ve “İyi. Şimdi çöpü dışarı çıkar. ”

Yine de demek istediği, kendim ve internet arkadaşlarım için büyük bir neşe hissettiği idi. Herkese teşekkürler ve tebrikler.

Meclis Açıklaması

Takip eden günlerde, fikrimi Bash göndermeden kısa bir süre önce polyglot sohbetinde @ ais523 @ bir şeye geri dönmeye devam etti. Bazı meclis lezzetlerinin #çizgi yorumları kullandığını ve /*yorumları engellediğine dikkat çekti . Gelecek 2 hafta boyunca yavaşça fikrimi kaybetmeme yetti.

Polyglots'ta meşru dilleri içeren bir tür örtülü zorluk vardır. Burada meşru terimini çok gevşek kullanıyorum, ama sanırım ne elde edeceğimi bilebiliriz. Brainf *** 'u dahil etmek için bir şey, ama tamamen Mathlab veya R'nin beğenisini eklemek de tamamen başka bir şey. Ama Meclis hakkında hiçbir şey bilmiyordum, bu yüzden bu bir yokuş yukarı bir savaştı.

Bir süre kafama soruna çarptıktan sonra, Assembly ve C / C ++ 'un bir arada bulunmasının bir yolunu ararken, bunun GNU montajcısının dokümantasyonu olduğunu buldum:

Geçmiş montajcılarla uyumlu olmak için '#' ile başlayan satırların özel bir yorumu vardır. '#' İşaretinden sonra mutlak bir ifade olmalıdır (İfadeler bölümüne bakınız): bir sonraki satırın mantıksal satır numarası. Sonra bir dizeye (Dizeler bakınız) izin verilir: eğer varsa yeni bir mantıksal dosya adıdır. Varsa çizginin geri kalanı boşluk olmalıdır.

Bu fark ettim ki, C / C ++ için işlem öncesi direktifimiz poliglotun 1. satırında oldukça benzerdi. Bazı deneme ve hatalardan sonra bunun #1 “bla” 1//*sadece Assembly için blok yorum gireceğini tespit ettim .

Ve böylece bir polyglot yapıldı.

En büyük engelleme problemi çözüldüğünde, bu merhaba dünya örneğini ele almaya başladım.

.intel_syntax noprefix
.section .data
     msg: .asciz "51"
.section .text
.global _start
_start:
    # write syscall
    mov     rax, 1
    # file descriptor, standard output
    mov     rdi, 1
    # message address
    mov     rsi, OFFSET FLAT:msg
    # length of message
    mov     rdx, 14
    # call write syscall
    syscall
    #End the Program
    mov    rax, 60
    mov    rdi, 0
    syscall

Birincil Yazarın Kredisi

Aslında bir dakika önce yalan söyledim, kullandığım Assembly kodunun ilk sürümü, Assembly'nin iki sözdizim dalından biri olan AT&T sözdizimindeydi. AT&T sözdiziminin ana unsurlarından biri, onun kayıt referanslarının bir %önek kullanması ve bu çokgenli için bir sorundur. Kardinal, %işaretçi kökenli olarak kullanır , bu yüzden, %yaklaşık bir demet çöp tutarsak , ikinci bir Fisyon reaksiyonu gibi olur.

%Kayıt öneki olarak kullanılmayan diğer sözdizimsel dala Intel sözdizimi adı verilir. Poliglotta ilk çizgiyi geçip bir blok yorum girmek için kullandığımız istismar GNU Assembler'da (kısaca GAS veya AS). AS, her iki sözdizimsel dalına izin vermenin mutlu bir özelliğine sahiptir. Montaj kodunun 1. satırında gerçekleşen Intel sözdizimini kullanmak istediğinizi beyan etmeniz yeterlidir.

Montaj, erişim hızı için kelimenin tam anlamıyla CPU'da bulunan az sayıdaki hafıza yeri olan kayıtları kullanır. Bu, kullanımlarının geliştiricinin endişesinden soyutlanmadığı gerçeği dışında Meclise özgü değildir.

Farklı amaçlar için kullanılan farklı kayıt türleri vardır. Wikipedia'dan:

• AX çarpma / bölme, string load & store

• İp işlemleri ve vardiya için CX sayısı

• IN ve OUT için DX port adresi

• MOVE için BX indeks kaydı

• SP yığının tepesine işaret eder

• BP, istifleme çerçevesinin tabanını gösterir

• SI, akış işlemlerinde bir kaynağa işaret eder

• DI, akış işlemlerinde bir hedefi işaret eder

AX burada _start Fonksiyon doğrultusunda kullanılır: mov rax, 1. rİçinde raxbellek 64 bit olduğunu belirtir. Bunu bir için değiştirirsek e, bu 64-bit işlemciyle yapmak için tamamen geçerli olan 32-bitlik bir belleği gösterir. Sadece mevcut hafızanın üst yarısını kullanmazdık. 16 bitlik belleği belirtmek için, sadece kullanmanız axyeterlidir, çünkü biz tam sayı yazdırıyoruz. Tüm kayıt referanslarını 16-bit olarak değiştirerek birkaç byte golf oynayabiliriz.

Tamam, tüm kayıt başvuruları pek de düşmeyecek r. mov rsi, OFFSET FLAT:msg. Eğer Meclis'e aşina iseniz, fakat bu ifadeyi bilmiyorsanız, bunun AS'ye yarı benzersiz olması nedeniyle. En azından, ben panoda Ne bu sadece üzere deyimi aşağı bana altın yardımcı olan lea rsi,m.

Bundan sonra, deneysel olarak _start:, sadece _pkesmek ve kesmek için bulabileceğimi öğrendim.global _start , sadece verilen bir uyarı ile tamamen tamamen . İkincisi, msg:sadece tek bir karakter değişkenine indirgendi p:. Seçtiğim pdize değişkeni ve başlangıç fonksiyonu hem bir kısmını karşılamak amacıyla için sMeclis Alphuck yararına ekledi.

Sonra ;hepsini tek bir satıra koymak için talimatları sınırlandırıyorum. Bu, öncelikle, #//Thutu'nun yararına olan her bir satırdaki aşırı iz bırakmayı önlemek içindir. Ayrıca, Assembler'ımızın büyük / küçük harf duyarlı görünmediğini fark ettim, bu yüzden Olay dengesizliğinden kaçınmak için çeşitli karakterleri sadece üst veya alt kasaya aldım.

Bu golf bizi aşağıya indirdi:

.intel_syntax noprefix;.text;mov ax,1;mov di,1;lea rsi,m;mov dx,2;syscall;mov ax,60;mov di,0;syscall;m:.asciz "51"

Bütün bunlardan sonra, Japt ve Underload bu cevaptaki tek sorun çocuklardı. Japt *, satır 1’de eklenen bazı etlere sahipti , ancakputs(p); C ++ cevabından gelen satıra . Ben (de bu çizgiye bir satır atıp Octive'nin hattına kapattım. Bu yüzden Underload sefaulting'i durduracaktı. Buna eklenmesi için 1. hatta benzer bir tedavi yapıldı *.

Bu, bu zorluğun bayt gereksinimlerini karşılamak için yeterliydi. Aslında bunu üreterek doğruladım. polyglot'un bu versiyonunu . Ancak mümkünse VIP puanını arttırmaya çalışmak istedim. Ve bu zorluğun tüm gerekliliklerini yerine getirdiğim için, kodu aşmak için işbirliği yapmak konusunda kendimi iyi hissettim. Bu yüzden bazı golf yardım aramak için polyglot sohbet durdu.

Daha derine gitmeliyiz

@ ais523, bu ifadeyle, talimatları montajcıya makine kodu olarak geçirme tekniğini göstermiştir.

.text;.long 2298589328,898451655,12,178790,1018168591,84934449,12597 Makine kodu doğrudan CPU tarafından yürütülen ve ondalık, Onaltılık veya Sekizli olarak gösterilebilen bir dizi sayısal talimattır. Bizim amaçlarımız için ondalık, o zamandan beri en kısa olandır (onaltılık 0xtemsil etmeye öncülük eder). .long ifade, aşağıdakilerin bir dizi ondalık makine kodu talimatı olduğunu beyan ediyor.

Ben de derlemede neyin izin vereceğini görmek için bir süre bu ifadeye düştüm ve birkaç değişiklik yaptım. İlk olarak, .text;hepsini bir arada kaldırabileceğimi , sadece oldukça satılan bir bayt tasarrufu olan uyarı sorunlarıyla karşılayabileceğimi öğrendim . Sonra bir süre sonra da AS spec belgelerinde bu ifadeyi buldum

.long ile aynıdır

Güzel. Böylece bu takası hızlı bir bayt için yapabiliriz. Şimdi montaj, ancak gerçekten makine kodu, bu şekilde kesildi:

.int 2298589328,898451655,12,178790,1018168591,84934449,12597.

Bunların hepsi iyi ve iyi olsa da, doğrudan makine koduyla çalışmak oldukça zor ve en azından tüm çevirilerin nasıl yapıldığını görmek istedim. Bu yüzden ideal olarak, makine kodunu tekrar montaja çıkarmak isteriz. Bunu yapmanın en kolay yolu, bu kod snippet'inde @ ais523'ün bana gösterdiği bir nesne dökümü almaktır.

İşte kod pasajı.

Ve işte sadece Meclis.

nop
mov    $0x1,%al
mov    %eax,%edi
lea    0xc(%rip),%rsi
mov    $0x2,%dx
syscall 
mov    $0x3c,%al
xor    %edi,%edi
syscall 
.byte 0x35
xor    %eax,(%rax)

Bu bağlantı aynı zamanda her montaj hattının yanında bazı 2 karakter altıgen sayılarını gösterir. Bunlar ondalık komutlara karşılık gelir. Eğer koyarsanız Örneğin, 2298589328içine bu altıgen dönüştürücü ondalık elde edersiniz8901B090 geri. Ve yakından bakarsanız, bunlar nesne dökümü için ilk 4 altıgen komuttur (ters sırada).

Söyleyebileceğim kadarıyla, her zaman onaltılık sayılardan oluşan kümeler ondalık basamağa dönüştürmek için her zaman kullanılır ve burada kullanılan ana bayt tasarruf numarası, montajı 4 kümemizdeki son altıgen sayıları 00 olacak şekilde yapılandırmaktır. onları içine koyduğumuzda baştaki sıfırlara .int sadece ihmal ifadeye .

İfadede olan budur 12. Nesne dökümü hex bölümünde budur 0c 00 00 00.

Bu benim Meclis anlayışımın 2 hafta içinde edindiği kadarıyla. Ne çarpışma rotası!

olay

Olay, kısa montaj uygulamasında daha zor bir çözümdü, çünkü poliglot tokenleri tepeye çok daha ağırlaştırdı. İşte Olay raporu.

  • ! 2. satırda detokenize !

  • İlk EAINTERCAL çizgiye detokenizes

  • İkinci ve son satırdaki son boşluk, bir boşluk-boşluk belirtecini detokenize eder.

  • 85 son satırda detokenize

  • Riçinde #<R>"3"O.detokenizesR

  • 65içinde <>{#65 }//sıfırlar65

  • 16 Son satırda kendini detokenize eder

  • 89 Son satırda kendisini belirten

kardinal

Kardinal’de belgelenmeyi unuttuğum bir değişiklik yaptığımı fark ettim. Bayt'ı kurtarmanın yollarını aramaya biraz zaman ayırdım ve Kardinal'i öğrenmeye karar verdim. Belgelerle çok geçmeden bu çizgiyi gördüm.

= işaretçinin aktif değerini aktif olmayan değerine kopyalar.

Bu çokgende kullanılan bir numara değildi. Eski çözüm bu eğitimleri içeriyordu: `++ ~ * t

++ 2'ye kadar olan suçlamalar.

~ aktif yığını değiştirir

* yığınları ekler.

Bunun ~*sadece bir =talimatla başarılabileceğini anladım , bu yüzden işe yaramaz bir yığın değiş tokuşu almak ve bu küçük byte tasarrufunu eklemek için çözümü elden geçirdim.


3
Bu şaşırtıcı aşamada çokgenleşmeyi nasıl sürdürebileceğinizi bile merak ediyorum. Nasıl???
Qwerp-Derp

3
Bu gerçekten saf güzellikte bir şey.
Muzer

Bir sonraki sırada olmalı
Christopher

Hayır, bu VIP puanını öldürür (kod 3 ya da daha az olmadıkça)
CalculatorFeline

19

6. SMBF , 45 bayt

#v<++++<;n4
#>3N.
print('1'if 1/2else'5')
#i2

Çevrimiçi deneyin

Bu program, baskılar 1 Python 3, içinde 2 V, 3 Minkolang v0.15, içinde 4 içinde> <>, 5 Python 2 ve 6 SMBF içinde.

SMBF (aka kendini değiştiren Brainfuck) kullanır <++++<>.. İşaretçi sola taşınır (kaynak kodun son karakterine) ve hücre dört kez artırılır ve ardından yazdırılır.


17

13. Yakut (129 bayt)

#v;2^0;7||"<+0+0+0+<*!2'!1'L;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Lütfen Esc, son satırdaki jve ais523'ün Perl cevabına dgöre ve arasındaki son satırdaki gerçek karaktere dikkat edin .

Çevrimiçi deneyin!

Bu baskılar 1 Python 3, içinde 2 Vim, 3 Minkolang içinde, 4 , içinde <> < 5 Python 2'ye 6 SMBF içinde, 7 Japt de, 8 Retinal, 9 Perl, 10 Befunge içinde, 11 Befunge- bölgesindeki 98, 12 Fission'da ve 13 Ruby'de.

Ruby'de hakikaten printgerçeği kötüye kullanmak için mevcut ifadede yapılan küçük bir değişiklik 0. Doğru şekilde ayrıştırılması için diğer ifadelere boşluk eklemek zorunda kaldım.


17

15. Samanlık (141 bayt)

#v;2^0;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Not: Bir orada ESCsonra oüçüncü satırda ve sonra json satırında

Bu baskılar 1 Python 3 , 2 Vim, 3 Minkolang içinde, 4 , içinde <> < 5 Python 2 , 6 SMBF içinde, 7 Japt de, 8 Retinal, 9 Perl, 10 Befunge içinde, 11 Befunge- bölgesindeki 98 , 12 fizyonda, 13 Ruby, 14 turtlèd içinde ve 15 samanlýkta.

Çevrimiçi deneyin!

açıklama

#v                           go down
 v
 >                           go right
  3N.                        does nothing important
     15o|                    outputs 15 and ends program
                             there is an <ESC> after 'o' since 'o' in Vim enters insert mode
         1                   I added this to satisfy Retina

Müthiş, Haystack'ı kontrol ettiğiniz için teşekkürler! :)
Kade

@Kade Güzel bir 2D dili, çevrimiçi bir tercüman daha faydalı olurdu (Python tercümanı daha önce indirmiş olmama rağmen) :)
İnekler

@Kade Artık samanlık için bir TIO bağlantısı var!
İnekler,

@MistahFiggins Bağlantı benim için çalışıyor ve 15
İnekler

@MistahFiggins Önbellek? Çünkü benim için herhangi bir problem veya hata mesajı olmadan çalışıyor
İnekler,

17

9. Perl, 84 bayt

#v;7||"<+0+0+0+<;n4
#>3N.
#|\w*
#8
#|

#M`
print(None and 9or 1/2and 1or 5)
#j␛d5ki2

jVe arasındaki gerçek kodda değişmez bir ESC karakteri var d; görünürlük için burada bir with ile değiştirildi.

Bu yazdırır 1 Python 3'te , 2 Vim (yerel olarak test edilmiş, ancak burada çok benzer bir dil V bağlantı), 3 Minkolang içinde , 4 <> <yılında , 5 Python 2'de , 6 SMBF içinde , 7 Japt içinde , 8 Retina'da ve 9 Perl'de .

Farklı dillerde farklı şekilde çalışan aritmetik kötüye kullanarak biraz daha dışlayıcı dillere geçelim. ( NonePython'da falsey, Perl'de hakikat ve and/ orzincirleri her iki dilde de aynı şekilde çalışır.)

Python dışında, vim kodunu da değiştirmek zorunda kaldım. Bir dizi no-op'lar yapmak yerine, sadece önemsiz bırakmasını sağladım, sonra yine önemsizi sildim.


4
Ciddi anlamda? Edebi bir ESC koyarsanız, başkalarının cevap oluşturmasını oldukça zorlaştıracaksınız. Kodu test edebilmeliyiz.
mbomb007

1
Edebi ESC'yi kendi cevaplarınıza dahil etmek zorunda değilsiniz; Bunu yazmanın en kolay yolu olarak buldum. (Ek olarak, Firefox’ta ve yerel testlerde gayet iyi çalışır; beni yazıya

1
Ayrıca, yerel olarak Vim için test yapamazsınız. Diller, kullanılan tercüman tarafından tanımlanır. Demek bu kadar vaktimiz olan gerçekten V.
mbomb007

1
Err, vimVim için tercüman değil mi? (Her ikisi de vimve V'de çalışır .)

4
@ ais523 belki 0x1B baytını temsil etmek için put koyabilirsiniz?
16'da

17

36. Labirent , 647 bayt

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N36!@@15o|>␉^?.*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q2229991#;abcd!fghij/+23!@"26

bir hazır bilgi sekmesidir, bir hazır bilgi ESC karakteridir; Yığın Değişimi, programı tersine çevirir. Üzerinde çalışmak istiyorsanız, programı aşağıdaki TIO bağlantısının "giriş" kutusundan kopyalamanızı öneririm.

Onları çevrimiçi deneyin!

Bitkin

Bu program Labyrinth'te 36, INTERCAL'de 35, Rail'de 34, Olayda 33, Whirl'de 32, Modüler SNUSP'de 31, Whitespace'de 30, Tetikleyicide 29, Brain-Flak'ta 28, Perl 6'da 27, 05AB1E'de 26 , Pip'de 25, Thutu'da 24, Hexagony'de 23, Underload'da 22, Nim'de 21, Prelude'de 20, Reng'de 19, Kardinal'de 18, Julia'da 17, Pyth'de 16, Haystack'ta 15, Turtlèd'de 14, 13 Ruby'de 12, Fission'de 11, Befunge-98'de 11, Befunge-93'de 10, Perl 5'de 8, Retina'da 8, Japt'de 7, SMBF'de 6, Python 2'de 5, 4> <>, Minkolang'da 3 , V / Vim'de 2 ve Python 3'te 1'dir.

Doğrulama

Dillerin çoğu yukarıda gösterilen test sürücüsü tarafından test edilir. Burada Reng'i ve Modüler SNUSP'yi burada test edebilirsiniz ; sırasıyla 19 ve 31 çıktılar. @ ais523, şu anda çalışan Olay kodunu hata ayıklamaya ve düzeltmeye yardımcı oldu.

Labirent nasıl çalışır?

Labirent, kaynaktaki bazı sütunların bir miktar etrafında kaydırılmasıyla başlar, ancak birkaç adımdan sonra, işaretçi N2. çizgide olduğu noktaya gelir (başlangıçta, işaretçi oraya geldiğinde, artık Norada değil) , yığının üstünde bir 0 ile. Sonra, basitçe bir 36 iter ve yazdırır ve ile sona erer36!@

Yaptığım Şeyler

Labyrinth'i eklemek istediğimi biliyordum, çünkü hakkında biraz bilgi sahibi olduğum birkaç eşlikten biriydi. Hata ayıklayıcısını kullanarak, son satırdaki 8 değerini 0 olarak değiştirerek, Labyrinth'in sonsuz bir döngüde sıkışıp kalmayacağını ve garip bir şekilde başka hiçbir şeyin kırılmadığını gördüm. Oradan daha yeni ihtiyacım olan ham 36'ya ve çıktı komutuna atıldım ve bunlar rahatça bir @şeyi sonlandırmak için yol açtı .

Sonra, kırdığım şeyi tamir etmeye başladı: Minkolang, Cardinal ve Hexagony.

!Minko o sonlandırmak için gerekli sonraki karakteri, atlama yapıyordu, bu yüzden sadece fazladan eklenen @. Çok uzak çok iyi.

2. çizginin uzunluğundaki değişiklik, Kardinal'in çıktı deyimini kaçırmasına neden oldu. .İlk hatta fazladan bir şeyler eklemeye çalışmak Prelude'un fikrini yitirmesine neden oldu (nedense ipucu yok, dürüstçe), bu yüzden farklı bir yöntem kullandım ve ikinci satıra indirdim. Bu istemeden bir 3. Kardinal işaretçisi doğurdu, bu yüzden bir şeyi doldurdum ?(gerekli bir seçim değil, sadece Fission ve Kardinal'i düzelten ilk buldum).

Hexagony neyse ki nispeten basit bir düzeltme oldu, sadece işaretçi kodu bulmak için bir dizi harf attı. Alfabenin daha önce görünmemesi gerektiğini ve Olay ile ilgili sorunlara neden olmayacağını düşündüm. Bu aynı zamanda Olayı test etmediğimi de fark ettiğimde. @ Ai523 sayesinde, fazladan bir ünlem işaretine ihtiyacım olduğunu öğrendim, bu yüzden ealfabe dizesindeki a olarak değiştirildi !.

Çok yönlü tamsayı yazıcısının puanları

Sadece Stewie Griffin'in soruyla ilgili yorumunu yapmaya başladığı için başladı, işte "Verstatile Integer Printer" içine girildiyse her cevabın nasıl puanlanacağını gösteren bir pasaj.


1
Tamam, bu sadece Olay ile ilgili sorunlara biraz neden oluyor gibi görünüyor; Program şu anda tam olarak ünlem işareti olmayan üç ünlem işareti içerdiğinden, ancak bir dolgu karakterini dördüncü bir ünlem işareti olarak değiştirerek kolayca düzeltilebilir. eBir ünlem işaretine eklediğiniz alfabeyi değiştirdim ; bu iş gibi görünüyor.

1
Güzel! Gizlice labirent bekliyorum, sana çok iyi. Ayrı bir notta, şu ana kadar kodun en iyi kısmı (benim için), sadece denemeyi bırakmanızı söyleyen "PLEASEGIVEUPPLEASE" mesajıdır. ;)
MildlyMilquetoast

17

41. brainf *** , 916 bayt

#  4"16" 3//v\(@#/;\D"14"<;n4
#/*`3 afaaZ">;[77*,68*,@;'1,'1,q)(22)S#   ␉␉␉␉ (
#yy␉;36!@
#`<` ␉
#=␉x
#<]+<[.>-]>[
#␉<
###xR+++++[D>+++++++L+++<-][<<<]>+.---.>][
#px%>~~~+␉+~*ttt*.x
#D>xU/-<+++L)
#R+.----.R␉>]|
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#|␉
print((eval("1\x2f2")and(9)or(13   ) )-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
###; console.log  39
""""#//
=begin␉//
#*/
#define␉z  sizeof 'c'-1?"38":"37"
#include<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);}/*'``
$'main'␉//
#-3o4o#$$$
<>"3"O.<␉>//
#
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  a>>>
#>27.say# /7Jn~15o|  
#8␛dggi2␛`␉|1|6$//''25  =#print(17) ###^_^_LEintnd"3"z!]/}23!@/*///Z222999"26

bir hazır bilgi sekmesidir, bir hazır bilgi ESC karakteridir; Yığın Değişimi, programı tersine çevirir. Üzerinde çalışmak istiyorsanız, programı aşağıdaki TIO bağlantısının "giriş" kutusundan kopyalamanızı öneririm.

Çevrimiçi deneyin!

VIP Puanı (Çok Yönlü Tamsayılı Yazıcı): 0.01329

Bitkin

Bu program, baskılar 41 Brainf içinde *** 40 az-2D, içinde 39 CoffeeScript içinde, 38 ° C de, 37 ° C ++, içinde 36 Labirent'teki, 35 INTERCAL içinde, 34 Rail, 33 olayda, 32 dönüyordu, 31 içinde Modüler SNUSP, 30 Boşluk, içinde 29 Tetikleyicide, 28 Beyin Flak, içinde 27 Perl 6'da, 26 05AB1E içinde, 25 Pip içinde, 24 Thutu içinde, 23 Hexagony içinde, 22 düşük yük olarak,21 fizyonda, 11 Befunge-98, 10 Befunge- bölgesindeki 93, 9 Perl 5, içinde 8 Retinal, 7 Japt içinde, 6 SMBF içinde, 5 Python 2'ye 4 > <> 'de, 3 Minkolang içinde, 2 V / Vim ve 1 Python 3. Nim bölgesi 20 Prelude, 19 Reng içinde, 18 Cardinal , 17 , Julia içinde 16 Pyth içinde, 15 samanlýkta, 14 Turtlèd içinde, 13 Ruby, 12

Doğrulama

Dillerin çoğu yukarıda gösterilen test sürücüsü tarafından test edilir. Burada Reng'i ve Modüler SNUSP'yi burada test edebilirsiniz ; gerektiği şekilde sırasıyla 19 ve 31 çıktılar.

Sonunda Test Sürücüsü Tokenizer içerecek şekilde güncellendi. Tüm C kodu Bash Script'in perspektifinden bir argüman olarak saklanır. Dikey olarak çıktı yapmak yerine her belirteçten sonra izleyen bir boşlukla yatay olarak sarılacak çıktıyı da değiştirdim. Bu sadece benim tercihimdi, Whitespace çıktısıyla eşleşmesini sağladı. Ancak, kafa karıştırıcı gibi hissediyorlarsa, başkası bunu değiştirebilir.

Ayrıca Turtlèd’in UFT8 karakterindeki sütun aralığını sıradaki sırayla işlemek için bir Test Sürücüsü ayarı yaptım. Bu yanlış hizalama beni deli ediyor! “Düzeltme” oldukça kesiktir, çünkü sadece bir è arar ve bu durumda sütun genişliğini değiştirir, ancak işi halleder.

açıklama

İlk olarak, @ SnoringFrog'un Çok Yönlü Tamsayılı Yazıcı Puanının müthiş bir kod yazısının son yazıdan ne kadar harika olduğunu söylemek istiyorum . Bir süredir göndermeden önce cevapları hesaplıyorum ve bu bana küçük tutmam için ilham verdi. Sanırım sonunda @ sp3000'in cevabını yenebiliriz.

Bu yüzden elimden geleni yapmaya çalışarak bu cevap üzerinde çalışmaya başladım ve oldukça başarılı oldum. # 40'tan küçük toplam bayt sayısı ile farklı bir dilde bir cevabım bile vardı. Ama Minimal-2D'yi oynamaya çalışırken BF'yi öğrenmek zorunda kaldım, böylece türevleriyle daha iyi çalışabilecektim ve bu süreçte @ Primo'nun rekorunu kıran Merhaba, Dünya! . Ben zarafete aşık oldum.

Minimal-2D, @Primo tarafından kullanılan kaset başlatma tekniğini kullanmak için yeterince verimli değildi, ama şimdi muhtemelen zaten çok fazla byte ağır olacağı kanısındayım. Sonuçta sadece bir tamsayı yazdırmaya çalışıyoruz. Fakat @Primo, Minimal-2D'nin koduna getirdiğim BF'de nasıl çarpılacağını öğrenmenin yolunu yolladı.

Tüm bunlardan sonra, @ SnoringFrog'un BF'yi nasıl dahil edeceği hakkındaki yorumunu tekrar okudum ve sadece bunu yapabileceğimi değil, BF cevabında yazdığım Minimal-2D kodunun çoğunu da kullanabileceğimi fark ettim. Ben de BF'ye cevap vermek için uğraştım ve işte buradayız.

Ayrıntılara girmeden önce bir şey daha. Golf dışı nedenlerle yaptığım birkaç değişiklik vardı. İlk önce, @SnoringFrog kodunun büyük kısmını en üstteki birkaç satırdaki 2B dillerin hemen altına ekledim. Bana göre, mümkün olduğunda gelecekteki böcekleri önlemek için 2D-uçlarının poliglotun ortasından geçmesini önlemek uzun vadeli bir stratejik hamledir. Bu hamle için bayt vuruşu düşüktü, ben de bunun için gittim.

İkincisi, çeşitli yeniden faktörler sırasında, Begunges ve Minkolang'ın sayısal çıktılardan sonra bir boşluk bıraktığını ve bunun, bu diller için Test Sürücüsünde gördüğümüz boş baytların nedeni olduğunu öğrendim. Bunları, yığının değerini doğrudan değer yerine bir ascii kodu (izleyen boşluk özelliğini içermeyen) olarak çıkararak düzelttim. Bu değişiklik için de küçük bir bayt çarpması oldu, ancak şimdi Test Sürücüsünün çıktısı çok düzgün. Nasıl yapamazdım?

SM / BF

Hızlıca temelleri gözden geçirelim. Bunlar SMBF ve BF için geçerli olan tek komutlardır:

>   Move the pointer to the right
<   Move the pointer to the left
+   Increment the memory cell under the pointer
-   Decrement the memory cell under the pointer
.   Output the character signified by the cell at the pointer
,   Input a character and store it in the cell at the pointer
[   Jump past the matching ] if the cell under the pointer is 0
]   Jump back to the matching [ if the cell under the pointer is nonzero

Her iki dilde de değerlerin saklandığı ve değiştirildiği bir hafıza bandı vardır. SMBF'nin tek farkı, yürütülmekte olan kodun, başlangıç ​​noktasının solundaki hafıza bandında da saklanmasıdır. @SnoringFrog'un işaret ettiği gibi, SMBF ve BF'yi almak farklı sonuçlar üretmek için bellek işaretçisini orijinin soluna getirme menteşelerini oluşturur. Tio'nun BF yorumlayıcısında, bellek işaretçisi orijinden sola hareket edebilir ve Polyglot'un SMBF'nin gördüğü ascii kodları yerine 0'ları bulur. İşte farkı örneklemek için hem SMBF'de hem de BF'de çalıştırılabilecek bir örnek.

Poliglotun başlangıcında, Befunges >ikinci sırada tamamlama için koşmaya ve Perl6'nın her >birinin bir tarafından önce gelmesini gerektirir <. Böylece SM / BF <>, bellek işaretçisini başlangıç noktasında bırakmak için başlar , ardından [her iki dil için bazı rahatsız edici karakterleri ]6. sırada atlar .

Sonra, her iki dil için orijin hafıza hücresini arttırır ve hafıza işaretçisini sola doğru hareket ettiririz +<. (Konuşma sözleşmesi için, kaynak bellek hücresini 0 hücresi, kaynak 1, 2, ... sağındaki hücreler ve sola giden hücreler -1, -2,… olarak adlandırırız). Hücre -1, SMBF'deki poliglottaki son karakterin ASC kodunu ve BF'deki 0'ın kodunu içerir.[ ile karşılaşıldığında, ]SMBF koda geçerken sadece BF bir sonrakine atlar .

SMBF [.>-]ilerledikçe polyglot'un sonunda bulunan 6'yı yazdırır ve ardından hafıza işaretçisini 0 hücresine geri götürerek değerini sıfırlamak için geri döndürür.] . İncelemek için, bu bira bardağındaki bantlar şunlardır: SMBF'nin negatif hücreleri poliglotu tutar ve 0 ve pozitif hücreler de sıfır tutar. BF'nin negatif ve pozitif hücreleri, orijin hücresi 1'i tutarken sıfırı tutar.

Daha sonra >SMBF'yi hücre 1'e ve BF'yi hücre 0'a geri hareket ettirir ve BF'nin özel kod bloğuna girmesini sağlar: [<+++++[>++++++++++<-][<<<]>+.---.>](BF olmayan karakterleri bundan kaldırdım). Burada hücre -1'e geri dönüyoruz ve döngü kontrol değişkenimizi (hücre -1) 5 değerine sıfırlıyoruz. Sonra döngü 0'dan 10 ekleyeceğimiz döngüye gireriz ve döngüden çıkmadan önce hücre -1'i 5 kez azaltır 0 değerine sahip -1 hücresini işaret edeceğiz.

Sonra [<<<]sıfıra işaret ederken karşılaşacağız , BF bundan geçemez. Burada amaç bir dizi dengelemek için ise >'önceki ile s <Perl6 dışarı hata değildir bu yüzden s'.

Bu noktada, hücre 0, 51 değerindedir. 4'ün ascii değeri 52'dir, bu yüzden işaretçiyi hücre 0 ekle 1'e hareket ettiririz, sonra değeri yazdırırız. Ve son olarak, hücre 0'ı tekrar ascii karakter 1'e geri indiririz ve bellek göstergesini hücre 1'e (0 değeri) geçmeden önce tekrar yazdırırız ].

SMBF ve BF, ikisi [de 0 değerinde dururken, sonraki satırda 8 numaralı sonuncuya ulaşırlar . Böylece ikisi de kalan Minimal-2D kodunu geçerek ]11. satırda karşılaşılana kadar atlar. Fakat bu kısa ömürlüdür, çünkü 12. satır başka bir karakterle başlar[ , her iki dili de başka talimatların alınmadığı polyglot'un neredeyse sonuna götürür.

Refactors

Minimal-2D

Minimal-2D'lerin yeniden yazılması, çoğunlukla byteları BF'nin çarpma numarasına benzer bir şekilde kurtarmaktı. Minimal-2D ise döngü kontrolü için [ve ]karakterlerine sahip değildir . Bunun yerine şu komutları vardır:

/   Skips next instruction if the data pointer is set to 0.
U   Tells the program to switch to the up direction of processing instructions.
D   Tells the program to switch to the down direction of processing instructions.
L   Tells the program to switch to the left direction of processing instructions.
R   Tells the program to switch to the right direction of processing instructions.

Bunlar, 2B malikanede de olsa BF'ninkiyle aynı mantık yapısını üretmek için kullanılabilir. Örneğin, BF en ++++++[>++++++<-]>.eşdeğerdir bu Minimal-2D.

İşte kaldırıldı tüm yabancı kod ve değiştirilir bütün yer tutan karakterlerle polyglot Minimal-2D kodunun basitleştirilmiş versiyonudur #.

###################D
###R+++++[D>+++++++L
###>
D>#U/-<+++L)
R+.----.R

DHat 1 'de talimat işaretçi indiren Lsola işaretçiyi gönderir dili içine hat 8'de. Burada döngü kontrol değişkenini (hücre 0) 7 olarak ayarlıyoruz, hafıza göstergesini hücre 1'e getirip bir döngü girin. Döngüde, hücre 1'e 3 ekleriz, hücre 0'ı azaltır, sonra hücre 0'ın değerinin sıfır olup olmadığını kontrol ederiz. Olmazsa, hücre 1'e bir 8 daha ekleriz, sonra azalır ve tekrar kontrol ederiz. Bu döngünün sonucu hücre 1'in değeri döngünün sonunda (6 * 8 + 3) 51'e ayarlanır.

Dönüşten çıkıp, Uhafıza göstergesini hücre 1'e hareket ettirip aşağı inip polyglot'un 11. Ve son olarak, 4 için ascii değerine yükseliyoruz, ardından programı sonlandırma hakkına gitmeden önce ascii değerine 0 düşüyoruz.

Retina

Retina'nın tüm BF türevleri için çalışması zor olan birçok gereksinimi vardı. Ardışık +'lar veya uyuşmayan ()veya []. Ancak bunlar gerçekten sadece diğer her satır için bir gerekliliktir, bu nedenle BF, SMBF ve Minimal-2D için yapılan çalışmaların çoğu, kodun büyük kısmını numaralı satırlara koymak için döndüler.

Sadece |Retina'ya adanan bir bayt , satır 11'in sonundadır. @ Ais523 alıntı yapmak “| herşeyle eşleşecek ”. Bu olmadan, Retina 0 döndürür. Neden bu onu düzeltir, bilmiyorum. Uzun zamandır uzak durduğum için Retina'ya fazla kazmam gerekmedi. Ancak Prelude gibi, onu nasıl hata ayıklayacağımı bilmem gerektiği kadar anlamamama gerek olmadığını, bu durumda çoğunlukla çizgiyi bulana kadar (2'nin katlarında) satırları silmekten ibaretti. Bu kırılmasına neden oluyor. @ Ais523 adlı kullanıcının yorumuna dayanarak bu düzeltmeyi tahmin ettim ve ödüllendirildi. Sanırım okul için fazla havalıyım.

kardinal

@ SnoringFrog'un Kardinal koduna göre Minimal-2D yerleşimini beğendim. Kardinal'in Retina'yı üzmediğini ve Minimal-2D ile iç içe geçmesine izin veriyor gibi göründüğü için iyi bir konum. Bu yüzden Minimal-2D'yi 2B ülkeye kadar nakletmeye başladığımda, yolculuk için Kardinal'i getirdim. Yine de, Kardinal’de birkaç kozmetik değişiklik yapıldı. Birincisi, Minimal-2D için döngüsünün içindeki bellek işaretleyicilerini değiştirmek için >verdiği ifadenin başlangıcına yaklaştım #p x%>~~~+ +~*ttt*.x/ İkincisi, Minimal-2D odasını döngüden zarif bir şekilde çıkarmak için her şeyi bir karakter sağa kaydırdım. pBu operasyonda bu karakter dolgu içindir.

Befunge / 98

Befung'lar aslında polglottan aşağı golf oynamaya başladığım yerdi, çünkü C ++ refactor bunun dışında tüm diğer 2B kod kodunu değiştirdi. WTF'nin bu kodda olduğunu öğrenmeye çalışırken bunu Begunge belgelerinde buldum:

.Komut istifi ve bir ondalık sayı olarak çıkış kapalı bir değer, açılır ve ardından bir boşluk biraz Forth gibi. ,bir değer atar, bir karakterin ASCII değeri olarak yorumlar ve bu karakteri ( boşluk bırakmaz ) çıkarır.

Kutsal moley! Çıktıdaki boş baytları temizleyebiliriz. Bundan sonra, sadece daha büyük asci değerlerinin nasıl girileceğini bulmak ve kodu ayırmak meselesiydi. Befunge-98'in içeri atlamasını ;söyleyen bir atlama kodu vardı [77*,68*,@.;[77*,68*,@;'1,'1,q bize ayırım verdi.

Befunge-98 ayrıca bir 'sonraki karakterin ascii kodunu almak için bir komut ( ) kullandı. Böylece, '1,karakter için asci kodunu alır, 1istifin üzerine koyar ve sonra ascii karakterini istifin üzerindeki en yüksek değer için yazdırır ,. Bunu 11 kez yazdırmak için iki kez yapıp q, incelikle çıkmak için bir bırakmalısın.

Befunge uygun biraz daha az uygun, ama sadece sadece. Burada istenen kodu yığına koymak için bir hesaplama yapmak zorundayız. Neyse ki, kodlarımız aynı çıkış komutundan önce 7 * 7 ve 6 * 8 ile kolayca çarpıldı ,. Sonra @, abisinin kodu çıktıyı kirletmeden önce Befunge'den ayrıldık .

Minkolang

Befunge'nin sondaki boşlukları için bir düzeltme bulduktan sonra, bir Minkolang düzeltmesi bulma fikrine çok üzüldüm ve Minkolang'ın belgeleri bu noktaya kadar kullanılan çıktı komutunun Befunge Tercümanı ile aynı şekilde çalıştığını söyledi. Obaşka bir çıkış komutu olarak belgelendi, bu Begunge'nin paylaşılması olarak tanımlanmadı, bu yüzden karanlıkta bir çekim yaptım ve dizgeyi çıkarmayı denedim "3". Kusursuz zafer.

> <>

Minimal-2D kodunu taşırken ilk baktığım şeylerden biri de onun yanında> <> hareket edebileceğimi doğrulamaktı. Eğer 2B poliglot enlemeciliği ile uğraşacak olsaydım, bütün geçişlerle ilgilenecektim. Temel olarak şans ;n4 , satır 1'in sonuna koyup çözüme yolumu kapattım ve satır 1'e \Ddaha da geri döndüm. BTW, cevaplar 40'tan önce çok iyi bir şekilde içerildiğinden beri,>>> aşağı doğru yönlendirilebileceğini bilmiyordum. . Bunun daha sonra benzer bir dilden> <> ayrılmak için kullanılabileceğini düşünmek isterim.

Perl6

<>Bu cevabın başka yerlerinde Perl6'nın bazı dengeleme sorunlarından bahsettim , bu yüzden bir daha asla geçmeyeceğim. Fakat #>27.say#ikinci hatta son satıra geçtiğimi belirtmek istiyorum . Bu cevapta bunun işlevsel bir amacı yoktur. Aslında bu hareketi, bu turu kullanmamaya başladığım farklı bir cevabı karşılamak için yaptım. Bir sonraki fırsatımda bu cevabı göndermeyi planladığımdan beri bırakmaya karar verdim ve geri almaktan ve tekrar yapmaktan rahatsız olmak istemedim.

Hata düzeltmeleri

05as1e

05as1e kesinlikle yeni sürümdeki Begunge kodunu beğenmedi. Sanırım ,tek devrimci karakter bu olduğundan beri s. Her durumda, "saldırgan komutları gizlemek için ikinci hatta geri "gitmek zorunda kaldım "ve her iki dilde de evet-op olduğundan beri Befunge kod yolundan önce gitmesi gerektiğini biliyordum . (Evet-op hakkı gibi terimler yapabilir miyim?) Satır 2'nin 2- <boyutluluk oldukça katı, ancak Begunge'nin kod yolundan önceki ile yerini değiştirebildim ". <Ancak Perl6 bir gereğidir oldu. (Daha <önce hepsine sahip olmalı >.) <Satır içini içgüdüler tarafından bölünmüş bir yere düşürdüm ve 05ab1e ve Perl6'nın anlaşmazlığının çözülmesini öngördü.

koşuşturma

2. satırdaki Befunge değişiklikleri 1, Incident / Whirl satırından önce polyglot'a fazladan eklendi . Bu ekstra 1, Whirl'in tekerlek üzerindeki yanlış talimatları göstermeye başlamasına neden oldu. İlk 1C / C ++ 'ın yönergesidir kodu sadece bir satır sayısının referans, ve bu gibi kolayca başka bir satır sayısı olabilir, bu yüzden keyfi bu değişiklik 4Whirl karşılamak için.

olay

Poliglot'un sonundaki detokenize edici dize bu noktada iyi bilinmektedir, bu yüzden ona girmeyeceğim. Yapabileceğim şeyi dizgiden çıkardım ve gereken yeni belirteçleri ekledim. İşaret etmem gereken bu dizgede olmayan 2 detokenize edici karakter var. Birincisi, ikinci Ryılında #R+.----.R >]|bir Füzyon başlangıç noktası olduğu için burada ihtiyacı vardı ve zaten aynı yönde bir Füzyon başlangıç noktası başlığı olmadığı için bu hat üzerinde daha güvenli oldu. İkinci olarak, xiçinde #= xbir yer bir belirteç kaldırmaktır ␉␊#daha yaygın hale gelmiştir desen.

Diğerleri

Hexagony, Whitespace ve Prelude hepsinde olağan küçük ayarlamalar vardı, fakat konuşmaya değecek özel bir şey yoktu.

Son düşünceler

Bu cevap için elimde sadece bu var. Bir sonraki cevapta başlangıç ​​noktası arayanlar için kötülüğü öneriyorum. İşe yarayacak gibi görünmeme rağmen uygulanabilir görünüyor, ancak entegrasyonu zor olmayacağından şüpheliyim. Poliglotun büyük bir kısmını atlayarak atlaması gereken bir atlama komutu olduğunu biliyorum. İyi şanslar.


Olayda Başarısız (yazdırıyor 3333sonra girişi bekler), ancak büyük olasılıkla kolayca sabitlenebilir. Sorun ve bir jeton (yerleştirdik ki -]) sonra^- önceden Programın sonunda atlamak için kullanıldı belirteci. Diğer iki kullanım -]ardışıktır, bu nedenle geriye doğru bir sıçrama olan bir… xx… x… deseni oluşturur. Bunu -]biraz daha erken ^_sürdürmek (ya da biraz sonra veya her ikisini de) taşımak, muhtemelen oldukça kolay olabilir.

@ ais523 Teşekkürler. Yazarken golf oynamak için elde ettiğim bu. Olay çocuklarını kontrol etmeyi her zaman unutma. Neyse ki, bunu çıkarma işlemiyle toplama ile çözebildim, bu yüzden genel galiba galiba.
Şans

1
Eğer V'yi -v(ayrıntılı) için çalıştırırsanız <esc>, daha sonra kodla çalışmayı biraz daha kolaylaştırabilecek değişmez bir kaçış karakteristiğini değiştirebilirsiniz . (Sanırım)
Pavel

Vaov! Ödül için teşekkürler @ ais523. Pazartesi sabahı başlamak için ne harika bir yol!
Şans

Befunge-98, Befunge-93'ten daha yaşlı mı?
CalculatorFeline

17

183. Intel 8080 önyükleme görüntüsü (ZEMU), 9870 bayt

Çevrimiçi deneyin!

açıklama

Makine kodu ekleme fikri için Potato44'e teşekkürler, bu cevabı yapmak çok eğlenceliydi.

CP / M COM dosyasını yapmadım çünkü poliglotun boyutunu kaçınmak istediğim yaklaşık 60KB ile sınırlıyor. ZEMU önyükleme sektörünü varsayılan olarak 6. sektörden (1 tabanlı, 128 bayt mantıksal sektörler) yüklediği için önyükleme görüntüsü COM'dan daha kolay çıktı, bu nedenle polyglot'un başlatılması gerekmiyor. Önyükleme kodunun polyglot'ta 0x280 ((6-1) * 128) ofsetinde olması gerekir.

Bu sayfadan bağlantılı ZEMU emülatörü kullanıyorum . ZEMU'da polyglot çalıştırmak için:

  • Diskler> A: polyglot dosyasını seç
  • Seçenekler> Komut Seti I8080
  • Boot düğmesine basın

Bir cns$otchar'i console'a ( ) basan işlev, BIOS22Dv221.ASM'den ZEMU dağıtımından kopyalandı. İki değişiklik yaptım: karakter 7 bit ASCII'ye maskelenmedi çünkü parametreleri kontrol ediyoruz ve jrz cns$otbunun yerine (sıfır jz cns$otolduğunda jrzgöreceli atlama) Intel 8080'de bulunmayan Zilog Z80 komutu olduğu için değiştiriliyor .

İlk program ( Intel sözdizimi , buradan bağlantılı assembler ):

    org 3120h    ; chosen so that cns$ot == 0x3131, easier to generate
                 ; this program will be generated at this offset
                 ; to run it directly specify org 0100h

    mvi c,31h    ; '1'
    call cns$ot
    mvi c,38h    ; '8'
    call cns$ot
    db 38h       ; for answer 188, NOP in I8080
    mvi c,33h    ; '3'
    call cns$ot
    hlt          ; halt processor

;;;;;;;;; copied from BIOS22Dv221.ASM
cno$sp equ 7dh
cno$sb equ 01h
cno$si equ 00h
cno$dp equ 7ch

; print char to console, receives char in c register
cns$ot:
    in cno$sp    ; in status
    xri cno$si   ; adjust polarity
    ani cno$sb   ; mask status bit
    jz cns$ot    ; repeat until ready
    mov a,c      ; get character in a
    out cno$dp   ; out character
    ret

Bu program doğrudan polyglot'ta kullanılamayan karakterleri içerir. ASCII kontrol karakterlerinin çoğu (kod <0x20) Simula'da yasaktır, ASCII olmayan karakter (kod> = 0x80) tek başına görünemez çünkü dosyanın geçerli UTF-8 olması gerekir. Bu yüzden yukarıdaki program geçerli UTF-8 olan başka bir program tarafından üretilir.

Aşağıdaki program gerekli kodu oluşturur ve atlar. ld (hl),aGrass ( 'w'==0x77) nedeniyle kullanılamaz . sub h(0x94) ve xor a(0xAF) UTF-8 devam baytıdır , UTF-8 öncü bayt ile hazırlanmalıdırlar. Talimat ret nc(= 0xD0, eğer taşınmazsa döndür) UTF-8 lead byte olarak kullanılır. Hiçbir şey yapmamasını sağlamak için komuttan önce gelir scf(set taşıma bayrağı). Ayrıca ','DOBELA için (0x2C) ve '.'(0x2E) kullanımından da kaçınılmıştır . org 0100hyönergesi kullanılmaz, çünkü kullanılan montajcı onu anlamıyor (kuruluş GUI'de ayarlanmıştır). Bu program yine de pozisyondan bağımsızdır. Zilog'un anımsatıcılarını daha çok seviyorum, bu yüzden onları daha uzun programlarda kullandım.

Zilog sözdizimi , buradan bağlantılı assembler :

  ; generate: 0E 31 CD 31 31 0E 38 CD 31 31 38 0E 33 CD 31 31 76 DB 7D EE 00 E6 01 CA 31 31 79 D3 7C C9

  ld hl,3120h

  ld a,3Fh
  scf       ; set carry flag so that ret nc does nothing
  ret nc    ; utf8 lead byte for next insn
  sub h     ; a -= h; a = 0Eh;  utf8 cont byte (opcode 0x94)
  ld c,a

  ld (hl),c ; 0Eh    ; not using ld (hl),a because it is 'w'
  inc hl

  ld (hl),h ; 31h
  inc hl

  ld a,32h
  cpl       ; a = ~a; a = 0xCD
  ld d,a
  ld (hl),d ; CDh
  inc hl

  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),38h ; 38h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),38h ; 38h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),33h ; 33h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),76h ; 76h
  inc hl

  ld a,23h  ; not using ld a,24h because it has '$' (breaks SNUSP)
  inc a
  cpl       ; a = ~a; a = 0xDB
  ld d,a
  ld (hl),d ; DBh
  inc hl

  ld (hl),7Dh ; 7Dh
  inc hl

  ld a,c    ; a = 0Eh
  cpl       ; a = F1h
  dec a
  dec a
  dec a     ; a = EEh
  ld d,a
  ld (hl),d ; EEh
  inc hl

  scf
  ret nc
  xor a     ; a ^= a; a = 0; utf8 cont byte
  ld c,a
  ld (hl),c ; 00h
  inc hl

  ld a,4Ah
  scf
  ret nc
  sub h     ; a -= h; a = 0x19;  utf8 cont byte
  cpl       ; a = ~a; a = 0xE6
  ld d,a
  ld (hl),d ; E6h
  inc hl

  ld a,c
  inc a
  ld d,a
  ld (hl),d ; 01h
  inc hl

  ld a,35h
  cpl       ; a = 0xCA
  ld d,a
  ld (hl),d ; CAh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),79h ; 79h
  inc hl

  ld a,2Dh  ; not using ld a,2Ch because it has ','
  dec a
  cpl       ; a = 0xD3
  ld d,a
  ld (hl),d ; D3h
  inc hl

  ld (hl),7Ch ; 7Ch
  inc hl

  ld a,36h
  cpl       ; a = 0xC9
  ld d,a
  ld (hl),d ; C9h

  ld sp,3232h  ; set up stack for generated program

  ld hl,3120h  ; not using ld l,20h because it has '.'
  jp (hl)      ; go to generated program 
               ; confusing mnemonic - actually it is jp hl, ie. PC = HL
               ; opcode 0xE9, utf8 lead byte (0xE9 = 0b11101001), must be followed by 2 cont bytes
  db 80h,80h

Bu program içine monte edilmiştir:

! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退

Çokgruptaki 0x280 ofsetinde olmalıdır (2. satıra bakınız). Test sürücüsündeki soyutlama testi bunu kontrol eder.

refactorings

kabuklar

Taşınmış kabukları en uzun çizgiye geri götürdü. Bu yerleşimi daha çok seviyorum çünkü parenler diğer şeritlerle aynı hizada değil. Kabukları önce Moorhenses ve Flaks taşındı, bu yüzden kabukları değiştiğinde kırılmazlar. En uzun satırda şu düzen var:

Grass  Moorhenses  Flaks  Shells  Rubies/Pythons/Perl5  PicoLisp  Prelude  Klein001

Yeni mermi kodu:

a=$(printf \\x00)
b=$(echo -n $a | wc -c)
case $b[1] in 1*)echo 54;; 4*)echo 78;; 8*)echo 166;; *1*)echo 50;; *)echo 58;; esac
exit

Eski kabukları kodu:

a=$(printf \\x00)
b=${#a}
case "{"$ar[1]"}"${b} in *1)echo 54;; *4)echo $((19629227668178112600/ 118248359446856100));; *1*)echo 50;; *)echo 58;; esac
exit

Uzunluğu şimdi $atarafından hesaplanır $(echo -n $a | wc -c)( buradan ). Başlangıçta bunu kurtulmak için kullandım #, ama şimdi kısa kod nedeniyle kullanılıyor. Kabuklar içerebilir #çünkü Flaks kabuklardan öncedir.

Yash (166), varsayılan olarak seçenekleri desteklemeyen yerleşik yankı komutunu kullanır, bu nedenle "-n" ve satır beslemesi, ek 4 bayt veren çıktının bir parçası olur. ECHO_STYLEVarsayılanları ayarlanmadığında SYSV( -nseçenek kabul edilmez).

Bu TIO linki tüm kabuklarda kodu test eder.

(((((Mermi ek önce Yükü ve Retina'yı sabitleyin. 58Prelude'den gizlemek için bir çift parens daha eklenir ( #)sonradan kapatılır exit). {önce ((((((Japt için, Japt kilitleniyor.

Flaks

Flaks'ın yeniden konumlandırılmasından dolayı başlangıç ​​kodu basitleştirilebilir - yalnızca ([])kaldı:

     line 21      (Grass(([5]{})))    scripting langs                  clear stack     Flaks main code                                                                                      begin skip code      the rest of polyglot   end skip code   print(85)
old: []{}[][][]   ((([]{})))          ((()()<<()>>)((()([])))<<()>>)   {}{}{}{}{}{}{}  ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()
new: []{}[][][]     ([]  )                                                             ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()

Bu TIO bağlantısı tüm Flaks kodlarını test eder.

Fizyon ve kardinal

Bölünme LNUSP içine taşındı: R"12"R _*. İkinci işaretçi, Fission'ı en kısa zamanda sonlandırmak için kullanılır - 3. adımda, daha fazla bilgi için 54. cevaba bakınız .

Kardinal LNUSP içine taşındı: @ %"18". Fission'da olduğu gibi, ikinci işaretçi Cardinal'i en kısa zamanda sonlandırmak için kullanılır - 3. adımda.

MarioLANG

Kullanım ####...yerine ====...bir platform olarak:

görüntü tanımını buraya girin

Minimal-2D

MarioLANG ile Polyglot:

görüntü tanımını buraya girin

Wierd ve 1L_a

Wierd: IP'yi yansıtmak için satır 10 sütun 79'daki boşluğu kullanın.
1L_a, Wierd: 9 numaralı satırdaki boşluk 79 sütunu önemlidir.

görüntü tanımını buraya girin

kübik olarak

Yeni kod: :1*23!/5x%6E0

:1*23!/5x%6E0
! - skip over / in Klein 201
x - destroy Cardinal pointer before it hits /

pure:
:1*23/5%6E0

faceval:
0 0
1 9
2 18
3 27
4 36
5 45

program:
:1   mem = 9
*23  mem *= 18; mem *= 27
/5   mem /= 45
%6   print mem
E0   exit

9*18*27/45 == 97 (integer division)

6 in %6 is used to print mem because 0-5 are used to print faceval (eg. %3 prints 27)
0 in E0 is not an exit code, it is present just to trigger E instruction

Klein 201/100

Yeni kod: !|*****[[[828+*+@+*99]]]*****|!

Tüm çarpımlardan sonra yığın tek bir sıfır içerir çünkü boş yığıntan atlamak sıfır verir. Bu sıfır +yanına ana numaraya eklenir @. Önceden atıldı ?, bkz. Klein 001 cevabı .

Klein'da kapılar nasıl çalışıyor:

görüntü tanımını buraya girin

koşuşturma

Girdap kodu temelde aynıdır, tek değişiklik ana kodun geçerli işlemin ops.one (2) olduğunu varsaymasıdır, ops.load (4) değil.

Etkili bir şekilde koşuşturma, 3 işlem yapmış olarak düşünülebilir:

  • 1 bir adım döndür
  • 0 dönüş yönünü değiştir
  • 00 mevcut talimatı yerine getir ve halka aç

Program hakkında akıl yürütmeyi basitleştirmek için birleştirilmiş işlemler:

  • 0000 Etkin olmayan halkanın geçerli opu noop ise o zaman aktif halkanın op op'unu herhangi bir yan etki olmadan yürütün
  • 11..11 döndür n adımları
  • 011..11 yön değiştirme ve n adımı döndürme

0000Geçerli aktif halkanın talimatını yerine getirir, fakat aynı zamanda aktif olmayan halkanın geçerli talimatını da yan etki olarak uygular. Etkin olmayan halkanın mevcut talimatı zararsızsa, aktif olmayan halkada neler olduğunu düşünmeden sadece aktif halkadaki işlemlere odaklanabiliriz. Bu, özellikle bu program için kullanışlıdır, çünkü açık bir ayrımı vardır: ilk önce 32 sayısı sadece matematik halkası kullanılarak yaratılır, sonra ops halkasına geçer ve orada 2 komut uygularız (yazdır ve çık).

Öncelikle, ana kod çalıştırılmaya başladığında ops halkasında geçerli işlemin noop olmasını istedim. 2 avantaja sahiptir: 1) ana Whirl kodu bağımsız olarak çalıştırılabilir ve 2) matematik halkası ile 32 sayısını oluştururken ops halkasını tamamen unutabiliriz. Ancak, kodu olduğundan daha uzun hale getirir, bu nedenle ana kod geçerli işlemin ops.one olduğunu varsaymaktadır (2). Bu, ops.value öğesinin matematik işlemlerinin yan etkisi olarak 1 olarak ayarlandığı ve ardından yazdırmak için kullanıldığı anlamına gelir. Eski kod ops.load komutuyla aynı etkiyi elde etti, ancak ops.one kullanmak niyeti açıkça belirtmiyor - ops.

at this point current ring is ops, dir = clockwise, cur op = ops.one
00    switch to math ring
011   rotate to math.not
0000  math.not (math.val = 1)
01111 rotate to math.store
0000  math.store (mem[0] = 1)
1     rotate to math.add
0000  math.add (math.val = 2)
01    rotate to math.store
0000  math.store (mem[0] = 2)
011   rotate to math.mult
0000  math.mult (math.val = 4)
0000  math.mult (math.val = 8)
0000  math.mult (math.val = 16)
0000  math.mult (math.val = 32)
011   rotate to math.store
00    math.store (mem[0] = 32), switch to ops ring
up to this point the program is the same as before

01111 rotate to ops.intio
0000  ops.intio - print mem[0] as number
0111  rotate to ops.exit
00    ops.exit

Yeni kod daha kısadır, çünkü eski kod, programın ikinci bölümünde, yeni varsayım nedeniyle değil, birkaç yedekli yön anahtarına sahiptir.

old: (1111) 00011000001111000010000010000011000000000000000001100 01111110000011100
new: (11)   00011000001111000010000010000011000000000000000001100   011110000011100

Olay / Whirl çizgisinden önce bir şeyi değiştirirken Whirl'i nasıl doğru tutabilirsiniz:

  • 0Ana Whirl kodundan önce bile s sayısı olduğundan emin olun
  • iki ardışık 0s olmadığından emin olun
  • 1Whirl tekrar çalışana kadar yeteri kadar s ekleyin / kaldırın ; n 1s ekleme , 12-n 1s'nin çıkarılmasına eşdeğerdir ve tam tersi

Ropy'yi eklediğimde bilmeden ilk kuralı çiğnedim. Tek sayıda 0s ana kodu olduğunda, çıkış talimatını kesen yanlış bir ops halkası yönü ile çalışmaya başlar. Yani şimdi 1. hatta 0telafi eden 3. 0hatta var.

Diğerleri

CoffeeScript : console.log a&&39||180( buradan )

INTERCAL : 37. satıra taşındı
Brainfuck , Agony : 10. Satırdaki diğer brainfuck türevlerine geçti

xEec : 1L_a ( h#115# o#) öğesine taşındı

CSL : 80.
satırına taşındı Trefunge : 120.
satırına taşındı Gaot ++ , Stones : ayrı satırlara yerleştirildi


4
Güzel, golf oynamak için çok fazla bayt var.
Patates44

16

16. Pyth (159 bayt)

#v\;2^0\;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^<1b0 <
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#"07|5//00;16 "jd5ki2

Not: Üçüncü satırdan sonra ve son satırdan sonra bir ESCbayt ( 0x1B) var .oj

Bu oldukça eğlenceli bir deneyimdi. Japt ve Pyth her ikisi de golf dilleridir, ancak Japt eki ve Pyth ön ekidir ve Pyth otomatik olarak girdi ister ve eğer argümanlar eksikse başarısız olur.

Haystack'ın cevabından önce, #Japt'da bir kod ve Pyth'te loop-to-error komutunu kullanan neredeyse çalışan bir çözüm buldum. Pyth, çokgenlerde çok faydalı olur, çünkü genel yorum çizelgesi #temelde hata susturucu olarak çalışır.

Eve geldiğimde, hem kullanımda çalışan, hem //Japt'de yorum yapan, Pyth'te iki bölüm olan bu kod parçasını bulmayı başardım . O zaman, sadece böceklerin doğru yol alması bir meseleydi.

Bu optimal olması çok düşük bir ihtimal, ama şimdilik yeterince iyi. Hepsini test etmeye çalıştım, ancak çıktıların uyuşup uyuşmadığını iki kez kontrol eden birisini takdir ediyorum.

Baskılar Python 3 1 , V, 2 , Minkolang içinde 3 , 4> <> , 5 Python 2'de , Kendinden değiştirme brainfuck 6 , Japt 7 , Retina, 8 , Perl, 9 , Befunge (10 -93 ) , Befunge-98 11 , fisyon 12 , Ruby 13 , Turtléd 14 , Haystack içinde 15 ve

16'da Pyth .

açıklama

Pyth'un burada gördüğü:

#v\;2^0\;7||"string
multiline
string"07|5//00;16 "string

Bu, aşağıdaki sözde kodla ilgilidir:

while no errors occur:
    evaluate ";"
    print 2
    print 0 to the power ";"
    print 7
    print "string\nmultiline\nstring" or 0 or 7
    print 5 or 0 divided by 0 divided by (missing)
print 16
do nothing with "string"

İlk döngü, ;hangisinin geçerli bir ifade olmadığını değerlendirmeye çalışır . Sonra Pyth sadece basar 16.


Ne şekilde genişletmek? Cevabım için hala 5 ya da daha fazla bayta ihtiyacım var;)
Alfie Goodacre

@AlfieGoodacre Ayrıntıların geri kalan kısmını postaya ekleyerek. Ben sadece aklı başında kalmak istedim ve böylece kimse yerimi çalmadan önce kodumu yayınladım. : D
PurkkaKoodari
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.