끈 우편 번호 및 정렬


14

문자열 목록이 제공되면 각 위치의 각 문자열에서 문자를 가져 와서 ASCII 서수로 정렬하고 출력 문자열에 순서대로 추가하여 구성된 단일 문자열을 출력하십시오. 즉, n입력 문자열 n의 경우 출력의 첫 번째 문자는 서수로 정렬 된 각 입력의 첫 번째 n문자가되고, 출력의 두 번째 문자는 서수로 정렬 된 각 입력의 두 번째 문자가됩니다. 의 위에. 문자열의 길이가 모두 같고 하나 이상의 문자열이 있다고 가정 할 수 있습니다. 모든 문자열은 ASCII 인쇄 가능 문자 (단어 32-127)로만 구성됩니다.

파이썬에서 참조 구현 ( 온라인 시도 ) :

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

예 :

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

규칙

  • 표준 허점은 금지되어 있습니다
  • 이것은 이므로 바이트 단위의 최단 답변이 승리합니다.

리더 보드

이 게시물의 하단에있는 스택 스 니펫은 답변 a) 언어별로 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 답변에서 리더 보드를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

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

헤더에 여러 개의 숫자를 포함 시키려면 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

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

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

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

답변:


11

GS2 , 4 바이트

*Ü■/

STDIN에서 줄 바꿈으로 구분 된 문자열을 읽습니다.

소스 코드는 CP437 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

시운전

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

작동 원리

*       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

하스켈, 39 36 바이트

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

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

문자열 목록을 바꾸고 그 sort위에 매핑 하고 결과 문자열 목록을 연결하십시오 ( >>=목록 컨텍스트는입니다 concatMap).


나는 이것을 정확하게 생각해 냈습니다!
자부심을 가진 haskeller

나는하지 않았다; 나는 목록과 같은 것들을 위해 Monad 인스턴스를 이용하는 것을 잊어 버렸습니다. (+1)
ballesta25


5

티 스크립트 , 9 바이트

_t¡ßlp¡)µ

TeaScript에는 모든 올바른 내장 기능이 잘못된 방식으로 구현되어 있습니다.

온라인으로 사용해보십시오

언 골프

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

설명

_t()        // Transposes input array
    m(#     // Loops through inputs
       lp() // Sorts characters by char code
     )
j``         // Joins back into string

@ intrepidcoder는 나를 위해 잘 작동합니다. 브라우저가 일부 파일을 캐시 했습니까? 캐시를 지우는 것이 효과가있을 수 있습니다. 그래도 Safari를 사용하고 있습니다. 파일 새로 고침을 시도하겠습니다
Downgoat


4

파이썬, 50 48 바이트

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

-2 바이트를위한 @xnor에게 감사합니다!


4
"".join변수에 저장할 수 있습니다 .
xnor

아, 몰랐어 감사!
Dennis

4

자바 스크립트 (ES6), 57 바이트

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

3

옥타브, 15 바이트

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

예:

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

2

줄리아, 46 바이트

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

문자열 배열을 받아들이고 문자열을 반환하는 명명되지 않은 함수를 만듭니다. 호출하려면 이름을 입력하십시오 (예 :f=x->... .

언 골프 드 :

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 바이트

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

여기에서 시도하십시오."HELLO""world""!!!!!"쉼표 와 같은 입력을 예상 합니다.

설명

$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 바이트

~zip{$}%

온라인에서 사용해보십시오 Web GolfScript에서 .

작동 원리

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

1

K, 10 바이트

,/{x@<x}'+

문자열 목록의 조옮김 ( )의 각 ( ) ,/정렬 ( )을 조인 ( )합니다 .{x@<x}'+

행동 :

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

단순하지만 K는 단일 문자 정렬 함수를 사용하지 않고 대신 연산을 스 캐터 수집 인덱스 연산자 @와 프리미티브 로 나누어 목록을 정렬하는 순열 벡터를 생성 함으로써 조금 아파요 <.


1

C ++ 14, 152 바이트

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

map + zip의 이점을 사용하지 않음 (추측 이유)

언 골프 + 사용법

#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

수학, 51 바이트

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

Mathematica의 문자열 조작은 비쌉니다 ...



1

PHP ,92 91 바이트

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

온라인으로 사용해보십시오!

PHP의 내장 배열 함수를 사용하지 않으면 서 더 짧게 할 수 있다고 확신하지만 시도해야했습니다!

또는 85 바이트

PHP의 내장 배열 함수를 사용하지 않음으로써 @ Night2의 스윙이 짧아졌습니다.

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

온라인으로 사용해보십시오!


@ Night2 잘 했어! 당신은 자신의 것으로 게시해야합니다. array_column문자열 배열에서 작동하지 않는 것은 너무 나쁩니다. 그렇지 않으면 CG에 훨씬 더 유용합니다. 물론 건너 뛰어야하는 $argv[0]것도 항상 고통입니다 ...
640KB

0

Clojure / ClojureScript, 43 바이트

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

익명 함수를 만듭니다. ClojueScript REPL로 작성되었으며 유효한 Clojure 여야합니다.

여기에 입력 한 다음을 통해 전화 하십시오(*1 ["HELLO" "world" "!!!!!"]) . 또는하고을 (def f *1)사용하십시오 (f ["abc" "cba"]).


0

실론, 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)};

실론에는 zip함수 가 있지만 iterable 대신 두 개의 iterable 만 사용합니다. unzip반면에, 반복 가능한 튜플을 사용하고 문자열을 튜플로 변환하고 싶지 않습니다. 그래서 Google 에서 찾은 Haskell 구현에서 영감을 얻은 자체 전치 함수를 구현했습니다 .

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

의 종류 nt 훨씬 더 일반적인 정의 할 수 있지만,이 Codegolf ;-)입니다 ( n어떤 특별한 경우이다 내가 제안 assertNarrow2 주 전 ).


0

펄 6 , 33 바이트

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

사용법 예 :

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)



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.