알파벳순으로 문장 표시


14

문자열을 취하여 모든 문자를 알파벳 순서로 출력하는 프로그램을 작성하십시오. 공백과 기호는 무시하거나 삭제할 수 있지만 대문자와 소문자는 동일하게 유지해야합니다.

샘플 입력 :

Johnny walked the dog to the park.

샘플 출력

aaddeeeghhhJklnnoooprtttwy

규칙 :

• 모든 언어

• 가장 짧은 코드가 승리합니다.


5
대문자 / 소문자를 정렬하는 방법은 무엇입니까? 입력보다 낮거나 낮거나, 그 반대이거나 안정적입니까?
Howard

기본 라틴 알파벳 ( "영어 알파벳") 이외의 문자를 처리해야합니까?
Sebastian Negraszus

3
제목에서 "알파벳순으로 문장"을 표시 할 수 있기를 바랐습니다. 또는 "ceeennst". (올바른 대문자와 ASCII 순서를 요구하면 "Sceeennt"입니다.)
keshlam

당신 Spaces and symbols can be ignored or deleted이 그 의미 무시 해야 합니까 ? 또는 , .aaddeeeff허용 과 같은 출력 입니까?
blutorange

4
k출력에 2 초가 없어야합니까 ?
HyperNeutrino

답변:


1

MathGolf , 2 바이트

áδ

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

출력 예

      .aaddeeeghhhJkklnnoooprtttwy

알파벳이 아닌 문자 제거

알파벳이 아닌 문자를 모두 제거하려면이 솔루션이 작동합니다.

áδgÆ∞_δ¡

위의 코드와 동일하며 각 문자를 먼저 두 배로 늘린 다음 자체 대문자를 비교하는 필터링이 뒤 따릅니다. 예를 들어, 문자열 "a"은로 변환 된 "aa"다음에 대문자로 변환되며 "Aa"이는 같지 않습니다 "aa". 같은 방식으로 문자열 "B"은로 변환 "BB"되고 대문자로 변환 "Bb"됩니다 "BB". 그러나 대문자 "."로 변환되고 ".."변경되지 않으므로 필터링됩니다.

설명

MathGolf에서 더 많은 문자열 처리가 필요합니다 ... 지금은 소문자 / 대문자로 변환 할 연산자조차 없습니다. 내가 사용할 수있는 유일한 대문자 문자 연산자는 길이가 1 인 문자열의 대문자 연산자처럼 작동합니다.이 솔루션은 알파벳이 아닌 문자를 정렬하지만 무시할 수 있습니다. 알파벳 문자는 대소 문자를 유지하며 올바른 순서로 출력됩니다.

á    sort by comparator
 δ   capitalize string

12

GolfScript, 24/6 자

{26,{65+.32+}%?)},{31&}$

예:

> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy  

입력이 인쇄 가능한 ASCII로 제한 {95&.64>\91<&},되면 필터로 필터를 사용하여 코드를 3 자로 줄일 수 있습니다 .

여기에서 테스트 할 수 있습니다 .

무시할 수있는 버전은 더 짧습니다 (6 자).

{31&}$

생산량

> Johnny walked the dog to the park.
      aaddeeeghhhJkkl.nnoooprtttwy

"알파벳 화"가 "ASCII 순서 괜찮음"을 의미하는 것으로 해석 될 수 있다면, 그것은 다음과 같이 줄어들 수 있습니다.{}$
McKay

@McKay 질문은 명시 적으로 다르게 나타납니다. 그리고와 {}$같습니다 $.
Howard

오 예. 감사합니다. 저는 golfscript를 배우려고합니다
McKay

8

GNU 핵심 유틸리티-25 자 (29 개의 드롭 심볼)

fold -1|sort -f|tr -d \\n

예 (GNU bash 3에서) :

$ echo "Johnny walked the dog to the park."|fold -1|sort -f|tr -d \\n
      .aaddeeeghhhJkklnnoooprtttwy   <<no trailing newline>>

