Tạo đầu ra gấp đôi chiều dài của mã


85

Các thách thức

Viết một chương trình hoàn chỉnh ghi gấp đôi số byte vào đầu ra tiêu chuẩn so với độ dài của chương trình.

Quy tắc

  • Chương trình phải ghi các ký tự ASCII vào đầu ra tiêu chuẩn.

  • Nội dung của đầu ra không quan trọng.

  • Đầu ra, được đo bằng byte, phải chính xác gấp đôi độ dài của chương trình, cũng được đo bằng byte, trừ khi bạn hoàn thành phần thưởng.

  • Bất kỳ dòng mới nào được bao gồm trong số byte của đầu ra.

Thêm

Chương trình của bạn có thể tùy chọn lấy một số n, làm đầu vào. Nếu vậy, đầu ra phải chính xác n * program lengthbyte. Bạn có thể giả sử rằng n sẽ luôn là một số nguyên dương. Nếu không có đầu vào nào được cung cấp, nphải mặc định là 2.

Nếu bạn làm điều này, bạn có thể trừ 25 byte khỏi điểm số của bạn.

Chương trình ngắn nhất sẽ thắng.

Những hạn chế

  • Không có sơ hở tiêu chuẩn.

  • Chương trình phải dài ít nhất 1 byte.

  • Không thêm khoảng trắng không cần thiết vào mã nguồn để thay đổi độ dài của nó. Tương tự, ý kiến ​​không được tính.

  • Trừ khi bạn hoàn thành phần thưởng, chương trình phải chấp nhận không có đầu vào. Nếu bạn hoàn thành phần thưởng, số nguyên phải là đầu vào duy nhất.

Điểm thấp nhất (độ dài chương trình tính bằng byte - tiền thưởng) sẽ thắng.

Câu trả lời ngắn nhất cho mỗi ngôn ngữ sẽ thắng cho ngôn ngữ đó .

Bảng xếp hạng

Dưới đây là một Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

# Perl, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


1
Đối với phần thưởng, đầu ra phải là chính xác n * program lengthbyte, hay đó là mức tối thiểu?
xnor

2
Nó phải chính xác
Daniel M.

3
Có vẻ như đoạn mã phải được sửa đổi để xử lý điểm âm.
El'endia Starman

40
Phần thưởng -25 về cơ bản là bắt buộc đối với một số ngôn ngữ, vì nó cho phép họ đạt được điểm số âm. Trong tương lai, tôi khuyên bạn nên sử dụng phần thưởng phần trăm hoặc chỉ tạo phần thưởng cho câu hỏi nếu bạn thực sự muốn có câu trả lời. Hoặc, không có tiền thưởng.
xnor

4
Đối với "không có đầu vào nào được cung cấp", chúng ta có giả sử chuỗi trống được truyền vào không? Tôi không thể thấy cách người ta sẽ đối phó với người dùng không bao giờ nhập dữ liệu đầu vào và chương trình chỉ chờ.
xnor

Câu trả lời:


138

HQ9 + , 2 byte

QQ

đầu ra

QQQQ

Tôi nghĩ rằng nó không bị cấm ở đây.


14
Nó có thể không bị cấm, nhưng nó không liên quan lắm ... chờ đã, làm thế nào mà nó có được tám upvote?
John Dvorak

58
@JanDvorak Nhiều khi tôi không thích HQ9 +, điều này với tôi là một cách sử dụng sáng tạo. Cách sử dụng này rất có thể đã không được hình dung khi HQ9 + được tạo ra, điều này có thể nói nhiều hơn so với hầu hết các chương trình Hq9 + khác. +1 từ tôi.
Chấn thương kỹ thuật số

13
Tôi thậm chí còn không biết rằng Q in ra mã nguồn của chương trình. Tôi nghĩ rằng nó chỉ in một Q. Hoàn thành tốt để nhận ra sự khác biệt quan trọng!
Timwi

7
@ LegionMammal978 Về mặt kỹ thuật, đây là một thách thức đầu ra liên tục, có nghĩa là các ngôn ngữ không lập trình được cho phép.
một spaghetto

3
Điều này có 120 phiếu. 1.200 đại diện để gõ QQvào một thông dịch viên.
Stan Strum

95

Shakespeare, 768

Vâng, Shakespeare không phải là một ngôn ngữ chơi gôn. Đầu ra 1.536 không gian.

Rosencrantz and Guildenstern: A Series of Tedious Events.

Rosencrantz, a count of extraordinary determination.
Guildenstern, a spacy character.

Act I: The Long Conversation

Scene I: A Tortured Friendship

[Enter Rosencrantz and Guildenstern]

