Benimle bir golf dili oluştur


30

Pek çok PPCG kullanıcısı, hem sohbet hem de Sandbox'ta , özellikle Martin Ender , AdmBorkBork , Emigna ve user202729'da bu zorluğun yaratılmasına yardımcı oldu.

Topluluğumuz, "golf dili" olarak adlandırdığımız, özellikle golf oynamak için özel olarak tasarlanmış bir dizi dil oluşturmayı gerekli buldu. Bu tür diller bir zamanlar zekice olan, şimdi sıra dışı olan GolfScript'ten Jelly ve Husk gibi zarif ve özlü dillere dönüşmüştür . Gördüğümüz gibi, bu diller bir dizi görev için sürekli olarak kısalıyor. Bu nedenle, golf dilleriyle ilgili buradaki bariz uzmanlar olarak, rekabet etmeye cesaret eden diğer dilleri yenmek için birlikte bir dil tasarlamalıyız. Bugle ile tanışın!

Bugle: kısaltması itibaren BuGoL: Bu ILT git lfing L anguage.

Bu zorluk nasıl işe yarayacak

Giriş bölümünde istekli olduğum şeyi alamadıysanız , bu meydan okuma, her birinin yeni bir golf dilinin tercümanına bir şeyler kattığımız ve PPCG'de her cevapla rekabet etme yeteneğini geliştirdiği bir mücadelesidir.

Dilin belirticisi / tercüman temelinde oluşan ilk cevabı göndereceğim ve diğer tüm cevaplar bundan devam edecek. Yeni gönderimler aşağıdakileri sağlayacaktır:

  • Dilin teknik özelliklerinde bir değişiklik
  • Değişikliklerde ortaya konulanı tam olarak karşılayan güncel bir tercüman
  • Dilin güncellenmiş puanı (biraz daha fazla ayrıntı)

Spesifikasyonu üç yoldan biriyle değiştirebilirsiniz:

  • Tek bir komut ekleyebilirsiniz
  • İki yeni komut ekleyebilirsiniz
  • Mevcut bir komutun davranışını düzenleyebilirsiniz.

Yeni tercümanla ilgili olarak, Python ile yazılmış en son sürümü kullanmanız gerekir . Golf oynamak zorunda değil. Önceden eklenmiş her komut en son tercümanın yanı sıra en yeni komutların (eklediğiniz komutların) test edilebilir olması gerekir. Ayrıca tercümanı güncellerken yorumlarda veya yazı dizilerinde olduğu gibi rahatsız edici bir dil kullanmamalısınız.

Eklenen komut (lar) istediğiniz her şeyi yapabilir . Tek şartlar:

  • Saldırgan çıktılar üretmez
  • Başka bir komutla aynı değil
  • Örnek zorluklardan birinin tamamlanmasını engellemez

Bunların yanı sıra, istediğiniz kadar spesifik veya genel olabilir. İstediğiniz herhangi bir karakter de olabilir . Eklemenizin 'yeni bir komut' oluşturup oluşturmadığından emin değilseniz, yorumlarda sormaktan çekinmeyin.

Dilin puanı

Tüm yeni gönderilere dilin puanını eklemek zorunda olduğunuzu fark etmiş olabilirsiniz. Puanı, bu mücadelenin sonsuza dek sürmesini engelleyen şeydir ve şöyle tanımlanır:

Mevcut puan, dilin 20 görevi tamamlaması için aldığı bayt sayısının toplamıdır.

Görevlerin her biri için , standart boşluklar gibi Standart G / Ç kuralları uygulanır .

