String Zip dan Sortir

14

Diberikan daftar string, output string tunggal yang dibentuk dengan mengambil karakter dari setiap string di setiap posisi, mengurutkannya dengan ASCII ordinal, dan menambahkannya dalam urutan ke string output. Dengan kata lain, untuk nstring input, nkarakter pertama dari output akan menjadi karakter pertama dari setiap input yang diurutkan menurut ordinal, nkarakter kedua dari output akan menjadi karakter kedua dari masing-masing input yang diurutkan berdasarkan ordinal, dan sebagainya di. Anda dapat mengasumsikan bahwa semua string memiliki panjang yang sama, dan bahwa akan ada setidaknya satu string. Semua string hanya terdiri dari karakter yang dapat dicetak ASCII (ordinals 32-127).

Implementasi referensi dengan Python ( coba online ):

def stringshuffle(strings):
  res = ''
  for i in range(len(strings[0])):
    res += ''.join(sorted([s[i] for s in strings],key=ord))
  return res

Contoh:

"abc","cba" -> "acbbac"
"HELLO","world","!!!!!" -> "!Hw!Eo!Lr!Ll!Od"

Aturan

  • Celah standar dilarang
  • Ini adalah , jadi jawaban tersingkat dalam byte menang

Papan peringkat

Cuplikan Stack di bagian bawah posting ini menghasilkan leaderboard dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

## Perl, 43 + 2 (-p flag) = 45 bytes

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

Mego
sumber

Jawaban:

11

GS2 , 4 byte

*Ü■/

Ini membaca string dari STDIN, dipisahkan oleh linefeeds.

Kode sumber menggunakan pengkodean CP437 . Cobalah online!

Uji coba

$ xxd -r -ps <<< '2a 9a fe 2f' > zip-sort.gs2
$ echo -e 'HELLO\nworld\n!!!!!' | gs2 zip-sort.gs2 
!Hw!Eo!Lr!Ll!Od

Bagaimana itu bekerja

*       Split the input into the array of its lines.
 Ü      Zip the resulting array.
  ■     Map the rest of the program over the resulting array.
   /        Sort.
Dennis
sumber
6

Haskell, 39 36 byte

import Data.List
(>>=sort).transpose

Contoh penggunaan: ((>>=sort).transpose) ["HELLO","world","!!!!!"]-> "!Hw!Eo!Lr!Ll!Od".

Ubah urutan daftar string, petakan sortdi atasnya, dan gabungkan daftar string yang dihasilkan ( >>=dalam konteks daftar adalah concatMap).

nimi
sumber
saya datang dengan persis ini!
haskeller bangga
Aku tidak; Saya terus lupa mengeksploitasi instance Monad untuk hal-hal seperti daftar. (+1)
ballesta25
5

Pyth, 5 byte

Ritsleting ( C) input ( Q), Maps Sort, lalu sums.

sSMCQ

Cobalah online .

Maltysen
sumber
5

TeaScript , 9 byte

_t¡ßlp¡)µ

TeaScript memiliki semua built-in yang tepat diimplementasikan dengan semua cara yang salah.

Cobalah online

Tidak disatukan