Rosencrantz:
 You are a gentle, noble, valiant, loyal, loving companion.

Guildenstern:
 You are nothing!

Scene II: Asking the Hard Questions

Rosencrantz:
 Speak your mind.

Guildenstern:
 You are as fair as the sum of yourself and a daisy. Are you as
 daring as the sum of a big, bold, fiery, feisty, rough, rowdy,
 ham-fisted, hawk-eyed, broad-shouldered, bright-eyed lad and a
 large, yellow, vicious, hairy, wild, scary, long-tailed,
 sharp-clawed, small-eared lion?

Rosencrantz:
 If not, let us return to scene II.

Chỉnh sửa: 256

Được rồi, tôi thực sự sẽ chơi nó. Lưu ý rằng phần trên không biên dịch trong bất kỳ triển khai Shakespeare nào hiện có vì tôi đã viết nó một cách siêng năng bằng tay (nhưng sẵn sàng bảo vệ tính đúng đắn của nó.)

Dưới đây chuyển thành C với một cảnh báo trong spl-1.2.1 và xuất ra 512 khoảng trắng:

Ummm.Ajax,1.Puck,2.Act I:I.Scene I:A.[Enter Ajax and Puck]Ajax:You old old old old old cow.Puck:You are zero!Scene II:B.Ajax:Speak thy mind.Puck:You are the sum of you and a red cat.Are you as big as the square of me?Ajax:If not, let us return to scene II.

15
Tôi sẽ +1 nếu bạn thực sự chơi golf này.
lirtosiast

1
Cách thức này của whitchcraft là gì? Tôi thậm chí còn không biết những thứ như vậy tồn tại ...
Malavos

10
woah, bạn đã chơi nó Thiên đường thánh.
Malavos

2
@Malavos Tôi chỉ nói đùa về cách bạn viết sai chính tả, xin lỗi - cả những gì và có lẽ đều ổn
con mèo

2
Không, tôi yêu cầu sự tha thứ của bạn nếu tôi có vẻ khó chịu hoặc phòng thủ. Tôi chỉ đang làm một tài liệu tham khảo cho Futurama! :) Trên một ghi chú nghiêm túc, tôi vẫn ngạc nhiên với câu trả lời này. Chúng tôi cần nhiều hơn những người trên trang web.
Malavos

69

Nhớ lại, 17 byte

................!

16 NOOPs. Sau đó, trình gỡ lỗi !được gọi và đưa bộ nhớ vào bàn điều khiển. Bộ nhớ trống, nhưng tiêu đề dài 34 byte:

-- STATE DUMP --
----------------

Hãy thử nó ở đây .


13
Đây là một trong những câu trả lời hay hơn IMO.
con mèo

67

Toán học REPL, 1 byte

#

In #1.


14
Câu hỏi nói "viết một chương trình hoàn chỉnh"; đây chỉ là một đoạn REPL.
LegionMammal978

60

CJam, -17 byte

r2e|i8,*

Mã nguồn dài 8 byte và đủ điều kiện nhận phần thưởng -25 byte .

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

r         e# Read a token from STDIN.
 2        e# Push 2.
  e|      e# Logical OR; keep the token if it's not empty, 2 otherwise.
    i     e# Cast to integer.
     8,   e# Push [0 1 2 3 4 5 6 7].
       *  e# Repeat the array the corresponding number of times.

4
Tào lao Làm tốt.
The_Basset_Hound

1
Làm thế nào là byte âm?
Nick T

3
@NickT 8 byte (mã nguồn) - 25 byte (tiền thưởng).
Dennis

16
Bạn có thể lưu vài triệu bản sao nếu hết dung lượng đĩa.
Robert Fraser

Không, tôi nghĩ siêu dữ liệu sẽ làm cho nó tích cực
CalculatorFeline

47

Con trăn 2.6, 10

print`-.1`

In -0.10000000000000001, đó là 20 ký tự.

Lưu ý rằng chuỗi repr cho thấy độ chính xác cao hơn. print-.1chỉ cho -.1, và print.1/3cung cấp cho 0.0333333333333cho chỉ có 13 chữ số chính xác.


5
Điều này không còn hoạt động trong Python 2.7 hoặc 3.1.
Anders Kaseorg

@AndersKaseorg Vậy repl.it có sai không?
mbomb007

2
@ mbomb007 Rõ ràng. GitHub cho rằng đó không phải là điều duy nhất sai. Ideone đồng ý với CPython.
Anders Kaseorg

Nhận xét tương tự như đối với câu trả lời khác của bạn: không phải điều này in một dòng mới, cho 21 byte đầu ra?
Martin Ender

1
Ý bạn là print`+.1`sao?
mbomb007