20 görev:

  1. "Selam Dünya!" - Dize çıktıHello, World!
  2. 1, 2, Fizz, 4, Buzz - Her tamsayı 1 ile 100 (dahil) arasında ayrı bir satıra, 3'ün katları değiştirilir Fizz, 5'in katları değiştirilir Buzzve her ikisinin katlarıFizzBuzz
  3. 2014 kodunu kaynak kodunuzda numarasız üretin - 20140123456789 kodunu, harici kodlara veya rastgele tohumlara erişmeden, kaynak koddaki karakterlerden herhangi birini kullanmadan verin.
  4. Gizlenmiş Merhaba Dünya - Çıkış dize Hello, World!, en azından aşağıdaki setler ikisinde karakterlerden herhangi kullanmadan: hlwd, eor01ve 27(harf büyüklüğüne duyarsız)
  5. Doğum Günün Kutlu Olsun'u en sevdiğiniz programlama diline söyleyin - İstediğiniz bir dilde, aşağıdakileri çıkarın:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. Golfu kodlayacak yabancı değiliz, kuralları biliyorsunuz, ve ben de öyle - "Asla Vazgeçmeyeceksin" sözlerinin tamamını çıkar .

  7. Çıktı işareti - Bir numara önüne alındığında, baskı -1 Negatifse, 0 Eğer öyleyse 0 veya 1 pozitif ise
  8. Collatz Conjecture (OEIS A006577) - Bir tamsayıdan başlayarak, eşitse 2 ile bölün veya 3 ile çarpın ve garipse 1 ekleyin ve işlemi 1 değerine kadar tekrarlayın. Çıktı, yineleme sayısı olmalıdır seni 1'e götürür.
  9. Zorluklar Dizisi # 1: Değişken Diziler - Bir tamsayı dizisi verildiğinde, eşitlenmiş tüm öğelerin eşit olup olmadığını kontrol edin ve tüm küçük dizinlenmiş öğelerin eşit olup olmadığını kontrol edin ve buna göre bir truthy veya sahte değer çıktılayın
  10. Ben önemsiz bir dizi miyim? - Bir tamsayı dizisi verildiğinde, ardışık öğeler arasındaki mutlak farkların hepsinin 1'den küçük veya eşit olup olmadığını kontrol edin ve buna göre bir truthy veya falsy değeri verin
  11. Bu sayı asal mı? - Olumlu bir tamsayı verildiğinde, asal olup olmadığını kontrol etmek için tam bir program yazın ve buna göre bir aşırılık ya da sahtekarlık değeri ortaya koymak
  12. Ben bir palindromum. Sen? - Bir dize verildiğinde, program / işleviniz de palindrom iken, bunun palindrom olup olmadığını kontrol edin ve buna göre iki farklı ve tutarlı değer çıktısı alın.
  13. Standart girişindeki sayıları topla - STDIN'den bir sayıları al ve toplamlarını çıkar.
  14. Faktörü Bulun - Bir tamsayı verildiğinde n, arasındaki 1ve tümcül arasındaki tüm tamsayıların ürününü nçıkarın.
  15. Sonsuz çıkış üretmek için en kısa kod - Herhangi bir giriş olmadan, teorik olarak çıkış işlemini asla durduramayacak sonsuz çıkış üretir.
  16. Pi bir dilim fırında - Bu tam metni çıktısı:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. N'ye bölünmeyen en küçük sayıyı bulun - N pozitif olan bir tamsayı verildiğinde, N'yi bölmeyen en küçük pozitif tamsayı verin.
  2. Bu çift mi yoksa tuhaf mı? - Tamsayı N verildiğinde, paritesini truthy / falsy değerleri olarak verin.
  3. Kodla aynı uzunluktaki çıktı - Çıktının kodla aynı olmadığı en kısa kodu, çıktısının kod ile aynı uzunluğa sahip olduğunu yazın.
  4. Büyük iyiliğin için sana bir golf at! - Dilinize en kısa quine yazın .

Geçerli olabilmek için, yeni bir başvuru , her biri için en az 1 bayt olmak üzere en az 2 sorun için golf başvurusunda bulunmuş olmalıdır . Diğer başvuruların uzunluklarını artırabilirsiniz, ancak toplam puan cevap başına en az 2 oranında azaltılmalıdır . Ayrıca, güncellenen programlara bir bağlantı eklemeyi düşünün. Güncelleştirilmiş çözümler çalışmak olmamalıdır tercüman önceki bir sürümü ile çalıştırdığınızda.

Çerezler nasıl alınır

Deneme zorunluluğu olmayan ve puanınızı etkilemeyen, fakat Bugle'ın yeterince yetenekli olup olmadığını test etmek için ilave zorluklar olan 5 zorluktan oluşan bir listem var. Cevabınıza bunlardan herhangi birine bir çözüm eklemekten çekinmeyin:

  1. Kendi kendine tercüman oluşturma
  2. Yük taşıma kapasitesi quine oluşturma
  3. Bir dizeyi Covfefify
  4. Hiperprogramlama: N + N, N × N, N ^ N hepsi bir arada
  5. "KNOT" ya da "NOT"?

Herkesin mücadelede yarışabilmesi için gerekli olmadığından açıklamaları içermez.

Nasıl kazanılır

