全角テキスト


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

8
コミュニティのコンセンサスに基づいたI / Oのデフォルトがいくつかあります。それらをオーバーライドする権利がありますが、I / OのSTDIN / STDOUTを要求すると、多数の回答(デフォルトが適用されると想定)が無効になり、他の言語ではタスクがまったく不可能になります(標準ストリームはありません)。
デニス

52
これは、次のように完全ではありません  。
BlueRaja-ダニーPflughoeft

4
@ BlueRaja-DannyPflughoeftは正しい。全角テキストは、一部の言語(表意文字など)で必要とされる基本的な文字エンコード(エンコードされた2バイト)に関するものです。Unicodeでは半分とフルサイズの概念が呼ばれたUnicodeブロック
ルドビクFrérot

2
@LudovicFrérot実際、これらは表意文字ではなく、中国語の英語の文字です。
エリックアウトゴルファー16

回答:


29

ゼリー5 3 2バイト

2バイトを節約してくれたDennisに感謝します。また、1バイトを節約してくれたFryAmTheEggmanに感謝します。コード:

p⁶

説明:

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

Jellyエンコーディングを使用します

オンラインでお試しください!


1
UTF UTF-8では3バイトを使用します。
ジェススミス

12
@JessSmithゼリーは、独自のコードページを使用しています。github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
spaghetto

1
@AandNコメントではなく、答えに入れてください。
mbomb007

3
@ mbomb007ヘッダーにあります。
アドナン

5
@AandNいいえ、答えには独自のコードページがあると言う必要があります。特に新しい言語なので、人々はまだ知りません。
mbomb007

24

Python 3.5、18バイト

print(*input(),'')

これは、printのデフォルトの区切り文字が単一スペースであるため機能します。


3
print(*input(),end=' ')...ポータブルだろうが、それは非常にgolfyていない
デニス・

9
MFW私が実際に目にする私のPEPの最初の使用は、コードゴルフです。
ビードラック

これは最後の文字の後にスペースがありますか?
エソランジングフルーツ

17

六角形21 13 12 10バイト

コード:

保存された多くのおかげバイトのFryAmTheEggmanを。コード:

P,<0/*;@.>

または、より読みやすい形式で:

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

オンラインでお試しください!

説明:

Hexagonyプログラムは左上隅から開始し、メモリエッジをすぐにP80のASCII値に設定します。その後、次のパスが取られることがわかります。

ここに画像の説明を入力してください

取られたパスは次のとおりP,<;.P/0....;*/>です。の後、Pユーザー入力のバイトを取得します。これが空の場合、次のブランチ(<)が北東に向かいます。入力が空でない場合、ブランチは南東に私たちを向けます。その後、を使用してユーザー入力を出力します;。メモリエッジをP80に戻します。ゼロに続いてミラーが連結され、800になります。これは;コマンドを使用して出力されますが、まず256を法として32になります。スペース文字です。その後、*コマンドを使用してメモリエッジをリセットし、ユーザー入力の残りのループに戻ります。ユーザー入力が完了すると、パスは北東に向けられます。

ここに画像の説明を入力してください

これは基本的に@コマンドに行き、プログラムを終了します。

使用Timwiの素晴らしいHexagonyColorerを図を作るため。


あなたが編集している間、私はゴルフをしていました。おっと。10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggmanハハハ、新しい説明をしましょう。
アドナン

P,<<>0;@>*10もありますが、残念ながら別のバイトを削るのに役立つとは思いません。
マーティンエンダー

@MartinBüttnerああ、それは残念だ。別のバイトを削ることができるかどうかは疑わしいが、そうは思えない。
アドナン

HexagonyColorerはアニメーション化されましたか?
エソランジングフルーツ

12

Haskell、11バイト

((:" ")=<<)

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

各文字cを2要素リストにマップし、[c, space]すべてを1つのリストに連結します。


リストモナドはデカルト積と同様に動作するため、HaskellとJellyがここで同じことをしているのは興味深いことです。
ballesta25


6

JavaScript、20バイト

単純です。Array.joinが最後にスペースを追加して、3バイト節約できるようにしたいだけです。

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

5
[...s,``].join` ` たぶん?
ニール

3
さらに良いことに[...s,,].join...
edc65

@ edc65は最新のFirefoxまたはChromeでは機能しませんか?join期待どおり、関数を戻り値として取得するだけです。
Mwr247

結合後の@ Mwr247では、残りのコードを配置する必要があります。そのため、省略記号(...)を配置します。わずか1バイトの節約
-edc65

@ 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

実際、io 'oエラーも出て動作します。
Sp3000

@ Sp3000ありがとう!エラーなしのバージョンを使用します(おそらく、あなたは自分のものを送信したいですか?)。文字を直接入力できることを忘れていました。比類のない見積もりはどのように機能しますか?常に前の文字を選択しますか?
ルイスメンドー

1
'ラップアラウンドして、'閉じる文字を見つけるまで文字をプッシュします。この場合、開始と終了'のsは同じ文字であり、ソースコードのほとんどがプッシュされますが、一番上の文字は最後にプッシュされてからスペースになります。
Sp3000

@ Sp3000わかった。それまた循環的です。提案と説明をありがとう!
ルイスメンドー

5

Java、132(System.in)または99(プログラム引数)バイト