46

Hạt giống , 10 byte

4 56111240

Điều này biên dịch cho chương trình Befunge (được tìm thấy bởi lực lượng vũ phu)

9k.@

tạo ra 20 byte sau khi chạy (được thử nghiệm trong CCBI, lưu ý dấu cách):

0 0 0 0 0 0 0 0 0 0 

Không quen thuộc với Befunge 98, tôi đã phải kiểm tra lại thông số kỹ thuật một vài lần cho cái này:

  • k Tôi dường như khá thất vọng, thực hiện một lần nữa so với dự định do IP chuyển sang hướng dẫn lặp đi lặp lại
  • Các ngăn xếp của Befunge 98 có các số 0 vô hạn ở phía dưới
  • . xuất ra dưới dạng số, theo sau là khoảng trắng

18
.... tôi .... chỉ là .... không thể.
Daniel M.

44

R, 3 2 byte

!0           # NOT FALSE

Đầu ra

TRUE

Wow, cuối cùng R, cuối cùng.

Có vẻ như {}công việc cũng vậy, nó xuất raNULL

Tiền thưởng 33 16 byte:

rep(1,number*16)

Đầu ra

# if number is not defined
> rep(1,number*16)                     
> Error: object 'number' not found     # output is 32 (or 2*16) bytes long error

# if number is defined
> number = 3                            
> rep(1,number*16)                     # output is 16*number bytes long
> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

2
Tôi hy vọng việc sử dụng tên "số" cho biến không tương đương với "thêm khoảng trắng không cần thiết vào mã nguồn"
Mutador

26

Matlab, 7 5 byte

Ít hơn 2 byte nhờ @flawr!

123;3

Đầu ra:

nhập mô tả hình ảnh ở đây

Đầu ra chứa , vì vậy 10 byte.newline ans = newline newline 3 newline


1
Chúng ta hãy hy vọng không ai có format compactnhư mặc định :)
Sanchises

2
@sanchises :-) Vâng, điều đó phụ thuộc vào cách tùy chọn của Matlab đã được đặt. Nhưng format looselà tùy chọn mặc định
Luis Mendo

2
Thế còn 123;4? Là ba byte ngắn hơn =)
flawr

@flawr Ý kiến ​​hay! Đăng nó cho mình!
Luis Mendo

Không, quá nhiều cảm hứng từ câu trả lời của bạn =)
flawr

25

JavaScript, 2 byte!

Thậm chí ngắn hơn giải pháp 3 byte:

!0

Trả lại truesau khi chạy.


2
Bạn nên lưu ý rằng điều này chỉ hoạt động trong môi trường REPL
Cyoce

21

Con trăn 2, 11

print`id`*1

In đại diện chuỗi của tích hợp id, là 22 ký tự:

<built-in function id>

Các *1là để lấy mã đến 11 ký tự. Bạn cũng có thể làm print id;00.

11 thay thế nhàm chán hơn là:

print'1'*22
print 9**21

Tôi đã chơi xung quanh với các số phức, nhưng thật không may print.8/-9jlà một char ngắn
Sp3000

Đừng in những dòng mới này, đưa số byte của đầu ra lên 23?
Martin Ender

1
@ MartinBüttner Quy tắc đó đã được chỉnh sửa sau đó, nhưng thay đổi nó thành print id,;1đủ để ngăn chặn dòng mới. Nó cũng không thêm dấu cách.
xnor

@xnor print 9**21không hoạt động. Đó là 21 ký tự. print 9**23hoạt động mặc dù
Koishore Roy

18

đc, 10 - 25 = -15

2?A*Ar^1-n

Có một dòng trống cho "không có đầu vào".

Tính 10 ^ (10 * n) - 1, trong đó n là đầu vào hoặc 2 nếu đầu vào trống. In một chuỗi 9s có độ dài cần thiết.

  • 2 đẩy 2 đến ngăn xếp trong trường hợp đầu vào trống
  • ? đẩy đầu vào vào ngăn xếp
  • Ađẩy 10 đến ngăn xếp (dc có phím tắt A- Ftrong 10 - 15)
  • * bật hai lần và nhân (nhân đầu vào với 10)
  • A đẩy 10 đến ngăn xếp
  • r đảo ngược hai yếu tố ngăn xếp
  • ^ lũy thừa 10 ^ (đầu vào 10 *)
  • 1- trừ 1 từ đầu ngăn xếp
  • n in không có dòng mới.

dang, thật là thông minh Và may mắn với độ dài mã ở đó :) Nhưng có lẽ bạn nên thêm một lời giải thích nhỏ cho người không quen. Và tôi nghĩ rằng số lượng dòng mới, vì vậy bạn có thể nên sử dụng nthay vì p.
daniero

