In văn bản vô hình


38

Cho một chuỗi làm đầu vào, xuất một số ký tự khoảng trắng (0x0A và 0x20) bằng với độ dài của chuỗi.

Ví dụ, với chuỗi, Hello, World!mã của bạn sẽ cần xuất chính xác 13 ký tự khoảng trắng và không có gì khác. Đây có thể là bất kỳ sự pha trộn của không gian và dòng mới.

Mã của bạn không nên xuất ra bất kỳ dòng mới hoặc dấu cách bổ sung nào.

Testcase:

     Input      -> Amount of whitespace to output
"Hello, World!" -> 13
"Hi"            -> 2
"   Don't
Forget about
Existing
Whitespace!   " -> 45
""              -> 0
"             " -> 13
"
"               -> 1

Ghi điểm:

Đây là nên ít byte nhất sẽ thắng!


1
Tôi không hiểu ý bạn với cái 0x0A đó. Nơi đó nên được đầu ra? Điều đó có nên được giữ lại không, vì vậy, a “b ”c có thể trở thành một người khác không?
manatwork

1
@manatwork 0x0A0x20là các giá trị thập lục phân tương ứng cho các ký tự Dòng mới và
Dấu cách

1
Xuất ra một số ký tự khoảng trắng (0x0A và 0x20) - Các ký tự dòng mới nên ở đâu trong đầu ra?
thao tác

3
These can be any mix of spaces and newlinesĐầu ra của bạn có thể là bất kỳ kết hợp giữa không gian và dòng mới, bạn chỉ có thể xuất không gian nếu bạn muốn, giống như mọi người khác hoặc bạn chỉ có thể xuất dòng mới. Tùy bạn
Skidsdev

1
Hiểu rồi. Cảm ơn.
thao tác

Câu trả lời:


137

Khoảng trắng , 311 150 77 68 65 46 41 38 byte

-3 byte nhờ Kevin Cruijssen -27 byte nhờ Ephphatha


  
   	 	 
 
  
 	
	 			
	  
	
  
 


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

Một định dạng có thể nhìn thấy

'\n  \n   \t \t \n \n  \n \t\n\t \t\t\t\n\t  \n\t\n  \n \n\n'

Giải thích (s = dấu cách, t = tab, n = dòng mới)

nssn     # label(NULL) - loop start
ssststsn # push 10 in the stack -> [10]
sns      # duplicate the top of the stack -> [10, 10]
sns      # duplicate the top of the stack -> [10, 10, 10]
tnts     # read a single char from input, pop the stack and store at that address -> [10, 10] [10:<char that was read>]
ttt      # pop the stack and put the value at that adress on stack -> [10,<char>] [10:<char>]
ntssn    # jump to label(0) - since label(0) is not defined, the interpreter jumps to the end of the program - if the top of the stack (char) is 0 -> [10] [10:<char>]
tnss     # pop the top of the stack and print as ascii -> [] [10:<char>]
nsnn     # go back to the label(NULL)

25
Giả sử điều này thực sự hoạt động, điều này chắc chắn giành được phiếu bầu của tôi cho câu trả lời sáng tạo nhất
Skidsdev

24
Đợi câu trả lời ở đâu? Có phải nó cũng vô hình?
Erik the Outgolfer

16
MAGIC ĐEN LÀ GÌ. Mã của bạn thậm chí không có! -1
Christopher

28
@Christopher giống như WHITEspace MAGIC
Rod

12
Tôi biết ai đó sẽ trả lời câu hỏi này bằng một chương trình khoảng trắng
Draco18s

59

22
Liệu japt nghiêm túc có tích hợp cho việc này? Chết tiệt ...
Skidsdev

22
@Mayube cũng có tích hợp để thay thế tất cả các ký tự trong một chuỗi bằng một chuỗi khác và thay thế mặc định là khoảng trắng;)
Tom

4
Rất đẹp! Đối với những người chạy chương trình, bạn có thể thêm -Qcờ vào đầu vào để đặt dấu ngoặc kép xung quanh đầu ra. TIO
Oliver

38

Haskell , 7 byte

(>>" ")

