Urutkan berdasarkan abjad khusus

9

Tantangannya adalah membuat program yang mengurutkan daftar kata-kata, hanya saja kata-katanya harus dalam urutan abjad acak yang diberikan.

Program Anda akan menerima serangkaian kata yang dipisahkan koma dan alfabet baru.
Program Anda akan menampilkan setiap kata dengan cara yang sama dalam urutan yang baru.

Contoh:

Memasukkan:

home,oval,cat,egg,network,green bcdfghijklmnpqrstvwxzaeiouy

Keluaran:

cat,green,home,network,egg,oval

Ini adalah , jadi pemenangnya adalah orang dengan program terpendek.

Ini adalah tantangan pertama saya sehingga setiap perbaikan pertanyaan / tantangan dihargai.

Matematika
sumber
1. Saya ambil dari contoh Anda bahwa alfabet akan dipisahkan dari kata-kata oleh spasi. Apakah itu benar? 2. Apakah kata-katanya selalu dalam huruf kecil?
Dennis
@Dennis ya untuk keduanya
Mathetic
1
Itu salah. Saya akan mengeditnya.
Matematika
+1 pertanyaan OK (untuk percobaan pertama ;-)). Tapi saya tidak melihat relevansi dari judul - mungkin Anda dapat mengubah nama Sort by custom alphabetatau sesuatu yang lebih kreatif?
Digital Trauma
@DigitalTrauma Ya itu mungkin lebih baik. Saya mencoba sedikit bermain dengan kata-kata. Saya bertujuan untuk referensi ke ascii dan utf-8 dan sejenisnya untuk menanyakan yang mana. Tapi yang itu gagal. Saya akan mengubahnya sesuai saran Anda yang lebih baik.
Matematika

Jawaban:

2

CJam, 26 19 17 byte

rr:A;',/{Af#}$',*

Cobalah online.

Kasus cobaan

$ cjam sort.cjam <<< 'home,oval,cat,egg,network,green bcdfghjklmnpqrstvwxzaeiouy'
cat,green,home,network,egg,oval

Bagaimana itu bekerja

rr                    " Read two whitespace-separated tokens from STDIN. ";
  :A;                 " Save the second token (the alphabet) in A.       ";
     ',/              " Split the remaining token at commas.             ";
        {Af#}$        " Sort by the chunks' characters' indexes in A.    ";
               ',*    " Join, separating by commas.                      ";
Dennis
sumber
Yah, karena kamu juga menggunakan pendekatan yang sama, milikku tidak masuk akal sekarang.
Pengoptimal
@Optimizer: Anda mengalahkan saya delapan detik. Jika Anda membatalkan penghapusan jawaban Anda, saya akan mengembalikan jawaban saya.
Dennis
Tidak, saya pikir ini perubahan sepele dan sangat obv. Saya seharusnya melihat pembaruan Anda sebelum memposting jawaban saya di tempat pertama :)
Pengoptimal
4

Bash + coreutils, 37 byte

tr ,$2 \\na-z<<<$1|sort|tr \\na-z ,$2

Keluaran:

$ ./alphasort.sh home,oval,cat,egg,network,green bcdfghijklmnpqrstvwxyzaeiouy
cat,green,home,network,egg,oval, $ 
Trauma Digital
sumber
1
Cara yang bagus untuk berurusan dengan koma!
Dennis
2

Pyth , 19 karakter

j\,o_mx_zdNchczd\,

Uji:

$ pyth -c "j\,o_mx_zdNchczd\," <<< 'home,oval,cat,egg,network,green bcdfghjklmnpqrstvwxzaeiouy'
cat,green,home,network,egg,oval

Penjelasan:

                            Implicit: d=" "
                            Implicit: z=input()