17

TI-Basic, 3 byte

1ᴇ5

In 100000.


Trên thực tế, tôi nghĩ rằng dòng mới sẽ được tính, vì vậy bạn chỉ có thể làm 0trong 1 byte.
lirtosiast

1
Thế còn ᴇ3? Và @lirtosiast, vì TI-Basic không có dòng mới, tôi nghi ngờ về điều đó.
Jakob

16

Brainfuck, 14 byte

+++++++[....-]

Đây là một bài tập toán học nhỏ. Hãy biểu thị số lượng +ký tự trong mã theo avà số lượng .ký tự theo b.

Mã này xuất ra các a*bbyte, với các giá trị từ axuống đến 1(đây là các byte không phải ASCII, nhưng có vẻ như theo thông số kỹ thuật). Độ dài của mã là a+b+3. Vì vậy chúng tôi có

a*b = 2 * (a+b+3)

Thử các giá trị khác nhau cho ab, chúng tôi thấy rằng mức tối thiểu a+b+3đạt được cho

a = 4       or       a = 7
b = 7                b = 4

Một lập trình viên Brainfuck kỳ cựu sẽ phát hiện ra +[[>....]-<<+]tùy chọn này.
orthoplex

@orthoplex Khi tôi đọc bình luận của bạn, tôi lập tức portmanteau'd brainfuck và lập trình viên: Brainfucker
Poke

15

gs2 , -18 byte

CP437 :W↕0!↨.2

Đổ lục giác: 57 12 30 21 17 2e 32

Wđọc các số từ STDIN vào một danh sách. ↕0nối thêm 2 vào danh sách và !trích xuất phần tử đầu tiên. Sau đó ↨.(danh sách [0,1,2,3,4,5,6]) được lặp lại ( 2) này nhiều lần.

Điều này rất giống với câu trả lời CJam của Dennis - gs2 chỉ kết hợp rithành một byte.

Lưu ý : Tôi đã phải sửa một lỗi trong quá trình gs2triển khai để làm việc này: trước đây, mỗi chương trình có một dòng mới ẩn được gắn vào đầu ra của nó, điều này hoàn toàn không có chủ ý. Nó chỉ nổi lên sau khi tôi cố gắng giải quyết chương trình này (ngôn ngữ được thiết kế cho golf vô chính phủ, mà bỏ qua các dòng mới trong tất cả các vấn đề), và tôi chỉ đẩy một bản sửa lỗi để thành thạo ngay bây giờ, vì vậy hãy thoải mái nhận câu trả lời này bằng một hạt Muối.


1
Câu trả lời đầu tiên của GS2 tôi đã thấy rằng không có bất kỳ ký tự phù hợp với thẻ nào!
Cyoce

14

Perl 5, 16 byte - 25 = -9

$_ =$]x($_*2||4)

Đây là một cách tiếp cận kỳ quặc cho vấn đề.

Chạy với -pđối số dòng lệnh.

Tôi thấy một câu trả lời Perl bên dưới đã sử dụng một biến đặc biệt để in thêm văn bản - và do đó rút ngắn số byte của chúng. Vì vậy, tôi đã sử dụng một biến đặc biệt dài hơn nhiều. Nó in 8 ký tự với tên biến 2 ký tự. Do đó, với số byte là 16 (được đệm bằng một ký tự khoảng trắng để tạo thành 16), nó sẽ in ra 2 * $], $]phiên bản Perl được in dưới dạng 5.xxxxxx, phụ thuộc vào phiên bản Perl của bạn. Không có đầu vào, nó in ra bốn lần, bằng 8*4hoặc 32gấp đôi số byte của mã.

Tôi yêu Perl.


Tôi nghĩ rằng điều này không thành công cho đầu vào trống. Theo các quy tắc, nếu không có đầu vào nào được cung cấp, bội số sẽ mặc định là 2.
Alex A.

@AlexA. Chết tiệt, tôi đã bỏ lỡ điều đó. Mới chơi mã golf. Chỉnh sửa đến, nhưng câu trả lời của tôi hiện có rất nhiều ký tự vì tôi không biết làm thế nào để làm điều này sáng tạo hơn trong perl :(
Codefun64

2
Xin chào, một vài mẹo nữa có thể giúp bạn ở đây, theo mặc định trong tập lệnh chương trình popshiftlàm việc @ARGV(trong subđó chúng hoạt động @_) để bạn có thể làm gì đó như tắt $n=pop||2mã đầu tiên và ;}cuối cùng bạn có , mà hầu như luôn luôn có thể chỉ }để cứu người khác. Một cái gì đó có thể giúp bạn tiết kiệm nhiều ký tự hơn là toán tử lặp lại chuỗi x, xem xét print 1x20hoặc một cái gì đó dọc theo các dòng đó ... :) Hy vọng rằng sẽ giúp!
Dom Hastings