Hãy thử trực tuyến! Cách sử dụng : (>>" ") "Hello, world!".

Đưa ra hai danh sách (và chuỗi là danh sách các ký tự trong Haskell), >>toán tử sẽ lặp lại danh sách thứ hai nhiều lần vì danh sách đầu tiên có các phần tử. Đặt " "làm đối số thứ hai có nghĩa là chúng ta ghép nhiều khoảng trống khi chuỗi đầu vào dài.


Thay thế (cùng số byte):

(' '<$)

Hãy thử trực tuyến! Cách sử dụng : (' '<$) "Hello, world!".

Đưa ra một số giá trị và một danh sách, <$toán tử thay thế từng giá trị trong danh sách bằng giá trị đã cho. Do đó, 5 <$ "abc"kết quả trong [5,5,5], và ' ' <$ "abc"trong " ".

Hàm này có thể được viết tương tự như (<$)' 'trong trường hợp bạn muốn tìm thêm một số sinh vật biển trong mã của tôi.


18
Nó giống như một con cá nhỏ không đáng yêu
Taylor Scott



17

Võng mạc, 3 4 byte

S\`.

Phiên bản cũ, không hoạt động vì Retina in một nguồn cấp dữ liệu.

.
 

(Dòng thứ hai chứa một khoảng trắng).


2
TIO võng mạc khá dễ sử dụng. Đây là câu trả lời của bạn
Chấn thương kỹ thuật số

2
Thật không may, Retina in một nguồn cấp dữ liệu theo mặc định. Bạn sẽ cần phải chuẩn bị trước \`để tránh điều đó. Sau đó, nó sẽ ngắn hơn để sử dụng S\`., thay thế mỗi ký tự bằng một nguồn cấp dữ liệu (vì nó phân tách đầu vào xung quanh mỗi ký tự).
Martin Ender

@MartinEnder Ahhh không chắc đó là điều Retina hay TIO. Cảm ơn sự giúp đỡ về việc tiết kiệm một byte ở đó!
TheLethalCoder



11

C #, 28 24 byte

s=>"".PadLeft(s.Length);

Phiên bản cũ sử dụng hàm stringtạo cho 28 byte:

s=>new string(' ',s.Length);

3
Muốn làm chính xác như vậy
LiefdeWen

1
@StefanDelport Phải nhanh chóng với C # khi tôi ở xung quanh :) Có cách tiếp cận Linq để làm điều tương tự nhưng tất cả đều RẤT lâu hơn ...
TheLethalCoder


9

Toán học, 21 byte

StringReplace[_->" "]

1
Nếu đầu vào charlist được cho phép, điều này có thể được #/._->" "&. Đáng buồn thay, đầu vào là một chuỗi và Ký tự [] làm cho nó dài hơn một byte so với giải pháp của bạn :(
CalculatorFeline

1
Điều này không cần một #và một &trong nó? Ví dụ:StringReplace[#,_->" "]&
Ian Miller

3
@IanMiller Không có trong Mathematica 10.4 hoặc 11. reference.wolfram.com/language/ref/StringReplace.html
alephalpha

2
À được rồi Tôi chỉ có 10,3. Có lẽ đã đến lúc nâng cấp ...
Ian Miller

8

JavaScript ES6, 22 byte

a=>a.replace(/./g," ")

f=a=>a.replace(/./g," ");

var test = f("Hello, World!");
console.log(test, test.length);


3
Huh, tôi nghĩ rằng "ôi chết tiệt, nó phải như vậy s=>s.replace(/[^]/g," "), dài hơn một byte so với giải pháp khác". Điều đó không xảy ra với tôi rằng các dòng mới được cho phép ở đầu ra: P
Sản phẩm ETH

8

C, 31 byte

f(char*c){puts(""),*c++&&f(c);}

1
Điều này khác với câu trả lời C khác của bạn như thế nào? Rõ ràng cái này ngắn hơn, nhưng bạn có nên đơn giản chỉnh sửa cái kia không? Nó chỉ nên là một câu trả lời với hai giải pháp?
TAS

4
@ Trước hết, tôi đoán theo một nghĩa nào đó tôi cảm thấy điều này không tốt bằng cái khác mặc dù nó ngắn hơn, bởi vì nó không thực sự biên dịch như vốn có. Đây chỉ là một chức năng nên bạn cần viết một số thói quen chính xung quanh nó. Tuy nhiên, nó ngắn hơn và những người khác dường như gửi chỉ chức năng. Rõ ràng đó là hai giải pháp rất khác nhau. Một cái không phải là sự tinh tế của cái kia, vì vậy với tôi nó có ý nghĩa rằng nó nên là hai câu trả lời khác nhau. Tuy nhiên, tôi mới tham gia cộng đồng này. Là sự đồng thuận rằng một người dùng chỉ đăng một câu trả lời? Nếu vậy tôi sẽ làm điều đó vào lần tới.
sigvaldm

Dấu phẩy có thực sự là dấu phẩy chứ không phải dấu chấm phẩy?
Oskar Skog

1
@OskarSkog tốt, trong trường hợp này không thành vấn đề lắm vì không có lhs
con mèo

1
@OskarSkog Vâng, nó phải là dấu phẩy. Như @cat nói, nó không thực sự quan trọng trong trường hợp này nhưng tôi đã chọn dấu phẩy cho biến thể :) Toán tử dấu phẩy đánh giá hai biểu thức (ví dụ i++, j++trong một vòng lặp for) và trả về biểu thức ngoài cùng bên phải. Một chi tiết quan trọng là đệ quy phải dừng lại bằng cách nào đó. &&không đánh giá nó rhs nếu nó là sai. *c++đánh giá sai khi nó trỏ đến kết thúc null của chuỗi.
sigvaldm


7

VBA Excel, 17 15 byte

Chức năng cửa sổ ngay lập tức VBE ẩn danh lấy đầu vào từ ô [A1]và xuất khoảng trắng có độ dài của đầu vào sang cửa sổ ngay lập tức VBE

?Spc([Len(A1)])

7

05AB1E , 3 byte

vð?

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

v   # For each character...
 ð? #    Output a space without a newline

Các giải pháp 3 byte khác (Cảm ơn Magic Octopus UrnKevin Cruijssen cho hầu hết các giải pháp này)

v¶? # For each character print a newline (without adding a newline)
võ, # For each character print the empty string with a newline
gð× # Get the length, concatenate that many copies of space
g¶× # Get the length, concatenate that many copies of newline
Sð: # Split, push a space, replace each char in input with a space
ðs∍ # Push ' ', swap, make the string of spaces as long as the input was
võJ # For each char, push a space and ''.join(stack)
v¶J # For each char, push a newline and ''.join(stack)
€ðJ # For each char, push a space. Then ''.join(stack)
ۦJ # For each char, push a newline. Then ''.join(stack)

1
Giải pháp khác : gð×, phần còn lại tôi nghĩ ra là trên 3 như:õ‚.B¤
Bạch tuộc ma thuật Urn

2
Một điều thú vị khác:Sð:
Bạch tuộc ma thuật Urn

1
Vui hơn:ðs∍
Bạch tuộc ma thuật Urn

Một số thay thế 3-byters khác: võJ/ v¶J; €ðJ/ €¶J. Và vì một chuỗi các ký tự như I / O được cho phép theo mặc định khi các chuỗi I / O được yêu cầu, một số phiên bản 2 byte là có thể: €ð/ €¶/ εð/ ε¶ð:/ ¶:. Mặc dù đây là một thử thách khá cũ và tất cả các câu trả lời khác đều sử dụng chuỗi thực tế, tôi có thể hiểu nếu bạn giữ nó dưới dạng chuỗi I / O.
Kevin Cruijssen



6

C, 45 byte

Sử dụng chính. Biên dịch với gcc, bỏ qua cảnh báo.

main(c,v)char**v;{while(*(v[1]++))puts("");}

Sử dụng:

$./a.out "Hello, World!"

1
Bất kỳ lý do tại sao bạn không thể đưa char**vvào main(c,v)?
Máy

@CalculatorFeline Ít nhất GCC 6.3.1 biên dịch đơn giản với gcc main.cdường như không cho phép trộn định nghĩa hàm ANSI với định nghĩa hàm K & R, vì vậy main(c,char**v)sẽ không biên dịch. Tôi phải làm main(int c,char**v)hoặc main(c,v)char**v;trong đó cái sau ngắn hơn 3 byte. Bạn sẽ không biết bất kỳ lá cờ hoặc thứ gì cho phép trộn các kiểu này?
sigvaldm

3
Không, bạn không thể trộn chúng. Không có cờ nào cho phép điều đó. Phong cách K & R đã lỗi thời từ lâu, chỉ được sử dụng cho mục đích chơi gôn và mã hóa.
Cody Grey

Và tôi đoán loại bỏ char**vhoàn toàn không biên dịch.
Máy

@CalculatorFeline Nếu bạn bỏ qua char**hoàn toàn trình biên dịch sẽ diễn giải nó là int. Nếu tôi không nhầm, bạn sẽ gặp lỗi khi cố gắng hủy đăng ký intvà ngay cả khi bạn không làm chương trình sẽ không làm những gì bạn mong đợi vì nó inttiêu tốn vài chargiây và do đó bạn không bao giờ nhận được NULLgiá trị.
sigvaldm



5

> <> , 7 byte

i0(?;ao

Chương trình là một vòng lặp

i         //Push a character from the input onto the stack
 0        //Add a 0 to the stack
  (       //Pop the top two values of the stack, and push a 1 if the second is less than the first (In this case, the input has all been read), else push a 0
   ?      //Pop the top of the stack. If the value is a 0, skip the next instruction
    ;     // Terminate the program
     a    // Add a newline to the stack
      o   // Pop the top character of the stack and print it


5

Lục giác , 12 11 byte

-1 byte nhờ Martin Ender

,<.;.M@.>~8

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

Đây là hex mở rộng:

  , < . 
 ; . M @
. > ~ 8 .
 . . . .
  . . .

Trong khi có đầu vào, mã này chạy:

,        # Get input
 <       # Turn right (SE) if we didn't get EOF
  M8     # Set the memory edge to 778 which is 10 (mod 256)
    ;    # Print as a character (newline)
     >   # Redirect East
      ~  # Multiply by -1. This makes the pointer go to the top when it runs off the edge
       8 # Effectively a no-op.

Khi đạt EOF:

,    # Get input
 <   # Turn left (NE)
  8  # Effectively a no-op
   @ # End program

Bạn có thể in một nguồn cấp dữ liệu theo ba byte với M8;(cung cấp 778 = 10 (mod 256)). Điều đó sẽ cho phép bạn di chuyển vị ~trí ;hiện tại, tiết kiệm một byte.
Martin Ender


5

Python 2, 25 byte

exec'print;'*len(input())

-2 byte nhờ Loovjo
-2 byte trong mã không hợp lệ nhờ hoàn toàn: p
-3 byte


1
Bạn có thể xóa parens sau execkhi đó là một từ khóa trong Python 2
Loovjo

1
@Loovjo Ồ đúng rồi, Python 2. Cảm ơn!
HyperNeutrino

Tôi biết điều này là cũ và công cụ nhưng exec'print;'*len(input())hoạt động.
hoàn toàn là

1
@totallyhuman ồ, cảm ơn: P
HyperNeutrino

1
@TheMatt có lẽ không nằm trong thông số kỹ thuật mà là một trong những phương thức nhập mặc định được chấp nhận. Hãy thử tìm kiếm trên meta, tôi không muốn tìm kiếm nó ngay bây giờ
HyperNeutrino


4

Khối , 6 byte

Wahoo một 6 byter!

wi?@oS

Tạo khối

  w
i ? @ o
  S
  • i được đầu vào
  • ? kiểm tra đầu ngăn xếp
    • nếu chuyển hướng âm (EOI) sang wthay đổi làn đường sẽ @dừng lại
    • nếu 0 (null) dừng việc này thì không nên đánh
    • nếu tích cực Sowđẩy không gian vào ngăn xếp, xuất ra và đổi làn đường lêni

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


1
Thật ngọt ngào, nó không quá thường xuyên là một chương trình Cubix ngắn như vậy :-)
Sản phẩm ETH


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.