Втретє чарівність


49

Ваше завдання, якщо ви бажаєте прийняти це, - написати програму, яка виводить додатне ціле число (вище 0). Якщо вихідний код дублюється, вихід повинен залишатися однаковим. Складна частина полягає в тому, що якщо вихідний код буде введено три рази три рази ), вихід буде помножений на 3.

Правила

  • Ви повинні створити повну програму . Тобто, ваш вихід повинен бути надрукований в STDOUT.

  • Початкове джерело повинно бути принаймні 1 байт.

  • Обидва цілих числа повинні бути в базі 10 (виведення їх у будь-яку іншу базу або з науковими позначеннями заборонено).

  • Ваша програма не повинна приймати дані (або мати невикористаний, порожній вхід).

  • Виведення цілих чисел з проміжними / провідними пробілами дозволено.

  • Провідні нулі дозволяються лише у тому випадку, якщо число цифр відповідає, наприклад: 001 - 001 - 003 або 004 - 004 - 012

  • Ви не можете припускати новий рядок між копіями джерела.

  • Це , тому найкоротший (оригінальний) код на кожній мові виграє!

  • Застосовуються лазівки за замовчуванням .

Приклад

Скажімо, ваш вихідний код є Abcі відповідний його вихід 4. Якщо я напишу AbcAbcзамість цього і запускаю його, висновок все одно повинен бути 4. Однак якщо я пишу AbcAbcAbcта запускаю його, вихід повинен бути 12.


Безсоромно вкрадено Отримано від виклику містера Xcoder


Чи дозволяється нашому коду читати власний вихідний код?
AdmBorkBork

@AdmBorkBork Я вважаю, що це так, оскільки це не позначається як quine .
Ерік Аутгольфер

@AdmBorkBork Так.
обмінним

9
Я не думаю, що обмеження на 1 байт не потрібно, оскільки неможливо було б визначити різницю між нічим і нічим повтореним 3 рази.
12Me21

1
@ r12 "Abc" є прикладом для будь-якої програми мови програмування, скажімо, якщо ваш код ( int i=1;print i;), то дублюваний код ( int i=1;print i;int i=1;print i;) повинен виводити те саме число, що і вихідний код, а коли код у три рази в ( int i=1;print i;int i=1;print i;int i=1;print i;) він повинен показувати число, помножене на 3
обмінний

Відповіді:


21

Wumpus , 6 байт

{~)
@O

Спробуйте в Інтернеті!
Спробуйте вдвічі!
Спробуйте втричі!

Друкує 1і 3.

Пояснення

Я знайшов тонну 6-байтних рішень шляхом грубої пошуку, але жодного на 5 байт. Це не обов'язково означає, що їх немає в 5 байт, але вони, ймовірно, використовують дивні символи чи щось таке.

Я вирішив вибрати це рішення, оскільки воно не друкує жодних провідних нулів (більшість з них), і він має цікавий потік управління. Почнемо з єдиної програми:

введіть тут опис зображення

Отже, виконаний код:

{~)O@

{   Turn the IP left by 60°.
~   Swap two implicit zeros on the stack, does nothing.
)   Increment the top zero to 1.
O   Print it.
@   Terminate the program.

Досить просто. Тепер подвоєна програма. Оскільки перший рядок додається до другого рядка, сітка поширюється на ширину 5 (і висоту 3), що суттєво змінює контрольний потік:

введіть тут опис зображення

IP обходить цей цикл рівно один раз, тому виконаний код:

{~){~)){~O@

{~) As before, we end up with a 1 on top of the stack.
{   Turn left by 60° again.
~   Swap the 1 with the 0 underneath.
))  Increment the zero to 2.
{   Turn left by 60° again.
~   Swap the 2 with the 1 underneath.
O   Print the 1.
@   Terminate the program.

Нарешті, потрійна програма досить схожа на подвоєну, але ми отримуємо ще пару важливих команд у цьому третьому рядку:

введіть тут опис зображення

Отже, виконаний код:

{~){~)){~~)O@