@DomHastings Man, cảm ơn! Tôi đã giảm xuống còn 2 byte vì sự giúp đỡ của bạn :) Cảm ơn bạn rất nhiều vì những gợi ý của bạn.
Codefun64

1
Tôi nghĩ bạn có thể rút ngắn nó để điều này print"n"x(21*pop||42). Chạy trên dòng lệnh vớiperl -e'print"n"x(21*pop||42)' 3 | wc -c
hmatt1

14

Bình thường , 10 9 - 25 = -16

-1 bởi Dennis

**N9?zvz2

In [đầu vào] * 9 ký tự trích dẫn hoặc 2 * 9 nếu đầu vào trống.

isaacg có câu trả lời ngắn hơn ở đây

Bình thường , 1 byte

T

In 10. Đó là một biến tích hợp khởi tạo thành 10.


Nó sẽ hữu ích nếu .x làm việc với lỗi. Có một lời biện minh cho lý do tại sao nó không?
lirtosiast

2
Dự đoán tốt nhất của tôi là điều đó Qkhiến Pyth đánh bại đầu vào trước khi mã thực tế được thực thi. **N9.xvz2hoạt động như mong đợi, nhưng nó không ngắn hơn **N9?zvz2.
Dennis

2
Bất kỳ dòng mới nào được bao gồm trong số byte của đầu ra. Tđầu ra 10và một dòng mới. Sử dụng d, đó là một không gian có thêm một dòng mới
Stan Strum

9

Macaroni 0.0.2 , 23 ký tự

print tobase pow 32 9 2

In 32 9 ở dạng nhị phân, có thể thuận tiện hóa ra dài 46 ký tự (không có 1000000000000000000000000000000000000000000000), mà không có dòng mới.


9

JavaScript, 4 byte

~$ cat main.js
+1/0
~$ nodejs main.js
Infinity

Tôi nghĩ rằng đây là giải pháp JS ngắn nhất có thể mà không cần ES6: P


Phiên bản nào của NodeJS bạn có? Điều này không làm việc với tôi.
Dennis

1
Điều này cũng hoạt động trên bảng điều khiển Firefox.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
Dòng mới theo dõi nên được bao gồm trong chiều dài đầu ra.
lirtosiast

Node.js v0.10.40hoàn toàn không in bất cứ thứ gì vì không có lệnh in. Bạn có phiên bản Node.js khác không hoặc phiên bản này chỉ hoạt động trong trình bao in đánh giá một dòng? (trong trường hợp tôi không nghĩ câu trả lời này sẽ hợp lệ).
Nateowami 7/10/2015

4 byte? Hãy làm cho điều này thực sự thích, kích thước chính xác.
Hệ điều hành sao

9

C, 27 25

main(){printf("%50f",0);}

Cảm ơn @Titus đã loại bỏ 2 byte


Và để biết giải pháp 16 byte không cạnh tranh của tôi trong C, hãy truy cập vào đây: https://codegolf.stackexchange.com/a/111330/16513

^ Tôi nói không cạnh tranh vì mã lỗi có thể phụ thuộc vào trình biên dịch của bạn, Cũng lưu ý rằng tôi đang sử dụng GCC trong giải pháp đó. Ngoài ra tôi không chắc chắn liệu nó có phá vỡ quy tắc 1 hay không, tôi nghĩ có lẽ nó đã làm như vậy nên tôi đã đi trước và gắn nhãn là không cạnh tranh


1
Tôi không nghĩ rằng đó là một chương trình C hợp lệ nhưng main(){printf("%0.XXf",0);}hoạt động.
wefwefa3

2
@Zereges Không, C có quy tắc "khai báo ngầm" thường cho phép bạn sử dụng công cụ mà không cần thiết #include. Trình biên dịch sẽ phát ra một cảnh báo, và đôi khi nó sẽ bị sập, nhưng nó thường sẽ hoạt động .
anatolyg

1
@AlbertRenshaw Ngoài ra, tôi không nghĩ rằng nó hoạt động ở đây .
Zereges

1
Lưu ý rằng 27 * 2! = 38.
mbomb007

1
@Zereges. Mã này không thể hiện hành vi không xác định. Các tính năng "khai báo ngầm" và "loại trả lại ngầm" không được dùng trong các tiêu chuẩn gần đây, nhưng việc sử dụng chúng vẫn được cho phép và kết quả được xác định rõ. Có những trường hợp trong việc sử dụng các tính năng như vậy gây ra hành vi không xác định, nhưng mã này không liên quan đến các tính năng đó.
Peter

