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

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.

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


saya datang dengan persis ini!
haskeller bangga

Aku tidak; Saya terus lupa mengeksploitasi instance Monad untuk hal-hal seperti daftar. (+1)
ballesta25


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

@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

Python, 50 48 byte

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

Berkat @xnor untuk -2 byte!


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``)

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

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

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

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.

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


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);
}

1

Mathematica, 51 byte

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

Manipulasi string dalam Mathematica mahal ...


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

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!


@ 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"]).


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


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)



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.