Golf z meta-bowlingiem

22

Twoim zadaniem jest utworzenie najkrótszego programu (A), który generuje inny program (B) z najbardziej unikalnymi bajtami, który z kolei generuje oryginalny program (A). Zasadniczo grasz w golfa w połowie pary programów ouroboros ( zwanych też okresową iteracją quine), a drugą w kręgle. A i B mogą być w różnych językach.

Zasady i punktacja

Twój końcowy wynik to <number of unique bytes in B> / <number of bytes in A>. Najwyższy wynik wygrywa. Należy zauważyć, że teoretyczny maksymalny wynik to 256.

  • Program A musi mieć co najmniej jeden bajt
  • Program B nie może składać się całkowicie z braku operacji, tzn. Co najmniej jeden znak musi w jakiś sposób wpływać na wynik.
  • W przypadku obu programów obowiązują standardowe zasady quines . W szczególności, quinesy błędów nie są dozwolone w żadnym przypadku.

Ze względu na spójność formatu odpowiedzi rozpocznij odpowiedź od czegoś takiego:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
Wołowina
źródło
Aby to było jasne, myślę, że będziesz musiał nieco wyjaśnić drugi punkt. Co to dokładnie oznacza, że ​​postać jest „no-op”?
Wheat Wizard
Czy przez unikalne bajty rozumiesz bajty wspólne, czy podobieństwo między nimi?
KrystosTheOverlord
@KrystosTheOverlord, byłoby po prostu w programie B, bez związku z programem A. Na przykład, aaaaama jeden unikalny bajt i abcdema 5 unikalnych bajtów.
Beefster
1
Czekam tylko na programy, w których program A jest jednoosobowy lub lenguage
of Ignorance
4
@EmbodimentofIgnorance Program A jest oceniany pod względem liczby bajtów, a nie unikatowych bajtów. Lenguage / Unary strzeliłby okropnie
Jo King

Odpowiedzi:

14

Japt i Japt , wynik: 255/38 = 6,71

Program A :

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

Program B ma ponad 8kB długości, tak długo, że link się łamie, więc nie wkleję całego. Oto próbka:

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

Nie mogłem znaleźć sposobu na uruchomienie NULbajtu, dlatego program B ma tylko 255 unikalnych znaków. Program B zasadniczo składa się z 255 kopii jednego programu, w którym za każdym razem zmienia się jeden nieistotny bajt, a pierwsze 254 wykonania są ignorowane.

Dla wyjaśnienia zacznę od tej uproszczonej wersji A, aby łatwiej było omówić wynikowy B.

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

Program ten oparty jest na podstawowej, przystosowanej do obciążenia Jine quine . Ciąg na początku zawiera duplikat reszty programu, iQ ²wstawia cytat i duplikuje się, aby utworzyć ciąg reprezentujący cały program, a następnie ¯23przycina siebie i wszystko po nim. Powstały ciąg jest programem, który wysyła program A :

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

Odniosę się do tego ciągu jako U.

Ostatnia linia A powiela Ukilka razy za każdym razem z niewielką zmianą. W szczególności dla każdej liczby Xw zakresie [1...3]wypisuje, "#c" + Ugdzie cjest znak z kodem znaków X. Domyślnym działaniem Japt jest wypisywanie tych ciągów bez znaków cudzysłowu i oddzielanie ich przecinkami, więc jest to wynik naszego Uproszczonego A (zwróć uwagę, że między każdym #a "iQ:

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

Zadzwonimy ten uproszczony B .

Uproszczony B ma prostą strukturę, na przemian z #ci U. Na szczęście do tej odpowiedzi, każdy #ci Ujest traktowany jako oddzielone przecinkiem, aw tej sytuacji zachowanie to jest wszystko z wyjątkiem bardzo ostatnio Unie ma wpływu na wyjściu. Jedyną częścią Uproszczonego B, która wpływa na wynik, jest:

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

Co jest identyczne z Utym, że znamy już wyniki Uproszczone A.

Jedyna różnica między uproszczonym A i programem A polega na tym, że zamiast generować kopie dla zakresu, [1...3]prawdziwy program generuje kopie dla zakresu [1...256]. To powoduje, że 256 wersji #ckażdej z nich ma inny znak, chociaż ostatnia wersja „Ā” jest znakiem wielobajtowym, więc nie dodaje żadnych unikalnych bajtów, ale wszystko oprócz ostatniego Ujest nadal ignorowane.

Kamil Drakari
źródło
Bardzo fajnie :) Czy działałoby to na 38 bajtów?
Kudłaty
@Shaggy Trzeba go ulepszyć 27za każdym razem, gdy zapisywane są bajty, ale poza tym wydaje się, że działa.
Kamil Drakari
1
@Shaggy Wynik jest oparty na liczbie unikalnych bajtów w B, a istnieje tylko 256 możliwych bajtów. O ile mi wiadomo, nawet nowa wersja B nie zawiera bajtu Null.
Kamil Drakari
Nawiasem mówiąc, wypróbowałem kilka rzeczy, aby działał z bajtem zerowym, ale wszystkie zawiodły.
Kudłaty
5

Program A, Gol> <> , 256/20 bajtów = 12,8

"44XFL|r2ssl3%Q4s]|H

Wypróbuj online!

Program B, Gol> <>

"44XFL|r2ssl3%Q4s]|H	

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

Wypróbuj online!

Program naprzemiennie wyświetla dane wyjściowe, po których następuje każdy bajt, a sam wyświetla dane wyjściowe.

Wyjaśnienie:

"            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
Jo King
źródło
1

Program A: 05AB1E , wynik: 256/41 256/31 bajtów = 8,258 ...

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

Wypróbuj online.

Program B: 05AB1E

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

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

Wypróbuj online.

Wyjaśnienie:

Najkrótsza dla 05AB1E to: 0"D34çý"D34çý( 14 bajtów ) dostarczona przez @OliverNi . Moja odpowiedź wykorzystuje zmodyfikowaną wersję tego quinu, dodając ₅Ýç'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)

Program B zakończy się, gdy tylko osiągnie q, więc rzeczywisty program B to:

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

Wszystko później jest ignorowane, a wierzchołek stosu ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) jest generowany niejawnie.

Kevin Cruijssen
źródło