Двойное время не двойное время


36

На основании этого вызова.

В ритм-игре osu! Модификатор сложности «Двойное время» увеличивает скорость только на 50%.

Ваша задача состоит в том, чтобы написать программу, которая выводит положительное четное целое число (больше 0), и когда каждый байт / символ (ваш выбор) в вашем исходном коде дублируется, он должен вывести число, умноженное на 1,5.

Например, если ваш исходный код ABCи что выводит 6, то AABBCCдолжен вывести 9.

Следуя правилам оригинальной задачи:

правила

  • Вы должны построить полную программу.
  • Исходный источник должен быть длиной не менее 1 байта.
  • Оба целых числа должны быть в базе 10 (вывод их в любую другую базу или с научными обозначениями запрещен).
  • Ваша программа не должна принимать входные данные (или иметь неиспользуемые, пустые входные данные) и не должна выдавать никаких ошибок (предупреждения компилятора не считаются ошибками).
  • Вывод целых чисел с концевыми / ведущими пробелами разрешен.
  • Вы не можете использовать новую строку между копиями вашего источника.
  • Это , поэтому побеждает меньшее количество байтов на каждом языке !
  • Применяются стандартные лазейки .

Я предполагаю, что это будет гораздо менее тривиально, чем первоначальный вызов, но, надеюсь, мы увидим некоторые креативные и уникальные ответы!


@Fatalize write a program that outputs a positive even integerДа, будет. Каждое четное число можно умножить на 1,5, чтобы получить целое число
Skidsdev

Это похоже на обман.
Эрик Аутгольфер

@EriktheOutgolfer Очень похоже, но я уверен, что это будет намного сложнее (если я не пропущу что-то очевидное).
TheLethalCoder

9
Дублирование символов может сделать тривиальные языки неуправляемыми. Интересно, есть ли решение не в стиле односимвольных командных или выражений.
Кейу Ган

3
@TheLethalCoder Может быть, самое большое препятствие full program. Трудно представить, что дублированная программа все еще имеет действительную точку входа / функцию.
Кейу Ган

Ответы:


22

Пилоны , 7 5 4 байта

Подбрал случайный язык на ТИО, использовал его

46vt

Объяснение:

Попробуйте онлайн!

46    # Stack is [4, 6]

v     # Reverse the stack [6, 4]

t     # take top of stack 4

Вдвое:

4466   # Stack is [4, 4, 6, 6]

vv     # Reverse the stack twice so it's the same [4, 4, 6, 6]

tt     # take top of stack 6 and again which is 6 again

Сохранено 2 байта благодаря officialaimm

Сохранено 1 байт благодаря Veedrac


1
Эй, 4/6vtтоже работает ...
officialaimm

18
Я искренне одобряю стратегию выбора случайного языка
TIO

@officialaimm ты прав, спасибо.
LiefdeWen

1
4/6 <- 4 делится на ничто -> 4; а затем 6. 44 // 66 <- 4, деленное на 4 -> 1; ничто не разделено ничем -> ничто; а затем 6 и 6. Может быть. Хорошо сделано, хотя.
В. Куртуа

1
Не 46vtсделал бы то же самое?
Ведрак

21

Желе , 2 байта

!‘

Попробуйте онлайн!

Объяснение:

!‘ Implicit 0
!  Factorial
 ‘ Increment

Двойная версия:

!!‘‘

Попробуйте онлайн!

Объяснение:

!!‘‘ Implicit 0
!    Factorial
 !   Factorial
  ‘  Increment
   ‘ Increment

Если вы делаете это в третий раз, он идет от 3 -> 4, а не от 3 -> 4,5 ??
Tuskiomi

@tuskiomi Нет, потому что этого не ожидается.
Эрик Аутгольфер

14

LibreOffice Calc, 8 байт

=A2+3
19

Сохраните его как *.csvи откройте в LibreOffice Calc. Вы получите 22 в А1.


Удвой их:

==AA22++33

1199

Вы получите 33 в A1


1
умный выбор языка!
Джузеппе

11

MATL , 3 байта

TnQ

Попробуйте онлайн! Или удвоенная версия .

объяснение

В MATL скалярное значение (число, символ, логическое значение) совпадает с массивом 1 × 1, содержащим это значение.

Нормальная версия:

T    % Push true
n    % Number of elements of true: gives 1
Q    % Add 1: gives 2

Двойная версия:

TT   % Push [true, true]
n    % Number of elements of [true, true]: gives 2
n    % Number of elements of 2: gives 1
Q    % Add 1: gives 2
Q    % Add 1: gives 3

7
TnQ для ответа ...: D [Мы иногда используем tnq в качестве краткой формы для благодарности]
officialaimm

8
@officialaimm :)[мы иногда используем это, чтобы получить первые nэлементы из массива ...]
Луис Мендо

10

VIM, 5

i1<esc>X<C-a>

Без удвоения:

i1<esc>  insert the literal text "1"
X        delete backwards - a no-op, since there's only one character
<C-a>    increment, giving 2

С удвоением:

ii11<esc>   insert the literal text "i11"
<esc>       escape in normal mode does nothing
XX          since the cursor is on the last character, delete "i1"
<C-a><C-a>  increment twice, giving 3