{~){~)){~
    As before. We end up with a 1 on top of the stack and a 2 underneath.
~   Swap the 1 with the 2 underneath.
)   Increment the 2 to a 3.
O   Print the 3.
@   Terminate the program.

1
я думаю, що я закоханий у цю мову.
конкістадор

11

Лушпиння , 5 байт

KΣK+1

Спробуйте в Інтернеті!

Повторюється двічі!

Повторно тричі!

Пояснення

Побудувати програму, що повторюється, є досить складно. Оскільки система типів забороняє функцію, яку можна застосувати до себе, я повинен якось дозволити першій частині оцінювати функцію, а решту оцінювати за значенням, а решту оцінювати за значенням, а типи існуючих вбудованих модулів призначені для запобігання цьому вид неоднозначності. Ознаки програми є

  • K, яка будує постійну функцію. K a bеквівалентно a.
  • Σ, яке приймає ціле число n і повертає n- е трикутне число.
  • +, який додає два числа.
  • 1, що є буквальним 1.

Оригінальна програма трактується так:

   K Σ (K+) 1
== Σ 1
== 1

Це (K+)безглузда функція, яку з'їдає перша K.

Двічі повторювана програма трактується так:

   K Σ (K+1KΣK+) 1
== Σ 1
== 1

Функція в дужках знову з'їдається першою K.

Тричі повторювана програма трактується так:

   K (Σ (K (+1) (KΣK+) 1)) (KΣK+1)
== Σ (K (+1) (KΣK+) 1)
== Σ ((+1) 1)
== Σ (+1 1)
== Σ 2
== 3

На це потрібно дуже багато часу, щоб пробігти ...
Вейджун Чжоу

@WeijunZhou Якщо Kу програмі багато випадків , умовивід вводиться дуже повільно, оскільки кожен з них може потенційно "з'їсти" будь-яку кількість лексем, і перекладач спробує всі комбінації ...
Zgarb

Я бачу, дякую за ваше пояснення.
Вейджун Чжоу

2
@Zgarb + 1 для KEK +1
workoverflow

10

Желе , 7 5 байт

»‘µ*Ḃ

Спробуйте в Інтернеті!

Спробуйте вдвічі!

Спробуйте втричі!

Як це працює

»‘µ*Ḃ            Main link. No arguments. Implicit argument: x = 0

 ‘               Increment; yield x + 1 = 1.
»                Take the maximum of x and 1. Yields 1.
  µ              Begin a new, monadic chain. Argument: y = 1
    Ḃ            Bit; yield 1 if y is odd, 0 if it is even. Yields 1.
   *             Power; yield y**1 = 1.
»‘µ*Ḃ»‘µ*Ḃ       Main link.

»‘µ*Ḃ            As before.
      ‘          Increment; yield y + 1 = 2.
     »           Take the maximum of 1 and 2. Yields 2.
       µ         Begin a new, monadic chain. Argument: z = 2
         Ḃ       Bit; yield 1 if z is odd, 0 if it is even. Yields 0.
        *        Power; yield z**0 = 1.
»‘µ*Ḃ»‘µ*Ḃ»‘µ*Ḃ  Main link.

»‘µ*Ḃ»‘µ*Ḃ       As before.
           ‘     Increment; yield z + 1 = 3.
          »      Take the maximum of 1 and 3. Yields 3.
            µ    Begin a new, monadic chain. Argument: w = 3
              Ḃ  Bit; yield 1 if w is odd, 0 if it is even. Yields 1.
             *   Power; yield w**1 = 3.


10

Cubix , 5 байт

)<@OP

Спробуйте в Інтернеті: раз , двічі , тричі .


Пояснення

Cubix - мова на основі стека, інструкції якої обернуті навколо куба. Важливо відзначити, що стек спочатку заповнюється нескінченними нулями, що дозволяє нам "витягувати значення з повітря" з операторами, а не виштовхувати їх явно.