Minimum puan ( 16 olduğuna inanıyoruz , ancak golf oynamak için herhangi bir girişimi memnuniyetle karşılansa da) ulaşıldığında, çözümler daha iyi bir puan alamadığı için zincir sona erdi. 16'ya ulaşıldıktan sonra, mücadeleye daha fazla golf oynamak için herkese bir şans vermek için zorluk bir ay sonra hayatta kalır . Bu ay geçtikten sonra zorluk sona erdi.

Zorluk sona erdiğinde, tercümanı GitHub deposuna taşıyacağım ve normal bir dili serbest bırakma alışkanlıklarından geçeceğim. Ayrıca, şu anda, söz konusu dili kullanarak PPCG ile ilgili sorunlara çözüm göndermeye başlayabilirsiniz, ancak lütfen ön sayfayı yanıtlarla doldurmamaya çalışın. Bunun yerine, bir süre boyunca onları yayıldı.

Biçimlendirme

Bilginin cevabınızda daha kolay bulunmasını sağlamak için, lütfen aşağıdaki şekilde formatlayın:

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

[N]Cevap numaranız nerede (birincisi 1, ikincisi 2 vs.)

kurallar

  • Cevapların gönderilmesi arasında 3 saat beklemelisiniz
  • 10 gün boyunca (tam olarak 240 saat) hiçbir cevap gönderilmediği sürece, arka arkaya iki kez mesaj gönderemezsiniz
  • Önceki komutları kaldıramazsınız.
  • Tercümanınız golf oynamak zorunda değildir ve bayt sayısı burada tamamen önemsizdir.
  • Cevabınız sonuncusu ise birisi programlarına bir golf öneriyorsa, gereken golfs içinde düzenleyebilir ve puanınızı güncelleyin.
    • Ayrıca cevabınız zincirin ortasındayken, puanınız daha sonraki cevaplardan daha düşük olmadıkça da yapabilirsiniz.
  • Lütfen, bu dili kullanarak mevcut PPCG zorluklarına cevap vermekten kaçının, en azından zorluk tamamlanana kadar.
  • Tercüman Python 3 ile yazılmıştır ve tüm zincir boyunca bu şekilde devam etmelidir. Dilin değiştirilmesi yasaktır.
  • Yine geçerli olmak için, yeni bir başvuru , her biri için en az 1 bayt olmak üzere en az 2 sorun için golf başvurusunda bulunmalıdır .

Başlayalım!



1
Şunu da soralım: Aşırı oyu açıklamak isteyen var mı? Vermek istediğiniz tüm geri bildirimlere değer veririm.
caird coinheringaahing

2
@Kaldo Emin değiliz. En az iki bayt olmalı, ancak boş program çıktıysa Hello, World!, 19 bayttır. Ancak boş programın davranışı girdilere bağlı olarak değişiyorsa azaltılabilir
Caird coinheringaahing

1
@WeijunZhou "Lütfen, bu dili kullanarak mevcut PPCG zorluklarına cevap vermekten kaçının, en azından zorluk sona erene kadar"
caird coinheringaahing,

1
@LyricLy Sözdizimi yapılarına ( fordöngüler gibi ) izin verilir ve eklenmeleri teşvik edilir
caird coinheringaahing

Yanıtlar:


3

3. Puan: 2938 2583 2532 (-51)

Yeni tercüman burada .

Temelde kesimi golf yapmak ve çıktıyı kolaylaştırmak amacıyla yığını / deque'i çoğaltma ve tamsayı yerine tüm modelin işlenmiş metin biçiminde çıktısını alma yeteneğini ekledim.

Çözümler

1. "Merhaba, Dünya!" - 17 bayt (-3)

#"Hello, World!"a