10

Не уверен, что этот ответ действителен. Просто напишите здесь на случай, если кто-то может получить идеи отсюда.

Node.js с флагом -p, 7 байтов

По Алекс Варга :

3/3*22

33//33**2222

Node.js с флагом -p, 11 байтов

Старый:

3*2*0/1+22

33**22**00//11++2222

Выход 22 и 33.


Как это должно сделать 33? TIO, похоже, не в состоянии это сделать. Замки на 00.
В. Куртуа

1
Как насчет:
Алекс Варга

@AlexVarga так мило.
TSH

@ V.Courtois вы используете строгий режим
TSH

1
@EdmundReed нужен -pфлаг для вывода значения выражения
tsh

10

Python 2 REPL, 11 байт

(3/1)*(2/1)

Это просто оценивается как 3 * 2 = 6. Дублированный, это

((33//11))**((22//11))

который оценивается в 3 ** 2, что составляет 3 в степени 2 или 9.


Добро пожаловать на сайт. Этот питон не производит никакого вывода и поэтому не является правильным ответом. Однако, если вы измените свой ответ на REPL Python , это даст результат и, следовательно, будет правильным ответом. Вам придется либо удалить этот ответ, либо изменить язык с python 2 на python 2 repl.
Пшеничный волшебник

@WheatWizard Спасибо, и спасибо за помощь! Я сделал это правильно?
Карл Шильдкраут

8

APL, 7 байт

⊃⍕⌊3×⍟2

Печать 2.

⊃⊃⍕⍕⌊⌊33××⍟⍟22

Печать 3.

Попробуйте онлайн!

Waaat?

Не замужем:

3×⍟2         → 2.079441542  ⍝  3 * ln 2
⌊2.079441542 → 2            ⍝  floor
⊃⍕           → '2'          ⍝  format and take first character

Double:

⍟⍟22          → 1.128508398  ⍝  ln ln 22
×1.128508398  → 1            ⍝ signum
33×1          → 33           ⍝  33 * 1
⌊⌊33          → 33           ⍝  floor
⊃⊃⍕⍕          → '3'          ⍝  format and take first character

Не могли бы вы выровнять комментарии по вертикали? Или у нас разные настройки или что-то такое, что заставляет его на моем конце зацикливаться вот так ?
Кевин Круйссен

@KevinCruijssen Я думаю, что это шрифт вашего браузера, но браузеры в любом случае не отображают APL как моноширинный. этот мой prntscr.com/fwp0l0
Уриэль

Ах, хорошо, это все еще читаемо и отличный ответ независимо. :)
Кевин Круйссен

Для меня это монопространство. Вероятно, зависит только от шрифта ( prnt.sc/fwrnz1 ). Комментарии точно не выровнены, хотя: P
therealfarfetchd

@therealfarfetchd спасибо, я обновил последние 3 строки
Уриэль


5

CJam , 4 байта

],))

Попробуй нормально!

Попробуй вдвое!

объяснение

Обычный:

]     e# Wrap the stack in an array: []
 ,    e# Get its length: 0
  ))  e# Increment twice: 2

Double:

]         e# Wrap the stack in an array: []
 ]        e# Wrap the stack in an array: [[]]
  ,       e# Get its length: 1
   ,      e# Get the range from 0 to n-1: [0]
    )     e# Pull out its last element: 0
     )))  e# Increment 3 times: 3

Перегрузки сложны ...;)
Эрик Outgolfer

AB],тоже работает.
геокавель


4

Нейм , 2 байта

𝐓>

Попробуйте онлайн!

Объяснение:

𝐓> Implicit 0
𝐓  Factorial
 > Increment

Двойная версия:

𝐓𝐓>>

Попробуйте онлайн!

𝐓𝐓>> Implicit 0
𝐓    Factorial
 𝐓   Factorial
  >  Increment
   > Increment

4 из 5 ответов ... вы действительно хотите этого!
TheLethalCoder

5
@TheLethalCoder По крайней мере, это еще не 15. ;)
Эрик Аутгольфер


3

R 11 байт

8*(!0)+1*!1

Попробуйте онлайн!

!это отрицание, и **возведение в степень (псевдоним для ^). Числа преобразуются в логические: 0для FALSEвсех остальных TRUE. Булевы преобразуются в целые числа: FALSEв 0, TRUEк 1, так !0==1, !1==0, !!00==0и !!11==1.

8×1+1×0=8880+111=12


1
Я просто пытался придумать решение , опираясь на *и **, но ты меня опередил!
Джузеппе

@ Giuseppe Я не уверен, что мое решение оптимально (необходимость в скобках !0раздражает). Может быть что-то короче с -и *, но я еще не нашел такого решения ...
Робин Райдер

2

Cubix , 6 байтов

O.1)W@

Печать 2.

  O
. 1 ) W
  @

Нажимает 1, )увеличивает, Wпереходит влево к Oвыходным данным 2и @завершает программу.

Это, очевидно OO..11))WW@@, вдвое больше , чем на кубе:

    O O
    . .
1 1 ) ) W W @ @
. . . . . . . .
    . .
    . .

