Meta-bowling Golfü


22

Göreviniz, özgün programı (A) çıkaran en benzersiz baytlı başka bir programı (B) çıkaran en kısa programı (A) oluşturmaktır. Temel olarak, bir çift ouroboros programının yarısını golf oynuyorsunuz (diğer adıyla periyodik yinelemeli quine) ve diğer yarısını da bowling oynuyorsunuz. A ve B farklı dillerde olabilir.

Kurallar ve Puanlama

Son puanın <number of unique bytes in B> / <number of bytes in A>. En yüksek puan kazanır. Teorik olarak maksimum puanın 256 olduğu not edilmelidir.

  • A programı en az bir bayt uzunluğunda olmalı
  • B Programı tamamen operasyon dışı sayılardan oluşamaz, yani en az bir karakter çıktıyı bir şekilde etkilemelidir.
  • Standart program kuralları her iki program için de geçerlidir . Özellikle, hata sorgularına her iki durumda da izin verilmemektedir.

Cevap formatı tutarlılığı adına, cevabınıza şöyle bir şey ile başlayın:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>

Bunun açık olması için, ikinci mermi noktasını biraz netleştirmek zorunda kalacağınızı düşünüyorum. Bir karakterin tam olarak no-op olması ne anlama geliyor?
Buğday Sihirbazı

Benzersiz baytlara göre, paylaşılan bayt veya ikisi arasındaki benzerliği mi kastediyorsunuz?
KrystosTheOverlord

@KrystosTheOverlord, basitçe B programında, program A ile ilgisiz olacaktı. Örneğin, aaaaabenzersiz bir bayt ve abcde5 benzersiz bayt var.
Beefster

1
Sadece A programının tek veya uzun dilde olduğu programları bekliyorum
Ignorance uygulaması

4
@EmodimentoFIgnorance Program A, benzersiz bayt değil, bayt sayısı açısından puanlanır . Lenguage / Unary çok kötü bir gol atardı
Jo King

Yanıtlar:


14

Japt ve Japt , Puan: 255/38 = 6,71

Program A :

"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd

B programı 8kB'nin üzerinde, bağlantı koptuğu için her şeyi yapıştıramayacağım kadar uzun. İşte bir örnek:

#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²

NULÇalışmak için bir bayt almak için bir yol bulamadım , bu nedenle B programında yalnızca 255 benzersiz karakter var. Program B, esasen, her seferinde tek bir ilgisiz baytın değiştirildiği ve ilk 254 uygulamasının göz ardı edildiği tek bir programın 255 kopyasından oluşur.

Açıklama için, A'nın bu basitleştirilmiş sürümüyle başlayacağım, böylece ortaya çıkan B'nin tartışılması daha kolay olur.

"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd

Bu program, yük taşıma kapasitesine sahip temel Japt quine'i temel almaktadır . Başlangıçtaki dize, programın geri kalanının bir kopyasını içerir, iQ ²bir teklif ekler ve tüm programın bir dize gösterimini oluşturmak için kopyalar ve ardından ¯23kendini ve ondan sonraki her şeyi keser. Sonuçta ortaya çıkan dize, Program A'yı veren bir programdır :

"iQ ²¯23
3õ@i'#+Xd"iQ ²

Bu dizgiyi şöyle ifade edeceğim U.

A'nın son satırı, Uher seferinde küçük bir değişiklikle birkaç kez çoğalır. Spesifik olarak, her bir dizi için Xaralığında [1...3]bu çıktılar "#c" + Uburada ccharCode olan karakter X. Bu her biri arasında yazdırılamayan bayt var ki bizim Basitleştirilmiş A (notun çıktısı yani Japt varsayılan davranışı, çıkış olanlar hiçbir tırnak dizeleri ve virgülle ayırarak etmektir #ve "iQ:

#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²

Buna Basitleştirilmiş B diyoruz .