Треба визнати, що це виявив жорстокий нападник; Я ніколи не знайшов би це самостійно. Насправді, @MartinEnder був тим, хто попросив мене спробувати грубе форсинг, тому що він шукав це рішення без везіння. Це єдине рішення, яке знайшов жорстокий нападник, і я вважаю, що це єдине і найкоротше рішення у Cubix.

Єдина програма

Дивіться, як це працює!

Оригінальна програма підходить до одиничного куба. Ось розгорнута сітка:

  )
< @ O P
  .

IP (вказівний вказівник) починається на крайній лівій стороні (в напрямку <) на схід. <Негайно спрямовує його на захід, і вона обтікає до P. Pє експоненцірованіе, і так як немає нічого в стеці, інтерпретатор витягує два 0 с і обчислює 0 0 , який є 1 в відповідно до JavaScript. Oпотім виводить це значення і @закінчує програму.

Подвійна програма

Дивіться, як це працює!

)<@OP)<@OP

10-байтна програма занадто довга, щоб вміститися на одиничний куб, і тому вона розширена до куба розміром 2:

    ) <
    @ O
P ) < @ O P . .
. . . . . . . .
    . .
    . .

Як і раніше, IP починається в лівій верхній частині лівої частини обличчя. Цього разу найперша інструкція P, яка висуває 1, як і раніше. Далі ), який збільшує верхній елемент, перетворюючи його на 2 . Потім <обертається IP, і він )знову потрапляє , перетворюючи 2 у 3 .

Ось де це стає цікавим. Pпіднімає другий зверху елемент до потужності першого елемента, що дає 0 3 = 0 . Тоді IP обертається до правої частини обличчя та проходить через два не-опі, .перш ніж вдарити іншого P. Тут ми бачимо ще одну вигадку Cubix: двійкові оператори (такі як P) не видаляють свої операнди зі стека. Отже, оскільки стек зараз є [3, 0], ми обчислюємо 3 0 = 1 , який Oвиводить і @завершує програму.

Потрійна програма

Дивіться, як це працює!

)<@OP)<@OP)<@OP

Як і у подвійній програмі, трійка може вміститися на кубі розміром 2:

    ) <
    @ O
P ) < @ O P ) <
@ O P . . . . .
    . .
    . .

Ця програма запускається так само, як і попередня: Pнатискає 1 , з )кроком, <вказує IP захід, )знову зростає, і Pтепер натискає 0 . Потім IP обертається <на праворуч, що нічого не робить, оскільки IP вже вказується на захід.

Ось одна відмінність від подвійної програми: )приріст 0 у верхній частині стека до 1 . Коли Pзнову виконує свою магію, на цей раз обчислює 3 1 = 3 . Oвиходить і @припиняється, і ми безперечно доводимо, що третій раз справді є принадою.


1
Мені дуже сподобалося ваше пояснення. +1
поточний

7

Мозок-Флак , 10 байт

<>([]{}())

Спробуйте в Інтернеті!

Спробуйте вдвічі!

Спробуйте втричі!

Пояснення:

#Toggle stacks
<>

#Push
(
    #Stack-height (initially 0) + 
    []

    #The TOS (initially 0) + 
    {}

    #1
    ()
)

Коли ми запустимо це один раз, він поставить (0 + 0 + 1) == 1на альтернативний стек. Побіг вдруге, він ставить те саме на основний стек. Запустити третій раз, однак він оцінює до (1 + 1 + 1) == 3та натискає на альтернативний стек та неявно друкує.


7

SQL, 25 24 23 байт

( -1 байт прибраний неправильно набраний символ , який завжди був закоментований і нічого не робити )
( -1 байт змінений SELECTв відповідно до PRINTрекомендацій Разван Socol )

PRINT 2/*
*2+1--*/-1
--

Як це працює:
У SQL ви можете коментувати теги коментарів, наприклад:

/*
'Comment'--*/

проти

--/*
'Not Comment'--*/

Код у 1 рядку із зауваженнями:
Перша ітерація: SELECT 2-1Вихід: 1
Друга ітерація: SELECT 2-1*2+1Вихід: 1
Третя ітерація: SELECT 2-1*2+1*2+1Вихід:3


