Bir çeşit


30

Bir dize verildiğinde x, karakterleri xkaynak kodunuzdaki görünüm sırasına göre sıralanmış olarak çıkarın.

Örnekler

Source: ThisIs A Test
 Input: Is it a Test?
Output: TissI   etta?

Source: Harry - yer a wizard.
 Input: I'm a what?
Output: aa  wh'?Imt

Source: Mr. H. Potter, The Floor, Hut-on-the-Rock, The Sea
 Input: 
Output:

kurallar

  • Standart boşluklar ve giriş / çıkış kuralları geçerlidir
  • Giriş ve çıkış, bir dize, karakter listesi veya bayt listesi olabilir.
  • Bir karakter kaynakta birden çok kez kullanılıyorsa, ilk oluşumu kullanın.
  • Kaynakta bir veya daha fazla karakter görünmüyorsa, sonunda olmalıdır; sıraları önemli değil, tutarlı olması da gerekmiyor.
  • Kaynak boş olmamalı
  • Yeni satırlar diğer karakterlerle aynı şekilde değerlendirilir.
  • Kodun yürütüldüğü sıra önemli değil; Sadece ham dize.
  • Giriş, kodla aynı kodda.
  • Giriş, baytlara göre değil karakterlere göre sıralanır.
  • Sıralama büyük / küçük harf duyarlıdır
  • Bu , her dil için bayt cinsinden en kısa cevap!


2
@negativeseven Kaynak kodu kodlamasındaki herhangi bir karakter, boşluk dahil, dikkate alınmalıdır.
tjjfvi


3
Muhtemelen eşleşmenin büyük-küçük harfe duyarlı olduğu konusunda açıkça belirtmelisiniz.
Shaggy

1
Biz alabilir miyim xçözümümüz hiç Unicode olarak kodlanmış ve Unicode karakterleri değilse UTF-8 veya UTF-16 kodlanmış xçözümün kod sayfasından karakterleri ifade? Örneğin, bazı golf dilleri, bayt sayısını azaltmak için özel kod sayfalarını kullanır, ancak yine de çıplak gözle okunabilir hale gelir.
Outgolfer Erik

1
@tjjfvi Burada no-op'lardan bahsetmiyorum (bu kesinlikle geçersiz sayılır); girişleri düz baytlarla (0x00-0xFF) almak yerine, aşağıdaki yanıtlardan en az birkaçı, girişi bayt dizisinin temsil edeceği UTF-8 dizesi olarak alın (örneğin, bir cevap gönderdiğimizde, genellikle UTF'yi göndeririz). Kodumuzun -8 sürümü (hexdump değil) ve sonra girişi sıralamak için kaynak kodun UTF-8 gösterimini kullanın. Buna izin var mı? Bunun da bir seçenek olması gerektiğini düşünüyorum (düz bayt akışının yanı sıra), aksi takdirde özel kod kodlu golf dillerinde çözümler büyük ölçüde engellenir.
Outgolfer Erik,

Yanıtlar:


13

Python 3.8 (yayın öncesi) , 102 100 96 85 79 76 68 61 59 60 bayt

c="print(sorted(x:=input(),key=('c=%r;'%c+x).find))";exec(c)

Çevrimiçi deneyin!

Bunu kullanarak -2 bayt

-4 = byte fark ederek ve gereksiz <0olanları ==-1kaldırarak+1

Neil sayesinde -11 bayt

-Za dzaima sayesinde 6 bayt

Çubuk sayesinde -3 bayt

-8 bayt negatif program sayesinde bir karakter listesi çıktısını belirten negatif yedi sayesinde

-7 byte Python 3.8’e geri dönme ve :=

Jo King nedeniyle c değişkeninin s ismini değiştirmesi nedeniyle -2 bayt. ;c

+1 bayt, çünkü negatif yedi ;doğru şekilde süzülmediğine işaret etti


('s=%r;exec(s)'%s+x).find(x)?
Neil,

@Neil Mevcut çözüm geçersiz mi ve kodunuzla değiştirmek ('s=%r;exec(s)'%s).find(x)geçerli mi?
MilkyWay90

@Neil Oh, bekleyin, golfünüzü görüyorum
MilkyWay90

4 bayt arasında geçiş yapabilir input()ve kaydedebilirsiniz
Rod

4
;Geçerli sürümde doğru sıralanmıyor
negatif yedi

7

APL (Dyalog Unicode) , 14 bayt SBCS

Anonim zımni önek işlevi.

'''∘⍋⊃¨⊂'∘⍋⊃¨⊂

 argümanı dahil et (bir bütün olarak hareket etmek)

⊃¨ Bundan, aşağıdaki endekslerin her biri için bir karakter seç:

∘⍋ argümanı aşağıdaki dizginin verdiği sıraya göre sıralayacak endeksler (üye olmayanların tamamı görünüm sırasına göre sıralanır):

'''∘⍋⊃¨⊂' karakterler '∘⍋⊃¨⊂