5. En sevdiğiniz programlama diline Mutlu Doğum Günü Şarkısı - 95 bayt (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. Golfü kodlayacak yabancı değiliz, kuralları biliyorsunuz, ve ben de - 1884 bayt (-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Bir dilim Pi - 149 bayt (-3) pişirin

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. Büyük iyiliğin için sana iyi bir golf at! - 23 bayt (-39)

$"R34RdR36Ra"R34RdR36Ra

Eklenen Dil Özellikleri

  • a

    • Tümü: metin olarak modelin tamamını yazdır, örneğin #"Hello, World!"abaskılarHello, World!
  • d

    • Yığın / Deque: Yığını kendi üzerine getirin.

8

2. Puan: 2938 2583

Değiştirilmiş tercüman TIO'da burada .

Dize değişmezi, özellikle zorluklarıyla mücadele etmek için dile en açık şekilde .

Çözümler

1. "Merhaba, Dünya!" - 20 bayt (-28)

#"Hello, World!"[o>]

Herhangi bir mücadelesi #"<string>"[o>], dizgeye ulaşıldıktan sonra 0 olana kadar verilen dizgeyi çıkaran yapı kullanılarak tamamlanabilir .

2. 1, 2, Fizz, 4, Buzz - 419 64 bayt (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

Bu konuda harika golf oynamak için @ user202729'a teşekkür ederiz.

3. 2014 kodunu kaynak kodunuzda herhangi bir numara olmadan oluşturun - 9 bayt (-4)

#"ĒĎ"[O>]

Bugle kod noktalarında iki karakter 20 ve 14'ü kullanır.

4. Karışık Merhaba Dünya - 19 bayt (-153)

#"Ifmmp!Xpsme"[-o>]

# 1 kurallarına uygun (hayır HLWDhlwd ) ve # 3 (no 27) .

5. Sevdiğiniz programlama diline Mutlu Doğum Günü Şarkısı - 98 bayt (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. Golf'ü kodlayacak yabancı değiliz, kuralları biliyorsunuz ve bende - 1887 byte (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Bir dilim Pi - 149 bayt (-290) pişirin

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. Büyük iyiliğin için sana iyi bir golf at! - 62 bayt (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

Eklenen Dil Özelliği

  • "...": Dize değişmez.
    • Yığın / Deque: Her char'in Bugle kod noktalarını, yığın / deque'in üstüne / önüne itin.
    • Tape / Grid: Her bir char'ın Bugle kod noktalarını, mevcut hücreden başlayarak sağ / bant üzerine bandın üzerine yazın. İmleci hareket ettirmez.
    • \n tıpkı diğer karakterler gibi ele alınır.
    • Şimdilik kaçan karakter yok, bu yüzden "bu komutu kullanarak belleğe (34) yazamazsınız . Burada listelenen tüm zorluklarının için, en azından şimdilik sorun değil ".

Daha fazla golf oynamak, özellikle de "Asla pes etmeyeceğim" ve sırt için. Spesifik olarak, yukarıdaki quine şimdiye kadar yaptığım ilk önemsiz quine, bu yüzden birinin daha kısa bir tane bulabileceğine inanıyorum.


Belirli zorluklar için yerleşikler eklemek yerine, herkesin umduğu gibi eklemeler var. +1
caird coinheringaahing

@ user202729 Muhtemelen hatayı tanıtan benim; ve FizzBuzz çözümünü düzelttiğin için teşekkürler.
Bubbler

3

1. Puan: 9638

Temel tercüman burada bulunabilir ve burada bulabilirsiniz . Oldukça uzun, bu yüzden yazının çoğunu almak yerine GitHub’a dahil ettim.

Çözümler

Bu çözümlerin tümü, -ukomut satırı bayrağıyla çalışan Unicode programlarıdır, ancak puanlar Bugle kod sayfasıyla kodlanmış gibi sayılır.

1. "Merhaba, Dünya!" - 48 bayt

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Basitçe itin ve sonra dizedeki her karakterin karakter kodunu çıkartın.

2. 1, 2, Fizz, 4, Buzz - 1396 bayt

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Merhaba, Dünya ile aynı teknik! örnek

3. 2014 kodunu kaynak kodunuzda herhangi bir numara olmadan oluşturun - 13 bayt

#++O--O+O+++O

# Kaseti kullanır, + hücreyi Oarttırır, tamsayı olarak çıktılar verir ve- arttırır azalmalar

4. Karışık Merhaba Dünya - 172 bayt

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Brainfuck'a olan benzerliğini kullanır. # 1 ve # 3 kurallarına uygundur

5. En sevdiğiniz programlama diline Happy Birthday söyle - 328 byte

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Bütün zorlukları şu anda bu tür bir yapıya sahip.

6. Golfü kodlayacak yabancı değiliz, kuralları biliyorsunuz, ve ben de - 6893 byte

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. İşareti çıkarın - 18 bayt

$?:Zs0=0s-s:1s-++O

Toplamı almadan önce girişin sıfırdan büyük, sıfırdan küçük ( -1yerine verim değiştirildi 1) ve sıfıra eşit olup olmadığını kontrol eder.

8. Kollatz Konjeksiyonu (OEIS A006577) - 36 bayt

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

Bu, yığında döngü gerçekleştirir, ancak her yinelemede sayımı artırmak için kasete geçer.

9. Zorluklar Dizisi # 1: Alternatif Diziler - 35 bayt

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

Bu, Mitch Schwartz'ın hafif bir modifikasyonudur. mevcut mücadeleye verdiği cevabın , hadi yükseltin!

10. Önemsiz bir dizi miyim? - 46 bayt

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

Tüm kredi gider Emigna için yapım bu

11. Bu sayı asal mı? - 31 bayt

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

Wilson Teoremini kullanır ve hesaplar (n-1)!² % n

12. Ben bir palindromum. Sen? - 13 bayt

$?:R=:O:=R:?$

Programın ilk yarısı O, yığını , ya da [x, x]olduğu gibi kurar . en üstteki değeri çıkar ve çıkar. Programın geri kalanı sadece hata oluşmamasını sağlar. Neyse ki, ne zamanxTrueFalseO? dosyanın sonuna , sadece iter'' (boş dize).

13. -19 bayttaki standart numaraların toplamı

$?:[?:];L0s[+L1s-]O

Bu iki bölüme ayrılabilir: ?:[?:];veL0s[+L1s-] . İlk kısım, tüm girdileri yığına toplar. Uzunluk, 1'den büyük iken ikinci kısım, ilk iki elementin toplamını iter.

14. Faktör Bul - 25 bayt

$?:[:1s-:];L1s-Z[×L1s-]O

Bu toplam programına benzer bir yapıya sahiptir, ancak ltiple girişlerini itmek yerine [:1s-:];, aralığı istifden iter 1 .. nve[×L1s-] ürün alır.

15. Sonsuz çıkış üretmek için en kısa kod - 5 bayt

#+[O]

1Sürekli olarak işaretçinin altındaki bir süre döngü kullanın . Çıkışlar 1sonsuza dek.

16. Bir dilim Pi pişirin - 439 byte

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. N'yi bölmeyen en küçük sayıyı bulun

$?:1:[:rs%0=s1+srr:Rs]1s-O

Bu, modulo sonucu eşit olmadığında sonlanan deneme bölünmesini kullanır. 0 .

18. Bu eşit mi yoksa tek mi? - 5 bayt

$2?%O

2 ile basit modulo

19. Kod ile aynı uzunlukta çıktı - 16 bayt

$16:[32+:o33s-:]

Yazdırılabilir ilk 16 ASCII karakterini tersten yazdırır: 0/.-,+*)('&%$#"!

20. Büyük iyiliğin için sana iyi bir golf at!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

Kredi gider user202729 için bu yapım


Dil özellikleri

çağrı

bugle.pyşu anda bir dizi bayrak alıyor, ardından çalıştırılacak dosya adı / kodu. Henüz 4 komut satırı bayrağı var:

  • -f/ --filebu kodun bir dosyadan okunacağını belirtir
  • -c/ --cmd/ --cmdline, kodun komut satırı üzerinden sağlandığını belirtir.

    -cve -faynı aramada kullanılamaz

  • -u/ --unicodetercümana Unicode kodlamasıyla kodu okumasını söyler. Varsayılan değer, Bugle’ın kodlamasını aşağıda kullanmaktır.

  • -l/ --length, bayt cinsinden dosyanın uzunluğunu çalıştırmadan sonra STDERR'ye çıkarır

Yukarıdaki başvuruları test etmek için aşağıdaki çağrı kullanıldı

$ python bugle.py -f -u [file]

Kod sayfası

Bugle, kod sayfasında 512 karakter kullanır. Karakter komutu için kullanılacak değil onun göstermek için kullanıldığı gibi, bu kod sayfasının ikinci yarısında içine endekse sonraki onaltılık değer. Kullanılan karakterler:0xFF

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

Veya tablo biçiminde görün . Bunu not edin \tve \nsırasıyla sekme ve yeni satırı temsil edin. Ayrıca, 16. satırın yazdırılamayan bir karakterle sona erdiğini unutmayın: ve tüm tarayıcılarda görüntülenmeyebilir.

Bellek

Tercümanın şu anda içinde yerleşik 5 bellek modeli bulunmaktadır. Her bellek modeli, tercümana bu modeli kullanmaya başlamasını söyleyecek bir karakter gerektirir:

  • Stack ( $): itilen, atılan vb. Değerleri destekleyen standart bir yığın.
  • Sonsuz bant ( #): Başlangıçta yalnızca beyin bandı olan bir bant0 s.
  • Sonsuz ızgara ( G): Her iki yönde sonsuz, sadece 0s içeren bir 2d ızgara
  • Deque ( D): Modül tarafından uygulanan bir dequecollections .
  • Register ( S): Bir değeri saklamak için kullanılabilecek tek bir değer.

Izgara ayrıca, işaretçisine kaydedilmiş veya hücrelere yazılabilen tek bir değere sahiptir.

Ayrıca, bant ve ızgara boyutları ve sarma davranışı farklı bir invoke komutu kullanılarak değiştirilebilir. Bu farklı komutlar, mevcut bellek modelinden özelleştirme parametreleri olarak belirli sayıda değer alır:

  • Tape ( À): İki değer alır - size ( int) ve wrapping ( bool)
  • Tape ( Á): Bir değer alır - boyut (int ). Teybin sonunda sarar
  • Tape ( Â): Bir değer alır - boyut ( int). Sonunda sarmaz
  • Grid ( Ǵ): 4 değer alır - x size ( int), y size ( int), x wrap ( bool) ve y wrap ( bool)

Kullanılan bellek tipi, bir program sırasında ₀₁₂₃₄₅₆₇₈₉, 0-indekslenmiş nkullanılan bellek tipine ( birincisi, ikincisi vs.) erişen kullanımıyla değişebilir , ancak şu anda, değerler farklı bellek tipleri arasında değiştirilemez.

Dallanma

Şimdiye kadar Bugle, her ikisi de bir ]karakterle sonlandırılan iki dallanma komutuna sahip :

  • Süre ([ ): döngüler sırasında brainfuck tarzı. Bunlar, kullanılıyorsa yığın / deque öğesinden bir değer çıkarır veya işaretçinin altındaki hücreye bant / kılavuzda erişir.

    Örnek: #?[-O]Girdiden aşağıya doğru sayım yapar0

  • Eğer / else ( {ve }). Döngü sırasında tek yürütme. Girilen değer false ise, if cümlesi atlanır, diğer maddeye ayrılarak ayrılır }. Hafıza erişimi ile ilgili döngülerde olduğu gibi davranırlar.

    Örnek: {0}1]mantıksal bir NOT kapısıdır

Yerleşik işlevler

Basamak sayısı tamsayı olarak yorumlanır ve sadece geçerli bellek modeline olduğu gibi basılır / yazılır.

Açıkçası, Bugle'ı, diğerlerinin zincir ilerledikçe daha fazla eklemesine izin vermek için, olabildiğince az sayıda temel yerleşik işlevle donattım. Temel komutlar aşağıdaki gibidir:

  • +

    • Stack / Deque: İlk iki değeri ekleyin
    • Bant / Izgara: Geçerli hücreyi artırma
  • -

    • Stack / Deque: En üstteki iki değeri çıkarın
    • Bant / Izgara: Geçerli hücreyi azaltır
  • %

    • Stack / Deque: İlk iki değeri Modulo
  • :

    • Stack / Deque: En üstteki değeri kopyala
  • ;

    • Yığın / Deque: En yüksek değeri al
    • Tape / Grid: Geçerli hücreye sıfır
  • <

    • Bant / Izgara: Bir hücre sola git
  • =

    • Yığın: En üstteki iki değer eşit mi?
    • Izgara: Bir hücre aşağı taşı
  • >

    • Bant / Izgara: Bir hücreyi sağa hareket ettir
  • ?

    • Yığın / Deque: Bir giriş çizgisini değerlendirin
    • Tape / Grid: Giriş karakterini alın
  • L

    • Yığın / Deque: Yığın / deque uzunluğunu itin
  • O

    • Tümü: Geçerli değeri çıkar
  • R

    • Yığın: Mümkünse üst öğeyi ters çevirin, aksi halde yığını ters çevirin
  • Z

    • Yığın: Üst öğe olumlu mu?
  • ^

    • Izgara: Bir hücre yukarı taşı
  • h

    • Hepsi: Tüm bellek modelini yazdır
  • o

    • Tümü: Geçerli değeri karakter olarak yazdır
  • r

    • Yığın: En üstteki 3 değeri döndürün
    • Deque: En yüksek değerin nolduğu deque zamanlarını döndürn
  • s

    • Stack / Deque: İlk iki değeri değiştir
    • Yığın: En yüksek değeri uyar
  • ×

    • Yığın: En üstteki iki değeri çarpın
    • Izgara: İşaretçi değerini geçerli hücreye yaz
  • ÷

    • Yığın: En üstteki iki değeri bölün
    • Izgara: Geçerli hücreyi işaretçi değerine yaz
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.