全角文字


44

全角文字是指每个字符(包括最后一个字符)后都有空格的文本。例如,此问题的第一句话变为:

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 . 

编写一个程序,该程序从标准输入中获取一行文本,并将其作为全角文本输出到标准输出。

排行榜


6
通常,您也应该允许使用函数,或者排除许多语言(例如JavaScript)。
wizzwizz4 2016年

8
我们有一些基于社区共识的I / O默认值。虽然您有权覆盖它们,但坚持为I / O使用STDIN / STDOUT会使一堆答案无效(假定使用默认值),并使其他语言完全不可能执行任务(它们没有标准流)。
丹尼斯

52
那不是 全角文字 是。
BlueRaja-Danny Pflughoeft

4
@ BlueRaja-DannyPflughoeft是正确的。全角文字是关于某些语言(即表意文字)所需的基础字符编码(2字节编码)。在Unicode中,将一半大小和完整大小的概念称为Unicode块
LudovicFrérot16

2
@LudovicFrérot实际上,这些不是表意文字,而是中文英文字母。
暴民埃里克'16

Answers:


29

果冻5 3 2字节

感谢Dennis节省了2个字节。同时还要感谢FryAmTheEggman节省了1个字节。码:

p⁶

说明:

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

使用Jelly编码

在线尝试!


1
in在UTF-8中占用三个字节。
杰西·史密斯,

12
@JessSmith Jelly使用其自己的代码页:github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
的意大利面条

1
@AandN将其放在答案中,而不是评论。
mbomb007 '16

3
@ mbomb007就在标题中。
阿德南

5
@AandN不,您应该在答案中说它具有自己的代码页。特别是因为它是一种较新的语言,所以人们还不知道。
mbomb007 '16

24

Python 3.5,18个字节

print(*input(),'')

这是可行的,因为print的默认分隔符是单个空格。


3
print(*input(),end=' ')会是便携式的,但是不是很容易打高尔夫……
丹尼斯

9
MFW我在野外看到的PEP的首次使用是在Code Golf上。
Veedrac '16

最后一个字符后是否有空格?
硕果累累

17

六角形21 13 12 10字节

码:

由于FryAmTheEggman节省了很多字节。码:

P,<0/*;@.>

或者以更易读的形式:

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

在线尝试!

说明:

Hexagony程序从左上角开始,立即将内存边缘设置为ASCII值P80。之后,我们可以看到采用了以下路径:

在此处输入图片说明

我们可以看到采用的路径是:P,<;.P/0....;*/>。在之后P,我们需要一个字节的用户输入。如果为空,则下一个分支(<)将引导我们到东北。如果输入为非空,则分支将我们定向到东南。之后,我们使用来输出用户输入;。我们将内存边设置回为P,即80。然后将镜像后面的零连接到我们的数字,结果为800。然后使用;命令将其输出,但首先将其取模256,结果为32,然后是空格字符。之后,我们使用*命令重置内存边缘,并在其余的用户输入上返回循环。完成用户输入后,路径将指向东北:

在此处输入图片说明

基本上,这将转到@命令,该命令将终止程序。

使用Timwi的惊人HexagonyColorer制作图表。


呃,你编辑的时候我在打高尔夫球。哎呀。10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman哈哈哈,那么让我们重新解释一下:p。
阿德南

P,<<>0;@>*也是10,但不幸的是,我认为这不会减少另一个字节。
Martin Ender

@MartinBüttner哦,真可惜。我怀疑是否可以剃除另一个字节,但这似乎不太可能。
阿德南

HexagonyColorer现在可以动画了吗?
硕果累累

12

Haskell,11个字节

((:" ")=<<)

用法示例:((:" ")=<<) "Code Golf"-> "C o d e G o l f "

将每个字符映射c到两个元素列表,[c, space]然后将所有内容连接到一个列表中。