질문에서 :

공백과 기호 무시하거나 삭제할 있습니다

나는 그들을두기로 결정했다! 단지 알파벳 문자를 유지하려면, 대신 fold -1grep -o \\w+4 문자.

grep -o \\w|sort -f|tr -d \\n

추천 grep -osed주신 Firefly에게 감사 드리며 Wumpus에게 감사드립니다 fold -1. ;-)


이것은 알파벳 순서가 아니며 대문자 J는 다른 알파벳과 알파벳 순서로 정렬되어야합니다.
aks.

오 좋은 지적이야. 나는 추가해야 -f할 (배) sort의 경우를 무시.
joeytwiddle

6

C, 121

이것은 다른 항목과 비교하여 상당히 길지만 내장 정렬 또는 ToLower 함수에 의존하지 않습니다.

j;main(k){char s[99],*p=s;gets(s);while(*p){j=p-s-1;k=*p++;while(j>=0&&(s[j]|32)>(k|32))s[j+1]=s[j--];s[j+1]=k;}puts(s);}

더 읽기 쉬운 버전 :

j; main(k) {
    char s[99], *p=s;
    gets(s);
    while(*p) {
        j = p-s-1;
        k = *p++;
        while(j >= 0 && (s[j]|32) > (k|32))
            s[j+1] = s[j--];
        s[j+1] = k;
    }
    puts(s);
}

이것은 |32비트 단위 연산을 사용하여 요소 간 대소 문자를 구분하지 않고 삽입 정렬을 구현 한 것입니다 . ASCII 인코딩에서 대문자와 소문자는 2 5 비트 만 다르기 때문입니다 .


5

루비-33 문자

$><<gets.chars.sort(&:casecmp)*''

출력 코드는 어디에 있습니까?
John Dvorak

*""대신을 사용하여 2자를 절약 할 수 있습니다 .join.
manatwork

당신은 사용할 수 p있지만 의문의 여지가 있으므로 사용하십시오 puts. 또한 ARGF에$< 대한 지름길입니다
Shelvacu

@manatwork가 편집했습니다 ...
Siva

분리 공간을 제거 할 수 있으므로 $><<대신 1자를 사용하여 1자를 puts절약 할 수 있습니다.
manatwork

5

PowerShell : 39

$([string[]][char[]](Read-Host)|sort)" #With spaces and symbols

결과

  .aaddeeeghhhJkklnnoooprtttwy

C # : 100

Console.Write(new string(input.ToCharArray().OrderBy(a=>char.ToLower(a)).ToArray()).Trim('.',' '));

결과

aaddeeeghhhJkklnnoooprtttwy

질문에 필요한 프로그램 이 아닙니다 .
Howard

당신은 필요하지 않습니다 ToCharArray; String구현IEnumerable<char>
Rik

@howard 스크립트는 프로그램으로 간주됩니까?
Ralf de Kleine

1
기호 제외 솔루션은 샘플 입력에서만 작동합니다. 해당 입력은 샘플 일뿐입니다 (실제 입력에는 다른 기호도 포함될 수 있음).
샌더

1
@RalfdeKleine 죄송합니다.에 대해 잘못보고 싶습니다 sal. 사용할 수 없다고 생각합니다. 그러나을 사용하여 변수 할당을 제거 할 수 있습니다 "$([string[]][char[]](Read-Host)|sort)".
Kris Harper

4

Perl6 : 26 자

출력 대문자를 먼저 정렬 한 다음 소문자를 정렬하고 기호 / 공백을 삭제합니다.

say [~] sort comb /\w/,get

출력의 공백 / 기호도 무시 될 수있는 경우 이는 21 자입니다.

say [~] get.comb.sort

대소 문자를 구분하지 않고 기호 (26 자)를 유지합니다.

say [~] get.comb.sort: &lc