Çevrimiçi deneyin!





3

Ruby , 57 bayt

->s{s.sort_by{|o|%{->s{.ort_by|%}index()9}.index(o)||99}}

Çevrimiçi deneyin!

Golf hilesini kaçırmadığımı varsaymak oldukça kolay. Bir karakter listesine girin ve dizine göre, koddaki tüm uniq karakterlerinden oluşan bir dizgede görünümlerine göre sıralayın. Genellikle ilk görünüşleri o dizgededir, ancak bu sırayı değiştirmez.


3

05AB1E , 24 22 21 bayt

Σ"Σ"'"«"'«Rrk}"«Rrk}R

Çevrimiçi deneyin!

Açıklama:

Σ                    }               # Sort
 "Σ"                                 # Σ string literal
    '"                               # " string literal
       «                             # Concatenate last two literals
        "'«Rrk}"                     # '«Rrk} another literal
                «                    # Concat again
                 R                   # Reverse literal (so: }krR'«'"Σ)
                  r                  # reverse stack 
                   k                 # find the current sorting index in our code string 
                     R               # reverse our sorted string

İlk kez 05AB1E’de bir şeyler denemek çok büyük olasılıkla kurtarılacak


Bunun doğru olduğuna emin misin? Şimdi sıraladığı dize }krR«'«. NOT: 'tek bir karakterdir, bu nedenle sadece '"yeterlidir (ek bir izlemenin gerektiği C # 'dan farklı olarak '). Şu anda Kodunuz ilk dizesini iter Σ, sonra da dize ", ardından dize «, ardından dize '«Rrk}ve daha sonra ekleme, ters, ters yığını, endeks yapar. Yine de, dize ters ve sonunda Akıllı kullanımı! Cevabınız için bir düzeltme bulabilecek miyim, sonra da mayını silip temizleyeceğimi göreceğim.
Kevin Cruijssen

@kevincruijssen Öyleyse sadece ikincisinden kurtulamıyorum '
Süresi dolmuş veri

1
Evet, gerçekten yapabilirsin. :) Sonra doğru sıralar }krR«'"Σ. Not: =Bazen hata ayıklama amacıyla kullanma (baskı olmadan yazdırma) eğilimindeyim . --debug-stackArgüman olarak da ekleyebilirsiniz , ancak yeni 05AB1E sürümünde imho biraz garip.
Kevin Cruijssen

3

Jöle , 16 14 bayt (Jöle Kodu sayfası), 25 bayt (UTF8)

“Ṿv`Ṿ;³³i@Þ”v`

Çevrimiçi deneyin!

Sıralanacak dize tek bir argüman alan tam bir program.

@JonathanAllan'a bir hatayı işaret ettiği için teşekkürler!

@EriktheOutgolfer'a göre, kod Jelly kodu sayfası kullanılarak girilebilse de, sıralanan karakterler kaynağın bayt yerine eşdeğer UTF-8 karakterleridir. Bu nedenle, skoru UTF-8 baytlara da dahil ettim. Aynı durumun muhtemelen özel kod sayfalarına sahip tüm diller için de geçerli olduğunu unutmayın.

açıklama

“Ṿv`Ṿ;³³i@Þ”   | The string "Ṿv`Ṿ;³³i@Þ", referred to below as S
            v` | Evaluate this string as Jelly code using the string itself as the argument

Yukarıdaki dize şöyle değerlendirilir:

Ṿ          | Uneval the string S (effectively wraps it in “”)
 v`        | Eval it (effectively removes the “”)
   Ṿ       | Uneval it again, adding back in the “”
    ;³     | Concatenate the input to this
      ³i@Þ | Sort the input with respect to the first occurence of each character in the “”-wrapped string S concatenated to the input

