String-Block yang tumpang tindih

22

Tantangan:

Diberikan daftar string multi-line, tumpang tindih mereka (di kiri atas) dan output hasilnya.

Contoh:

Input: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Keluaran:

cbaa
bbaa
bbaa
aaaa

Aturan tantangan:

  • Format input fleksibel. Anda diperbolehkan mendapatkan input sebagai daftar 2D garis (yaitu [["aaaa","aaaa","aaaa","aaaa"],["bb","bb","bb"],["c"]]) atau daftar karakter 3D (yaitu [[["a","a","a","a"],["a","a","a","a"],["a","a","a","a"],["a","a","a","a"]],[["b","b"],["b","b"],["b","b"]],[["c"]]]). Anda diperbolehkan mengambil semua input satu per satu melalui STDIN. Dll
  • Format output sangat ketat. Anda dapat memilih untuk mencetak atau mengembalikan string multi-line. (Jika bahasa Anda tidak memiliki string, keluaran sebagai daftar karakter 2D diizinkan sebagai alternatif. Tetapi hanya jika bahasa Anda tidak memiliki string sama sekali.)
  • Urutan daftar input tentu saja penting (tetapi Anda diizinkan untuk mengambil input secara terbalik jika Anda mau).
  • Input hanya akan berisi ASCII yang dapat dicetak dalam kisaran unicode ( ).[33,126]!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  • Input hanya akan berbentuk persegi panjang (jadi tidak ada bentuk aneh). Outputnya tidak perlu persegi panjang.
  • Ruang trailing dan satu garis trailing tunggal diperbolehkan. Spasi terdepan dan / atau baris baru tidak.

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
  • Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.

Kasus uji:

Input: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Keluaran:

cbaa
bbaa
bbaa
aaaa

Input: ["12345\n54321","00\n00\n00\n00","001\n011\n012"]
Keluaran:

00145
01121
012
00

