Thời gian gấp đôi không phải là thời gian gấp đôi


36

Dựa trên thử thách này .

Trong trò chơi nhịp điệu osu! , công cụ sửa đổi độ khó "Double-time" thực sự chỉ tăng tốc độ thêm 50%.

Nhiệm vụ của bạn là viết một chương trình đưa ra một số nguyên chẵn dương (cao hơn 0) và khi mỗi byte / ký tự (lựa chọn của bạn) trong mã nguồn của bạn được nhân đôi, nó sẽ xuất ra số nhân với 1,5.

Ví dụ: nếu mã nguồn của bạn là ABCvà đầu ra 6, thì AABBCCnên xuất 9.

Theo quy tắc của thử thách ban đầu:

Quy tắc

  • Bạn phải xây dựng một chương trình đầy đủ.
  • Nguồn ban đầu phải dài ít nhất 1 byte.
  • Cả hai số nguyên phải ở cơ sở 10 (xuất ra chúng trong bất kỳ cơ sở nào khác hoặc với ký hiệu khoa học đều bị cấm).
  • Chương trình của bạn không được nhận đầu vào (hoặc có đầu vào trống, không sử dụng) và không được ném bất kỳ lỗi nào (cảnh báo trình biên dịch không được coi là lỗi).
  • Xuất ra các số nguyên với dấu cách / dấu cách hàng đầu được cho phép.
  • Bạn không thể giả sử một dòng mới giữa các bản sao của nguồn của bạn.
  • Đây là , do đó, ít byte nhất trong mỗi ngôn ngữ sẽ thắng!
  • Lỗ hổng mặc định áp dụng.

Tôi tưởng tượng điều này sẽ ít tầm thường hơn nhiều so với thử thách ban đầu, nhưng hy vọng chúng ta sẽ thấy một số câu trả lời sáng tạo và độc đáo!


@Firthize write a program that outputs a positive even integerCó nó sẽ. Mỗi số chẵn có thể được nhân với 1,5 để tạo thành một số nguyên
Skidsdev 17/07/17

Nó có vẻ như là một bản dupe với tôi.
Erik the Outgolfer 17/07/17

@EriktheOutgolfer Rất giống nhau nhưng tôi chắc chắn rằng điều này sẽ khó hơn rất nhiều (trừ khi tôi thiếu một cái gì đó rõ ràng).
TheLethalCoder

9
Các ký tự trùng lặp có thể làm cho các ngôn ngữ tầm thường không thể truy cập được. Tôi tự hỏi nếu có một giải pháp trong một ngôn ngữ không phải là ký tự theo kiểu ký tự hoặc biểu thức.
Keyu Gan

3
@TheLethalCoder Có lẽ trở ngại lớn nhất là full program. Thật khó để tưởng tượng một chương trình trùng lặp vẫn có một điểm nhập / chức năng hợp lệ.
Keyu Gan

Câu trả lời:


22

Giá treo , 7 5 4 byte

Chọn một ngôn ngữ ngẫu nhiên trên TIO sử dụng nó

46vt

Giải trình:

Hãy thử trực tuyến!

46    # Stack is [4, 6]

v     # Reverse the stack [6, 4]

t     # take top of stack 4

Nhân đôi:

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

Đã lưu 2 byte nhờ chính thức

Đã lưu 1 byte nhờ Veedrac


1
Này, cũng 4/6vthoạt động ...
chính thức

18
Tôi hoàn toàn tán thành chiến lược chọn một ngôn ngữ TIO ngẫu nhiên và học nó cho một thách thức
Skidsdev

@officialaimm bạn nói đúng, cảm ơn.
LiefdeWen

1
4/6 <- 4 chia cho không có gì -> 4; và sau đó 6. 44 // 66 <- 4 chia cho 4 -> 1; không có gì chia cho không có gì -> không có gì; và sau đó 6 và 6. Có thể. Mặc dù vậy cũng được thực hiện.
V. Courtois

1
Sẽ không 46vtlàm như vậy?
Veedrac

21

Thạch , 2 byte

!‘

Hãy thử trực tuyến!

Giải trình:

!‘ Implicit 0
!  Factorial
 ‘ Increment

Phiên bản nhân đôi:

!!‘‘

Hãy thử trực tuyến!

Giải trình:

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

Nếu bạn làm điều đó lần thứ ba, nó sẽ đi từ 3 -> 4, không phải 3-> 4.5 ??
tuskiomi

@tuskiomi Không vì không mong muốn làm như vậy.
Erik the Outgolfer 17/07/17

14

LibreScript Calc, 8 byte

=A2+3
19

Lưu nó dưới dạng *.csvvà mở nó trong LibreScript Calc. Bạn sẽ nhận được 22 trong A1.


Nhân đôi chúng:

==AA22++33

1199

Bạn sẽ nhận được 33 trong A1


1
lựa chọn ngôn ngữ thông minh!
Giuseppe

11

MATL , 3 byte

TnQ

Hãy thử trực tuyến! Hoặc phiên bản nhân đôi .

Giải trình