Ṿv` burada etkili bir no-op, ancak tüm karakterlerin temsil edilmesini sağlamak için var.


Bu yüzden ... Jelly cevabımı gönderdim ve üzerime tıkladı: yorumlayıcı, çalıştırmadan önce bayt kodunu UTF-8'e dönüştürür , dolayısıyla bayt sayısının arttırılması veya kodun kod sayfasına uyması için değiştirilmesi gerekir.
Outgolfer Erik,

@EriktheOutgolfer Neye bulaştığınızı anlamıyorum. Bunun, bu bağlamda diğer kod kodlayıcı mücadelelerinden farkı nedir?
Nick Kennedy

Kendi kendine referans yönü farklıdır, bu nedenle aslında kod UTF-8 karakterlerini sıralar ve olması gereken baytları sıralar.
Outgolfer Erik,

3

Jöle , 14 bayt

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ

Çıktıyı basan bir (Python formatlı) dizgiyi (Jelly kod sayfası karakterleri) kabul eden tam bir program .
(monadik bir bağlantı olarak karakter listelerinin bir listesini verir)

Çevrimiçi deneyin!

Nasıl?

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ - Main Link: list of characters, S
“;fɓḟṾⱮ”       - list of characters = [';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ']
        Ṿ      - un-evaluate = ['“', ';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ', '”']
         ɓ     - start a new dyadic chain, F(S, T=that):
           Ɱ   - for each character, t, in T:
          f    -   (S) filter keep any of (the single character, t)
             ḟ - (S) filter discard any of (the characters in T)
            ;  - concatenate

Bu yüzden ... Jelly cevabımı gönderdim ve üzerime tıkladı: yorumlayıcı, çalıştırmadan önce bayt kodunu UTF-8'e dönüştürür , dolayısıyla bayt sayısının arttırılması veya kodun kod sayfasına uyması için değiştirilmesi gerekir.
Outgolfer Erik,

@EriktheOutgolfer Bence bu yöntem güvenlidir, çünkü bu yöntem herhangi bir sıralama yapmaz ve I / O ile aynı kodlama (Jelly's code page) kriterlerine uygundur.
Jonathan Allan

Eh ... Bence fve Unicode karakterlerle çalışın, çünkü karakterin içinde ne tür karakterler var? Örnek için ”ĿOgetiri 319gördüğü yüzden, jöle yerel olarak kodlanmış test edilirse Ŀolup C7.
Outgolfer Erik,

Unicode'da da düşünüyorum fve üzerinde çalışıyorum ama bu bir sorun mu? Jelly'in kod sayfasında görünen kısıtlı Unicode karakter kümesini (yani, bu kod kullanılarak kodlanan baytları, "Giriş kodla aynı koddadır" ifadesiyle) geçiyorum; onları doğru şekilde filtreleyin (bu girilen baytlar Unicode olarak kodlandığından) ve sonra bunları doğru şekilde çıkartın. Daha sonra saydığım kodun baytlarıdır ("Girdi karakterlere göre sıralanır" ve "her dil için bayt cinsinden en kısa cevap" yerine getirilir).
Jonathan Allan

1
@JonathanAllan Önceki yorumumda atıfta bulunduğum şeyin "Jelly'in kod sayfasını kullanarak bazı karakterlere kodlanmış" olduğunu hissediyorum. Kodun kodlaması 0x00 ile 0xFF arasında tek bayttan oluştuğu için, argümanın kodlaması da içermelidir. Bunun yerine, argüman JELLY'den UTF-8'e eşlendikten sonra iletilir, bu nedenle karakterlerinin her biri tek bir karakter değildir artık bayt. Temel olarak, kod JELLY'de, bağımsız değişken UTF-8'deyken, JELLY'den eşlenmiş olmasına rağmen. Doğru UTF-8 çıkışı döndürülürken, baştan beri JELLY olmalıdır.
Outgolfer Erik,

2

Kömür , 37 bayt

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№ηFηΦθ⁼ικΦθ¬№ηι

Çevrimiçi deneyin! Açıklama:

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№η

Charcoal'da karakterleri alıntılamanın iki yolu vardır; ... herhangi bir karakterden alıntı ´yaparken ”y... ... herhangi bir karakterden alıntı yapar ve ayrı bir dize olarak sayar. Anlaşılması gereken masrafın, herhangi bir golfçünün bitmeyeceği anlamına geliyor.

FηΦθ⁼ικ

Girişten eşleşen karakterlerin çıktısını almak için sırayla karakterlerin üzerine gelin. Bu, girişi sıralar.

Φθ¬№ηι

Girişte eşleştirilmemiş karakterleri çıktılayın.


2

J , 14 bayt

Anonim zımni önek işlevi.

]/:']/:''i'i:]

Çevrimiçi deneyin!

] argüman

… En i: son ortaya çıkan (üye olmayanlar, dizindeki her karakterin dizgesini arama dizisinin sonundan öteye götürür):

']/:''i' karakterler ]/:'i

/: Bunu sıralamak için kullanın:

] argüman


Dört ana boşluk yankı veya kodun sonucu mu?
tjjfvi

1
@tjjfvi TIO nasıl yapılandırılır. Şimdi düzeltildi.
Adám

2

Java 10, 129 100 bayt

s->{s.sort(java.util.Comparator.comparing(c->("s->{.ort(javuilCmpcng\"\\+)dexOf;}"+c).indexOf(c)));}

Taşıma yoluyla -29 bayt +cgelen @EmbodimentOfIgnorance 'ın C # cevabı .

Çevrimiçi deneyin.

Açıklama:

s->{                 // Method with char-List parameter and no return-type
  s.sort(java.util.Comparator.comparing(c->
    ("s->{.ort(javuilCmpcng\"\\+)dexOf;}"
                     //  Push a String containing the characters in the code
     +c)             //  Append the current character
        .indexOf(c)  //  And get the first index of the current character in the String

NOT: Genellikle kullanmak s.sort((a,b)->Long.compare(a,b))yerine daha ucuzdur s.sort(java.util.Comparator.comparing(c->c), ancak bu durumda 11 bayt daha uzun olacaktır:

s->{var v="s->{var =\"\\;.ot(,)Lngcmpe+idxOf}";s.sort((a,r)->Long.compare((v+a).indexOf(a),(v+r).indexOf(r)));}

Çevrimiçi deneyin.


2

05AB1E , 31 26 19 bayt

Σ'"'ÿs"Σ'ÿÿsìyk"ìyk

-7 byte, @ EmbodimentOfIgnorance'ın C # 'sındaki yaklaşımına ilham vererek , indekslemeden önce mevcut karakteri ekleme cevabını verir.

Çevrimiçi deneyin veya dizine eklenmekte olan dizeleri görmek için hata ayıklama çizgisiyle deneyin .

Açıklama:

Σ                 # Sort the (implicit) input-string by:
 '"              '#  Push string '"'
   'ÿ            '#  Push string "ÿ"
     s            #  Swap the order of these two strings on the stack
      "Σ'ÿÿsìyk"  #  Push string "Σ'ÿÿsìyk", where the `ÿ` are automatically filled with
                  #  the previous strings we created: `Σ'"ÿsìyk`
                  #  (top to bottom from stack; left to right in string)
       ì          #  Prepend this string in front of the character we're sorting
        yk        #  And then get the index of the character we're sorting in this string
                  # (after the sorting the resulting string is output implicitly)