_t()m(#lp())j``

Penjelasan

_t()        // Transposes input array
    m(#     // Loops through inputs
       lp() // Sorts characters by char code
     )
j``         // Joins back into string
Downgoat
sumber
@intrepidcoder berfungsi dengan baik untuk saya. Mungkin peramban Anda telah menyimpan beberapa file? Mungkin membersihkan cache Anda mungkin berhasil. Saya menggunakan Safari. Saya akan mencoba menyegarkan file
Downgoat
4

CJam, 5 byte

q~z:$

Coba di sini .

geokavel
sumber
1
Saya mengalahkan Anda dengan seperti 14 detik; P.
Maltysen
4

Python, 50 48 byte

lambda x,y=''.join:y(map(y,map(sorted,zip(*x))))

Berkat @xnor untuk -2 byte!

Dennis
sumber
4
Anda dapat menyimpan "".joinke variabel.
xnor
Oh, aku tidak tahu. Terima kasih!
Dennis
4

JavaScript (ES6), 57 byte

a=>a[0].replace(/./g,(c,i)=>a.map(w=>w[i]).sort().join``)
George Reith
sumber
3

Oktaf, 15 byte

@(a)sort(a)(:)'

Contoh:

octave:1> (@(a)sort(a)(:)')(["abc";"cba"])
ans = acbbac
octave:2> (@(a)sort(a)(:)')(["HELLO";"world";"!!!!!"])
ans = !Hw!Eo!Lr!Ll!Od
alephalpha
sumber
2

Julia, 46 byte

x->(j=join)(map(i->j(sort([i...])),zip(x...)))

Ini menciptakan fungsi tanpa nama yang menerima larik string dan mengembalikan string. Untuk menyebutnya, berikan nama, mis f=x->....

Tidak Disatukan:

function zipsort{T<:AbstractString}(x::Array{T,1})
    # Splat the input array and zip into an iterable
    z = zip(x...)

    # For each tuple consisting of corresponding characters
    # in the input array's elements, splat into an array,
    # sort the array, and join it into a string
    m = map(i -> join(sort([i...])), z)

    # Take the resulting string array and join it
    return join(m)
end
Alex A.
sumber
1

Minkolang 0,13 , 46 byte

$od0Z2:$zIz:$xd0G2-[i1+z[di0c*+c$r]xz$(sr$Ok].

Coba di sini. Mengharapkan input seperti "HELLO""world""!!!!!"(jadi tidak ada koma).

Penjelasan

$o     Read in whole input as characters
d      Duplicate top of stack (the ")
0Z     Count how often this appears in the stack
2:     Divide by two
$z     Store this in the register (z)
Iz:    Length of stack divided by z (k)
$x     Dump one element from the front/bottom of stack
d      Duplicate top of stack (which is k)
0G     Insert it at the front/bottom of stack
2-     k-2

  [                              Open for loop that repeats k-2 times
   i1+                           Loop counter + 1 (i)
      z[                         Open for loop that repeats z times
        d                        Duplicate top of stack (which is i)
         i                       Loop counter (j)
          0c                     Copy k from front of stack
            *                    Multiply (j*k)
             +                   Add (j*k + i)
              c                  Copy character at position j*k+i to the top
               $r                Swap top two elements of stack (so i is on top)
                 ]               Close for loop
                  x              Dump the top of stack (dump i)
                   z$(           Start a new loop with the top z elements
                      s          Sort
                       r$O       Reverse and output the whole (loop) stack as characters
                          k      Break - exits while loop
                           ].    Close for loop and stop
El'endia Starman
sumber
1

GolfScript, 8 byte

~zip{$}%

Cobalah online di Web GolfScript .

Bagaimana itu bekerja

~         # Evaluate the input.
 zip      # Zip it.
    {$}%  # Map sort ($) over the resulting array.
Dennis
sumber
1

K, 10 byte

,/{x@<x}'+

Gabungkan ( ,/) jenis ( {x@<x}) masing-masing ( ') dari transpos ( +) dari daftar string.

Beraksi:

  ,/{x@<x}'+("HELLO";"world";"!!!!!")
"!Hw!Eo!Lr!Ll!Od"

Sederhana, tetapi K sedikit terluka di sini karena tidak memiliki fungsi pengurutan satu karakter dan alih-alih membagi operasi menjadi operator indeks pencar-mengumpulkan @dan primitif yang menghasilkan vektor permutasi yang akan mengurutkan daftar <.

JohnE
sumber
1

C ++ 14, 152 byte

#include<iostream>
#include<regex>
[](auto s){for(int i=0;i<s[0].size();++i){auto r=""s;for(auto k:s)r+=k[i];std::sort(begin(r),end(r));std::cout<<r;}};

Tidak menggunakan keunggulan peta + zip (tebak mengapa)

Penggunaan + tidak digabungkan

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

int main()
{
    auto lambda = [](auto s)
    {
        for (int i = 0; i < s[0].size(); ++i)
        {
            auto r = ""s;
            for (auto k : s)
                r += k[i];
            std::sort(begin(r), end(r));
            std::cout << r;
        }
    };

    std::vector<std::string> data = { "HELLO", "world", "!!!!!" };
    lambda(data);
}
Zereges
sumber
1

Mathematica, 51 byte

""<>SortBy@ToCharacterCode/@Transpose@Characters@#&

Manipulasi string dalam Mathematica mahal ...

LegionMammal978
sumber
1

Japt , 12 byte 20

Ny m_q n q)q

Cobalah online!

Penjelasan

Ny       // Transpose inputs
  m_     // Maps through each new string
    q    // Split string
    n    // Sort string
    q    // Join
)q       // Join again
Downgoat
sumber
1

PHP ,92 91 byte

for($argv[0]='';$a=array_column(array_map(str_split,$argv),$i++|0);print join($a))sort($a);

Cobalah online!

Saya yakin ini bisa dilakukan lebih pendek dengan tidak mencoba menggunakan fungsi array built-in PHP, tetapi harus mencoba!

Atau 85 byte

@ Ayunan Night2, dilakukan lebih pendek dengan tidak mencoba menggunakan fungsi array bawaan PHP:

for(;''<$argv[1][$i++];print join($a))for($a=[];''<$a[]=$argv[++$$i][$i-1];sort($a));

Cobalah online!

640KB
sumber
@ Night2 dilakukan dengan baik! Anda harus memposting yang itu sebagai milik Anda. Sayang sekali itu array_columntidak akan bekerja pada array string jika tidak, itu akan sedikit lebih berguna untuk CG. Dan tentu saja harus melewati $argv[0]selalu menyakitkan ...
640KB
0

Clojure / ClojureScript, 43 byte

#(apply str(mapcat sort(apply map list %)))

Menciptakan fungsi anonim. Ditulis dalam REPL ClojueScript, juga harus Clojure valid.

Masukkan di sini , lalu panggil via (*1 ["HELLO" "world" "!!!!!"]). Atau lakukan (def f *1)dan kemudian gunakan (f ["abc" "cba"]).

MattPutnam
sumber
0

Ceylon, 166

String z(String+l)=>String(expand(t(l).map(sort)));[T+]n<T>(T?+i)=>[for(e in i)e else nothing];{[X+]*}t<X>([{X*}+]l)=>l[0].empty then{}else{n(*l*.first),*t(l*.rest)};

Sementara Ceylon memiliki zipfungsi , hanya dibutuhkan dua iterables dan bukan iterable. unzip, di sisi lain, mengambil iterable dari tuple, dan saya tidak ingin mengubah string saya menjadi tuple. Jadi saya menerapkan fungsi transpos saya sendiri, terinspirasi oleh implementasi Haskell yang ditemukan Google untuk saya di suatu tempat .

// zip-sort
//
// Question:  http://codegolf.stackexchange.com/q/64526/2338
// My answer: ...

// Takes a list of strings (same length), and produces
// a string made by concatenating the results of sorting
// the characters at each position.
String z(String+ l) =>
        String(expand(t(l).map(sort)));

// Narrow an iterable of potential optionals to their non-optional values,
// throwing an AssertionError if a null is in there.
[T+] n<T>(T?+ i) =>
        [for (e in i) e else nothing];

// Transpose a nonempty sequence of iterables, producing an iterable of
// sequences.
// If the iterables don't have the same size, either too long ones are
// cut off or too short ones cause an AssertionError while iterating.
{[X+]*} t<X>([{X*}+] l) =>
        l[0].empty
        then {}
        else { n(*l*.first), *t(l*.rest) };

Jenis ndan tdapat didefinisikan lebih umum, tetapi ini adalah Codegolf ;-) ( nadalah kasus khusus dari apa yang saya usulkan assertNarrowdua minggu lalu ).

Paŭlo Ebermann
sumber
0

Perl 6 , 33 byte

{[~] flat ([Z] @_».comb)».sort}

Contoh penggunaan:

say {[~] flat ([Z] @_».comb)».sort}(< abc cba >) # acbbca

my &code = my $code = {[~] flat ([Z] @_».comb)».sort}

say code "HELLO","world","!!!!!"; # !Hw!Eo!Lr!Ll!Od

say ((<cba abc>),(<testing gnitset gttseni>)).map($code);
# (acbbac ggtentiststteisenngit)
Brad Gilbert b2gills
sumber
0

𝔼𝕊𝕄𝕚𝕟, 15 karakter / 30 byte

Ѩťªï)ć⇀ѨŌ$ø⬯)ø⬯

Try it here (Firefox only).

Baru menyadari bahwa fungsi sortash Lodash bekerja pada string, juga.

Mama Fun Roll
sumber
0

Stax , 5 byte

LMFop

Begitu dekat dengan LMNOP :(

Jalankan dan debug di staxlang.xyz!

Masukkan semua input ke dalam satu daftar string ( L), dan transposkan daftar ini ( M). Untuk setiap string yang dihasilkan ( F), sortir ( o) dan cetak ( p) itu.

Khuldraeseth na'Barya
sumber