Радіація пом'якшила квіну


38

Це просто: Складіть належну королеву, де, якщо ви видалите будь-якого символу, це все-таки королева.

Різниця між цією та радіаційно загартованою квінкою полягає в тому, що якби ваша програма була AB, в опроміненій з радіацією quine виводила Aб AB, а тут Aби виводила A.

Код гольфу, застосовуються всі стандартні правила, стандартні лазівки, не обман.


Чи дійсна порожня програма?
Loovjo


3
@feersum У виклику зазначено "Зробити quine where ...", тому ABслід вивести AB.
Mego

1
@Mego Я знаю, що це говорить, але технічні характеристики не завжди є такими точними, і це не зазначено в прикладах.
feersum

4
@feersum "Зробити quine" означає зробити quine. "Різниця між цим і загартованим радіацією квіном ..." означає, що різниця полягає лише в тому, що програма з будь-яким видаленим байтом призводить до отримання квине, а не до програми, яка друкує вихідне джерело програми. Тут немає двозначності.
Mego

Відповіді:


22

> <> (Риба), 145 107 байт

У цій відповіді для усунення проблеми використовується інструкція зі стрибків <>>.

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

Ця квіта фактично містить два різних генераторів квіни. Він починається з певної логіки стрибків і за замовчуванням використовує ліву квітку. Якщо символ вилучений із логіки стрибків або з лівої лайки, програма переходить до правої лайки.

Ви можете спробувати тут

Пояснення

Код можна розчленувати на кілька частин:

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 

Пояснення різних частин:

  • A: Стрибки праворуч від C. Якщо будь-який символ видалений з A, це переходить ліворуч від D або праворуч від E, запускаючи другу квітку. Якщо будь-який символ видалено з B або C, код зміщується на 1 символ вліво, внаслідок чого цей стрибок ліворуч від D.
  • C: Цей код підскакує ліворуч від B.
  • Б: Квінка №1
  • Д: Квінка №2
  • E: Стрибки ліворуч від D

Пояснення квітки (із прикладом №1):

Як тільки вказівник досягне будь-якої лайки, ви впевнені, що ця квітка повністю недоторкана.

>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.

Пояснення будь ласка.
CalculatorFeline

Повторюючись вище.
CalculatorFeline

1
Це досить ясно?
Thijs ter Haar

36

Lenguage , 4,54 × 10 761 байт

У ній є така кількість нульових символів:

453997365974271498471447945720930600149036031871190716908688344432973027776681259141680552038829875159204621651993092104775733418288411812715164994750890484868305218411129600012389568016974351721147925344946382782884546247102886167837964612372737300786173159265347137401863281368021545169383664534228503236761742285358985343373496184959796553930661837467682191561275123057706776367104142995491262443697167483190110516522677811931124842961701222425076750211774387637740969301686178545299089832300154448308384461700726890067468872402133010536518468336342175124002115991866466700174974019423711837589532744970385003356612639263433822126850314801275940879069069974437167102618471264140597777702065896715558989678487253830854848740247786166790545462769498303055791292

Бачачи, як критерій у цьому виклику суперечить визначенню "належна квітка", я думаю, що унарний варіант виграє.

Розширений код Brainfuck:

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

Якщо один символ видалено з програми Lenguage, останній символ стає а <, що призводить до того, що програма надрукує рівно один символ менше.


1
Як вам вдалося знайти ту фіксовану точку? (Або, як працює код Brainfuck?)
Мартін Ендер

1
@ MartinBüttner Перший великий цикл копіює і кодує дані у вигляді "> +++ ..." (і повертає їх назад). Інший великий цикл друкує дані як ціле число в одинаковому. Це не так складно, але довго, тільки тому, що це Brainfuck.
jimmy23013

О так, значить, це просто як звичайна Brainfuck quine, але з іншою функцією декодування?
Мартін Ендер

@ MartinBüttner Дещо. Але половина програми - це «функція декодування».
jimmy23013

Здається, ви могли б використовувати подібний прийом для побудови відповідей довільної оцінки для codegolf.stackexchange.com/q/57257/8478 (хоча як саме це буде залежати від відповіді на мій останній коментар).
Мартін Ендер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.