Basitleştirilmiş B, #cve arasında değişen basit bir yapıya sahiptir U. Neyse ki bu cevap için, her biri #cve Uvirgülle ayrılmış olarak kabul edilir ve bu durumda bunun davranışı, sonuncusu hariç her şey Uçıktısı üzerinde hiçbir etkisi olmaz. Sadeleştirilmiş B'nin çıktıyı etkileyen tek kısmı şudur:

"iQ ²¯23
3õ@i'#+Xd"iQ ²

UZaten benzer olan çıktıları zaten biliyoruz.

Basitleştirilmiş A ve Program A arasındaki tek fark, aralık [1...3]için kopya oluşturmak yerine gerçek programın aralık için kopya oluşturmasıdır [1...256]. Bu, #cher biri farklı bir karaktere sahip 256 sürümle sonuçlanır , ancak "Ā" son sürümü çok baytlık bir karakterdir, bu nedenle benzersiz baytlar eklemez, ancak sonuncusu dışındaki her şey Uhala yoksayılır.


Çok hoş :) Bu 38 bayt için işe yarar mı?
Shaggy

@Shaggy Her 27byte kaydedildiğinde ayar değiştirilmeye ihtiyaç vardır, fakat bunun dışında çalışır gibi görünüyor.
Kamil Drakari

1
@Shaggy Puanlama, B'deki benzersiz bayt sayısına dayanır ve yalnızca 256 olası bayt vardır. Bildiğim kadarıyla, B'nin yeni sürümü bile Null bayt içermiyor.
Kamil Drakari

Bu arada, boş byte ile çalışmasını sağlamak için birkaç şey denedim, ama hepsi başarısız oldu.
Shaggy

5

Program A, Gol> <> , 256/20 bayt = 12.8

"44XFL|r2ssl3%Q4s]|H

Çevrimiçi deneyin!

Program B, Gol> <>

"44XFL|r2ssl3%Q4s]|H	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

Çevrimiçi deneyin!

Program, kendisini her bir byte'ın ardından çıkarıp yalnızca çıktısını alır.

Açıklama:

"            Wrapping string literal pushes the first line to the stack backwards
 44X         Push 256
    FL|      Push the range from 0 to 255
       r                  Reverse the stack
        2ss               Push a quote
           l3%            If the stack length is divisible by 3
              Q4s]|       Only take the top 20 characters
                   H      And output the stack

1

Program A: 05AB1E , skor: 256/41 256/31 bayt = 8.258 ...

0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ

Çevrimiçi deneyin.

B Programı: 05AB1E

0"D34çý₅Ýç'q†22ǝ"D34çýq 

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÝç'q†22ǝ

Çevrimiçi deneyin.

Açıklama:

Kısa : 05AB1E için bu bir 0"D34çý"D34çý( 14 bayt ) tarafından sağlanan @OliverNi . Cevabım, ekleyerek bu sıranın değiştirilmiş bir versiyonunu kullanıyor ₅Ýç'q†vy27ǝD}J.

0            # Push a 0 to the stack
             #  STACK: [0]
 "D34çý₅Ýç'q†vDy27ǝ}J"
             # Push the string "D34çý₅Ýç'q†vDy27ǝ}J" to the stack
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J"]
  D          # Duplicate the string
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J","D34çý₅Ýç'q†vDy27ǝ}J"]
   34çý      # Join the stack by '"'
             #  STACK: ['0"D34çý₅Ýç'q†vDy27ǝ}J"D34çý₅Ýç'q†vy27ǝD}J']
₅Ý           # Push a list in the range [0,255]
  ç          # Convert each integer to an ASCII character
   'q†      '# Filter the "q" to the front
      22ǝ    # Insert it at index 22 in the string (replacing the second '₅')
             # (and output the result implicitly)

B programı ulaştığı anda sona erecektir q, dolayısıyla B programı şudur:

0"D34çý₅Ýç'q†22ǝ"D34çýq

Bundan sonraki her şey göz ardı edilir ve yığının ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) üst kısmı örtük olarak çıkar.

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.