1
PRINTзамість цього SELECTзбереже зайвий байт.
Разван Сокол

6

SOGL V0.12 , 7 5 4 байти

ē»«I

Спробуйте тут!

Спробуйте вдвічі!

Спробуйте втричі!

Пояснення:

ē»«I
ē     push counter, then increment it.
      First time running this will push 0, then 1, then 2.
             TOS on each: 0  1  2
 »    floor divide by 2   0  0  1
  «   multiply by 2       0  0  2
   I  and increment       1  1  3

Я намагався зробити щось за ē1|
принципом

@ETHproductions Так, я хотів також спробувати щось подібне, і найкраще, що у мене було ē:2\+: /
dzaima

5

05AB1E , 6 5 байт

.gDÈ+

Спробуйте в Інтернеті! або Спробуйте подвоїти! або Спробуйте втричі!

Пояснення

.g     # push length of stack
  D    # duplicate
   È   # check if even
    +  # add

Одномісний: 0 + (0 % 2 == 0) -> 1
двомісний: 1 + (1 % 2 == 0) -> 1
тримісний:2 + (2 % 2 == 0) -> 3


Чи повинно це бути % 2в потрійному поясненні?
LarsW

@LarsW: Так, справді :)
Emigna

@Emigna Я думаю, що "перевірити, чи навіть" насправді 2%_правильно?
Чарівний Восьминіг Урна

2 + (2 % 2 == 0) -> 2але 2 + !(2 % 2 == 0) -> 3(для вашого пояснення).
Чарівний Восьминіг Урна

@MagicOctopusUrn 2%_- те саме, що Èтак. Не впевнений, що ви маєте на увазі щодо пояснення. 2+(2%2==0) = 2+(0==0) = 2+1 = 3. Напевно, було б зрозуміліше, якби я пояснив обчислення.
Емінья

5

> <> , 9 байт

\5 n;
\\1

Спробуйте в Інтернеті!

Спробуйте вдвічі!

Спробуйте втричі!

Я виявив такий випадок удачі, використовуючи філософію, що "якщо зробити риб'ячий шлях достатньо звивистим, з часом щось спрацює". Оригінальна та подвоєна версії друкують 5, а потрійна версія друкує 1, а потім 5, щоб скласти 15 = 3 × 5. Ось перераховані версії для вашої уваги:

\5 n;
\\1\5 n;
\\1
\5 n;
\\1\5 n;
\\1\5 n;
\\1

5

Python 2 ,  46 45  39 байт

Натхненний відповіддю Халварда . Я радий, що мій виклик надихнув нове, яке мені здається ще цікавішим. Збережено 6 байт завдяки Кевіну Крейсейну .

print open(__file__,"a").tell()/79*3|1#

Спробуйте в Інтернеті!

Спробуйте вдвічі!

Спробуйте втричі!

Як це працює (застаріло)

k=open(__file__,"a").tell() # Read the source code in "append" mode and get its length.
                            # Assign it to a variable k.
;print k>>(k==90)#          # Print k, with the bits shifted to the right by 1 if k
                            # is equal to 90, or without being shifted at all overwise.
                            # By shifting the bits of a number to the right by 1 (>>1),
                            # we basically halve it.

Коли вона подвоюється, довжина стає 90 , але новий код ігнорується завдяки #, тому k==90оцінюється до True. Булеви є підкласами цілих чисел у Python, тому k>>Trueеквівалентний k>>1, який по суті є k / 2 = 45 . Коли він потроїться, новий код знову ігнорується, отже, нова довжина - 135 , яка не зміщується, оскільки k==90оцінюється на " Falseтак" k>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k, а " k" друкується як є.


Python 2 , 36 байт

Це була пропозиція Айдана Ф. Пірса в 38 байт, і я пограв у 2 байти. Я не публікую це як своє основне рішення, тому що я його не придумав сам.

0and""
True+=1
print True>3and 3or 1

Спробуйте в Інтернеті! Спробуйте вдвічі! Спробуйте втричі!


