สองครั้งไม่ใช่สองครั้ง


36

ขึ้นอยู่กับความท้าทายนี้

ในจังหวะเกมosu! ตัวดัดแปลงความยากลำบาก "สองครั้ง" จะเพิ่มความเร็วเพียง 50% เท่านั้น

งานของคุณคือการเขียนโปรแกรมที่ผลบวกแม้จำนวนเต็ม (สูงกว่า 0) และเมื่อแต่ละไบต์ / ตัวอักษร (ที่คุณเลือกที่) ในรหัสต้นฉบับของคุณซ้ำก็ควรส่งออกจำนวนคูณด้วย 1.5

ตัวอย่างเช่นหากซอร์สโค้ดของคุณคือABCและเอาต์พุต 6 ดังนั้นAABBCCควรเอาต์พุต 9

ปฏิบัติตามกฎการท้าทายดั้งเดิม:

กฎระเบียบ

  • คุณต้องสร้างโปรแกรมเต็มรูปแบบ
  • แหล่งที่มาเริ่มต้นจะต้องมีความยาวอย่างน้อย 1 ไบต์
  • จำนวนเต็มทั้งสองต้องอยู่ในฐาน 10 (ห้ามส่งออกในฐานอื่นหรือด้วยเครื่องหมายทางวิทยาศาสตร์เป็นสิ่งต้องห้าม)
  • โปรแกรมของคุณจะต้องไม่รับอินพุต (หรือมีอินพุตที่ไม่ได้ใช้และว่างเปล่า) และต้องไม่เกิดข้อผิดพลาด (คำเตือนของคอมไพเลอร์จะไม่ถือว่าเป็นข้อผิดพลาด)
  • อนุญาตให้แสดงเอาต์พุตจำนวนเต็มด้วยการเว้นวรรคต่อท้าย / นำหน้า
  • คุณไม่สามารถรับบรรทัดใหม่ระหว่างสำเนาของแหล่งที่มาของคุณ
  • นี่คือดังนั้นไบต์ที่น้อยที่สุดในแต่ละภาษาจะชนะ!
  • มีการใช้ช่องโหว่เริ่มต้น

ฉันคิดว่านี่จะไม่สำคัญน้อยไปกว่าความท้าทายดั้งเดิม แต่หวังว่าเราจะเห็นคำตอบที่สร้างสรรค์และไม่เหมือนใคร!


@ ทำให้write a program that outputs a positive even integerใช่มันจะ ทุกเลขคู่สามารถคูณด้วย 1.5 เพื่อให้ได้จำนวนเต็มทั้งหมด
Skidsdev

ดูเหมือนจะเป็นล่อให้ฉัน
Erik the Outgolfer

@EriktheOutgolfer คล้ายกันมาก แต่ฉันแน่ใจว่าอันนี้จะยากกว่านี้มาก (เว้นแต่ฉันจะพลาดอะไรบางอย่างที่ชัดเจน)
TheLethalCoder

9
อักขระที่ซ้ำกันอาจทำให้ภาษาที่ไม่สำคัญไม่สามารถเข้าถึงได้ ฉันสงสัยว่ามีวิธีการแก้ปัญหาในภาษาที่ไม่ใช่ตัวอักษรคำสั่งหรือการแสดงออก
Keyu Gan

3
@TheLethalCoder full programอาจจะเป็นอุปสรรคที่ใหญ่ที่สุดคือ มันยากที่จะจินตนาการว่าโปรแกรมที่ซ้ำกันยังคงมีจุดเข้าใช้งาน / ฟังก์ชั่นที่ถูกต้อง
Keyu Gan

คำตอบ:


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ทำงานได้ดี ...
ข้าราชการใน

18
ผมบริสุทธิ์ใจอนุมัติของกลยุทธ์ของการเลือกภาษา TIO สุ่มและการเรียนรู้มันท้าทาย
Skidsdev

@officialaimm คุณพูดถูกขอบคุณ
LiefdeWen

1
4/6 <- 4 หารด้วยไม่มีอะไร -> 4; จากนั้น 6. 44 // 66 <- 4 หารด้วย 4 -> 1; ไม่มีอะไรหารด้วยอะไร -> ไม่มีอะไร; แล้ว 6 และ 6 อาจจะ ทำได้ดีแม้ว่า
V. Courtois

1
จะไม่46vtทำเช่นเดียวกัน?
Veedrac

21

เยลลี่ 2 ไบต์

!‘

ลองออนไลน์!

คำอธิบาย:

!‘ Implicit 0
!  Factorial
 ‘ Increment

รุ่นสองเท่า:

!!‘‘

ลองออนไลน์!

คำอธิบาย:

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

ถ้าคุณทำมันเป็นครั้งที่สามมันจะไปจาก 3 -> 4 ไม่ใช่ 3-> 4.5 ??
tuskiomi

@tuskiomi ไม่เพราะไม่คาดว่าจะทำเช่นนั้น
Erik the Outgolfer

14

LibreOffice Calc ขนาด 8 ไบต์

=A2+3
19

บันทึกเป็น*.csvและเปิดใน LibreOffice Calc คุณจะได้รับ 22 ใน A1


เพิ่มเป็นสองเท่า:

==AA22++33

1199

คุณจะได้ 33 ใน A1


