Cümleyi Alfabetik Sırayla Görüntüle


14

Dize alan ve tüm karakterleri alfabetik sırayla çıkaran bir program yazın. Boşluklar ve simgeler yok sayılabilir veya silinebilir, ancak büyük ve küçük harfler aynı durumda kalmalıdır.

Örnek giriş:

Johnny walked the dog to the park.

Örnek çıktı

aaddeeeghhhJklnnoooprtttwy

Kurallar:

• Herhangi bir dil

• En kısa kod kazanır.


5
Büyük / küçük harfler nasıl sıralanır? Alttan önce üst, girişten tam tersi mi yoksa kararlı mı?
Howard

Temel Latin alfabesinin ("İngilizce alfabe") dışında herhangi bir harfi işlemesi gerekiyor mu?
Sebastian Negraszus

3
Başlıktan, "Alfabetik Sırayla Cümle" göstermekten kurtulabileceğimi umuyordum. Veya "ceeennst". (Tamam, "Sceeennt", eğer büyük harf kullanımı ve ASCII emri konusunda ısrar ediyorsanız.)
keshlam

Siz Spaces and symbols can be ignored or deleted, bu demek değildir ki, ihmal edilmelidir ; veya çıktıya , .aaddeeeffizin veriliyor mu?
blutorange

4
kÇıktıda 2 sn olmamalı mı ?
HyperNeutrino

Yanıtlar:


1

MathGolf , 2 bayt

áδ

Çevrimiçi deneyin!

Örnek çıktı

      .aaddeeeghhhJkklnnoooprtttwy

Alfabetik olmayan karakterleri kaldırma

Alfabetik olmayan tüm karakterleri kaldırmak için bu çözüm işe yarar:

áδgÆ∞_δ¡

Yukarıdaki kodla aynıdır, ardından her karakterin ilk kez iki katına çıktığı ve daha sonra kendi büyük harflerini karşılaştırdığı bir filtreleme yapılır. Örneğin, dize "a"eşittir "aa"ve sonra büyük harfle "Aa"yazılır "aa". Aynı şekilde, dize eşit ve büyük / küçük harfe "B"dönüştürülür . Bununla birlikte, dönüştürülür"BB""Bb""BB""."".." büyük harfle ve değiştirilir, böylece filtrelenir.

açıklama

MathGolf'ta gerçekten daha fazla dize işleme ihtiyacım var ... Şu anda küçük / büyük harfe dönüştürmek için bir operatör bile yok. Kullanabileceğim tek şey, uzunluk 1 dizeleri için büyük harfli bir operatör gibi çalışan büyük harf operatörüdür. Bu çözüm alfabetik olmayan karakterleri de sıralar, ancak bunlar göz ardı edilebilir. Alfabetik karakterler büyük / küçük harflerini korur ve doğru sırada çıkarılır.

á    sort by comparator
 δ   capitalize string

12

GolfScript, 24/6 karakter

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

Misal:

> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy  

Giriş yazdırılabilir ascii ile sınırlıysa, kod {95&.64>\91<&},filtre olarak üç karakterle kısaltılabilir .

Burada test edilebilir .

Göz ardı edilebilir sürüm daha da kısadır (6 karakter):

{31&}$

ve çıktı verir

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

ve eğer "alfabetikleştirmek" "ASCII siparişi tamam demektir" şeklinde yorumlanabiliyorsa, sadece {}$
McKay

@McKay Soru açıkça farklı bir şekilde ifade ediyor. Ve {}$buna eşdeğer olur $.
Howard

Ah evet. Teşekkürler, golfscript öğrenmeye çalışıyorum
McKay

8

GNU çekirdek araçları - 25 karakter (29 bırakma sembolü)

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

Örnek (GNU bash 3'ten):

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

Sorudan:

Spaces ve semboller olabilir ihmal veya silinecek

Onları içeri bırakmayı seçtim! Sadece alfabetik karakterler korumak için, değiştirmek fold -1ile grep -o \\w4 karakterler için.

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

Tavsiye için Firefly sayesinde grep -oüzerinde sedyönelik ve Wumpus fold -1. ;-)


Bu alfabetik bir sıra değildir, J büyük harfinin diğer küçük harflerle alfabetik olarak sıralanması gerekir.
aks.

Oh iyi nokta aks. Davayı görmezden gelmek -fiçin eklemem (katlamam) gerekir sort.
joeytwiddle

6

C, 121

Bu, diğer girişlerle karşılaştırıldığında oldukça uzundur, ancak herhangi bir yerleşik sıralama veya ToLower işlevine dayanmaz:

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

Daha okunabilir versiyon:

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

Bu, öğeler arasında ( |32bitsel işlem kullanılarak) büyük / küçük harfe duyarlı olmayan bir karşılaştırmayla ekleme sıralama uygulamasıdır . Bunun nedeni, ASCII'de büyük harfleri ve küçük harfleri kodlama işleminin yalnızca 2 5 bit kadar farklı olmasıdır.


5

Yakut - 33 Karakter

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

Çıkış kodu nerede?
John Dvorak

Bunun *""yerine kullanarak 2 karakter yedekleyebilirsiniz .join.
manatwork

Kullanabilirsiniz p, ama bu şüpheli, bu yüzden sadece kullanın puts. Ayrıca, ARGF$<
Shelvacu

@manatwork düzenlendi ...
Siva

Sen kullanarak 1 karakterini ayırabilirim $><<yerine putsayıran boşluk çıkarılabilir olarak.
manatwork

5

PowerShell: 39

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

Sonuç

  .aaddeeeghhhJkklnnoooprtttwy

C #: 100

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

Sonuç

aaddeeeghhhJkklnnoooprtttwy