今夜頭上を感じますか?

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バージョンで使用しました。

ラムダでは28文字ですが、プログラムの要件を満たしていません。

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

質問は、入力がSTDINからのものでなければならないことを指定しました。
エンブレム

それが大丈夫なら、私はあなたのためにそれを追加できます。
ブルー

今、STDINバージョンを追加しました(そして、巧妙な正規表現shooqieを使用して計算しました)。
CAD97

正規表現に括弧は必要ありません。の引数間の余分なスペースも削除しましたreplaceAll
Khuldraeseth na'Barya

4

Cubix、10バイト

Cubixは、コマンドがキューブにラップされる@ETHproductionsによって開発された2次元言語です。 オンラインで試す

@.?wi^\oSo

これは、辺の長さが2の立方体にマッピングされます

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

入力で始まりますi。流れは^上面に向かって北にリダイレクトされます。 ?値が左に曲がって終了する@場合、ゼロは右にシフトするwか、右に曲がってから左に反映されます\。末尾にスペースがある文字を出力しますoSo


4

Cubix、9バイト

@./.i?>So

オンラインでご覧ください!

Cubixは、命令がキューブの表面にマッピングされる言語です。このプログラムは、次のキューブネットを形成します。

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

命令ポインタはで始まり、i入力から別の文字コードを取得してスタックにプッシュします。取得する入力が残っていない場合?、IPが左になり、IPがヒットし/、上に反映されて@、プログラムが終了します。

ただし、入力が残っている場合、値は文字コードになります。1文字のコードはすべて正であるため?、IPが右に曲がり、キューブの周囲全体に回り込みo、charを出力するウェイを通過します。次にヒット/し、にループバックして>So、スペースをプッシュして出力します。IPは、iに戻り、メインループの先頭に戻るまで西に進みます。

1 文字がヌルバイトの場合、それは無視され、?そのまま進み、単純に単一のスペースを出力します。


もちろん、書面による説明でできることは限られているため、オンライン通訳でこれを確認することを強くお勧めします。「速度」オプションを使用すると、実行を好きなだけ遅くしたり速くしたりすることができます。


1
バイトを保存するには@.Uoi?So
MickyT

4

スタックス、2バイト

ネクタイゼリー!

0\

staxlang.xyzで試してください!

これはすべて0、スタックにプッシュし、標準入力から文字列を圧縮し、必要に応じて0を繰り返します。Staxでは、文字列のコードポイント0は通常32(スペース)に変換されます。

これは十分に短いので、それを詰め込んでûTも読みやすさを低下させるだけです。




3

Java、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

文字列がコマンドラインで指定されたときに最適に機能しますが、リアルタイムで1文字ずつ実行することもできます。

ゴルフをしていない:

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に送られます。

オンラインでお試しください!

説明

これは、完全に線形のプログラムが実行可能なまれなケースの1つです。ループは、ソースコード変更コマンド<およびを使用して実現されます>。これは、各反復後にスタックが再び空になることがわかっているため機能します。

< 行全体を1セル左に循環的にシフトするため、次のようになります。

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

この言語を見たことがありません。通訳者にリンクしますか?
spaghetto

ごめんなさい。投稿タイトルにハイパーリンクを追加しました。かなり古いですが、残念なことに、Googleはその名前が「汎用マクロプロセッサ」に由来することがわかっている場合にのみ、効率的に見つけることができます。
マナトワーク


3

APL、5バイト

∊2∘↑¨

これは、文字列の各文字に対して2つの項目を取り、スペースを追加する効果があります

標準入力を使用するプログラムにするには、同じバイト数になります。

∊2↑¨⎕

ここで試してみてください



3

PHP、31バイト

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

コマンドライン引数から入力を受け取ります。


3

Threead45 16バイトの非競合。

  B[coB]
32c   o

STDINを介して入力を受け取ります。

最初のLine / Tapeは、単にSTDINからバイトを読み取り、書き込みます。2行目は、最初にを介してスペースを保存32cし、次の文字が読み取られると同時にそのスペースを出力します。

オンラインでお試しください!




3

C、56バイト(プログラム引数として)、46バイト(標準入力から)

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のおかげで1バイト削減


要件は少しあいまいですが、入力をstdin引数としてとるのではなく、入力を読む必要があると思います。また、ここではCで、さらにゴルフのためにいくつかの有用なヒントをページは次のとおりです。codegolf.stackexchange.com/q/2203/13877
ジョシュ

@Josh mainのパラメーターとしてカウントされますか?それ以外の場合、Javaの答えは同じように間違っており、Haskellの答えもそうではないからです。
SBI

私たちのI / Oなどの細かい我々は友好的になることです:)しかし、私は使用しては信じていないのどちらかgetchar()短い方です。また、ほとんどのCコンパイラにインクルードは必要ありません。
FryAmTheEggman

@FryAmTheEggman完全に準拠するためにインクルードを残しました。gccでしかテストできません。gccのみが問題ない限り、インクルードのシェービングは問題ありません。
SBI

一般に、それがIdeoneで動作する場合は
問題ありません


2

真剣に、7バイト

' ;,@j+

オンラインでお試しください!

男、終了スペースが必要なため、3バイト追加されました。それ,' jがなければ、4で動作します。

説明:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.