Он нажимает 1дважды, )увеличивает его вдвое, Wснова переходит влево, что ставит его в правое положение Oна север, которое выводит 3, а затем следующая команда, @которая завершает программу.

Попробуйте онлайн!

Двойной онлайн!


2

Кляйн , 8 6 байт

/3+@4\

Одноместный , двухместный

объяснение

Для сингла программа следует довольно простым путем. Первое зеркало отклоняет его во второе, которое отклоняет его 4до конца программы.

Двойник немного сложнее. Вот:

//33++@@44\\

Первые два зеркала работают одинаково, однако есть новое зеркало из-за удвоения, которое отклоняет ip обратно в начало, оно захватывается дубликатом первого зеркала и отклоняется к концу. Все, что запускается, это то, 33++что оценивается до 6.


2

TI-Basic, 3 байта

Не замужем:

int(√(8

Последнее выражение неявно возвращается / печатается в TI-Basic, так что это печатает 2

Вдвое:

int(int(√(√(88

Возвращает / печатает 3

TI-Basic - это токенизированный язык ; int(, √(и 8каждый байт в памяти.


Технически в спецификации задачи прямо указывается, когда каждый символ удваивается, но я позволю это и
обновлю

2

Ruby REPL, 8 байтов

";3#";22

РЕПЛО печатает только последнее значение оцененное: 22.

Вдвое:

"";;33##"";;22

Это время 33является последним оцененным значением. Строка отбрасывается еще раз, и #начинается комментарий.


2

> <>, 19 8 байт

32b*!{n;

Принты 22
Попробуйте онлайн!

Объяснение:

32b   push literals onto the stack: [3,2,11]
*     multiply the top two values: [3,22]
!     skip the next instruction
{     (skipped)
n     pop and print the top value from the stack (22)
;     end execution

Вдвое:

3322bb**!!{{nn;;

Принты 33
Попробуйте онлайн!

Объяснение:

3322bb push literals onto the stack: [3,3,2,2,11,11]
**     multiply top values (twice): [3,3,2,242]
!      skip next instruction
!      (skipped)
{{     rotate the stack to the left (twice): [2,242,3,3]
nn     pop and print the top two values from the stack (33)
;      end execution

Старая версия:
Нормальная:

11+!vn;
    n
    ;

Принты 2
Попробуйте онлайн!

Объяснение:

1    push 1 on the stack: [1]
 1    push 1 on the stack: [1,1]
  +    add top two values of the stack: [2]
   !    skip the next instruction
    v    (skipped)
     n    print the top value of the stack (2)
      ;    end execution

Вдвое:

1111++!!vvnn;;
        nn
        ;;

Принты 3
Попробуйте онлайн!

Объяснение:

1111    push four 1's on the stack: [1,1,1,1]
    +    add top two values of the stack: [1,1,2]
     +    add top two values of the stack: [1,3]
      !    skip the next instruction
       !    (skipped)
        v    change direction of execution (down)
         n    print the top value of the stack (3)
          ;    end execution


5
Я думаю, что вы должны дублировать строки.
Эрик Аутгольфер

@EriktheOutgolfer Новых строк больше нет.
KSmarts

1

Zsh , 14 байтов

<:|echo 22
3
:

Попробуйте онлайн!

Получение полной программы на языке, не относящемся к гольфу, для печати чего-либо с дублированным исходным кодом, как это является проблемой. Zsh очень полезен для этого, потому что файлы и heredocs неявно передаются cat. Давайте посмотрим на первую строку в обоих случаях:

<:|echo 22            # Give the file : on stdin to cat. cat pipes to 'echo 22', which ignores stdin
<<::||eecchhoo  2222  # Start heredoc on following lines with EOF string '::', pass to cat.
                      # Since cat exits 0, 'eecchhoo 2222' is not executed

Пока 3это не программа, первая программа будет только печатать 22. Вторая программа будет печататься в 33окружении дополнительных строк (из-за дублирования).


Если 3это функция / программа / псевдоним, то это 18-байтовое решение все равно будет работать!

<:|echo 22\\c\
3
:

Попробуйте онлайн!

Последнее \является продолжением строки, поэтому новая строка отбрасывается, что делает оператор echo echo '22\c3'. В \cпричинах эха остановить печать после того, как 22(что также происходит подавление новой строки).


1

Perl 6 , 14 байт

'|d 3#';say 22

Попробуйте онлайн! Попробуй вдвое!

Это использует удобно названную функцию отладки, ddчтобы вывести удвоенную программу к STDERR. Чтобы отделить логику, мы заключаем дублированную программу в кавычки, которые затем дублируют друг друга при дублировании вместе с символом #комментария, чтобы закомментировать недопустимую обычную программу.



0

MathGolf , 2 байта

▬)

Попробуйте онлайн! Попробуй вдвое

Подобно другим ответам в том, что первая инструкция выдает 1четное число при удвоении, а вторая увеличивает его. В этом случае я использовал обратное возведение в степень ( 0**0 = 0**0**0 = 1), но это также могла быть любая из !£≤°инструкций и, возможно, даже больше, что я пропустил.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.