Toàn văn rộng


44

Văn bản có chiều rộng đầy đủ là văn bản có khoảng trắng sau mỗi ký tự, kể cả ký tự cuối cùng. Chẳng hạn, câu đầu tiên của câu hỏi này trở thành:

F u l l   w i d t h   t e x t   i s   t e x t   t h a t   h a s   a   s p a c e   a f t e r   e v e r y   c h a r a c t e r ,   i n c l u d i n g   t h e   l a s t   o n e . 

Viết chương trình lấy một dòng trong văn bản từ đầu vào tiêu chuẩn và xuất nó dưới dạng văn bản có chiều rộng đầy đủ sang tiêu chuẩn.

Bảng xếp hạng


6
Thông thường, bạn cũng nên cho phép các chức năng hoặc bạn loại trừ rất nhiều ngôn ngữ (ví dụ: JavaScript).
wizzwizz4

8
Chúng tôi có một vài mặc định cho I / O dựa trên sự đồng thuận của cộng đồng. Mặc dù bạn có quyền ghi đè chúng, nhưng nhấn mạnh vào STDIN / STDOUT cho I / O làm mất hiệu lực một loạt các câu trả lời (giả sử rằng mặc định được áp dụng) và khiến nhiệm vụ không thể thực hiện được trong các ngôn ngữ khác (chúng không có luồng tiêu chuẩn).
Dennis


4
@ BlueRaja-DannyPflughoeft là đúng. Toàn văn bản là về mã hóa ký tự cơ bản (được mã hóa 2 byte) theo yêu cầu của một số ngôn ngữ (ví dụ như chữ tượng hình). Trong Unicode, khái niệm một nửa và kích thước đầy đủ được gọi là khối Unicode
Ludovic Frérot

2
@ LudovicFrérot Thật ra, đây không phải là chữ tượng hình, đây là những chữ cái tiếng Anh.
Erik the Outgolfer

Câu trả lời:


29

Thạch , 5 3 2 byte

Cảm ơn Dennis vì đã tiết kiệm 2 byte. Cũng cảm ơn FryAmTheEggman vì đã tiết kiệm 1 byte. Mã số:

p⁶

Giải trình:

p⁶   # Cartesian product with the input and the space character.

Sử dụng mã hóa Jelly .

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


1
Chiếm ba byte trong UTF-8.
Jess Smith

12
@JessSmith Jelly sử dụng trang mã riêng của mình: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
một spaghetto

1
@AandN Đặt nó trong câu trả lời, không bình luận.
mbomb007

3
@ mbomb007 Đúng trong tiêu đề.
Ad Nam

5
@AandN Không, bạn nên nói trong câu trả lời của mình rằng nó có trang mã riêng. Đặc biệt vì đây là ngôn ngữ mới hơn nên mọi người chưa biết.
mbomb007 22/03/2016

24

Python 3.5, 18 byte

print(*input(),'')

Điều này hoạt động vì printdấu phân cách mặc định là không gian đơn.


3
print(*input(),end=' ')sẽ là di động, nhưng nó không phải là rất golf ...
Dennis

9
MFW lần đầu tiên sử dụng PEP của tôi mà tôi thấy trong tự nhiên là trên Code Golf.
Veedrac

Điều này có một không gian sau nhân vật cuối cùng?
Esolanging Fruit

17

Lục giác , 21 13 12 10 byte

Mã số:

Đã lưu rất nhiều byte nhờ FryAmTheEggman . Mã số:

P,<0/*;@.>

Hoặc ở dạng dễ đọc hơn:

  P , <
 0 / * ;
@ . > . .
 . . . .
  . . .

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

Giải trình:

Chương trình Hexagony bắt đầu ở góc trên cùng bên trái, ngay lập tức đặt cạnh bộ nhớ thành giá trị ASCII Plà 80. Sau đó, chúng ta có thể thấy rằng đường dẫn sau được thực hiện:

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

Chúng ta có thể thấy rằng con đường thực hiện là : P,<;.P/0....;*/>. Sau đó P, chúng tôi lấy một byte đầu vào của người dùng. Nếu điều này là trống rỗng, nhánh sau ( <) sẽ hướng chúng ta đến Đông Bắc. Nếu đầu vào không trống, chi nhánh sẽ hướng chúng tôi đến Đông Nam Bộ. Sau đó, chúng tôi xuất đầu vào của người dùng bằng cách sử dụng ;. Chúng tôi đặt cạnh bộ nhớ trở lại P, là 80. Số 0 theo sau gương được nối với số của chúng tôi, kết quả là 800. Sau đó, nó được xuất ra bằng cách sử dụng ;lệnh, nhưng trước tiên, nó được lấy modulo 256, kết quả là 32, trong đó là nhân vật không gian. Sau đó, chúng tôi đặt lại cạnh bộ nhớ bằng *lệnh và quay lại vòng lặp trên phần còn lại của đầu vào người dùng. Khi chúng tôi hoàn thành với đầu vào của người dùng, đường dẫn được hướng đến Đông Bắc:

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