7

V , 2 byte

Đầu ra này

ÿÿÿÿ

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

Giải trình

Đây là một câu trả lời thực sự khó hiểu và nó hoạt động bằng cách lạm dụng phần bên trong của V. Về cơ bản cách thức hoạt động của nó ÿlà một lệnh trong V báo hiệu chương trình kết thúc và bất kỳ lệnh chờ xử lý nào cũng phải hoàn thành. Mặt khác, một số kết thúc ngầm sẽ không hoạt động và việc diễn giải sẽ bị treo thường xuyên hơn. Lệnh này được tự động gửi nhiều lần vào cuối chương trình và hầu hết thời gian không ảnh hưởng đến đầu ra.

élà một lệnh chèn một ký tự đơn. Tuy nhiên, nó thực hiện điều đó bằng cách lấy một byte thô, vì vậy nó không hiểu ÿlà "kết thúc", nó diễn giải nó là "đây là ký tự bạn cần chèn." làm cho nó chèn ký tự này 4 lần thay vì một.


7

bash, 11 byte

Đây là cách sử dụng thú vị của một công cụ nén dữ liệu :) ...

gzip -f<<<2

Đây là một kết xuất hex của đầu ra (22 byte) ...

0000000: 1f 8b 08 00 e3 ce 32 59 00 03 33 e2 02 00 90 af  ......2Y..3.....
0000010: 7c 4c 02 00 00 00                                |L....

Điều này tạo ra 22 byte "ASCII mở rộng" (ví dụ 8 bit cho mỗi ký tự). Điều này dường như đáp ứng định nghĩa ASCII của OP nếu bạn đọc các bình luận trên bài đăng Câu hỏi.
Wossname

Trên TIO tôi có 16, nhưng trên máy linux của tôi, tôi đã nhận được 34
Stan Strum

@StanStrum, tôi không biết TIO là gì, nhưng 34 trong linux là số lẻ. Có lẽ bạn có gzip bí danh để sử dụng các công tắc khác nhau để bình thường?
Wossname

Tôi không biết nếu đó là trường hợp, nhưng điều đó có vẻ kỳ lạ. Tôi sẽ thử nó trên một số LiveCD để xem liệu tôi đã làm hỏng nó với một trong những chương trình của tôi @Wossname
Stan Strum

1
Tôi không phải là người đó và tôi sẽ không tận dụng lợi thế của đại diện 129 mới kiếm được. Tôi sẽ xem liệu tôi có thể tạo phiên bản hoạt động trên bản cài đặt Linux của mình không
Stan Strum

6

đc, 19 - 25 = -6

2?19*[1n1-d0<l]dslx

Lấy một số (2 được đẩy vào ngăn xếp làm bản sao lưu) và nhân nó với 19. In một 1(không có dòng mới) và giảm số. Vòng lặp trong khi số lớn hơn 0.


6

C ++, 80 byte

#include<iostream>
int main(){int i=0;while(i<20){std::cout<<&i;i++;}return 0;}

lưu ý ký tự dòng mới là hai ký tự. (nếu bạn không muốn, hãy thay đổi i <20 thành i <= 19 để quay lại cùng số byte.)

Đầu ra mẫu (sẽ thay đổi mỗi lần)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

cùng địa chỉ bộ nhớ 8 ký tự 20 lần.


Một số gợi ý chơi gôn: forvòng lặp ngắn hơn whilevòng lặp và cho phép bạn bỏ niềng răng, nó rẻ hơn một chút để sử dụng cstdiovà chỉ là printfmột chuỗi, và bạn không cần phải trả lại bất cứ điều gì.
Lu-ca

Bạn có thể tách cách tiếp cận của mình thành 63 byte: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}Nhưng đã có một câu trả lời ngắn hơn với cách tiếp cận hơi khác.
Movatica

6

CJam, -9

q_,{i}{;2}?G*'X*

Giải trình

  • q_,

Đọc toàn bộ đầu vào và đẩy nó, sau đó đẩy chiều dài.

  • {i}{;2}?

Nếu độ dài của đầu vào quá 0, chuyển đổi nó thành một số nguyên. Nếu không, bật đầu vào và đẩy 2.

  • G*

Đẩy 16 (độ dài chương trình), sau đó nhân nó lên 2 nếu không có đầu vào hoặc đầu vào.

  • 'X*

Đẩy X và nhân nó lên trên cùng của ngăn xếp.


@ThomasKwa Rất tiếc. Cập nhật trong một giây.
The_Basset_Hound