대소 문자를 구분하지 않고 정렬해야하지만 원하는 경우 공백과 기호를 무시할 수 있습니다.
Timtech

4

APL 16

      ⍞←A[⍋48|⎕av⍳A←⍞]
Johnny walked the dog to the park.
      aaddeeeghhhJkklnnoooprtttwy.

J는 a, d, e 등 앞에 오지 않기 때문에 요구 사항을 충족하지 못합니다.
Timtech

훌륭한 일 +1
Timtech

3

펄 34

이제에서 입력을받습니다 STDIN.

print sort{lc$a cmp lc$b}<>=~/\w/g

펄 18

대문자와 기호를 포함한 출력이 허용되는 경우 :

print sort<>=~/./g

cmdline에서 가져 오는 대신 입력 (설명에 따라)에서 문자열을 가져 와서 더 단축 할 수 있다고 생각합니다.
breadbox

우 맞아!
Dom Hastings


2

하스켈, 88

import Data.List
import Data.Char
import Data.Ord
main=interact$sortBy$comparing toLower

(표준 라이브러리에서 가져 오지 않은 38 개)


2

k ( 10 9)

stdin에서 읽습니다

x@<_x:0:0

x@<_x:0:0
Johhny walked the dog to the park.
"      .aaddeeeghhhhJkklnoooprtttwy"

2

C # : 83

Console.Write(new string(Console.ReadLine().OrderBy(i=>i+"".ToLower()).ToArray()));

업데이트 : 65

LinQPad 에서 실행 가능

new string(Console.ReadLine().OrderBy(i=>i+"").ToArray()).Dump();

1
덤프를 제거하고 LinqPad의 Expression Mode에서 실행되는 상태를 표시 할 수 있습니다.
Jacob

1

J, 12 자

(/:32|a.i.])

비 알파 문자를 무시합니다.


이 작업은 프로그램을 요청합니다. 여기서 I / O가 보이지 않습니다. 인터프리터 플래그를 사용하는 경우 해당 플래그를 명시하고 문자 수로 계산해야합니다.
John Dvorak

@JanDvorak 좋아요, 함수가 카운트 되겠습니까? 아니면 f=.추가 1!:1[1하시겠습니까?
Gareth

1!:1[1그리고 echo하시기 바랍니다
John Dvorak

@JanDvorak 왜 원 echo하십니까?
Gareth

스크립트 파일을 실행할 때 J 인터프리터가 마지막 표현식의 결과를 자동으로 출력합니까? 아니면 어떻게 운영합니까?
John Dvorak

1

자바 스크립트-74

불행히도 JS가 문자를 정렬하는 방식으로 인해 표준 정렬 기능을 사용할 수 없습니다.

prompt().split("").sort(function(a,b){return a.localeCompare(b)}).join("")

실제로 이것은 다음과 같이 단축 될 수 있습니다.

prompt().split("").sort((a,b)=>a.localeCompare(b)).join("")

1

F # ( 68 56)

F #을 배우고 있으므로 이것이 더 짧을 수 있다고 확신합니다.

let f s=s|>Seq.sortBy Char.ToLower|>Seq.iter(printf"%c")

산출:

> f "Johnny walked the dog to the park."
        .aaddeeeghhhJkklnnoooprtttwy 

1

PHP, 50 바이트

$a=str_split($argn);natcasesort($a);echo join($a);

비 문자를 제거하지 않고 STDIN에서 입력을받습니다. 로 실행하십시오 -R.


0

R, 48 자

cat(sort(unlist(strsplit(scan(,""),""))),sep="")

사용법 예 :

> cat(sort(unlist(strsplit(scan(,""),""))),sep="")
1: Johnny walked the dog to the park.
8: 
Read 7 items
.aaddeeeghhhJkklnnoooprtttwy

0

q / k4 (3? 5? 8?)

코드와 입력을 REPL에 직접 입력하기에 충분하다면 다음과 asc같습니다.

q)asc"Johnny walked the dog to the park."
`s#"      .Jaaddeeeghhhkklnnoooprtttwy"

`s#있는 문자열 (바이너리 검색 등을 할 수있는) 정렬 된 순서임을 나타낸다 Q 표기 비트. 그것이 가야한다면, 그것은 2 자의 비용이 들며 5를 만듭니다.

q)`#asc"Johnny walked the dog to the park."
"      .Jaaddeeeghhhkklnnoooprtttwy"

stdin에 제공하려면 k4로 전환해야합니다 (그리고 우리 `s#는 무료로 제거합니다) .8 자 솔루션입니다.

  x@<x:0:0
