Seni ASCII Aligned Horizontal

20

Tugas Anda adalah untuk menerima sebagai masukan dua "Seni ASCII", dan sejajarkan setiap karya seni di sebelah satu sama lain secara horizontal.

Misalnya, Anda memiliki dua string, "abc\ndef"dan "123\n456". Anda perlu menyelaraskannya secara horizontal untuk menghasilkan string "abc123\ndef456". Saya menyebutnya" menyelaraskan secara horizontal "karena sementara input, ketika dicetak, terlihat seperti ini:

abc
def

dan:

123
456

Outputnya, ketika dicetak, akan terlihat seperti ini:

abc123
def456

Perhatikan bagaimana satu input ditempatkan di sebelah input lainnya.


Memasukkan

  • Input akan berupa string, dan dapat berupa dua argumen terpisah, atau sebagai urutan string.
  • Karakter dalam seni akan memiliki kode desimal dalam kisaran 32-126 (inklusif).
  • Tidak apa-apa untuk mendukung sejumlah seni sewenang-wenang untuk menyelaraskan alih-alih hanya dua (tapi jelas Anda harus mendukung setidaknya dua).
  • Anda dapat mengasumsikan bahwa masing-masing seni akan memiliki dimensi yang sama, dan bahwa mereka akan mengandung setidaknya satu baris.
  • Anda harus dapat mendukung setidaknya 100x100 karakter seni.

  • Untuk menyelaraskan dengan konvensi di situs, urutan argumen tidak masalah. Tidak masalah seni mana yang ada di kiri atau kanan.


Keluaran

  • Output akan menjadi seni selaras seperti yang disebutkan di atas, baik dikembalikan atau output ke stdout.

  • Setiap spasi spasi tambahan di opsional.

  • Tidak boleh ada pemisah visual antara seni yang selaras.


Seni input dan output harus berupa \natau \rdibatasi string. Akan terlalu sepele untuk mengizinkan 2D-array.

Pengajuan mungkin fungsi atau program lengkap.

Kasus uji:

"abc\ndef", "123\n456" -> "abc123\ndef456".

"qwertyuiop\n asdfghjkl", "Some other\nTextFiller" -> "qwertyuiopSome other\n asdfghjklTextFiller"

"  *  \n *** \n*****\n *** \n  *  \n", "  +  \n  +  \n+++++\n  +  \n  +  \n" -> "  *    +  \n ***   +  \n*****+++++\n ***   +  \n  *    +  \n"
Carcigenicate
sumber
1
Bisakah kita menggunakan pembatas khusus alih-alih baris baru? yaitu "|"atau " "?
Rɪᴋᴇʀ
10
Saya akan mengatakan tidak mengingat itu akan merusak seni apa pun.
Carcigenicate
Bisakah kita menggunakan \rbukan \n?
Adám
@ Adám Sure. Saya akan memperbarui kata-katanya.
Carcigenicate
Apakah memimpin spasi putih ok?
Adám

Jawaban:

20

Kanvas , 1 byte

×

Coba di sini!

dzaima
sumber
6
Karena siapa yang tidak hanya memiliki builtin untuk ini? : P
caird coinheringaahing
5
Itu bahkan tidak adil. ; -;
totallyhuman
3
@KevinCruijssen Pada PPCG biasanya diizinkan untuk mengambil input dalam urutan apa pun yang Anda inginkan, dan untuk bahasa berbasis stack, urutan saat ini lebih masuk akal daripada sebaliknya.
dzaima
5
@KevinCruijssen walaupun saya baru ingat bahwa saya memiliki built-in untuk reverse add, jadi saya memperbarui postingan: p
dzaima
2
Jadi Canvas memiliki dua bawaan untuk ini? Oke, kenapa tidak?
caird coinheringaahing
7

Haskell , 37 byte

(unlines.).(.lines).zipWith(++).lines

Cobalah online!

IO sebagai daftar garis hanya akan zipWith(++). : P

benar-benar manusiawi
sumber
6