Dấu phẩy là không cần thiết, tuy nhiên bạn có thể tránh hoàn toàn "nếu" nếu bạn thực hiện logic "hoặc": q2e|isẽ cung cấp cho bạn số bạn muốn
aditsu

Ngoài ra, bạn có thể sử dụng S thay vì 'X, vấn đề duy nhất là đầu ra sẽ không hiển thị cho đến khi bạn chọn nó (tốt, nếu bạn chạy ngoại tuyến và chuyển hướng đến một tệp, đó không phải là vấn đề)
aditsu

Uh .. không có gì, tôi vừa thấy câu trả lời của Dennis: p
aditsu

Ngay cả với điều kiện, bạn có thể rút ngắn điều này. Bạn không cần tính toán độ dài, vì một chuỗi rỗng đã là falsey. Bạn cũng không cần phải bật chuỗi trống ra khỏi ngăn xếp, vì nó không đóng góp vào đầu ra. Điều này cũng cho phép yo để tránh niềng răng cho các chi nhánh khác. Tôi đã đưa ra điều này trước khi tôi xem bất kỳ câu trả lời nào : r_{i}2?SB**.
Reto Koradi

6

> <> , 19 + 2 (cờ -v) - 25 = -4 byte

l?!2f4+*v
-1o;!?::<

kiểm tra nó ở đây

Cảm ơn Cole và Sp3000

Đầu tiên kiểm tra chiều dài ngăn xếp, nếu 0 đặt 2 vào ngăn xếp. Nhân số đó với 21 (độ dài mã), sau đó xuất đại diện unicode của số đó và giảm số đó cho 1, lặp cho đến 0. (bạn sẽ phải kiểm tra đầu ra để xem các ký tự, vì trình duyệt sẽ không hiển thị chúng)


1
Vâng, xin lỗi để làm hỏng câu trả lời của bạn (nhưng nó ngắn hơn của tôi, nếu điều đó làm bạn cảm thấy tốt hơn). Chỉnh sửa: whoops nhấn enter quá sớm, mục nhập của bạn hiện tại không hợp lệ theo quy tắc "Bạn có thể giả sử rằng n sẽ luôn là số nguyên dương. Nếu không có đầu vào nào được cung cấp, n phải mặc định là 2." Tôi cũng nghĩ rằng nó có thể in quá nhiều ký tự (Nó đi từ 14 đến 0, tức là 15 ký tự, không phải 14 ký tự). Nếu tôi đúng, l0=?2f6+*vlà dòng đầu tiên và 1-::0=?;o>là dòng thứ hai sẽ làm cho nó đúng.
cole

Hừm, không chắc ý bạn là gì. Nó không nên in 0 trong mọi trường hợp. Đặt 2 làm đầu ra ngăn xếp ban đầu (EDIT: thứ tôi không thể dán), ít nhất là sử dụng bộ đếm char này , là 28 ký tự.
torcado

Tôi hiểu những gì bạn đang nói bây giờ. Tôi đã giải thích "Chương trình của bạn có thể tùy ý lấy một số, n, làm đầu vào" nghĩa là nếu đầu vào là 2. Tôi sẽ chỉnh sửa câu trả lời, cảm ơn! (tôi cũng có thể lưu một số bằng cách sử dụng một chuỗi thay vì số)
torcado

Rất vui được giúp đỡ, đặc biệt nếu đó là> <>.
cole

2
?!thường tốt hơn0=?
Sp3000

6

JavaScript (ES5), 68 byte - 25 phần thưởng = 43

alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))

(trong trường hợp trình duyệt của bạn sẽ không cho phép đoạn mã chạy vì lý do bảo mật, hãy thử fiddle này http://jsfiddle.net/thePivottt/c3v20c9g/ )

Tập lệnh này chỉ hoạt động trong một trình duyệt theo sau ít nhất DOM3 (có Node.textContent) và ECMAScript 5 (hoặc có lẽ là phiên bản cũ hơn). Tôi đã cố gắng để làm cho là phù hợp tiêu chuẩn và tương thích càng tốt. Nó cũng giả định rằng tập lệnh nằm trong scriptphần tử đầu tiên của tài liệu.

Nó thực sự ghép nhiều bản sao của chính kịch bản, điều này khá tuyệt vời . Lưu ý rằng công cụ đoạn trích trên SE đặt thêm khoảng trắng xung quanh tập lệnh. Chúng tôi có thể bỏ qua khoảng trắng đó .trim()nhưng tôi không thấy cần thiết vì chương trình này hoàn hảo mà không cần sự can thiệp của SE. Chỉ cần lưu tệp HTML5 này nếu bạn muốn thấy nó chạy hoàn hảo.

<!DOCTYPE html>
<html>
  <head>
    <title>Minimalist HTML5 page</title>
    <script>alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))</script>
  </head>
