Teks Lebar Penuh


44

Teks lebar penuh adalah teks yang memiliki spasi setelah setiap karakter, termasuk yang terakhir. Misalnya, kalimat pertama dari pertanyaan ini menjadi:

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 . 

Tulis sebuah program yang mengambil baris dalam teks dari input standar dan output sebagai teks full-width ke out standar.

Papan peringkat


6
Biasanya Anda juga harus mengizinkan fungsi, atau mengecualikan banyak bahasa (mis. JavaScript).
wizzwizz4

8
Kami memiliki beberapa default untuk I / O yang didasarkan pada konsensus komunitas. Meskipun Anda berhak untuk mengesampingkannya, bersikeras STDIN / STDOUT untuk I / O membatalkan sejumlah jawaban (yang mengasumsikan bahwa standarnya berlaku) dan membuat tugas yang benar-benar mustahil dilakukan dalam bahasa lain (mereka tidak memiliki aliran standar).
Dennis

52
That is not what fullwidth text is.
BlueRaja - Danny Pflughoeft

4
@ BlueRaja-DannyPflughoeft benar. Teks Lebar Penuh adalah tentang penyandian karakter yang mendasarinya (2 byte disandikan) yang dibutuhkan oleh beberapa bahasa (yaitu, ideogram). Dalam Unicode gagasan setengah dan ukuran penuh disebut blok Unicode
Ludovic Frérot

2
@ LudovicFrérot Sebenarnya, ini bukan ideogram, ini adalah huruf bahasa Inggris cina.
Erik the Outgolfer

Jawaban:


29

Jelly , 5 3 2 byte

Terima kasih kepada Dennis karena telah menghemat 2 byte. Juga terima kasih kepada FryAmTheEggman untuk menghemat 1 byte. Kode:

p⁶

Penjelasan:

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

Menggunakan pengodean Jelly .

Cobalah online!


1
⁶ membutuhkan tiga byte dalam UTF-8.
Jess Smith

12
@JessSmith Jelly menggunakan halaman kode sendiri: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
a spaghetto

1
@AndN Masukkan itu dalam jawaban, bukan komentar.
mbomb007

3
@ mbomb007 Tepat di tajuk.
Adnan

5
@AndN Tidak, Anda harus mengatakan dalam jawaban Anda bahwa ia memiliki halaman kode sendiri. Terutama karena ini adalah bahasa yang lebih baru, jadi orang belum tahu.
mbomb007

24

Python 3.5, 18 byte

print(*input(),'')

Ini berfungsi karena printpemisah default adalah ruang tunggal.


3
print(*input(),end=' ')akan menjadi portabel, tapi itu tidak terlalu golf ...
Dennis

9
MFW penggunaan pertama PEP saya yang saya lihat di alam bebas adalah pada Code Golf.
Veedrac

Apakah ini memiliki spasi setelah karakter terakhir?
Buah Esolanging

17

Hexagony , 21 13 12 10 byte

Kode:

Menyimpan banyak byte berkat FryAmTheEggman . Kode:

P,<0/*;@.>

Atau dalam bentuk yang lebih mudah dibaca:

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

Cobalah online!

Penjelasan:

Program Hexagony dimulai di sudut kiri atas, segera mengatur tepi memori ke nilai ASCII P, yaitu 80. Setelah itu, kita dapat melihat bahwa jalur berikut diambil:

masukkan deskripsi gambar di sini

Kita bisa melihat bahwa jalan yang diambil adalah: P,<;.P/0....;*/>. Setelah itu P, kami mengambil byte dari input pengguna. Jika ini kosong, cabang berikut ( <) akan mengarahkan kami ke Timur Laut. Jika input tidak kosong, cabang mengarahkan kami ke Tenggara. Setelah itu, kami mengeluarkan input pengguna menggunakan ;. Kami mengatur kembali tepi memori P, yaitu 80. Nol diikuti oleh cermin kemudian digabungkan ke nomor kami, menghasilkan 800. Ini kemudian dikeluarkan menggunakan ;perintah, tetapi pertama-tama diambil modulo 256, menghasilkan 32, yang adalah karakter spasi. Setelah itu, kami mengatur ulang tepi memori menggunakan *perintah dan kembali untuk mengulangi sisa input pengguna. Setelah selesai dengan input pengguna, jalur diarahkan ke Timur Laut:

masukkan deskripsi gambar di sini

Ini pada dasarnya pergi ke @perintah, yang mengakhiri program.

Menggunakan Timwi 's menakjubkan HexagonyColorer untuk membuat diagram.


Eh, saya bermain golf saat Anda mengedit. Ups. 10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman Hahaha, mari kita buat penjelasan baru: p.
Adnan

P,<<>0;@>*juga 10, tapi sayangnya saya tidak berpikir itu membantu dalam memotong byte lain.
Martin Ender

@ MartinBüttner Oh, sayang sekali. Saya ragu apakah mungkin untuk memotong byte lain, tetapi sepertinya tidak mungkin.
Adnan

Apakah HexagonyColorer sekarang dianimasikan?
Buah Esolanging

12

Haskell, 11 byte

((:" ")=<<)

Contoh penggunaan: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Peta setiap karakter cke daftar dua elemen [c, space]dan menggabungkan semuanya menjadi satu daftar.


Menarik bahwa Haskell dan Jelly adalah jenis melakukan hal yang sama di sini, karena daftar monad bertindak serupa dengan produk Cartesian.
ballesta25


6

JavaScript, 20 Bytes

Sederhana, saya hanya berharap bahwa Array.join menambahkan ruang hingga akhir sehingga saya bisa menghemat 3 byte.

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

5
[...s,``].join` ` mungkin?
Neil

3
Bahkan lebih baik [...s,,].join...
edc65

@ edc65 Tidak berfungsi di Firefox atau Chrome terbaru? Saya hanya mendapatkan joinfungsi sebagai pengembalian, seperti yang saya harapkan.
Mwr247

@ Mwr247 setelah bergabung Anda harus meletakkan sisa kode Anda, itu sebabnya saya meletakkan ellipsis (...). Ini hanya penghematan 1 byte
edc65

@ edc65 mungkin terlalu malas untuk mengetahui cara mengetikkan ` `komentar.
Neil

5

> <> , 13 10 byte

3 byte disimpan berkat @ Sp3000