有趣的是,Haskell和Jelly在这里做同样的事情,因为列表monad的行为类似于笛卡尔积。
ballesta25 '16


6

JavaScript,20字节

很简单,我只是希望Array.join在最后添加空格,这样我可以节省3个字节。

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

5
[...s,``].join` ` 也许?
尼尔

3
甚至更好[...s,,].join...
edc65 '16

@ edc65在最新的Firefox或Chrome浏览器中无法使用吗?join正如我所期望的,我只是将函数作为返回值。
Mwr247 '16

@ Mwr247加入后,您必须放入其余代码,这就是为什么我放入省略号(...)。这仅节省了1个字节
edc65 '16

@ edc65可能太懒了,无法找出如何` `在注释中键入。
尼尔

5

> <>13 10字节

@ Sp3000节省了3个字节

i:0(?;o 'o

在这里尝试。单击链接,然后单击提交,然后输入一些内容并按给定,最后以“开始” “不运行动画”运行程序。

说明

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 'o10
Sp3000 '16

实际上,它也io 'o可以工作,但会出错。
Sp3000 '16

@ Sp3000谢谢!我将使用无错误版本(也许您要提交您的版本?)。我忘了你可以直接输入字符。无与伦比的报价如何运作?是否总是选择前面的字符?
路易斯·门多

1
'只是回绕,推动字符,直到找到另一个'将其关闭。在这种情况下,开头和结尾's是相同的char,并且大多数源代码都被压入了,但是最上面的char自最后被压入之后就只是空格。
Sp3000

@ Sp3000知道了。所以的也是周期性的。非常感谢您的建议和解释!
路易斯·门多

5

Java 132(System.in)或99(Program自变量)字节

你今晚能感觉到头顶上的东西吗?

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想出了一种6字节短的方法来执行此操作,但我不会偷走他们的方法。但是,我已经将其用于STDIN和lambda版本。

Lambda为28个字符,但不满足程序要求。

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

问题指定输入必须来自STDIN。
EMBLEM

如果可以的话,我可以为您添加一个。
蓝色

我现在添加了一个STDIN版本(并使用了计算出来的巧妙的regexplace shooqie)。
CAD97 2013年

正则表达式中不需要括号。还删除的参数之间的多余空格replaceAll
Khuldraeseth na'Barya

4

Cubix,10个字节

Cubix是由@ETHproductions开发的二维语言,其中命令被包装到多维数据集上。 在线尝试

@.?wi^\oSo

这映射到边长为2的立方体

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

从输入开始i。流程向北重定向^到顶面。 ?如果值是负向左转完成@,则零继续右移w或正向右转然后向左反射\。输出带有尾随空格的字符oSo


4

库比克斯,9字节

@./.i?>So

看到它在线上工作!

Cubix是一种将指令映射到立方体表面的语言。该程序形成以下多维数据集网:

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

指令指针始于i,它从输入中获取另一个字符代码并将其推入堆栈。如果没有更多可输入的内容,则将?IP命中的位置向左转/,并向上反映到@,从而终止程序。

但是,如果还有输入,则该值将为字符代码。由于所有的1个字符代码均为正,因此?使IP右转,在该位置将IP一直环绕在多维数据集o上,继续进行输出字符的方式。然后它命中/,使其循环回到>So,从而推动并打印一个空格。IP继续向西,直到回绕到i主循环的起点。

1 如果字符是一个空字节,它将忽略?并继续进行,仅输出一个空格。


当然,只能做很多书面解释,因此,我强烈建议您在在线解释器中进行查看。有一个“速度”选项,使您可以根据自己的意愿查看执行的速度。


1
您可以使用@.Uoi?So
MickyT'7



3

CJam5 4字节

@FryAmTheEggman减少了1个字节

lSf+

在线尝试!

说明

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

3

爪哇,92

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

3

Awk,7个字节

(4个字符的代码+ 3个字符的命令行选项。)

NF++

样品运行:

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

(在命令行选项计数中应包含的内容上存在一些分歧。我包括了实际传递给awk解释器的内容:“-”,“ F”以及“ F”和空字符串参数之间的分隔符。请参见下文我的意思是。)

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字节

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

从命令行运行

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字节

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

当在命令行中给定字符串时,效果最佳,但也可以一次同时完成一个字符。

取消高尔夫:

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

3

迷宫,10字节

<.23.%):,>