Trong MATL, giá trị vô hướng (số, char, giá trị lôgic) giống như mảng 1 × 1 chứa giá trị đó.

Phiên bản bình thường:

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

Phiên bản nhân đôi:

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 cho câu trả lời ...: D [Đôi khi chúng tôi sử dụng tnq như một hình thức rút gọn để cảm ơn]
chính thức tuyên bố

8
@officialaimm :)[đôi khi chúng tôi sử dụng điều đó để có được các nyếu tố đầu tiên từ một mảng ...]
Luis Mendo

10

vim, 5

i1<esc>X<C-a>

Không nhân đôi:

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

Nhân đôi:

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

Không chắc chắn nếu câu trả lời này là hợp lệ. Chỉ cần đăng ở đây trong trường hợp một số người có thể có ý tưởng từ đây.

Node.js với cờ -p, 7 byte

Bởi Alex Varga :

3/3*22

33//33**2222

Node.js với cờ -p, 11 byte

Người già:

3*2*0/1+22

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

Đầu ra 22 và 33.


Làm thế nào là phải làm 33? TIO dường như không thể làm điều đó. Nó khóa vào 00.
V. Courtois

1
Làm thế nào về: 3/3 * 22
Alex Varga

@AlexVarga thật ngọt ngào.
tsh

@ V.Courtois bạn đang sử dụng chế độ nghiêm ngặt
tsh

1
@EdmundReed cần -pcờ để xuất giá trị biểu thức
tsh

10

Python 2 REPL, 11 byte

(3/1)*(2/1)

Điều này chỉ đơn giản là ước tính đến 3 * 2 = 6. Sao y, nó là

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

ước tính thành 3 ** 2, bằng 3 với sức mạnh của 2 hoặc 9.


Chào mừng đến với trang web. Con trăn này không tạo ra bất kỳ đầu ra nào và do đó không phải là một câu trả lời hợp lệ. Tuy nhiên, nếu bạn thay đổi câu trả lời của mình thành REPL của Python , thì điều này sẽ tạo ra đầu ra và do đó là một câu trả lời hợp lệ. Bạn sẽ phải xóa câu trả lời này hoặc thay đổi ngôn ngữ từ python 2 sang python 2 thay thế.
Phù thủy lúa mì

@WheatWizard Cảm ơn, và cảm ơn vì đã giúp đỡ! Tôi đã làm điều này đúng?
Carl Schildkraut

8

APL, 7 byte

⊃⍕⌊3×⍟2

In 2.

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

In 3.

Hãy thử trực tuyến!

Chờ đợi?

Độc thân:

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

Gấp đôi:

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

Bạn có thể vui lòng sắp xếp các ý kiến ​​theo chiều dọc? Hay chúng ta có các cài đặt khác nhau hoặc một cái gì đó khiến nó ở cuối vòng lặp như thế này ?
Kevin Cruijssen 17/07/17

@KevinCruijssen Tôi nghĩ đó là phông chữ trình duyệt của bạn, nhưng các trình duyệt không hiển thị APL dưới dạng đơn cách. của tôi prntscr.com/fwp0l0
Uriel

Ah tốt, nó vẫn có thể đọc được và một câu trả lời tuyệt vời bất kể. :)
Kevin Cruijssen

Nó ám chỉ là không gian cho tôi. Có lẽ chỉ phụ thuộc vào phông chữ ( prnt.sc/fwrnz1 ). Các ý kiến ​​chắc chắn không được căn chỉnh mặc dù: P
Therealfarfetchd 17/07/17

@therealfarfetchd cảm ơn, tôi đã cập nhật 3 hàng cuối
Uriel


5

CJam , 4 byte

],))

Hãy thử bình thường!

Hãy thử gấp đôi!

Giải trình

Bình thường:

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

Gấp đôi:

]         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

Quá tải là khó khăn ...;)
Erik the Outgolfer 17/07/17

AB],cũng hoạt động.
geokavel




3

R , 11 byte

8*(!0)+1*!1

Hãy thử trực tuyến!

!là phủ định, và **là lũy thừa (một bí danh cho ^). Numerics được chuyển đổi thành booleans: 0to FALSE, tất cả những người khác để TRUE. Boolean được chuyển đổi sang số nguyên: FALSEđể 0, TRUEđể 1, vì vậy !0==1, !1==0, !!00==0!!11==1.

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


1
Tôi chỉ cố gắng để tìm ra một giải pháp dựa trên ***, nhưng bạn đánh bại tôi vào nó!
Giuseppe

@Giuseppe Tôi không tin rằng giải pháp của tôi là tối ưu (nhu cầu về dấu ngoặc xung quanh !0là khó chịu). Có thể có một cái gì đó ngắn hơn -*, nhưng tôi chưa tìm thấy giải pháp nào như vậy ...
Robin Ryder

2

Khối , 6 byte

O.1)W@

In 2.

  O
. 1 ) W
  @

Đẩy 1, )tăng, Wnhảy sang trái để Oxuất ra 2@kết thúc chương trình.