i:0(?;o 'o

Coba di sini . Klik tautannya, lalu Kirim , lalu ketikkan beberapa input dan tekan Berikan , dan akhirnya jalankan program dengan Mulai atau Jalankan tanpa animasi .

Penjelasan

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 'ountuk 10
Sp3000

Bahkan, io 'oberfungsi juga, salah.
Sp3000

@ Sp3000 Terima kasih! Saya akan menggunakan versi tanpa kesalahan (mungkin Anda ingin mengirimkan milik Anda?). Saya lupa Anda dapat memasukkan karakter secara langsung. Bagaimana cara kerja penawaran yang tidak cocok? Apakah selalu memilih arang sebelumnya?
Luis Mendo

1
'hanya membungkus, mendorong karakter sampai menemukan yang lain 'untuk menutupnya. Dalam hal ini pembukaan dan penutupan 'adalah char yang sama dan sebagian besar kode sumber didorong, tetapi char atas hanya akan menjadi ruang karena didorong terakhir.
Sp3000

@ Sp3000 Mengerti. Jadi itu juga siklus. Terima kasih banyak atas saran dan penjelasannya!
Luis Mendo

5

Java, 132 (System.in) atau 99 (argumen Program) byte

Bisakah Anda merasakan overhead malam ini?

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 menemukan cara 6 byte lebih pendek untuk melakukan ini, tetapi saya tidak akan mencuri pendekatan mereka. Saya sudah menggunakannya dengan versi STDIN dan lambda.

28 karakter untuk lambda tetapi itu tidak memenuhi persyaratan program.

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

Pertanyaan menentukan bahwa input harus dari STDIN.
EMBLEM

Saya bisa menambahkan satu untuk Anda, jika tidak masalah.
Biru

Saya telah menambahkan versi STDIN sekarang (dan menggunakan shooqie regexplace pintar yang tahu).
CAD97

Tidak perlu tanda kurung di regex Anda. Juga menghapus ruang ekstra di antara argumen replaceAll.
Khuldraeseth na'Barya

4

Cubix , 10 byte

Cubix adalah bahasa 2 dimensi yang dikembangkan oleh @ETHproductions di mana perintah dibungkus ke dalam kubus. Cobalah online

@.?wi^\oSo

Ini memetakan ke sebuah kubus dengan panjang tepi 2

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

Mulai dengan input i. Aliran diarahkan ^ke utara ke atas wajah. ?Jika nilainya negatif belok kiri untuk menyelesaikan @, nol wmelanjutkan ke kanan bergeser atau positif belok kanan lalu mencerminkan kiri \. Keluarkan karakter dengan spasi tambahan oSo.


4

Cubix , 9 byte

@./.i?>So

Lihat bekerja online!

Cubix adalah bahasa di mana instruksi dipetakan ke permukaan kubus. Program ini membentuk jaring kubus berikut:

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

Penunjuk instruksi dimulai i, yang mengambil kode karakter lain dari input dan mendorongnya ke stack. Jika tidak ada lagi input yang tersisa untuk diambil, ?belokan IP kiri, di mana hits /, dan tercermin ke atas @, yang mengakhiri program.

Namun, jika ada input yang tersisa, nilainya akan menjadi kode karakter. Karena semua 1 kode karakter positif, ?membuat IP berbelok ke kanan, di mana ia membungkus semua jalan di sekitar kubus, meneruskan ocara yang menghasilkan char. Lalu klik /yang membuatnya berputar kembali ke >So, yang mendorong dan mencetak spasi. IP membawa di barat sampai membungkus kembali ke i, kembali ke awal dari loop utama.

1 Jika karakternya adalah byte nol, itu akan mengabaikan ?dan melanjutkan lurus ke depan, cukup mengeluarkan satu spasi.


Tentu saja, hanya ada begitu banyak penjelasan tertulis yang bisa dilakukan, jadi saya sangat menyarankan Anda melihat ini di penerjemah online . Ada opsi "kecepatan", yang memungkinkan Anda untuk melihat eksekusi lambat atau secepat yang Anda suka.


1
Anda dapat menyimpan byte dengan@.Uoi?So
MickyT

4

Stax , 2 byte

Dasi Jelly!

0\

Cobalah di staxlang.xyz!

Semua ini dilakukan adalah mendorong 0ke tumpukan dan zip string dari input standar dengannya, ulangi 0 seperlunya. Dalam Stax, kode titik 0 dalam sebuah string biasanya dikonversi ke 32 (spasi).

Ini cukup singkat sehingga mengemasnya ûTtidak mengurangi apa-apa.



3

CJam , 5 4 byte

1 byte lebih sedikit berkat @FryAmTheEggman

lSf+

Cobalah online!

Penjelasan

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

3

Jawa, 92

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

3

Awk, 7 byte

(4 karakter kode + 3 opsi opsi baris perintah.)

NF++

Contoh dijalankan:

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

(Ada beberapa ketidaksepakatan tentang apa yang harus dimasukkan dalam jumlah opsi baris perintah. Saya menyertakan apa yang sebenarnya diteruskan ke awkpenerjemah: "-", "F" dan pemisah antara "F" dan parameter string kosong. Lihat di bawah ini apa Maksudku.)

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])).' ';

Jalankan dari baris perintah

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

Berfungsi paling baik ketika string diberikan pada baris perintah, tetapi itu dapat dilakukan satu karakter pada satu waktu secara real time juga.

Tidak Disatukan:

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

3

Labirin , 10 byte

<.23.%):,>

Ini berakhir dengan kesalahan, tetapi pesan kesalahan pergi ke STDERR.

Cobalah online!

Penjelasan

Ini adalah salah satu kasus yang jarang terjadi di mana program linear sepenuhnya layak. Loop dicapai melalui perintah modifikasi kode sumber <dan >, yang bekerja karena setelah setiap iterasi kita tahu bahwa stack kosong lagi.

< secara siklis menggeser seluruh baris satu sel ke kiri, jadi kita berakhir dengan:

.23.%):,><

Ini mengambil penunjuk instruksi (IP) dengan itu sehingga IP sekarang di ujung kanan kode dan harus bergerak ke kiri. Selanjutnya, >lakukan modifikasi yang berlawanan sehingga menggeser kode sumber kembali ke

<.23.%):,>

Sekarang kita menjalankan iterasi tunggal (dari kanan ke kiri), sebelum semuanya dimulai:

,    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

?=?\ 

Contoh dijalankan:

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

Saya belum pernah melihat bahasa ini sebelumnya. Tautan ke penerjemah?
spaghetto

Maaf. Menambahkan hyperlink ke judul posting. Cukup lama, tetapi sayangnya, Google dapat secara efisien membantu menemukannya hanya jika Anda tahu bahwa namanya berasal dari "prosesor makro tujuan umum".
manatwork

3

MATL , 7 byte

tnZ"v1e

Cobalah online!

Penjelasan

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∘↑¨

Ini membutuhkan 2 item untuk setiap karakter dalam string, dengan efek menambahkan spasi

Untuk membuatnya menjadi program yang membutuhkan stdin, jumlah byte yang sama:

∊2↑¨⎕

Coba di sini .



3

PHP, 31 byte

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

mengambil input dari argumen baris perintah.


3

Threead , 45 16 Bytes tidak bersaing.

  B[coB]
32c   o

Mengambil input melalui STDIN.

Baris / Tape pertama hanya membaca byte dari STDIN, dan menulisnya. Baris kedua, awalnya menyimpan spasi via 32c, lalu pada saat yang sama ketika karakter berikutnya sedang dibaca, menampilkan spasi itu.

Cobalah online!


3

Python 2, 27 25 24 byte

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

Lebih pendek dari jawaban Raffi ...

-1 berkat 60919 (FlipTack).


Jika fungsi diizinkan maka lambda x:' '.join(x)+' '1 byte lebih pendek.
FlipTack

3

C, 50 byte

Sedikit main()rekursi :)

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

Cobalah online! - Jika menggunakan ini di mesin Anda sendiri, gunakan Ctrl+ Duntuk menandakan EOF.


3

C, 56 Bytes (sebagai argumen program), 46 Bytes (dari stdin)

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

Jawaban C yang biasa saja. Setelah dikompilasi, program perlu dipanggil dengan string karena parameter pertama, string dengan spasi perlu dilampirkan dalam tanda kutip. Sebagai contoh di posting awal:

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

Yang akan ditampilkan

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 .

Solusi yang dibaca langsung dari stdin.

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

Satu byte lebih sedikit berkat @FryAmTheEggman


Persyaratannya agak suram, tapi saya yakin Anda harus membaca input stdindaripada menganggapnya sebagai argumen. Juga, berikut adalah halaman dengan beberapa tips berguna untuk bermain golf lebih lanjut di C: codegolf.stackexchange.com/q/2203/13877
Josh

@Josh Apakah ini dianggap sebagai parameter utama? Karena sebaliknya, jawaban Java juga akan salah, dan tidak begitu yakin dengan jawaban Haskell.
SBI

Baik tidak apa-apa kita suka I / O kita menjadi ramah :) Tapi saya percaya menggunakan getchar()lebih pendek. Anda juga tidak perlu menyertakan untuk sebagian besar kompiler C.
FryAmTheEggman

@FryAmTheEggman Saya meninggalkan menyertakan untuk sepenuhnya kompatibel, saya hanya bisa menguji dengan gcc. Selama gcc-only baik-baik saja, ya, mencukur termasuk tidak apa-apa.
SBI

Secara umum, jika bekerja dengan Ideone tidak apa-apa :)
FryAmTheEggman

3

R, 36 byte

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

Contoh:

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

1
Anda tidak perlu sep=" ", jadi ini bisa jauh lebih singkat: Coba online!
Giuseppe

2

Serius, 7 byte

' ;,@j+

Cobalah online!

***, ruang akhir yang dibutuhkan menambahkan 3 byte tambahan. Tanpanya, ,' jakan bekerja untuk 4.

Penjelasan:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.