Johnny walked the dog to the park.
"      .Jaaddeeeghhhkklnnoooprtttwy"

그 중 하나 인 btw는 그대로 코드 파일로 작동합니다 (여전히 8 자, q는 코드 파일에 마지막 개행 문자가 없기 때문에 괜찮습니다). 일반적으로 시작 배너 및 REPL이 열린 상태로 문제가 발생하지만 입력을 herestring으로 전달하면 모든 것이 사라집니다.

$ cat asc.k
x@<x:0:0
$ q asc.k<<<'Johnny walked the dog to the park.'
"\n      .Jaaddeeeghhhkklnnoooprtttwy"
$ 

실제로 출력의 추가 줄 바꿈이 어디에서 오는지 확실하지 않습니다.


0

젤리, 3 바이트

ŒlÞ

이 사이트의 첫 번째 젤리 솔루션! Jelly와 @Dennis를 사용하여 만드는 방법을 가르쳐 준 @LeakyNun과 @ErikTheOutgolfer에게 감사합니다! :디

설명

ŒlÞ
  Þ Sort using the function to its left
Œl  Converts to lowercase (because it's sort alphabetically, not by codepoint)

또는 ŒuÞ대문자로 변환하는 것을 제외하고는 똑같은 작업을 수행합니다.


0

Java 10, 72 바이트 (람다 함수)

s->{for(int i=64;++i<91;)for(var c:s)if((c&~32)==i)System.out.print(c);}

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

그러나 그것은 전체 프로그램을 진술하는 오래된 도전이기 때문에 :

Java 10, 126 바이트 (전체 프로그램)

interface M{static void main(String[]a){for(int i=64;++i<91;)for(var c:a[0].toCharArray())if((c&~32)==i)System.out.print(c);}}

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

설명:

interface M{                        // Class
  static void main(String[]a){      //  Mandatory main method
    for(int i=64;++i<91;)           //   Loop over the uppercase alphabet
      for(var c:a[0].toCharArray()) //    Inner loop over the characters of the input
        if((c&~32)                  //     If the current character converted to uppercase,
                  ==i)              //     equals the current letter of the alphabet
          System.out.print(c);}}    //      Print the character of the input-loop

0

05AB1E , 3 2 바이트

Σl

문자가 아닌 문자를 무시하므로 일부는 선행하고 일부는 후행입니다.

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

문자가 아닌 문자를 제거하는 버전은 대신 3 바이트입니다 .

áΣl

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

설명:

á    # Optional: only leave the letters ([a-zA-Z]) of the (implicit) input-string
 Σ   # Sort the characters in the string by (sorted by their ASCII unicode value):
  l  #  Their lowercase equivalent (in case of the letters)
     # (And output the result implicitly)

0

파워 쉘, 36 바이트

-join($args-split'\W|(.)'-ne''|sort)

테스트 스크립트 :

$f = {

-join($args-split'\W|(.)'-ne''|sort)

}

@(
    ,("Johnny walked the dog to the park.", "aaddeeeghhhJkklnnoooprtttwy")
) | % {
    $s,$expected = $_
    $result = &$f $s
    "$("$result"-eq"$expected"): $result"
}

산출:

True: aaddeeeghhhJkklnnoooprtttwy

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