Nhân đôi, rõ ràng OO..11))WW@@, trên một khối là:

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

Nó đẩy 1hai lần, )tăng hai lần, Wnhảy sang trái một lần nữa, nó đặt nó ở phía bên phải Ohướng về phía bắc, đầu ra 3, và sau đó lệnh tiếp theo là @kết thúc chương trình.

Hãy thử trực tuyến!

Nhân đôi trực tuyến!


2

Klein , 8 6 byte

/3+@4\

Đơn , đôi

Giải trình

Đối với đĩa đơn, chương trình đi theo một con đường khá đơn giản. Chiếc gương đầu tiên làm chệch hướng nó thành cái thứ hai làm lệch hướng nó qua4 đến hết chương trình.

Đôi là phức tạp hơn một chút. Đây là:

//33++@@44\\

Hai gương đầu tiên hoạt động như nhau, tuy nhiên có một gương mới do nhân đôi làm lệch hướng ip trở lại từ đầu, nó bị bắt bởi bản sao của gương đầu tiên và bị lệch về phía cuối. Tất cả những gì được chạy là 33++đánh giá đến 6.


2

TI-Basic, 3 byte

Độc thân:

int(√(8

Biểu thức cuối cùng được trả về / in ngầm trong TI-Basic, vì vậy bản in này 2

Nhân đôi:

int(int(√(√(88

Trả về / in 3

TI-Basic là ngôn ngữ được mã hóa ; int(, √(8là mỗi một byte trong bộ nhớ.


Về mặt kỹ thuật, thông số kỹ thuật thách thức nêu rõ khi mỗi nhân vật được nhân đôi, nhưng tôi sẽ cho phép điều này và cập nhật thông số kỹ thuật
Skidsdev

2

Ruby REPL, 8 byte

";3#";22

REPL chỉ in giá trị cuối cùng được ước tính : 22.

Nhân đôi:

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

Lần này 33là giá trị cuối cùng được đánh giá. Chuỗi được loại bỏ một lần nữa và #bắt đầu một nhận xét.


2

> <>, 19 8 byte

32b*!{n;

In 22
thử Hãy trực tuyến!

Giải trình:

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

Nhân đôi:

3322bb**!!{{nn;;

In 33
thử Hãy trực tuyến!

Giải trình:

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

Phiên bản cũ:
Bình thường:

11+!vn;
    n
    ;

In 2
thử Hãy trực tuyến!

Giải trình:

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

Nhân đôi:

1111++!!vvnn;;
        nn
        ;;

In 3
thử Hãy trực tuyến!

Giải trình:

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
Tôi nghĩ bạn cũng nên sao chép các dòng mới.
Erik the Outgolfer 17/07/17

@EriktheOutgolfer Không còn dòng mới nữa.
KSmarts

1

Zsh , 14 byte

<:|echo 22
3
:

Hãy thử trực tuyến!

Có được một chương trình đầy đủ bằng ngôn ngữ không chơi gôn để in bất cứ thứ gì có mã nguồn trùng lặp như thế này là một thách thức. Zsh rất hữu ích cho việc này, vì các tệp và heredocs được truyền hoàn toàn cho cat. Chúng ta hãy nhìn vào dòng đầu tiên trong cả hai trường hợp:

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

Miễn 3là không phải là một chương trình, chương trình đầu tiên sẽ chỉ in 22. Chương trình thứ hai sẽ được in 33bao quanh bởi các dòng mới bổ sung (do sự trùng lặp).


Nếu 3là một hàm / chương trình / bí danh, thì giải pháp 18 byte này vẫn sẽ hoạt động!

<:|echo 22\\c\
3
:

Hãy thử trực tuyến!

Cuối cùng \là tiếp tục dòng, vì vậy dòng mới bị loại bỏ, thực hiện hiệu quả câu lệnh echo echo '22\c3'. Các \cnguyên nhân gây ra tiếng vang dừng in sau 22đó (điều này cũng xảy ra để triệt tiêu dòng mới).


1

Perl 6 , 14 byte

'|d 3#';say 22

Hãy thử trực tuyến! Hãy thử gấp đôi!

Điều này sử dụng chức năng gỡ lỗi được đặt tên thuận tiện ddđể xuất chương trình nhân đôi thành STDERR. Để phân tách logic, chúng tôi bao gồm chương trình nhân đôi trong dấu ngoặc kép, sau đó hủy bỏ nhau khi nhân đôi, cùng với một ký tự #nhận xét để nhận ra chương trình bình thường không hợp lệ.



0

MathGolf , 2 byte

▬)

Hãy thử trực tuyến! Hãy thử nó

Tương tự như các câu trả lời khác ở chỗ, lệnh đầu tiên tạo ra số 1chẵn khi nhân đôi và lần thứ hai tăng nó. Trong trường hợp này, tôi đã sử dụng phép lũy thừa ngược ( 0**0 = 0**0**0 = 1) nhưng nó cũng có thể là bất kỳ !£≤°hướng dẫn nào và có lẽ tôi còn bỏ lỡ nhiều hơn.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.