Подвійний - це не подвійний час


36

Виходячи з цього виклику.

У ритмічній грі су! , модифікатор складності "Подвійний час" фактично лише збільшує швидкість на 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 байти

Вибрана випадкова мова в TIO використовувала його

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 байти завдяки службовій передачі

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


1
Гей, 4/6vtпрацює добре ...
officialaimm

18
Я від
усієї душі

@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 Ні, тому що цього не очікується.
Ерік Аутгольфер

14

LibreOffice Calc, 8 байт

=A2+3
19

Збережіть як *.csv і відкрийте в LibreOffice Calc. Ви отримаєте 22 за А1.


Подвійно їх:

==AA22++33

1199

Ви отримаєте 33 в А1


1
розумний вибір мови!
Джузеппе

11

MATL , 3 байти

TnQ

Спробуйте в Інтернеті! Або подвоєна версія .

Пояснення

У MATL скалярне значення (число, char, логічне значення) те саме, що масив 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.


Ласкаво просимо на сайт. Цей пітон не дає жодного результату і, таким чином, не є коректною відповіддю. Однак , якщо ви зміните свою відповідь , щоб бути Python реплєї , це робить висновок виробляє і , таким чином , є правильною відповіддю. Вам доведеться або видалити цю відповідь, або змінити мову з python 2 на python 2 repl.
Пшеничний майстер

@WheatWizard Дякую та дякуємо за допомогу! Я правильно це зробив?
Карл Шильдкраут

8

APL, 7 байт

⊃⍕⌊3×⍟2

Друк 2.

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

Друк 3.

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

Вааат?

Одномісний:

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

Двомісний:

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

Не могли б ви вирівняти коментарі вертикально? Або ми маємо різні налаштування чи щось спричиняє його на моєму кінці циклічно так ?
Kevin Cruijssen

@KevinCruijssen Я думаю, що це шрифт вашого веб-переглядача, але браузери не надають APL так, як вони просто змінюються. що моя prntscr.com/fwp0l0
Уріель

Ну добре, це все ще читається і чудова відповідь незалежно. :)
Кевін Круїссен

Це видається для мене простором. Напевно, просто залежить від шрифту ( prnt.sc/fwrnz1 ). Зауваження, безумовно, не узгоджуються: P
therealfarfetchd

@therealfarfetchd дякую, я оновив останні 3 ряди
Uriel


5

CJam , 4 байти

],))

Спробуйте нормально!

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

Пояснення

Звичайний:

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

Двомісний:

]         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

Перевантаження
вигадливі

AB],також працює.
geokavel


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=8, і обчислюється подвійна версія 880+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 дуже корисний для цього, оскільки файли та гередоки неявно передаються 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 '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.