Input: ["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]
Keluaran:

this%^
is_a_+
testty
uiopas
t!
h_
i_
n_
g_
Kevin Cruijssen
sumber
Apakah membuntuti baris baru diizinkan? Atau lebih khusus lagi, apakah jumlah baris trailing yang sewenang-wenang diperbolehkan?
JAD
@ JAD Ya tentu saja, mengapa tidak. Selama sisanya adalah output tanpa spasi / baris baru. Mengejar baris baru / spasi tidak terlalu penting, jadi dapat ditambahkan secara opsional.
Kevin Cruijssen

Jawaban:

6

Jelly , 3 byte

a/Y

Cobalah online!

Tidak menggunakan Jelly untuk sementara waktu, tetapi saya pikir tantangan dalam komentar itu bisa dikalahkan. Sangat langsung menggunakan logis dan ( a) untuk melakukan operasi susun antara setiap elemen input ( /). Ydigunakan untuk mencetak dalam format yang diperlukan.

FryAmTheEggman
sumber
Ah bagus! Saya sangat buruk dengan Jelly tbh. Solusi yang saya siapkan adalah ḷ""/Ydengan daftar masukan terbalik. Bahkan tidak tahu tentang a..
Kevin Cruijssen
11

JavaScript (Node.js) , 24 byte

Disimpan 2 byte berkat @Grimy

Mengasumsikan bahwa string yang dikembalikan dicetak pada terminal yang mendukung kode pelarian ANSI . Berisi karakter yang tidak patut dicetak ESC, yang lolos (tidak ada permainan kata-kata yang dimaksudkan) seperti di \x1Bbawah ini.

a=>`\x1B[2J\x1B[H`+a.join`\x1B[H`

Ini tidak berfungsi pada TIO, tetapi Anda dapat mencobanya secara online! untuk melihat output mentah sebagai gantinya.

Bagaimana?

The urutan CSI digunakan adalah:

  • ED (Hapus pada Layar):

    ESC[2J

    di mana berarti "hapus seluruh layar"2

  • CUP (Posisi Kursor):

    ESC[H

    yang berarti "memindahkan kursor ke baris , kolom " dinm mana dan dihilangkan dan secara implisit diatur ke (sudut kiri atas layar).nm1

Contoh output

keluaran

Arnauld
sumber
Dengan asumsi terminal yang sesuai ECMA-48, Anda dapat menghilangkan keduanya ;. Juga, saya pikir ini harus "JavaScript + terminal" atau sesuatu yang serupa yang tidak bersaing dengan JavaScript murni.
Grimmy
@ Terima kasih kotor! (Bagi siapa pun yang tertarik, ini adalah spesifikasi ECMA-48 - tapi saya tidak menemukan di mana disebutkan bahwa titik koma dapat dihilangkan - jika disebutkan sama sekali.)
Arnauld
1
5.4.2.h agak membingungkan worded, tapi sedikit menarik adalah: if the last parameter sub-string(s) is empty, the separator preceding it may be omitted. Karena hanya ada dua sub-string, pemisah sebelum substring terakhir adalah satu-satunya, dan dapat dihilangkan.
Grimmy
Saya tidak tahu ANSI, tetapi apakah \x1B[H+ yang pertama diperlukan? Bukankah itu dimulai dari kiri atas secara default, dan Anda hanya perlu mengatur ulang setelah setiap input (yang merupakan gabungan dari apa)? Atau apakah awalnya dimulai di tempat lain secara default, dan Anda harus secara eksplisit membiarkannya dimulai pada posisi kursor agar berhasil mengatur ulang ke posisi itu di bergabung?
Kevin Cruijssen
1
@Arnauld Karena Anda mungkin akan selalu memiliki sesuatu yang lain di terminal ketika menjalankan fungsi ini, saya kira seting awal diperlukan setelah semua. Adapun ommitting print, saya kira f=a=>print(`\x1B[H`+a.join`\x1B[H`)dengan f(input_here)akan menghasilkan output yang sama print(f(input_here))? Jadi saya tidak mengerti mengapa Anda tidak diizinkan untuk menghilangkan printdan hanya mengembalikan string.
Kevin Cruijssen
7

R , 120 , 111 110 107 byte

function(x,`!`=ncol,M=array('',Reduce(pmax,Map(dim,x)))){for(m in x)M[1:!t(m),1:!m]=m
write(t(M),1,!M,,'')}

Cobalah online!

Fungsi menerima daftar matriks karakter (input 3D diterima).

(seperti yang Anda ketahui dari jumlah byte, ini tidak mudah dilakukan di R ...)

  • -9 byte terima kasih kepada @Giuseppe
  • -4 byte terima kasih kepada @RobinRyder
menggali semua
sumber
4
Saya benar-benar mengharapkan solusi 200+ byte! Saya akan memberikan ini hadiah yang bagus setiap kali pertanyaan ini menjadi hadiah yang memenuhi syarat
Giuseppe
@Giuseppe: masih jauh lebih lama daripada bahasa lain ... :(
digEmAll
2
111 byte menggunakan arraysebagai gantinya matrix!
Giuseppe
@Giuseppe: rapi!
digEmAll
3
107 dengan alias untuk ncol(Anda dapat memindahkan untuk mendapatkan nrow).
Robin Ryder
5

Python 2 , 88 byte

n,f=None,filter
for l in map(n,*input()):print''.join(f(n,x)[-1]for x in map(n,*f(n,l)))

Cobalah online!


Penjelasan (dengan contoh):

Mengambil daftar 2D sebagai input.

Input: [["12345","54321"],["00","00","00","00"],["001","011","012"]]

Pertama daftar input di-zip, untuk mendapatkan baris dari setiap persegi panjang input ( map(None,l)sama dengan zip terpanjang):

map(n,*input())   gives:

('12345', '00', '001')
('54321', '00', '011')
(None, '00', '012')
(None, '00', None)

Masing-masing baris ini kemudian difilter ke dihapus Nones, dan zip lagi:

map(None,*filter(None,l))

filter(None,l) for each l gives:

('12345', '00', '001')
('54321', '00', '011')
('00', '012')
('00',)

map*... gives:

[('1', '0', '0'), ('2', '0', '0'), ('3', None, '1'), ('4', None, None), ('5', None, None)]
[('5', '0', '0'), ('4', '0', '1'), ('3', None, '1'), ('2', None, None), ('1', None, None)]
[('0', '0'), ('0', '1'), (None, '2')]
['0', '0']

Yang merupakan daftar karakter untuk setiap posisi dari hasil yang diinginkan. Daftar ini difilter lagi, dan yang terakhir diambil:

filter(None,x)   gives:

[('1', '0', '0'), ('2', '0', '0'), ('3', '1'), ('4',), ('5',)]
[('5', '0', '0'), ('4', '0', '1'), ('3', '1'), ('2',), ('1',)]
[('0', '0'), ('0', '1'), ('2',)]
['0', '0']

and with [-1]:

['0', '0', '1', '4', '5']
['0', '1', '1', '2', '1']
['0', '1', '2']
['0', '0']

Terakhir, daftar yang dihasilkan digabungkan dan dicetak:

print''.join(..)

00145
01121
012
00
TFeld
sumber
RE "Mengembalikan daftar string", aturan menyatakan "Format output ketat. Anda dapat memilih untuk mencetak atau mengembalikan string multi-line. 2D atau 3D daftar sebagai output tidak diizinkan.". Program penuh 88 byte tampaknya baik-baik saja
Jonathan Allan
@ JonathanAllan, welp, saya salah membaca output yang ketat (atau lupa
?:
5

R, 107 97 byte

function(x)for(i in 1:max(lengths(x))){for(m in x)if(i<=length(m))cat(m[i],'\r',sep='');cat('
')}

Tampaknya tidak berfungsi di TIO, yang mungkin terkait dengan penggunaan \rkarakter carriage return. Itu bekerja pada instalasi lokal saya R.

Mengambil input sebagai daftar yang berisi vektor baris:

x <- list(c("aaaa","aaaa","aaaa","aaaa"),c("bb","bb","bb"),c("c"))

Lingkarkan di atas baris setiap persegi panjang, cetak carriage return setelah masing-masing, mulai ulang baris.

Jika kita sedikit meregangkan aturan, kita bisa mengecek panjang input dan hanya mengulang tanpa batas, mencetak sejumlah besar baris baru:

R, 85 byte

function(x)for(i in 1:8e8){for(m in x)if(i<=length(m))cat(m[i],'\r',sep='');cat('
')}
JAD
sumber
106 byte Senang melihatmu bermain golf di sana-sini!
Giuseppe
Mungkin 97 byte ; tidak jelas apakah ini benar-benar berfungsi karena saya hanya menguji di TIO
Giuseppe
@Giuseppe Hai! Saran Anda bekerja untuk saya. Jika kita diizinkan untuk mencetak trailing newlines, itu juga mungkin untuk hanya menggunakan besar sewenang-wenang untuk loop, tapi saya kira itu mendorong batas tantangan.
JAD
@ JAD: menggunakan ide bagus \r, dan selamat datang kembali! Hanya sebuah catatan, saya pikir ini hanya berfungsi dalam sesi R interaktif (ketika interactive()mengembalikan true)
digEmAll
@digEmAll Ini bekerja pada mesin saya menggunakan rscriptdari commandline. Saya menduga itu adalah Windows / Linux, karena Windows menggunakan \r\nuntuk baris baru dan Linux \n.
JAD
4

APL (Dyalog Unicode) , 22 byte SBCS

Fungsi awalan tersembunyi anonim mengambil daftar array karakter 2D sebagai argumen. Cetakan.

(⊃{⍺@(⍳⍴⍺)⊢⍵}/)⌽,∘⊂1⌷↑

Cobalah online!

Ini bekerja dengan membuat kanvas, lalu menambahkannya ke daftar blok, dan mengurangi (melipat) dengan fungsi yang menempatkan blok di sudut.

 campur blok 2D untuk membuat blok 3D ortogonal, gabungkan dengan spasi sesuai kebutuhan

1⌷ ambil layer pertama

 lampirkan itu
 lalu
⌽, tambahkan daftar blok yang dibalik

(... ) terapkan fungsi diam-diam berikut:

{... }/ kurangi menggunakan lambda anonim berikut:

  ⊢⍵ dengan argumen yang tepat sebagai kanvas ...

  ⍺@(... ) ubah dengan unsur-unsur argumen kiri, ditempatkan pada indeks berikut:

   ⍴⍺ bentuk argumen kiri

    yang ɩ ndices dari array bentuk yang

 mengungkapkan (karena pengurangan terlampir untuk mengurangi peringkat)

Adm
sumber
4

Haskell, 66 byte

unlines.foldl((const?)?)[]
(g?(a:b))(c:d)=g a c:(g?b)d;(_?a)b=a++b

Input diambil sebagai daftar daftar string dalam urutan terbalik, misalnya untuk kasus tes pertama: [["c"],["bb","bb","bb"],["aaaa","aaaa","aaaa","aaaa"]].

Cobalah online!

nimi
sumber
3

05AB1E , 12 byte

Solusi python Port TFeld
2 byte disimpan berkat Grimy

ζεðKζðδK€θJ,

Cobalah online!

Penjelasan

ζ             # transpose input with space as filler
 ε            # apply to each
  ðK          # remove spaces
    ζ         # transpose with space as filler
     ðδK      # deep remove spaces
        €θ    # get the tail of each
          J   # join each
           ,  # print

Alternatif versi 14 byte

õζεÅ»DŠg.$J}θ,

Cobalah online!

Penjelasan

õζ              # zip with empty string as filler
  ε             # apply to each
   Å»      }    # cumulative reduce by
     D          # duplicate second input
      Š         # move down twice on stack
       g.$      # remove len(other_copy) elements from the other input
          J     # join with other copy
            θ,  # print the last element
Emigna
sumber
1
Oh, perlu diingat bahwa itu --no-lazyadalah perbaikan untuk tetap menggunakan peta / filter dengan cetak untuk implisit y, untuk menyimpan byte dibandingkan dengan vy...,:) Saya tahu itu bekerja di versi lama, tetapi dalam versi baru itu juga akan menampilkan [...]. Tidak tahu itu karena kurangnya --no-lazy. ;) Adapun jawabannya sendiri, sangat bagus! Saya tahu pengurangan kumulatif diperlukan, tetapi tidak bisa benar-benar berhasil ketika saya mencobanya sendiri. Anda membuatnya terlihat sangat mudah ..
Kevin Cruijssen
Saya telah menyebutkannya dalam aturan, tetapi lupa menerapkannya pada kasus uji .., tetapi spasi tidak akan dimasukkan dalam input. Jadi Anda mungkin dapat menyimpan beberapa byte di sana karena zip-filler adalah ruang secara default. (Tidak yakin apakah itu menyimpan apa pun di jawaban pertama Anda, tetapi di port mungkin.)
Kevin Cruijssen
2
õζεõKbisa ζεðK, õζõδKbisa ζðδK.
Grimmy
@ Grimy: Oh yeah, spasi tidak bisa lagi di input. Terima kasih!
Emigna
2

Python 2 , 77 byte

for t in map(None,*input()):
 r=''
 for s in t:
	if s:r=s+r[len(s):]
 print r

Cobalah online!

Tidak
sumber
2

PowerShell 6 , konsol saja, 20 byte

berdasarkan jawaban Arnauld . Ini hanya berfungsi dengan konsol dan tidak bekerja pada TIO.

cls
$args-join"`e[H"

Cobalah online!


PowerShell , 103 byte

$args|%{$l=$_-split'
';$r=&{$r+($l|%{''})|%{($x=$l[$j++])+($_-replace"^.{0,$("$x"|% Le*)}")}|?{$_}}}
$r

Cobalah online!

Belum dibuka:

$args|%{
    $l=$_-split"`n"
    $r=&{                           # run this scriptblock in a new scope
        $r+($l|%{''})|%{
            $x=$l[$j++]             # a new line or $null
            $w="$x"|% Length
            $y=$_-replace"^.{0,$w}" # remove first chars from the current line
            $x+$y                   # output the new line plus tail of the overlapped line
        }|?{$_}                     # filter out not empty lines only
    }                               # close the scope and remove all variables created in the scope
}
$r
mazzy
sumber
1

C # (.NET Core) , 68 + 23 = 91 byte

n=>{C.Clear();n.ForEach(k=>{C.SetCursorPosition(0,0);C.Write(k);});}

23 byte untuk impor, using C=System.Console;

Tidak berfungsi di TIO, karena itu bukan konsol.

Cobalah online!

Perwujudan Ketidaktahuan
sumber
1

Ruby , 67 byte

Input adalah daftar baris. Buat daftar garis dan timpa saat melewati input, kemudian gabungkan dengan baris baru (diwakili oleh variabel $/) di akhir agar sesuai dengan output yang ketat.

->i,*r{i.map{|e|j=-1;e.map{|l|r[j+=1]||='';r[j][0,l.size]=l}};r*$/}

Cobalah online!

Nilai Tinta
sumber
1

C (GCC, MinGW) 138 byte

Asumsikan bahwa CR menempatkan kursor pada awal baris saat ini.

d,i,l;f(S,n,p,t)char**S,*p,*t;{for(d=i=0;i<n;d+=l)p=strchr(t=S[i],10),printf("\n%.*s\r"+!!i,l=p?p-t:strlen(t),t),S[i++]+=l+!!p;d&&f(S,n);}

Diuji dengan:

int main()
{
    char *test1[] = {"aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"};
    char *test2[] = {"12345\n54321","00\n00\n00\n00","001\n011\n012"};
    char *test3[] = {"sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"};

    f(test1, 3);
    f(test2, 3);
    f(test3, 3);
}
gastropner
sumber
1

Javascript (browser) , 216 208 204 byte

Usaha saya dalam hal ini. Saya tidak senang dengan ukurannya, dan pastinya ada lebih banyak untuk perbaikan, tapi saya tidak berpengalaman dalam bermain golf.

var n='\n',x=s=>s.split``.reverse().join``,i,j,f=a=>a.map(s=>s.split(n).map(y=>x(y))).reduce((a,b)=>{for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}return a}).map(s=>x(s)).join(n)

Ngomong - ngomong , apa yang dilakukannya pertama-tama adalah membagi semua string, lalu membalikkan semua string, lalu sambil melakukan looping pada operasi pengurangan. Mulailah semua string. Kemudian balikkan semua string lagi dan kemudian gabungkan kembali dengan baris baru.

Terima kasih khusus kepada Kevin Cruijssen untuk mengingatkan saya bahwa bagian terakhir dalam for loop terjadi di akhir dan penghematan total byte 8 byte.

var n='\n',x=s=>s.split``.reverse().join``,i,j,f=a=>a.map(s=>s.split(n).map(y=>x(y))).reduce((a,b)=>{for(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];return a}).map(s=>x(s)).join(n)

console.log(f(["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]));
console.log(f(["12345\n54321","00\n00\n00\n00","001\n011\n012"]));
console.log(f(["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]));

Tschallacka
sumber
1
Keduanya ('')bisa menjadi dua `untuk menghemat empat byte :)
Kevin Cruijssen
1
Anda juga dapat mengganti for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}dengan for(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];.
Kevin Cruijssen
1
The jpertama ditugaskan dengan (j=a[i]), maka jika-pernyataan dilakukan dengan if(!...)j=b[i];(di mana ...adalah (j=a[i]), sehingga nilai diperbarui j), dan kemudian ;a[i]=b[i++].padStart(j.length,j))dilakukan pada akhir untuk loop iterasi .. Tidak yakin di mana masalahnya, dan sepertinya berhasil?
Kevin Cruijssen
1
ooohhh .... * mata besar * yang membuka kunci sesuatu
Tschallacka
1
Btw, jika Anda belum melihatnya, kiat untuk bermain golf di <semua bahasa> dan kiat untuk bermain golf di JavaScript mungkin menarik untuk dibaca. :)
Kevin Cruijssen
1

C (gcc) , 51 47 byte

f(char**s){for(;*s;printf("\e[s%s\e[u",*s++));}

Cobalah online!

-4 bytes berkat ceilingcat.

Menggunakan urutan CSI untuk menyimpan / mengembalikan posisi kursor. Ulangi saja larik string yang diteruskan (dalam format yang sama dengan argv) dan cetak <save position>string<restore position>untuk masing-masing.

Ini tidak meninggalkan kursor di kiri atas, jadi ketika berjalan di terminal itu penting untuk meninggalkan cukup baris baru setelah itu sehingga prompt tidak mengganggu input.

LambdaBeta
sumber
1

Japt -P , 7 byte

Mengambil input sebagai array string multi-line, menghasilkan string multi-line tunggal.

ú y_¸¬Ì

Cobalah

ú y_¸¬Ì     :Implicit input of array
ú           :Right pad each line of each element with spaces to the length of the longest
  y         :Transpose
   _        :Map
    ¸       :  Split on spaces
     ¬      :  Join
      Ì     :  Last character
            :Implicitly join and output
Shaggy
sumber
1

Permintaan T-SQL, 297 295 byte

Menggunakan ¶ sebagai pemisah dan variabel tabel sebagai input.

DECLARE @ table(a varchar(max),k int identity(1,1))
INSERT @ values('aaaa¶aaaa¶aaaa¶aaaa'),('bb¶bv¶bb'),('c');

WITH c as(SELECT k,row_number()over(partition
by k order by k)s,value v FROM @ CROSS APPLY
string_split(a,'¶')s),m(i,l,e)as(SELECT*FROM c
WHERE k=1UNION ALL
SELECT k,s,STUFF(e,1,len(v),v)FROM m
JOIN c ON-~i=k and s=l)SELECT
top 1with ties e FROM m
ORDER BY rank()over(partition by l order by-i)

Cobalah online

t-clausen.dk
sumber
1

Javascript (browser), 129 124 byte

Upaya pertama saya di golf kode. Saya membaca tautan yang diberikan dalam aturan (celah, aturan standar ...), jadi saya harap saya melakukan kesalahan!


Saya menyimpan input karena berada di pos pertama (bentuk array datar).

_=o=>{o=o.map(i=>i.split`\n`),r=o.shift();for(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;return r.join`\n`}

Terima kasih kepada Kevin Cruijssen karena telah menghemat 5 byte.


Tes:

Kévin Bibollet
sumber
1
Selamat datang di PPCG! Jawaban pertama yang bagus, +1 dari saya. Beberapa hal kecil untuk bermain golf: for(a of o){for(l in a){b=a[l],r[l]=(r[l])?b+r[l].slice(b.length):b}}bisa for(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;:)
Kevin Cruijssen
1
@KevinCruijssen - Terima kasih, saya memperbarui posting saya! Saya membaca dua panduan ini sebelum memposting, keduanya bermanfaat. Tetapi saya mungkin melewatkan beberapa trik yang bahkan dapat meningkatkan usaha saya!
Kévin Bibollet
1
Satu hal lain dari komentar pertama saya yang Anda lewatkan adalah tanda kurung di =(r[l])?mana dapat dihapus ke =r[l]?:)
Kevin Cruijssen
1
@ KévinBibollet, diperlukan untuk mengembalikan hasil akhir r. Tanpa itu, hasil pemetaan akan dikembalikan sebagai gantinya.
Shaggy
1
Jika Anda ingin mempertahankan format I / O yang digunakan dalam kasus uji, Anda masih bisa turun ke 85 byte tetapi Anda harus mencatat bahwa I / O fleksibel.
Shaggy
1

Pyth , 18 byte

L.tb0VyQsme #dy #N

Cobalah online! (catatan: kode itu sendiri hanya mengevaluasi satu blok, mode test suite penerjemah menjalankan program satu kali untuk setiap baris input)

Berdasarkan solusi TFeld's Python 2 .

Penjelasan:

L.tb0         # define a lambda function called y which does a transpose, padding with integer 0's
VyQ           # loop over transposed first input line (Q = eval(input()) ) (loop index = N)
   s          # concatenate array of strings (implicitly printed)
    m         # map over
         y #N # transpose of non-falsy values of N
     e        # for each item: last element of array
       #d     # relevant space at the start! filter with identity function, removes falsy values

untuk penjelasan mengapa algoritma itu sendiri bekerja, lihat jawaban TFeld.

randomdude999
sumber
0

Arang , 4 byte

FθPι

Cobalah online (verbose) atau coba online (murni) .

Penjelasan:

Ulangi daftar input string multi-baris:

For(q)
Fθ

Dan cetak string multi-line tanpa memindahkan kursor:

Multiprint(i);
Pι
Kevin Cruijssen
sumber