Bu , sorunun gerektirdiği bir program değil .
Howard

İhtiyacınız yok ToCharArray; StringuygularIEnumerable<char>
Rik

@howard komut dosyaları bir program olarak sayılır mı?
Ralf de Kleine

1
Sembol hariç çözümleriniz yalnızca örnek giriş için çalışır. Bu girdi yalnızca bir örnektir (gerçek girdi diğer sembolleri de içerebilir).
Sander

1
@RalfdeKleine Üzgünüm, yanlış yazıyorum, bunu salkullanabileceğinizi sanmıyorum. Ancak, değişken atamadan kurtulabilirsiniz "$([string[]][char[]](Read-Host)|sort)".
Kris Harper

4

Perl6: 26 karakter

Çıktıyı önce büyük harf, sonra küçük harf olarak sıralar, sembolleri / boşlukları siler

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

Çıktıdaki boşluk / semboller de göz ardı edilebilirse, bu yalnızca 21 karakterdir.

say [~] get.comb.sort

Bu, büyük / küçük harfe duyarsız bir şekilde sıralar, sembolleri tutar (26 karakter)

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

Büyük / küçük harfe duyarsız olarak sıralamak zorundadır, ancak tercih edilirse boşluk ve sembolleri yoksayabilir.
Timtech

4

APL 16

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

Bu gereksinimleri karşılamıyor, çünkü J a, d, e, vb.
Önüne gelmiyor

Harika bir iş var +1
Timtech

3

Perl 34

Şimdi girişi alır STDIN.

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

Perl 18

Önce büyük harfler ve simgeler dahil olmak üzere çıktı kabul edilebilirse:

print sort<>=~/./g

Dize cmdline almak yerine girişinden (açıklamaya göre) alarak daha da kısaltabileceğinizden şüpheleniyorum.
ekmek kutusu

Oooh haklısın!
Dom Hastings


2

Haskell, 88

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

(38 standart lib'den ithalat yapılmadan)


2

k ( 10 9)

Stdin'den okumalar

x@<_x:0:0

Misal

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

Güncelleme: 65

İçinde yürütülebilir LINQPad

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

1
Dökümü kaldırabilir ve LinqPad'ın İfade Modunda çalıştığını belirtebilirsiniz :)
Jacob

1

J, 12 karakter

(/:32|a.i.])

Alfa olmayan karakterleri yok sayar.


Bu görev bir program ister. Burada G / Ç göremiyorum. Herhangi bir tercüman bayrağı kullanıyorsanız, bunları belirtmeniz ve karakter sayısına dahil etmeniz gerekir.
John Dvorak

@JanDvorak Tamam, bir işlev sayılır mı - f=.yoksa eklememi ister misiniz 1!:1[1?
Gareth

1!:1[1ve echolütfen
John Dvorak

@JanDvorak Neden istiyorsun echo?
Gareth

J yorumlayıcısı bir komut dosyası çalıştırılırken son ifadenin sonucunu otomatik olarak verir mi? Ya da, onu nasıl çalıştırıyorsun?
John Dvorak

1

Javascript - 74

Ne yazık ki, JS karakterleri sıralama şekli nedeniyle standart sıralama işlevini kullanamayız:

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

Aslında bu kısaltılabilir:

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

1

F # ( 68 56)

F # öğreniyorum, bu yüzden bu kısa olabilir eminim:

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

Çıktı:

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

1

PHP, 50 bayt

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

harf olmayanları kaldırmaz, STDIN'den girdi alır; ile çalıştırın -R.


0

R, 48 karakter

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

Örnek kullanım:

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

kodu ve girişi doğrudan REPL'e girmek yeterliyse, sadece asc:

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

`s#olan dize (ikili arandı vb olabilir) sıralı düzende olduğunu gösterir q gösterimde biraz. eğer gitmek zorundaysa, bu iki karaktere mal olur ve beş karakter kazanır:

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

stdin'de sağlanmasını istiyorsanız, k4'e geçme zamanı (ve `s#ücretsiz olarak kurtuluyoruz ) ve sekiz karakterli bir çözüm:

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

btw, tam olarak olduğu gibi bir kod dosyası olarak çalışır (hala sekiz karakter, çünkü q bir kod dosyasındaki son satırsonu olmamasına rağmen iyidir). normalde bir karşılama afişi ve REPL'in açık kalmasıyla ilgili sorunlar olacaktır, ancak girdiyi bir test olarak geçerseniz, tüm bunlar ortadan kalkar:

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

çıkışta bu ekstra satırsonu nereden geliyor emin değilim ....


0

Jöle, 3 bayt

ŒlÞ

Bu sitedeki ilk Jelly çözümüm! @LeakyNun ve @ErikTheOutgolfer'a Jelly ve @Dennis'i nasıl kullanacağımı öğrettiği için teşekkürler! : D

açıklama

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

Alternatif olarak, ŒuÞbunun yerine büyük harfe dönüştürmek dışında aynı şeyi yapar.


0

Java 10, 72 bayt (lambda işlevi olarak)

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

Çevrimiçi deneyin.

Ancak tam programı belirten eski bir zorluk olduğu için:

Java 10, 126 bayt (tam program olarak)

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

Çevrimiçi deneyin.

Açıklama:

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 bayt

Σl

Harf olmayan karakterleri yok sayar, bu nedenle bazıları önde ve bazıları arkadadır.

Çevrimiçi deneyin .

Harf olmayan karakterleri kaldıran bir sürüm 3 bayttır :

áΣl

Çevrimiçi deneyin .

Açıklama:

á    # 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

Powershell, 36 bayt

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

Test komut dosyası:

$f = {

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

}

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

Çıktı:

True: aaddeeeghhhJkklnnoooprtttwy

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.