1
ตัวเลือกภาษาที่ฉลาด!
Giuseppe

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 เป็นแบบย่อเพื่อขอบคุณ]
เจ้าหน้าที่ราชการ

8
@officialaimm :)[บางครั้งเราใช้สิ่งนั้นเพื่อรับnองค์ประกอบแรกจากอาร์เรย์ ... ]
Luis Mendo

10

เป็นกลุ่ม 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 ไบต์

โดยAlex Varga :

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

1
วิธีการเกี่ยวกับ:
Alex Varga

@AlexVarga หวานมาก
tsh

@ V. ขอให้คุณใช้โหมดเข้มงวด
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 REPLสิ่งนี้จะสร้างผลลัพธ์และเป็นคำตอบที่ถูกต้อง คุณจะต้องลบคำตอบนี้หรือเปลี่ยนภาษาจาก python 2 เป็น python 2 repl
ตัวช่วยสร้างข้าวสาลี

@WeatWizard ขอบคุณและขอขอบคุณสำหรับความช่วยเหลือ! ฉันทำสิ่งนี้ถูกต้องหรือไม่?
Carl Schildkraut

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

คู่:

⍟⍟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 เป็นแบบ monospaced อย่างไรก็ตาม นั่น Mine prntscr.com/fwp0l0
Uriel

อ่ามันยังอ่านได้และเป็นคำตอบที่ยอดเยี่ยมไม่ว่า :)
Kevin Cruijssen

มันแสดงผลเป็น monospace สำหรับฉัน อาจเป็นเพียงแค่ขึ้นอยู่กับตัวอักษร ( 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

โอเวอร์โหลดนั้นยุ่งยาก ... ;)
Erik the Outgolfer

AB],ยังใช้งานได้
geokavel


4

Neim , 2 ไบต์

𝐓>

ลองออนไลน์!

คำอธิบาย:

𝐓> Implicit 0
𝐓  Factorial
 > Increment

รุ่นสองเท่า:

𝐓𝐓>>

ลองออนไลน์!

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

4 จาก 5 คำตอบ ... คุณจะทำกับสิ่งนี้จริงๆ!
TheLethalCoder

5
@TheLethalCoder อย่างน้อยก็ยังไม่ถึง 15 ;)
Erik the Outgolfer


3

R , 11 ไบต์

8*(!0)+1*!1

ลองออนไลน์!

!คือการปฏิเสธและ**เป็นการยกกำลัง (นามแฝง^) Numerics ได้รับการแปลงเป็น booleans: 0เพื่อFALSEคนอื่น ๆ TRUEทุกคนที่จะ Booleans ได้รับการแปลงเป็นจำนวนเต็ม: FALSEการ0, TRUEการ1ดังนั้น!0==1, !1==0, และ!!00==0!!11==1

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


1
ผมก็แค่พยายามที่จะเกิดขึ้นกับการแก้ปัญหาการพึ่งพิง*และ**แต่คุณชนะฉันไป!
Giuseppe

@Giuseppe ฉันไม่มั่นใจว่าวิธีแก้ปัญหาของฉันดีที่สุด (ความจำเป็นในการวงเล็บรอบ!0เป็นที่น่ารำคาญ) อาจจะมีบางสิ่งบางอย่างที่สั้นลงด้วย-และ*แต่ฉันไม่ได้พบวิธีการแก้ปัญหาดังกล่าวยัง ...
โรบินไรเดอร์

2

Cubix , 6 ไบต์

O.1)W@

2พิมพ์

  O
. 1 ) W
  @

Pushes 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 เป็นภาษา tokenized ; int(, √(และ8แต่ละไบต์ในหน่วยความจำ


ในทางเทคนิคความท้าทายสเป็คระบุไว้อย่างชัดเจนเมื่อตัวละครแต่ละตัวเป็นสองเท่า แต่ฉันจะอนุญาตให้นี้และอัปเดตสเป็ค
Skidsdev

2

Ruby REPL ขนาด 8 ไบต์

";3#";22

REPL จะพิมพ์ค่าสุดท้ายที่ประเมินเท่านั้น: 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
ฉันคิดว่าคุณควรทำซ้ำบรรทัดใหม่ด้วย
Erik the Outgolfer

@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

ลองออนไลน์! ลองสองเท่า!

ใช้ฟังก์ชัน debug ที่มีชื่ออย่างสะดวกddในการส่งออกโปรแกรมสองเท่าไปยัง STDERR เพื่อแยกลอจิกเราใส่โปรแกรมสองเท่าในเครื่องหมายคำพูดซึ่งจะยกเลิกซึ่งกันและกันเมื่อเป็นสองเท่าพร้อมด้วยอักขระ#ความคิดเห็นเพื่อคอมเม้นท์โปรแกรมปกติที่ไม่ถูกต้องในขณะนี้



0

MathGolf 2 ไบต์

▬)

ลองออนไลน์! ลองเพิ่มเป็นสองเท่า

คล้ายกับคำตอบอื่น ๆ ในคำสั่งแรกที่สร้าง1แม้เมื่อเพิ่มเป็นสองเท่าและครั้งที่สองเพิ่มขึ้น ในกรณีนี้ฉันใช้การยกกำลังแบบย้อนกลับ ( 0**0 = 0**0**0 = 1) แต่อาจเป็น!£≤°คำสั่งใดก็ได้และอาจยิ่งพลาดไปกว่าเดิม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.