Дякую за ідею використання коментаря - врятували мені 6 байт.
AdmBorkBork

print open(__file__,"a").tell()/79*3|1#можливо?
Кевін Кройсейсен

@KevinCruijssen Чудово, дякую!
Містер Xcoder

Один менший байт, без зчитування вихідного коду: tio.run/##K6gsycjPM/r/… Друкується з провідними пробілами для двох та трьох повторень, але це, здається, дозволено.
Айдан Ф. Пірс

@ AidanF.Pierce Дуже дякую! Я трохи більше пограв у гольф і розмістив його як альтернативне рішення.
Містер Xcoder

5

R , 37 31 28 байт

Завдяки Джузеппе за те, що виграли останні 3 байти.

length(readLines())%/%2*2+1

(із заднім рядком).

Спробуйте один раз!

Спробуйте двічі!

Спробуйте тричі!

Для цього використовується readLines()хитрість з відповіді Джузеппе на 8-бальний виклик , де stdinпереспрямовується на вихідний файл. Цей код, в основному, підраховує, скільки рядків існує під першим рядком і виводить, 1якщо є 1 або 3 рядки (тобто код є одинарним або подвоєним) або 3якщо є 5 рядків (тобто код потрійний).


о, акуратне, +1! Не знав, як це зробити в Р. Я думаю, що вам потрібен новий рядок після того, sяк це буде нормально працювати, АЛЕ ви повинні мати можливість гольфувати його до 28 байтів , переробляючи деякі обчислення.
Джузеппе

@Giuseppe Дякую за вказівку на проблему нового рядка! Я не зміг змусити вашу версію працювати, коли код потроївся - я щось пропускаю?
rturnbull

О, дивно, у мене у вуса був кінцевий новий рядок, але якщо ти %/%2це зробиш, то це спрацює
Джузеппе

5

Втрачено , 38 байт

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Спробуйте в Інтернеті!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Спробуйте в Інтернеті!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Спробуйте в Інтернеті!

Пояснення

Lost - дуже цікава мова для цього виклику. Звичайна втрачена техніка - побудувати "пастку". Пастка - це розділ програми, розроблений для того, щоб зафіксувати всі ips в одному місці, щоб їх стеки могли бути очищені, і їх можна контролювати, щоб рухатись у певному напрямку. Це робить програми в програмі Lost набагато більш керованими. Однак оскільки програма дублюється, ми також повинні уникати дублювання пасток. Це вимагає від нас розробити нову пастку, яка працює належним чином, але коли дублюється лише одна з пасток. Моя основна ідея тут полягає в наступному

v<<<<>
>%?!^^

Якщо стек не порожній, ?він видалить елемент і призведе до його переходу до початку, якщо цей елемент не дорівнює нулю. Ключове значення тут полягає в тому, що коли це складається стежка ^^s вгору

v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^

Це означає, що як би ви не входили, ви завжди будете виходити в одному місці.

Звідси ми можемо спробувати реалізувати ту саму ідею з моєї відповіді Кляйна .