j\,                         ",".join(
   o                                 order_by(lambda N:
    _                                                  rev(
     m                                                     map(lambda d:
      x_zd                                                              rev(z).index(d),
      N                                                                 N),
    chczd\,                                            z.split(" "[0].split(",")

Pada dasarnya, ini mengurutkan potongan, dengan kunci daftar indeks karakter dalam string, kemudian bergabung dengan mereka di koma. Bisnis pembalikan lebih pendek dari pemisahan string lagi.

isaacg
sumber
18 byte:j\,_omx_zdNchczd\,
Dennis
@ Dennis sangat pintar, terima kasih.
isaacg
1

Ruby, 53 50 byte

a,b=$*
$><<a.split(?,).sort_by{|w|w.tr b,'a-z'}*?,

Saya menggunakan Ruby truntuk mengganti alfabet khusus a-zsebelum mengurutkan. Input melalui argumen baris perintah.

Martin Ender
sumber
Anda dapat memangkas satu byte jika Anda gunakan $><<untuk mencetak ke layar (Anda dapat menghapus ruang itu). Anda dapat memotong dua byte lainnya dengan menetapkan $*variabel seperti: a,b=$*dan menggunakan #sort_byalih-alih #sort_by!.
britishtea
@ britishtea Terima kasih. Saya pikir saya akan membutuhkan *$*(yang saya miliki pada awalnya dan yang panjangnya sama).
Martin Ender
0

Python, 131

w,a=input().split()
print(",".join(sorted(w.split(","),key=lambda s:"".join(["abcdefghijklmnopqrstuvwxyz"[a.find(c)]for c in s]))))

Seharusnya ada banyak ruang untuk perbaikan.

monopole
sumber
Anda tidak harus menggunakan kunci sebagai fungsi pengurutan - cukup gunakan daftar a.find(c)langsung.
isaacg
0

JavaScript (E6) 102 119

Sortir dengan fungsi pemetaan 'M' berdasarkan alfabet dalam variabel 'a'
Dengan IO menggunakan popup (prompt + lansiran)

x=prompt().split(/[ ,]/),
a=x.pop(),
M=w=>[10+a.search(c)for(c of w)]+'',
alert(x.sort((a,b)=>M(a)>M(b)))

Sebagai fungsi (dapat diuji) dengan parameter 1 string, mengembalikan array string (92)

F=x=>(
  M=w=>[10+a.search(c)for(c of w)],
  x=x.split(/[ ,]/),
  a=x.pop(),
  x.sort((a,b)=>M(a)>M(b))
)

Uji di konsol FireFox / FireBug

F('home,oval,cat,egg,network,green zyxwvtsrqpnmlkjhgfdcbaeiou')

Keluaran

["network", "home", "green", "cat", "egg", "oval"]
edc65
sumber
1
-4 jika Anda mengganti fungsi sortir Anda dengan(M(a)>M(b))-(M(a)<M(b))
DocMax
@ DocMax sangat bagus. Ternyata itu bahkan lebih sederhana dari itu ( stackoverflow.com/a/7232172/3640407 )
edc65
Jika Anda menggunakan kembali prompt untuk input dan output dan alias Anda dapat menghindari panggilan split dengan mengambil input secara terpisah. Saya pikir itu harus menyimpan beberapa karakter.
Ingo Bürk
Saya juga hanya menggunakan ponsel saya sekarang, tetapi mengapa M begitu rumit? Tidakkah itu berhasil digunakan M=w=>[...a].indexOf(w)? Sayangnya, saya tidak dapat mengujinya sekarang.
Ingo Bürk
@ IngoBürk w adalah kata, bukan karakter. M ganti setiap karakter dalam w dengan posisinya di a.
edc65
0

Clojure, 115 byte

#(apply str(butlast(interleave(sort-by(fn[w](apply str(map(zipmap(sort %2)%2)w)))(re-seq #"[a-z]+"%))(repeat \,))))

Wow, ini dimulai dengan baik (sort-by(fn[w](mapv(zipmap(sort %2)%2)w)))tetapi kemudian saya menyadari bahwa vectidak disortir dengan cara yang sama dengan string, dan interleaving koma-koma itu juga membutuhkan sejumlah kode.

NikoNyrh
sumber