Açıklamada bir yazım hatası var gibi görünüyor ("s" yerine "y")
ArBo

@ArBo Sabit, teşekkürler
Kevin Cruijssen

1
Kesinlikle, MilkyWay90'ın cevabında 11 byte golf oynadığımda 12 saatten daha uzun bir süre önce bu ilham kaynağını aldım ...
Neil

Bu iyi! Bunu gördüm ama bu sayede
byte'leri

2

PowerShell , 68 bayt

$p=$args
&($t={$p|sort-object{"`$p=`$args
&(`$t={$t})$_"|% i*f $_}})

Çevrimiçi deneyin!


2
1) sortbunun yerine sort-objectçalışır. 2) $bkapsam dışında tanımlanan değişken kodunuzu. Standard loopholesBir gerektirir tam bir cevap . Powershell için şu anlama gelir: herhangi bir kişi kodu powershell betiği olarak bir dosyaya bağlayabilir ve bir terminalde çalıştırabilir. Kodunuz komut dosyasından çalışmıyor. Üzgünüm.
mazzy

1
@mazzy, çok teşekkür ederim. 1) sorttakma ad Ubuntu'da pwsh'de çalışmıyor 18.04 2) evet, bu benim hatam, fakat kendimi düzelttim ve sonuç olarak, kod elbette daha uzun
sürdü

(oO)! Powershell için sıralama takma adı oluşturdum . code became longer- Bu meydan okuma :)
mazzy

1
Evet haklısın. Her bir karakter $p, kaynak kodlu dizgenin sonuna eklenir ve eşit bir indeks alır $src.Length, ancak “sıraları önemli değil ve tutarlı olmamalı” olduğundan önemli değildir. Gelen bu cevap , bütün girdi dizesi kaynak koduyla dizenin sonuna eklenir.
Andrei Odegov

1
@ dfeuer, sorunuzu anlamıyorum. Üzgünüm.
mazzy


2

Japt , 18 bayt

ñÈi"ñÈi\"\\ bX" bX

Dene

ñÈi"ñÈi\"\\ bX" bX     :Implicit input of string or character array
ñ                      :Sort by
 È                     :Passing each X through the following function
  i                    :  Prepend X with
   "ñÈi\"\\ bX"        :    Literal string (The \s are annoying me!)
                bX     :  First index of X

1

Jöle , 26 bayt (UTF-8 *)

“®³nÞṾ©V”Ṿ©VV

Çevrimiçi deneyin!

1. komut satırı argümanında Python biçimli bir dize olarak girdi alır.

Benzersiz karakterler :

“®³nÞṾ©V”

* Not: Bunun JELLY'de kodlandığında çalışmadığını keşfettim, çünkü kendi baytlarının yerine UTF-8 karakterlerini sıralar.

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.