</html>

Kịch bản này sử dụng promptalertconsole.logkhông phải là một phần của bất kỳ tiêu chuẩn nào, ngay cả khi hầu hết các trình duyệt hiện đại sử dụng nó. Nếu số lần lặp lại được truyền không phải là số hợp lệ hoặc trống, nó mặc định là 2. Nếu đầu vào là số thập phân, chương trình gặp sự cố do độ dài mảng không hợp lệ.

Mã này sử dụng một vài tính năng thú vị của JavaScript:

  • Array(1+(+prompt()||2))

    • Array(INT) tạo ra một mảng các ô INT.

    • +prompt()nhận một đầu vào và biến nó thành một số. Nếu chúng ta truyền đầu vào dưới dạng một chuỗi, Arrayhàm sẽ chỉ gói nó trong một mảng một phần tử.

    • +prompt()||2trả về đầu vào nếu nó là sự thật , nếu không nó sẽ trả về 2.

    • Toàn bộ mã này tạo ra một mảng gồm N phần tử rỗng, trong đó N là một phần nhiều hơn số lần lặp lại được yêu cầu.

  • .join(document.scripts[0].textContent)

    • join(STRING)Phương thức của mảng tạo ra một chuỗi bằng cách nối tất cả các ô, đặt CHUINGI được cung cấp giữa các giá trị. Trong chương trình này, có các phần tử trống N + 1 trong mảng hoặc chính xác là N ở giữa các điểm. Kết quả sẽ là một chuỗi chứa N lần so với CHUINGI được cung cấp.

    • document.scripts[o]<script>yếu tố đầu tiên của tài liệu.

    • Các textContentcác Nodetrường hợp trả lại toàn bộ văn bản tìm thấy bên trong họ và con các nút của họ, bao gồm các kịch bản.


Lưu ý rằng nếu bạn sử dụng ES6 str.repeatvà vẫn tự xuất mã, nó sẽ giảm điểm xuống còn 26, nhưng điều đó hơi nhàm chán: P
Domino

Erm, tôi không biết 26 đó đến từ đâu, bây giờ tôi nhận được 33. Có lẽ tôi nên ngủ một chút.
Domino

Lưu ý rằng một số cài đặt trình duyệt có thể ngăn việc sử dụng lời nhắc trên đoạn trích. Bạn có thể phải lưu nó để chạy nó.
Domino

6

JavaScript ES6, 33 - 25 = 8

(a=2)=>Array(a*33).fill(0).join``

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


Tôi dường như không thể làm cho mã này chạy trên bàn điều khiển. Đúng không? "Uncaught SyntaxError: Mã thông báo bất ngờ =>"
Malavos

@Malavos bạn cần một trình duyệt tuân thủ es6 như Firefox mới nhất. Chrome không hỗ trợ các đối số mặc định afaik
DankMeme

Tôi đang sử dụng UCBrowser, nhưng điều đó đúng! Dù sao thì nó cũng dựa trên crom và tắc kè. Đã thử nó vào hàng đêm, nhận được "000000000000000000000000000000000000000000000000000000000000000000". Đẹp! Bạn có thể giải thích mã của bạn cho tôi? Tôi là người mới.
Malavos

2
@Malavos Mã hóa cứng 33thực sự là độ dài của mã. Nó tạo ra một mảng mới với độ dài 33*atrong đó atham số đầu vào mặc định là 2 theo OP, điền vào nó và trả về một chuỗi đã nối.
DankMeme

2
Bằng cách tạo mảng của bạn với một yếu tố bổ sung, bạn có thể điền vào tham gia Arrary(1+a*<length>)join`0`
Shaun H

5

Julia, 42 byte - 25 = 17

print("@"^42((r=readline())>""?int(r):2))

Điều này đọc một dòng từ STDIN bằng cách sử dụng readline(). Nếu nó trống, tức là không có đầu vào nào được cung cấp, thì n được xác định là đầu vào được chuyển đổi thành một số nguyên. Nếu n là 2. Sau đó chúng tôi in 42 n @ s để STDOUT.


5

Perl, 18 - 25 = -7

print$=x(<>*9||18)

Biến đặc biệt $=, aka $FORMAT_LINES_PER_PAGE, bắt đầu vòng đời của nó 60, và do đó chỉ cần được nhân đôi một nửa số lần đầu ra byte cần thiết.


1
Tôi đã có một câu trả lời rất giống nhau: print$=x9x(pop||2)tốt đẹp!
Dom Hastings
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.