Charlie dan tanda hubung jahat

8

Ini alfabet fonetis:

Alfa
Bravo
Charlie
Delta
Echo
Foxtrot
Golf
Hotel
India
Juliett
Kilo
Lima
Mike
November
Oscar
Papa
Quebec
Romeo
Sierra
Tango
Uniform
Victor
Whiskey
X-ray
Yankee
Zulu

Dalam byte sesedikit mungkin:

  1. Masukan akan berupa kata-kata ini dalam urutan acak, dengan huruf pertama dihapus.
  2. Tujuan Anda adalah mengatur kata-kata kembali ke urutan semula hanya menggunakan huruf yang Anda miliki sekarang . Dengan kata lain: cari tahu bagaimana '[A] lfa' datang sebelum '[B] ravo', dan seterusnya. Kode Anda tidak boleh merujuk daftar asli, kunci indeks, dll.
  3. Kembalikan huruf pertama asli dari setiap kata.

Aturan

  • Tanda hubung dalam X-ray mungkin jahat, tetapi perlu tetap, karena saya juga jahat.
  • Hasilnya dapat berupa string (dipisahkan koma atau baris baru), atau array.
  • Kasus ejaan dan surat tidak dapat dinegosiasikan.
  • Tidak perlu menampilkan contoh output dalam jawaban.
rybo111
sumber
@LevelRiverSt Penyortiran ini sangat berbeda tanpa karakter pertama
fəˈnɛtɪk
@ fəˈnɛtɪk memberi tag setiap fragmen kata dengan huruf pertamanya bisa dibilang adalah metode pengurutan. Saya pikir proposal sparklepony adalah dalam maksud OP. Sungguh OP harus menjawab ini, tetapi saya akan cenderung melakukan closevote lagi karena persyaratan yang tidak dapat diobservasi jika OP mengatakan tidak. Itu menjadi berantakan (bagaimana jika Anda menggunakan loop untuk memancing mereka satu per satu, tambahkan surat dan cetak - maka Anda melakukan keduanya bersama-sama.) Saya dengan OP meta Martin dalam kasus-kasus seperti ini. (dan pos yang dia referensikan dengan 19 upvotes dan 0 downvotes)
Level River St
Jika ada yang merasa ini mungkin berguna, string yang secara unik mengidentifikasi setiap kata input dari awal string adalah "l, r, ha, e, c, sapi, ol, ot, nd, uli, il, im , ik, ov, s, ap, ue, o, yaitu, ang, n, i, h, -, a, u "
fəˈnɛtɪk
1
Saya tidak yakin saya mengerti apa yang dimaksud dengan output. Apakah ini hanyalah gaya kompleksitas kolmogorov teks fonetik (atau deret baris) yang tepat, kecuali Anda memiliki versi yang rusak sebagai input?
xnor
3
@ xnor Ini mungkin bekerja lebih baik maka jika Anda diberi pilihan acak dari alfabet fonetik yang dikocok maka Anda harus mengembalikannya secara berurutan, dalam hal ini teks tetap tidak akan menjadi output yang valid.
fəˈnɛtɪk

Jawaban:

4

Jelly , 21 byte

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"

Input dan output adalah array string.

Cobalah online!

Latar Belakang

Meskipun ada 26! = 403291461126605635584000000 input yang berbeda, kita dapat mengurutkan input sehingga kita harus berurusan hanya dengan satu permutasi dari alfabet fonetis ini. Mengurutkan secara leksikografis, kami dapatkan

-ray
ango
ankee
apa
cho
elta
harlie
hiskey
ictor
ierra
ike
ilo
ima
lfa
ndia
niform
olf
omeo
otel
ovember
oxtrot
ravo
scar
uebec
uliett
ulu

Kita cukup mengindeks ke dalam array ini untuk mengurutkannya berdasarkan huruf yang dihapus. Indeks (berbasis 1) adalah

14 22  7  6  5 21 17 19 15 25 12 13 11 20 23  4 24 18 10  2 16  9  8  1  3 26

Yang perlu dilakukan adalah menambahkan huruf besar alfabet ke string dalam hasil.

Bagaimana itu bekerja

“ṣȤW¶¬þḷẒ⁶4ẹ’Œ?ịṢØA;"  Main link. Argument: A (string array)

“ṣȤW¶¬þḷẒ⁶4ẹ’          Replace the characters by their indices in Jelly's code page
                       and convert the result from bijective base 250 to integer.
                       This yields k := 214215675539094608445950965.
             Œ?        Construct the k-th permutation (sorted lexicographically)
                       of [1, ..., n], with minimal n (26 here). This yields
                       [14, 22,  7,  6,  5, 21, 17, 19, 15, 25, 12, 13, 11,
                        20, 23,  4, 24, 18, 10,  2, 16,  9,  8,  1,  3, 26].
                Ṣ      Yield A, sorted.
               ị       For each j in the array to the left, select the j-th string
                       from the array to the right.
                 ØA    Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
                   ;"  Concatenate zipwith; prepend the j-th character from the
                       alphabet to the j-th string of the permuted input.