\\<<<<<v<<<<>
2>((1+@>?!^%^

Основою нашої програми є ліва сторона, яка штовхає ряд 2s. Кожен раз, коли ми додаємо копію програми, інша 2стає доданою до основи програми, тобто додаткові 2 висуваються на стек. Після того, як він відходить знизу, він проскакує \\>і виконує код

((1+@

При цьому видаляються перші 2 елементи стека, додається один до всього, що залишилося, і виходить. Після того, як у нашого хребта є 3 2, ми додамо 1 і отримаємо 3, якщо у нас буде менше 3 елементів, ми просто відкинемо весь стек і повернемо 1.

Тепер єдина проблема, яка залишилася - це те, що !в нашій програмі може виникнути нескінченний цикл. Якщо ip почне !рухатися вгору, він стрибне і приземлиться прямо там, де був. Це означає, що ми повинні додати ще один рядок, щоб запобігти циклу.

\\<<<<</<<<<>
2>((1+@>?!^%^
.........^

У цьому є невелика проблема, коли ^в пастку помістити кілька косої щілини між нашими . Однак, досить дивом, все виходить. Наші ips відскакують належним чином, щоб це не мало значення.



@joking на жаль, я поки що застряг на мобільному. Чи можете ви опублікувати це як відповідь із поясненням?
Пшеничний майстер




4

Japt , 8 6 5 байт

-1 байт завдяки @ETHproductions

°U-v

Пояснення:

°U-v
 U     # variable U=0                # U=0
°U     # ++U                         # U=1
  -    # minus:
   v   #   1 if U is divisible by 2  
       #     else
       #   0                         # U=1

Це оцінюється до 1-0 = 1

Подвоєне оцінювання до 2-1 = 1

Втричі оцінює до 3-0 = 3


1
Трохи переставившись, я думаю, ви можете зробити °U-v(плюс новий рядок), щоб заощадити на другому U.
ETHproductions

@ETHproductions Дякую! vідеально підходить для цього виклику :-)
Олівер



4

> <> , 10 9 8 байт

562gn|

Спробуйте в Інтернеті!

Спробуйте вдвічі!

Спробуйте втричі!

Я впевнений, що десь там є 8-байтне рішення.

Ненадрукований в кінці має значення ASCII 1 і отримує лише gкоманду et на третій ітерації. Перші два друкує 05, а потім друкує 15.


8-байтне рішення виявляється невловимим, але ось ще кілька 9-ти байтних випадків, якщо вони надихнуть вас: TIO , TIO
Не дерево

1
@Notatree Отримав 8 байт з недрукуваною версією
Jo King



3

JavaScript, 81 77 74 70 байт

Збережено 4 байти завдяки Shaggy

var t,i=(i||[3,1,1]),a=i.pop()
clearTimeout(t)
t=setTimeout(alert,9,a)

Досить кульгавий JS розчин. Споживає значення [3,1,1]масиву справа ( pop()). Реєструє тайм-аут для відображення поточного значення в майбутньому. Якщо тайм-аут вже був зареєстрований, скасуйте його. Покладається на брудний характер var, який піднімає змінні декларації.

Два рази:

Три рази:


Для цього потрібна крапка з двокрапкою чи новою лінією, але ви можете зберегти 4 байти, передавши aяк третій аргумент setTimeout:setTimeout(alert,9,a)
Shaggy

@Shaggy Дякую! Добре працює навіть без зайвої двокрапки.
Крістіан Лупаску


2

Вугілля деревне , 12 байт

⎚≔⁺ι¹ιI⁻ι⁼ι²

Спробуйте в Інтернеті! Посилання - це багатослівний код.

Спробуйте вдвічі!

Спробуйте втричі!

Пояснення

⎚             Clear
 ≔⁺ι¹ι        Assign plus(i, 1) to i
       I      Cast (and implicitly print)
         ⁻ ⁼ι² Subtract equals(i, 2) from
          ι    i

MapAssignRight(Plus, 1, i)економить вам байт, який зводить вас до тієї ж довжини, що і порт моєї відповіді на @Mr. Виклик XCoder:PI∨›³L⊞Oυω³
Ніл

PI⊕⊗÷L⊞Oυω³це ще одна версія моєї відповіді, але все ж 11 байт ...
Ніл

Знайшли 10 байт!
Ніл

: / Мені справді слід виправитиMapAssign(Incremented, i)
лише ASCII

2

JavaScript, 43 40 байт

var t=t?--t:~!setTimeout`t=alert(1|~t)`;

2x:

3 рази:


ps це рішення не порушує навколишнє середовище
l4m2

2

PowerShell , 54 48 45 44 байт

if(99-gt(gc $PSCOMMANDPATH|wc -c)){1;exit}3#

Спробуйте в Інтернеті!

Спробуйте вдвічі!

Спробуйте втричі!

Отримує свій шлях виклику з $PSCOMMANDPATHі виконує gЕТ content на файл. Ifкількість символів цього файлу менше 99(перевірено через wc -ccoreutils), тоді ми виводимо 1і exit(тобто зупиняємо виконання). Це пояснює вихідний код і подвоєний код. Інакше ми виводимо 3і виходимо. Фактичний код, який знаходиться у подвоєному чи потрійному розділах, є безглуздим, оскільки або exitдо того, як ми дістанемося до нього, або це за коментарем #.

Збережено 6 байтів завдяки містеру Xcoder
Збережено 3 4 байти завдяки Павлу


@Pavel Ага, так. Мені потрібно поміняти місцями -lt99на "a", 99-gtщоб кастинг працював правильно, але це дійсно на один байт коротше. Дякую!
AdmBorkBork

2

C # (178 байт)

Console.WriteLine(1+2*4%int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]=(int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]??"0"))+1+""));

шалене рішення C #, але я щасливий, що це можливо в одному рядку в C #. :)

Для мене найважчою була наявність дійсного C #, який або активував би, або збільшував одну і ту ж змінну, тому я в кінцевому підсумку зловживав ConfigurationManager, тому що мені потрібна глобальна статична NameValueCollection і ConfigurationManager - це єдиний, про який я міг подумати, що міг би оновити в пам'яті. EnvironmentVariables був іншим варіантом, на який я дивився, але він не має індексатора, тому я не знаю, як це зробити в одному рядку, який можна скопіювати для копіювання, щоб отримати необхідний вихід відповідно до специфікації.


2

Рунічні чари , 35 байт

^w3'\
    f
    1
/1@
/
 '54\w
/yyy

Спробуйте в Інтернеті!

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

Функції пов'язані з тим, що в кінцевій лінії немає трибунального нового рядка (або, з цього приводу, пробіли), що дозволяє повторювати IP-адреси в іншому місці. У верхньому лівому кінці закінчується створення великої петлі навколо сітки, тоді як другий IP виконує операцію відбиття, щоб замінити \на 6-му рядку а . Цей IP потім буде циклічно назавжди і нічого не робитиме.

Третій IP також робить таку ж заміну в той же час, а тому , що вона знаходиться на 13 - ї лінії, її копія цього відбивача посилає його вгору , і він виконує 1f'3wпослідовність , присутню в правому верхньому куті, який замінює 1з 314 - го рядок, перед тим, як оригінальний IP виконує його, викликаючи виведення потрійної програми 3замість 1(значення також можуть бути 2і 6, 3і 9, 4і 12, або 5і 15завдяки наявності a-fчислових констант; 1і 3були вибрані довільно). Потім він залишається в нескінченному циклі, виконуючи більше команд відображення, які нічого не роблять.

Спробуйте в трьох примірниках!


29 байт , хоча, думаю, я міг би його знизити, якби я насправді зрозумів це: P
Jo King

@JoKing Не дуже здивований, що багато цього білого простору може вийти. Зробив це на роботі і через те, що зіткнувся з проблемою з перекладачем, я був щасливий лише отримати щось, що спрацювало (оригінал - 52 байти, і після виправлення перекладача я зміг вилучити хороший фрагмент).
Draco18s

1

Perl 5, 28 25 байт

-3 байти завдяки @neil!

print"\e[D$a"if(++$a!=2);

Переміщує курсор назад (нічого не робить на початку рядка) і друкує значення $aпершого і третього разу (тобто, третій раз, коли друкується 1, курсор переміщується, а 3 надрукується на позиції 1).


1
print"\e[D$a"if(++$a!=2);можливо?
Ніл

1

QBasic, 19 байт

CLS
x=2^x
?x-1OR 1

Джерело має включати в себе новий рядок.

Пояснення

Ми хочемо , щоб вихід 1, 1, 3. Зауважте, що ці числа на одну меншу, ніж потужність 2. Отже:

CLS      ' CLear Screen of any output from previous copies of the code

x        ' Numeric variables are preset to 0...
 =2^x    ' so as this statement is repeated, the value of x goes 1, 2, 4

 x-1     ' Therefore x-1 goes 0, 1, 3...
    OR 1 ' and we bitwise OR it with 1 to change the 0 to 1...
?        ' and print.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.