Điều này về cơ bản đi đến @lệnh, kết thúc chương trình.

Sử dụng Timwi tuyệt vời 's HexagonyColorer cho làm cho sơ đồ.


Uh, tôi đã chơi golf trong khi bạn chỉnh sửa. Úi. 10:P,<0/*;@.>
FryAmTheEggman 22/03/2016

@FryAmTheEggman Hahaha, hãy đưa ra lời giải thích mới sau đó: p.
Ad Nam

P,<<>0;@>*cũng là 10, nhưng thật không may, tôi không nghĩ rằng nó sẽ giúp loại bỏ một byte khác.
Martin Ender

@ MartinBüttner Ôi, thật là xấu hổ. Tôi nghi ngờ nếu nó có thể cạo một byte khác, nhưng có vẻ như không thể.
Ad Nam

HexagonyColorer bây giờ có hoạt hình không?
Esolanging Fruit

12

Haskell, 11 byte

((:" ")=<<)

Ví dụ sử dụng: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Ánh xạ mỗi ký tự cvào một danh sách hai thành phần [c, space]và ghép mọi thứ thành một danh sách.


Điều thú vị là Haskell và Jelly đều làm điều tương tự ở đây, vì danh sách đơn nguyên hoạt động tương tự như một sản phẩm của Cartesian.
ballesta25


6

JavaScript, 20 byte

Đơn giản, tôi chỉ muốn Array.join thêm không gian vào cuối để tôi có thể tiết kiệm 3 byte.

s=>[...s,``].join` `

5
[...s,``].join` ` có lẽ?
Neil

3
Thậm chí tốt hơn [...s,,].join...
edc65

@ edc65 Không hoạt động trong Firefox hoặc Chrome mới nhất? Tôi chỉ nhận được joinchức năng như sự trở lại, như tôi mong đợi.
Mwr247

@ Mwr247 sau khi tham gia, bạn phải đặt phần còn lại của mã của mình, đó là lý do tại sao tôi đặt dấu chấm lửng (...). Đó chỉ là tiết kiệm 1 byte
edc65

@ edc65 có thể đã quá lười biếng để tìm ra cách gõ ` `bình luận.
Neil

5

> <> , 13 10 byte

3 byte được lưu nhờ @ Sp3000

i:0(?;o 'o

Hãy thử nó ở đây . Nhấp vào liên kết, sau đó Gửi , sau đó nhập một số đầu vào và nhấn Cho , và cuối cùng chạy chương trình với Bắt đầu hoặc Chạy mà không có hình động .

Giải trình

i       read a character
:       duplicate
0(      is it less than 0?
?;      if so: end program. Else:
o       output read character
 '      push all chars until matching (same) quote. Top character is a space
o       output that character, which is a space. Go back to the beginning

i:0(?;o 'otrong 10
Sp3000

Trong thực tế, io 'olàm việc quá, lỗi ra.
Sp3000

@ Sp3000 Cảm ơn! Tôi sẽ dùng phiên bản không có lỗi (có thể bạn muốn gửi phiên bản của mình không?). Tôi quên bạn có thể nhập ký tự trực tiếp. Làm thế nào để trích dẫn chưa từng có làm việc? Nó luôn luôn chọn char trước?
Luis Mendo

1
'chỉ quấn quanh, đẩy những ký tự cho đến khi nó tìm thấy cái khác 'để đóng nó lại. Trong trường hợp này, các mở và đóng 'là cùng một char và hầu hết mã nguồn được đẩy, nhưng char hàng đầu sẽ chỉ là khoảng trắng kể từ khi nó được đẩy lần cuối.
Sp3000

@ Sp3000 Có rồi. Vì vậy, đó cũng là chu kỳ. Cảm ơn rất nhiều cho lời đề nghị và giải thích!
Luis Mendo

5

Java, 132 (System.in) hoặc 99 (đối số chương trình)

Bạn có thể cảm thấy trên đầu tối nay?

class F{public static void main(String[]a){System.out.print(new java.util.Scanner(System.in).nextLine().replaceAll("(.)", "$0 "));}}
class W{public static void main(String[]a){for(char c:a[0].toCharArray())System.out.print(c+" ");}}

shooqie đã tìm ra một cách ngắn hơn 6 byte để làm điều này nhưng tôi sẽ không ăn cắp cách tiếp cận của họ. Tuy nhiên, tôi đã sử dụng nó với các phiên bản STDIN và lambda.

28 ký tự cho lambda nhưng không đáp ứng yêu cầu của chương trình.

s->s.replaceAll("(.)","$0 ")

Câu hỏi quy định rằng đầu vào phải từ STDIN.
EMBLEM

Tôi có thể thêm một cái cho bạn, nếu điều đó ổn.
Blue

Tôi đã thêm một phiên bản STDIN ngay bây giờ (và đã sử dụng shooqie regexplace thông minh đã tìm ra).
CAD97

Không cần dấu ngoặc trong regex của bạn. Cũng loại bỏ một không gian thừa giữa các đối số để replaceAll.
Khuldraeseth na'Barya

4

Khối , 10 byte

Cubix là ngôn ngữ 2 chiều được phát triển bởi @ETHproductions trong đó các lệnh được gói trên một khối. Dùng thử trực tuyến

@.?wi^\oSo

Điều này ánh xạ lên một khối lập phương có chiều dài cạnh 2

    @ .
    ? w
i ^ \ o S o . .
. . . . . . . .
    . .
    . .

Bắt đầu với một đầu vào i. Dòng chảy được chuyển hướng về phía bắc ^đến mặt trên. ?Nếu giá trị là âm rẽ trái sang kết thúc @, số 0 chuyển sang phải sang phải whoặc dương rẽ phải sau đó phản ánh sang trái \. Nhân vật đầu ra với một không gian dấu oSo.


4

Khối , 9 byte

@./.i?>So

Xem nó hoạt động trực tuyến!

Cubix là một ngôn ngữ trong đó các hướng dẫn được ánh xạ lên trên mặt của khối lập phương. Chương trình này tạo thành mạng khối sau:

    @ .
    / . 
i ? > S o . . .
. . . . . . . .
    . .
    . .

Con trỏ lệnh bắt đầu tại i, lấy mã ký tự khác từ đầu vào và đẩy nó vào ngăn xếp. Nếu không còn đầu vào nào nữa, ?IP sẽ rẽ trái, nơi nó chạm /và được phản ánh lên trên @, kết thúc chương trình.

Tuy nhiên, nếu có đầu vào còn lại, giá trị sẽ là mã ký tự. Vì tất cả các mã 1 ký tự đều dương, ?nên làm cho IP rẽ phải, nơi nó bao bọc toàn bộ xung quanh khối lập phương, chuyển qua ocách tạo ra char. Sau đó /, nó nhấn vào đó làm cho nó lặp lại xung quanh >So, nó đẩy và in một khoảng trắng. IP mang về phía tây cho đến khi quấn quanh trở lại i, trở lại điểm bắt đầu của vòng lặp chính.

1 Nếu ký tự là byte rỗng, nó sẽ bỏ qua ?và tiếp tục đi thẳng, chỉ cần xuất ra một khoảng trắng.


Tất nhiên, chỉ có rất nhiều lời giải thích bằng văn bản có thể làm được, vì vậy tôi khuyên bạn nên xem phần này trong trình thông dịch trực tuyến . Có một tùy chọn "tốc độ", cho phép bạn xem việc thực hiện chậm hoặc nhanh như bạn muốn.


1
bạn có thể lưu một byte với@.Uoi?So
MickyT

4

Stax , 2 byte

Ties Jelly!

0\

Hãy thử nó tại staxlang.xyz!

Tất cả điều này được đẩy 0vào ngăn xếp và nén chuỗi từ đầu vào tiêu chuẩn với nó, lặp lại 0 khi cần thiết. Trong Stax, điểm mã 0 trong chuỗi thường được chuyển đổi thành 32 (dấu cách).

Điều này đủ ngắn để đóng gói nó vào ûTkhông làm gì ngoài việc giảm khả năng đọc.



3

CJam , 5 4 byte

Ít hơn 1 byte nhờ @FryAmTheEggman

lSf+

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

Giải trình

l     e# read line
Sf+   e# map "concatenation" (+) with a space (S) as extra parameter
      e# implicitly display characters in the stack

3

Java, 92

class T{public static void main(String[]A){System.out.print(A[0].replaceAll("(.)","$0 "));}}

3

Awk, 7 byte

(Mã 4 ký tự + tùy chọn dòng lệnh 3 ký tự.)

NF++

Chạy mẫu:

bash-4.3$ awk -F '' 'NF++' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 

(Có một số bất đồng về những gì nên được bao gồm trong số tùy chọn dòng lệnh. Tôi đã bao gồm những gì thực sự được chuyển cho trình awkthông dịch: Định - Hồi, Một F F và một dấu tách giữa giữa F F F và tham số chuỗi trống. Ý tôi là.)

bash-4.3$ od -tax1 /proc/`pidof awk`/cmdline 
0000000   a   w   k nul   -   F nul nul   N   F   +   + nul
         61  77  6b  00  2d  46  00  00  4e  46  2b  2b  00
                         ╰────────╯

3

PHP, 39 byte

echo join(' ',str_split($argv[1])).' ';

Chạy nó từ dòng lệnh

php fullwidth.php "Full width text is text that has a space after every character, including the last one."

https://eval.in/541179


3

WhoScript 38 byte

1v;pr;e;#0 1;-;i;t=;ti;o;tl;" ";d;>;pf

Hoạt động tốt nhất khi chuỗi được đưa ra tại dòng lệnh, nhưng nó cũng có thể được thực hiện một ký tự tại một thời điểm thực.

Ung dung:

time_vortex
  psychic_paper read
  duplicate
  # 0 1
  -
  integer
  TARDIS =
  TARDIS if
      opening
  TARDIS landing
  # 20
paradox
pop
psychic_paper flush

3

Mê cung , 10 byte

<.23.%):,>

Điều này chấm dứt với một lỗi, nhưng các thông báo lỗi đi đến STDERR.

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

Giải trình

Đây là một trong những trường hợp hiếm hoi mà một chương trình hoàn toàn tuyến tính là khả thi. Vòng lặp đạt được thông qua các lệnh sửa đổi mã nguồn <>hoạt động bởi vì sau mỗi lần lặp, chúng ta biết rằng ngăn xếp lại trống.

< tuần hoàn dịch chuyển toàn bộ một ô ở bên trái, vì vậy chúng tôi kết thúc bằng:

.23.%):,><

Cái này lấy con trỏ lệnh (IP) với nó để IP bây giờ ở cuối bên phải của mã và phải di chuyển sang trái. Tiếp theo, việc >sửa đổi ngược lại để nó chuyển mã nguồn trở lại

<.23.%):,>

Bây giờ chúng tôi thực hiện một lần lặp duy nhất (từ phải sang trái), trước khi mọi thứ bắt đầu:

,    Read a character code from STDIN, or -1 at EOF.
:)   Duplicate and increment.
%    Modulo. At EOF this will attempt a division by zero and terminate. Otherwise, we
     have n % (n+1) = n, so we're left with the input character again.
.    Print it back to STDOUT.
32   Turn the top of the stack into a 32.
.    Print it as well (a space).

3

Gema , 5 byte

?=?\ 

Chạy mẫu:

bash-4.3$ gema '?=?\ ' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 

Tôi chưa từng thấy ngôn ngữ này trước đây. Liên kết với phiên dịch viên?
một spaghetto

Lấy làm tiếc. Đã thêm siêu liên kết đến tiêu đề bài viết. Khá cũ, nhưng thật đáng buồn, Google chỉ có thể giúp tìm thấy nó một cách hiệu quả nếu bạn biết rằng tên đó xuất phát từ bộ xử lý macro mục đích chung.
manatwork

3

MATL , 7 byte

tnZ"v1e

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

Giải trình

t    % implicitly take input string and duplicate it
n    % number of elements
Z"   % string with that many spaces
v    % concatenate vertically (2xN array, where N is input length)
1e   % reshape into 1 row. Implicitly display

3

APL, 5 byte

∊2∘↑¨

Thao tác này sẽ lấy 2 mục cho mỗi ký tự trong chuỗi, với hiệu ứng thêm khoảng trắng

Để biến nó thành một chương trình lấy stdin, nó có cùng số byte:

∊2↑¨⎕

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



3

PHP, 31 byte

<?=chunk_split($argv[1],1," ");

lấy đầu vào từ đối số dòng lệnh.


3

Threead , 45 16 Byte không cạnh tranh.

  B[coB]
32c   o

Đưa đầu vào qua STDIN.

Dòng / Băng đầu tiên chỉ cần đọc byte từ STDIN và ghi chúng. Dòng thứ hai, ban đầu lưu trữ một khoảng trắng thông qua 32c, sau đó cùng lúc với ký tự tiếp theo đang được đọc, xuất ra khoảng trống đó.

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


3

Python 2, 27 25 24 byte

lambda x:' '.join(x)+' '

Ngắn hơn câu trả lời của Raffi ...

-1 nhờ 60919 (FlipTack).


Nếu các chức năng được cho phép thì lambda x:' '.join(x)+' 'ngắn hơn 1 byte.
FlipTack

3

C, 50 byte

Một chút main()đệ quy :)

main(c){~(c=getchar())?printf("%c ",c),main():0;}

Hãy thử trực tuyến! - Nếu sử dụng tính năng này trên máy của chính bạn, hãy sử dụng Ctrl+ Dđể biểu thị EOF.


3

C, 56 Byte (làm đối số chương trình), 46 Byte (từ stdin)

main(int a,char**b){while(*b[1])printf("%c ",*b[1]++);}

Đồng bằng cũ C trả lời. Sau khi được biên dịch, chương trình cần được gọi với một chuỗi là tham số đầu tiên, một chuỗi có khoảng trắng cần được đặt trong dấu ngoặc kép. Ví dụ trong bài bắt đầu:

./prog "Full width text is text that has a space after every character, including the last one."

Cái nào sẽ xuất

F u l l   w i d t h   t e x t   i s   t e x t   t h a t   h a s   a   s p a c e   a f t e r   e v e r y   c h a r a c t e r ,   i n c l u d i n g   t h e   l a s t   o n e .

Giải pháp đọc trực tiếp từ stdin.

main(c){while(c=~getchar())printf("%c ",~c);}

Ít hơn một byte nhờ @FryAmTheEggman


Các yêu cầu hơi âm u, nhưng tôi tin rằng bạn phải đọc đầu vào từ đó stdinthay vì lấy nó làm đối số. Ngoài ra, đây là một trang với một số lời khuyên hữu ích để chơi gôn trong C: codegolf.stackexchange.com/q/2203/13877
Josh

@Josh Nó có được tính là một tham số cho chính không? Bởi vì nếu không, câu trả lời Java cũng sẽ sai và không chắc chắn về câu hỏi Haskell.
SBI

Hoặc là tốt, chúng tôi thích I / O của chúng tôi thân thiện :) Nhưng tôi tin rằng việc sử dụng getchar()ngắn hơn. Ngoài ra, bạn không cần bao gồm hầu hết các trình biên dịch C.
FryAmTheEggman 22/03/2016

@FryAmTheEggman Tôi để lại bao gồm để hoàn toàn tuân thủ, tôi chỉ có thể kiểm tra với gcc. Miễn là chỉ có gcc là ổn, ừ, cạo bao gồm là ổn.
SBI

Nói chung, nếu nó hoạt động với Ideone thì không sao :)
FryAmTheEggman 22/03/2016


2

Nghiêm túc, 7 byte

' ;,@j+

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

Man, không gian kết thúc cần thiết đã thêm 3 byte. Không có nó, ,' jsẽ làm việc cho 4.

Giải trình:

' ;,@j+
' ;      push two copies of a single space
   ,@    push input, swap
     j+  join on spaces, append a space

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.