这以错误终止,但是错误消息发送到STDERR。

在线尝试!

说明

这是完全线性程序可行的罕见情况之一。循环是通过源代码修改命令<和来实现的>,之所以起作用,是因为每次迭代后我们都知道堆栈再次为空。

< 将整行循环地向左移动一个单元格,因此最终得到:

.23.%):,><

这带有指令指针(IP),因此IP现在位于代码的右端,并且必须向左移动。接下来,进行>相反的修改,以便将源代码移回

<.23.%):,>

现在,在一切重新开始之前,我们执行一次迭代(从右到左):

,    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个字节

?=?\ 

样品运行:

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

我以前没看过这种语言。链接到口译员?
意大利面条

抱歉。在帖子标题中添加了超链接。相当古老,但可悲的是,只有在您知道名称来自“通用宏处理器”的情况下,Google才能有效地帮助找到它。
manatwork'Mar

3

MATL,7个字节

tnZ"v1e

在线尝试!

说明

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个字节

∊2∘↑¨

字符串中的每个字符需要2个项目,其效果是添加一个空格

要使其成为一个采用stdin的程序,它的字节数是相同的:

∊2↑¨⎕

在这里尝试。



3

PHP,31字节

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

从命令行参数获取输入。


3

Threead45 16字节无竞争。

  B[coB]
32c   o

通过STDIN进行输入。

第一行/磁带只是从STDIN读取字节并将其写入。第二行最初通过来存储一个空格32c,然后在读取下一个字符的同时输出该空格。

在线尝试!


3

Python 2,27 25 24字节

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

比拉菲的答案短...

-1感谢60919(FlipTack)。


如果允许功能,则lambda x:' '.join(x)+' '短1个字节。
FlipTack

3

C,50个字节

一点点main()递归:)

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

在线尝试!-如果在您自己的计算机上使用它,请使用Ctrl+ D表示EOF。


3

C,56字节(作为程序参数),46字节(来自stdin)

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

普通的老C答案。编译后,需要使用字符串作为第一个参数来调用该程序,带空格的字符串需要用引号引起来。对于开始帖子中的示例:

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

将输出

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 .

直接从stdin读取的解决方案。

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

@FryAmTheEggman少了一个字节


要求有些模糊,但是我相信您必须从中读取输入内容,stdin而不是将其作为参数。另外,这是一个页面,其中提供了一些有用的技巧,可帮助您在C语言中进一步打高尔夫球:codegolf.stackexchange.com/q/2203/13877
Josh

@Josh它是否算作main的参数?因为否则,Java答案将是错误的,并且对Haskell的答案也不是很确定。
SBI

要么是好的,我们喜欢我们的I / O是友好的:)但我相信使用getchar()较短。另外,对于大多数C编译器,您都不需要包含。
FryAmTheEggman

@FryAmTheEggman我完全保留了包含内容,我只能使用gcc进行测试。是的,只要gcc-only就可以了,剃光include就可以了。
SBI

通常,如果它可以与Ideone一起使用,就可以了:)
FryAmTheEggman

3

R,36个字节

cat(strsplit(readline(),"")[[1]],"")

例:

> cat(strsplit(readline(),"")[[1]],"")
Hello R!
H e l l o   R ! 

1
您不需要sep=" ",因此可以缩短很多时间:在线尝试!
朱塞佩

2

认真地,7个字节

' ;,@j+

在线尝试!

伙计,所需的结尾空间增加了3个额外的字节。没有它,,' j将为4工作。

说明:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.