Dennis
sumber
1
Ini mengherankan saya betapa baiknya Anda bisa bermain golf ...
Christopher
3

Python 3 , 76 71 byte

lambda x,S=sorted:S(map(str.__add__,'XTYPEDCWVSMKLAIUGRHNFBOQJZ',S(x)))

Cobalah online!

Dennis
sumber
2

JavaScript, 169/195 byte

Jika mengganti huruf pertama bisa dilakukan sebelum mengurutkan 169 byte

x=>x.map(k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return String.fromCharCode(i+64)+k}).sort()

Cobalah online!

Jika penyortiran harus dilakukan sebelum menambahkan huruf pertama 195 byte

x=>x.sort((a,b)=>g(a)-g(b)).map(a=>String.fromCharCode(g(a)+64)+a)
g=k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return i}

Cobalah online!

20 byte penuh dari masing-masing program ini hanyalah String.fromCharCode () untuk mendapatkan kembali karakter ...

69 byte lainnya adalah string yang secara unik mengidentifikasi awal setiap kata dalam alfabet fonetik.

Penjelasan contoh pertama

for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split,[i++]))return i

String yang dikodekan di sini dipisahkan menjadi daftar karakter pengidentifikasi unik yang memulai kata-kata alfabet fonetik setelah karakter pertama dihapus.

return String.fromCharCode(i+64)+k

Informasi ini digunakan untuk menemukan indeks di mana string jatuh dalam alfabet untuk mengembalikan karakter awal.

.sort()

JavaScript secara implisit mengurutkan sebagai string oleh nilai-nilai ASCII dari karakter

Penjelasan dari contoh kedua

Fungsi g = k => ... menemukan indeks di mana string harus jatuh dalam alfabet fonetik.

.sort((a,b)=>g(a)-g(b))

Mengurutkan string dengan angka yang dikembalikan dengan melakukan g (...)

.map(a=>String.fromCharCode(g(a)+64)+a)

Mengganti karakter pertama dari masing-masing string alfabet fonetis

fəˈnɛtɪk
sumber
Mengapa .sort()jawaban 169 byte Anda? Dalam pertanyaan itu menyatakan " 3. Kembalikan huruf pertama asli dari setiap kata. ", Tetapi tidak menyebutkan output harus diurutkan juga.
Kevin Cruijssen
@KevinCruijssen Tujuan Anda adalah mengatur kata-kata kembali ke urutan semula hanya menggunakan huruf yang sekarang Anda miliki. Dengan kata lain: cari tahu bagaimana '[A] lfa' datang sebelum '[B] ravo', dan seterusnya. Kode Anda tidak boleh merujuk pada daftar asli, kunci indeks, dll.
fəˈnɛtɪk
Ah, saya salah membaca bagian dari peluru ke-2. Saya akan mengedit kode saya.
Kevin Cruijssen
2

PHP , 94 byte

<?for(sort($_GET);$i<26;sort($r))$r[]=XTYPEDCWVSMKLAIUGRHNFBOQJZ[$i].$_GET[+$i++];print_r($r);

Cobalah online!

Jörg Hülsermann
sumber
1

05AB1E , 29 27 byte

.•C5ê™вrΓ˜3åóMîõxÿ•uS|{)øJ{

Cobalah online!

.•C5ê™вrΓ˜3åóMîõxÿ•uS       # Push exploded XTYPEDCWVSMKLAIUGRHNFBOQJZ.
                     |{)    # Push input in array, sorted.
                        øJ{ # Zip together, join, resort.

-2 Berkat magis Emigna .•.

Guci Gurita Ajaib
sumber
Anda juga dapat membuat string dengan .•C5ê™вrΓ˜3åóMîõxÿ•u.
Emigna
Apakah itu hanya keyspace sebuah diindeks menggunakan A-Za-z0-9bukan 0-9A-Za-z?
Magic Gurita Guci
Ini peta dasar-27 ke dalam <spasi> az
Emigna
0

Java 7, 169 byte

import java.util.*;List c(List l){Collections.sort(l);int i=0;for(Object s:l)l.set(i,""+"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)+l.get(i++));Collections.sort(l);return l;}

Coba di sini.

Penjelasan:

import java.util.*;                            // Import used for List and Collections

void c(List l){                                // Method with list parameter and no return-type
  Collections.sort(l);                         //  Sort the given list
  int i=0; for(Object s:l)                     //  Loop over the Strings in the list
    l.set(i,""+                                //   Replace the String-item in the list with:
      +"XTYPEDCWVSMKLAIUGRHNFBOQJZ".charAt(i)  //    The leading capital character
      +l.get(i++);                             //    Followed by itself
                                               //  End of loop (implicit / single-line body)
}                                              // End of method
Kevin Cruijssen
sumber
Perlu kembali dalam urutan asli (Alfa Bravo Charlie ...)
fəˈnɛtɪk
@ fəˈnɛtɪk Tetap dengan biaya 18 byte, menjadikannya 169.
Kevin Cruijssen