Quine zmiękczona promieniowaniem


38

To proste: stwórz odpowiednią quinę, a jeśli usuniesz jakąkolwiek postać, nadal jest to quine.

Różnica między tym i promieniowania utwardzony Quine jest to, że jeśli program jest ABw utwardzane promieniowaniem Quine Abyłoby wyjście AB, ale tutaj, Aby wyjście A.

Kod golfowy, obowiązują wszystkie standardowe zasady, obowiązują standardowe luki, bez oszustwa.


Czy pusty program jest prawidłowy?
Loovjo,

4
@Loovjo No.
Martin Ender

3
@feersum Wyzwanie mówi „Zrób quine gdzie ...”, więc ABpowinno wypisać AB.
Mego

1
@Mego Wiem, że to mówi, ale specyfikacje nie zawsze są tak precyzyjne i nie podano tego w przykładach.
feersum

4
@feersum „Zrób quine” oznacza zrób quine. „Różnica między tym a utwardzonym promieniowaniem quine…” oznacza, że jedyną różnicą jest to, że program z usuniętym jednym bajtem daje wynik quine, a nie program drukujący źródło oryginalnego programu. Tu nie ma dwuznaczności.
Mego

Odpowiedzi:


22

> <> (Ryba), 145 107 bajtów

Ta odpowiedź używa instrukcji skokowej> <>, aby rozwiązać problem.

!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58 

Ta quine zawiera dwa różne generatory quine. Zaczyna się od pewnej logiki skoków i domyślnie używa lewego quine. Jeśli postać zostanie usunięta z logiki skoków lub z lewej quine, program skacze do prawej quine.

Możesz spróbować tutaj

Wyjaśnienie

Kod można podzielić na kilka części:

A: !<0078*+00~..>0[!. 
B:              >0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.
C:                                                    .0f<
D:                                                        >0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.
E:                                                                                                 .0+*a58 

Objaśnienie różnych części:

  • O: Przeskakuje na prawo od C.Jeśli jakikolwiek znak zostanie usunięty z A, przeskakuje on na lewo od D lub na prawo od E, uruchamiając drugą piątkę. Jeśli jakikolwiek znak zostanie usunięty z B lub C, kod zostanie przesunięty o 1 znak w lewo, co spowoduje przeskoczenie go na lewo od D.
  • C: Ten kod przeskakuje na lewo od B.
  • B: Quine # 1
  • D: Quine # 2
  • E: Przeskakuje na lewo od D.

Wyjaśnienie quine (na przykładzie # 1):

Gdy wskaźnik instrukcji osiągnie którykolwiek z quines, masz pewność, że ten quine jest całkowicie nienaruszony.

>0[!.                                       //Fix the instruction pointer's direction and empty the stack (The '!.' is a leftover from codepart A)
     "r43a*+                                //Start reading all of the code and add the '"' character to the stack
            8a+&                            //Because the quine started reading at the 19th character instead of the first, the stack has to move 18 characters. 
                                            //This part saves the number 18 to the register.
                {ee+00&1-:&(?.              //Move the stack one to the left, decrease the stack by 1. If the stack is not empty yet, jump back to the start of this section.
                              ~~              //Clean the temporary variables from the stack. It should now contain the whole quine.
                                ol?!;4b*0.  //Print the first character from the stack. As long as the stack isn't empty, jump back to the start of this section.

Proszę o wyjaśnienie.
CalculatorFeline

Powtarzając powyżej.
CalculatorFeline

1
Czy to jest wystarczająco jasne?
Thijs ter Haar

36

Lenguage , 4,54 × 10 761 bajtów

Ma następującą liczbę znaków null:

453997365974271498471447945720930600149036031871190716908688344432973027776681259141680552038829875159204621651993092104775733418288411812715164994750890484868305218411129600012389568016974351721147925344946382782884546247102886167837964612372737300786173159265347137401863281368021545169383664534228503236761742285358985343373496184959796553930661837467682191561275123057706776367104142995491262443697167483190110516522677811931124842961701222425076750211774387637740969301686178545299089832300154448308384461700726890067468872402133010536518468336342175124002115991866466700174974019423711837589532744970385003356612639263433822126850314801275940879069069974437167102618471264140597777702065896715558989678487253830854848740247786166790545462769498303055791292

Widząc, jak kryterium w tym wyzwaniu jest sprzeczne z definicją „właściwego quine”, poważnie, myślę, że zwycięży wariant Unary.

Rozszerzony kod Brainfuck:

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

Jeśli jeden znak zostanie usunięty z programu Lenguage, ostatni znak staje się a <, co powoduje, że program wypisuje dokładnie o jeden znak mniej.


1
Jak udało ci się znaleźć ten stały punkt? (Lub alternatywnie, jak działa kod Brainfuck?)
Martin Ender

1
@ MartinBüttner Pierwsza duża pętla kopiuje i koduje dane w postaci „> +++ ...” (i odwraca je). Druga duża pętla wypisuje dane jako liczbę całkowitą jednostkową. To nie jest takie skomplikowane, ale jest długie, ponieważ to Brainfuck.
jimmy23013

No tak, więc to jest jak zwykły quin Brainfuck, ale z inną funkcją dekodowania?
Martin Ender

@ MartinBüttner Trochę. Ale połowa programu to „funkcja dekodowania”.
jimmy23013

Wygląda na to, że możesz użyć podobnej techniki do skonstruowania odpowiedzi o dowolnym wyniku dla codegolf.stackexchange.com/q/57257/8478 (chociaż jak dokładnie to zadziała , zależy od odpowiedzi na mój ostatni komentarz).
Martin Ender
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.