Python 2 , 59 byte

lambda y:'\n'.join(map(str.__add__,*map(str.splitlines,y)))

Cobalah online!

Rɪᴋᴇʀ
sumber
Itu juga dapat dipersingkat dengan menghapus ruang. : P
totallyhuman
Jika Anda ingin memasukkan dan mengeluarkan daftar garis, seperti sebelumnya, Anda bisa mendapatkannya hingga 30: Coba online!
Saya duduk di sana selama 5 menit, mencoba memutuskan apakah saya harus mengizinkannya. Seperti yang ditunjukkan oleh jawaban Haskell, itu akan mengurangi tantangan menjadi sesuatu yang jauh lebih sepele. Saya kira solusi yang terlalu sepele itu tidak akan sepopuler ini.
Carcigenicate
4

05AB1E , 6 byte

|¶¡øJ»

Cobalah online!

Penjelasan

|        # push all input into a list
 ¶¡      # split on newlines
   ø     # zip
    J    # join the rows to single strings
     »   # merge on newlines
Emigna
sumber
Sayang sekali ruang di antara kedua input tidak diizinkan :(.
Magic Octopus Mm
3

Perl 5 -0F , 28 byte

Termasuk +2untuk \nargumen ke -F(itu "kode" sehingga harus dihitung)

Berikan input secara langsung setelah satu sama lain di STDIN.

#!/usr/bin/perl -0F\n
say@F[$%++,$_]for@F/2..$#F

Cobalah online!

Ton Hospel
sumber
3

Bash + coreutils, 14

  • 4 byte disimpan berkat @DavidFoerster.
paste -d "" $@

Input diberikan sebagai dua nama file sebagai parameter baris perintah.

Cobalah online .

Trauma Digital
sumber
Anda dapat menghemat 4 byte:paste -d "" $@
David Foerster
@ DavidFoerster Terima kasih! Aneh - Saya sudah mencobanya sebelumnya dan tidak berhasil. Sunting - Saya mengerti sekarang - alih-alih -d "", saya mencoba -d"", yang tentu saja tidak berbeda dengan-d
Digital Trauma
3

Perl 6 , 27 byte

{join "\n",[Z~] $_>>.lines}

Cobalah online!

Bekerja dengan sejumlah seni yang sewenang-wenang. IO sebagai daftar daftar akan adil &[Z~].

nwellnhof
sumber
2

APL (Dyalog Unicode) , 9 byte SBCS

Program lengkap. Prompts (STDIN) untuk daftar panjang\r string -delimited. String mungkin kasar dan dengan lebar yang berbeda selama mereka memiliki jumlah garis yang sama. Cetakan (STDOUT) menghasilkan seni ASCII.

⊃,/⎕FMT¨⎕

Cobalah online!

 meminta input yang dievaluasi

⎕FMT¨ memformat (mengevaluasi semua karakter kontrol dan mengembalikan matriks karakter) masing-masing

,/ menggabungkannya secara horizontal (pengurangan catenation)

 mengungkapkan (karena pengurangan mengurangi peringkat dari 1 menjadi 0)

Adm
sumber
2

Java 8, 100 84 78 byte

a->b->{for(int i=0;;)System.out.println(a.split("\n")[i]+b.split("\n")[i++]);}

Keluar dengan ArrayIndexOutOfBoundsExceptionSTDERR setelah mencetak hasilnya ke STDOUT, yang diizinkan .

-6 byte terima kasih kepada @ OlivierGrégoire .

Penjelasan:

Cobalah online.

a->b->{                        // Method with two String parameters and no return-type
  for(int i=0;;)               //  Loop over the substrings of the first input
    System.out.println(        //   Print:
     a.split("\n")[i]          //    The substring of the first input
     +b.split("\n")[i++]);}    //    plus the same-indexed substring of the second input
Kevin Cruijssen
sumber
1
a->b->{for(int i=0;;)System.out.println(a.split("\n")[i]+b.split("\n")[i++]);}78 byte Tidak ada yang dikatakan tentang tidak memiliki efek samping tambahan. Jadi kita bisa menghitung sampai pengecualian terjadi.
Olivier Grégoire
@ OlivierGrégoire Terima kasih! Dan keluar dengan kesalahan ke STDERR memang diperbolehkan setelah telah mencetak semuanya ke STDOUT.
Kevin Cruijssen
2

Ruby , 48 byte

->a,b{$;=$/;a.split.zip(b.split).map(&:join)*$/}

Cobalah online!

Seekor lambda mengambil dua senar dan mengembalikan tali. Mengatur splitpembatas default ke baris baru dengan $;=$/;tidak menyimpan byte, tetapi membuat sisanya terlihat sedikit lebih bagus.

Ruby , 49 byte (banyak string)

->s{s.map{|a|a.split$/}.transpose.map(&:join)*$/}

Cobalah online!

Hanya untuk bersenang-senang. Ternyata kami dapat menerima array string dengan biaya tambahan hanya 1 byte.

benj2240
sumber
2

JavaScript (ES6), 51 byte

f=
(a,b)=>a.replace(/.+/g,a=>a+b.shift(),b=b.split`
`)
;document.write("<pre>"+f("abc\ndef", "123\n456")+"</pre>")

Neil
sumber
2

Bertanya-tanya , 21 byte

->#oN.zip#++.-> <>"
"

Contoh penggunaan:

(->#oN.zip#++.-> <>"
")["abc#ndef" "abc#ndef"]

#n digunakan sebagai ganti \n untuk menunjukkan baris baru.

Penjelasan

Versi verbal:

(map #oN) . (zip #con) . (map split "#n")

Pisahkan setiap string dalam array input di sepanjang baris baru, zip dengan string concatenate, dan output setiap item.

Mama Fun Roll
sumber
2

Kotlin , 73 byte

a,b->a.split("\n").mapIndexed{i,s->s+b.split("\n")[i]}.joinToString("\n")

Cobalah online!

Makotosan
sumber
1

C, 96 byte

#define L(s)for(;*s++>10;)putchar(s[-1]);
i;f(s,t)char*s,*t;{for(;i=!!s[-i];puts("")){L(s)L(t)}}

Cobalah online!

Steadybox
sumber
1

JavaScript (ES6), 52 byte

Mengambil input dalam sintaks currying (a)(b).

a=>b=>a.split`
`.map((s,i)=>s+b.split`
`[i]).join`
`

Cobalah online!

Arnauld
sumber
1

Julia 0,6 , 41 byte

(a,b)->map(*,split(a,'\n'),split(b,'\n'))

Cobalah online!

Rɪᴋᴇʀ
sumber
1

PowerShell , 51 49 byte

param($a,$b)$a-split"
"|%{$_+($b-split"
")[$i++]}

Cobalah online!

Mengambil input sebagai string literal dengan baris baru. Anda juga bisa menggunakan `n(pembatas baris baru di PowerShell, tidak\n ).

Kami pertama -split- tama memasukkan string input pada baris baru, yang menciptakan array, dan mengulanginya|%{...} . Setiap iterasi, kami merangkai string dengan string input kanan lagi dibagi pada baris baru, diindeks dan ditambahkan.

Itu dibiarkan di pipa dan implisit Write-Outputpada penyelesaian memberi kita output sebagai array string, yang dicetak dengan baris baru di antaranya.

AdmBorkBork
sumber
1

Merah , 78 byte

func[a b][b: split b"^/"foreach c split a"^/"[prin c print first b b: next b]]

Cobalah online!

Galen Ivanov
sumber
1

Japt -R , 8 7 byte

·íV· m¬

Cobalah


Penjelasan

             :Implicit input of strings U & V
·            :Split U on newlines
  V·         :Split V on newlines
 í           :Interleave
     m       :Map
      ¬      :  Join
             :Implicitly join with newlines and output

Alternatif

·Ë+V·gE

Cobalah

             :Implicit input of strings U & V
·            :Split U on newlines
 Ë           :Map over each element at index E and rejoin with newlines
   V·        :  Split V on newlines
     gE      :  Get the element at index E
  +          :  Append to the current element
             :Implicitly join with newlines and output
Shaggy
sumber
1

Bash , 92 byte

a=();for b;do c=;while IFS= read -r d;do a[c++]+=$d;done<<<"$b";done;printf '%s\n' "${a[@]}"

Cobalah online!

Tidak Terkumpul:

array=()                             # Initialize the array
for argument in "${@}"; do           # Loop over the arguments list
  index='0'                          # Reset the index
  while IFS='' read -r 'line'; do    # Loop over every line of the current argument
    array[index]+="${line}"          # Append the line to its corresponding place
    (( index++ ))                    # Increment the index
  done <<< "${argument}"             # End while loop
done                                 # End for loop
printf '%s\n' "${array[@]}"          # Print array's content

Contoh:

$ foo $'abc\ndef' $'123\n456'
abc123
def456

$ foo $'qwertyuiop\n asdfghjkl' $'Some other\nTextFiller'
qwertyuiopSome other
 asdfghjklTextFiller

$ foo \
>   $'  *  \n *** \n*****\n *** \n  *  \n' \
>   $'  +  \n  +  \n+++++\n  +  \n  +  \n'
  *    +  
 ***   +  
*****+++++
 ***   +  
  *    +  


# https://gist.github.com/nxnev/dad0576be7eb2996b860c320c01d0ec5
$ foo "$(< input1)" "$(< input2)" "$(< input3)" > output

Saya juga memiliki yang lebih pendek tetapi gagal jika readpernyataan kedua mengembalikan nilai bukan nol.

Bash , 55 byte

while IFS= read -r a;IFS= read b<&3;do echo "$a$b";done

Catatan: <&3sepertinya tidak berfungsi di tio.run

Yang ini menggunakan deskriptor file ( 1dan 3) alih-alih argumen:

$ foo <<< $'qwertyuiop\n asdfghjkl' 3<<< $'Some other\nTextFiller'
qwertyuiopSome other
 asdfghjklTextFiller
nxnev
sumber
1

Arang , 8 byte

PθM⌕θ¶→η

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

 θ          First input
P           Print without moving the cursor
    θ       First input
     ¶      Literal newline
   ⌕        Find index
  M   →     Move that many squares right
       η    Implicitly print second input

Tambahkan 2 byte untuk menerima beberapa input:

FA«PιM⌕ι¶→

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

 A          Input
F «         Loop over all entries
   Pι       Print current entry
     M⌕ι¶→  Move to next entry

Tambahkan 4 byte untuk menerima input yang tidak ditambahkan:

PθM⌈E⪪θ¶Lι→η

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

      θ         First input
       ¶        Literal newline
     ⪪          Split
    E           Map over each string
         ι      Current string
        L       Length
   ⌈            Maximum
  M       →     Move that many squares right
Neil
sumber
1

JavaScript (Node.js) , 79 byte

a=>(b=a.map(x=>x.split`
`))[i=0].map(y=>b.map(z=>c+=z[i],c="")&&++i&&c).join`
`

Cobalah online!

Mendukung jumlah sembarang seni ASCII bergabung bersama bukan hanya 2 (seperti dalam 2 jawaban JS sebelumnya).

Shieru Asakoto
sumber
1

Swift 4 , 119 byte

func f(s:[String])->String{return s[0].split{$0=="\n"}.enumerated().map{$0.1+s[1].split{$0=="\n"}[$0.0]+"\n"}.joined()}

Penjelasan

func f(s: [String]) -> String {
    return s[0].split{ $0=="\n" }       //splitting the first string after every \n
    .enumerated()                       //create a tuple of offsets and elements
    .map {
        $0.1 +                          //current element
        s[1].split{$0 == "\n"}[$0.0] +  //splitting the second string + indexing
        "\n"                            //new line after every line
     }
     .joined()
}

Cobalah online!

Tamás Sengel
sumber