Charlie và dấu gạch nối ác


8

Đây là bảng chữ cái ngữ âm:

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

Trong ít byte nhất có thể:

  1. Đầu vào sẽ là những từ này theo thứ tự ngẫu nhiên, với các chữ cái đầu tiên được loại bỏ.
  2. Mục tiêu của bạn là sắp xếp các từ trở lại trật tự ban đầu của chúng chỉ bằng các chữ cái bạn có bây giờ . Nói cách khác: tìm hiểu làm thế nào '[A] lfa' xuất hiện trước '[B] ravo', v.v. Mã của bạn không được tham chiếu danh sách gốc, khóa chỉ mục, v.v.
  3. Khôi phục các chữ cái đầu tiên của mỗi từ.

Quy tắc

  • Dấu gạch nối trong X-quang có lẽ là xấu xa, nhưng cần ở lại, vì tôi cũng là ác quỷ.
  • Kết quả có thể là một chuỗi (ví dụ: dấu phẩy hoặc dòng mới được phân tách) hoặc một mảng.
  • Các cách viết và trường hợp thư là không thể thương lượng.
  • Không cần hiển thị đầu ra ví dụ trong câu trả lời.

@LevelRiverSt Việc sắp xếp rất khác nhau khi không có ký tự đầu tiên
fəˈnɛtɪk

@ fəˈnɛtɪk gắn thẻ cho từng đoạn từ bằng chữ cái đầu tiên được cho là một phương pháp sắp xếp. Tôi nghĩ đề xuất của Sparklepony nằm trong ý định của OP. Thực sự OP nên trả lời điều này, nhưng tôi sẽ có xu hướng đóng cửa một lần nữa do các yêu cầu không thể quan sát được nếu OP nói không. Nó trở nên lộn xộn (điều gì sẽ xảy ra nếu bạn sử dụng một vòng lặp để đưa chúng ra từng cái một, thêm một chữ cái và in - sau đó bạn sẽ làm cả hai cùng nhau.) Tôi với meta OP của Martin trong những trường hợp như thế này. (và bài đăng mà anh ấy đã tham khảo với 19 lượt upvote và 0 lượt tải xuống)
Level River St

Nếu bất cứ ai cảm thấy điều này có thể hữu ích, một chuỗi đã xác định duy nhất từng từ đầu vào từ đầu chuỗi là "l, r, ha, e, c, ox, ol, ot, nd, uli, il, im , ik, ov, s, ap, ue, o, tức là ang, n, i, h, -, a, u "
fəˈnɛtɪk

1
Tôi không chắc tôi hiểu đầu ra dự định là gì. Có phải nó chỉ đơn giản là văn bản ngữ âm chính xác (hoặc mảng dòng) kiểu phức tạp kolmogorov, ngoại trừ bạn có một phiên bản đọc sai làm đầu vào?
xnor

3
@xnor Nó có thể hoạt động tốt hơn sau đó nếu bạn được cung cấp một lựa chọn ngẫu nhiên của bảng chữ cái ngữ âm được xáo trộn thì bạn cần phải trả lại theo thứ tự, trong trường hợp văn bản cố định sẽ không phải là đầu ra hợp lệ.
fnɛtɪk

Câu trả lời:


4

Thạch , 21 byte

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

Đầu vào và đầu ra là mảng chuỗi.

Hãy thử trực tuyến!

Lý lịch

Trong khi có 26! = 403291461126605635584000000 các đầu vào khác nhau, chúng tôi có thể sắp xếp đầu vào để chúng tôi chỉ phải xử lý một hoán vị của bảng chữ cái ngữ âm này. Sắp xếp từ vựng, chúng tôi nhận được

-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

Chúng ta có thể chỉ cần lập chỉ mục vào mảng này để sắp xếp nó theo các chữ cái bị loại bỏ. Các chỉ số (dựa trên 1) là

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

Tất cả những gì còn lại phải làm là thêm các chữ cái in hoa của bảng chữ cái vào chuỗi trong kết quả.

Làm thế nào nó hoạt động

“ṣȤ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.

1
Điều đó làm tôi ngạc nhiên khi bạn có thể chơi golf tốt như thế nào ...
Christopher


2

JavaScript, 169/195 byte

Nếu thay thế chữ cái đầu tiên có thể được thực hiện trước khi sắp xếp 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()

Hãy thử trực tuyến!

Nếu việc sắp xếp phải được thực hiện trước khi thêm chữ cái đầu tiên 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}

Hãy thử trực tuyến!

Toàn bộ 20 byte của mỗi chương trình này chỉ là String.fromCharCode () để lấy lại ký tự ...

69 byte khác là chuỗi xác định duy nhất bắt đầu của mỗi từ trong bảng chữ cái ngữ âm.

Giải thích về ví dụ đầu tiên

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

Chuỗi mã hóa cứng ở đây được phân tách thành một danh sách các ký tự nhận dạng duy nhất bắt đầu các từ trong bảng chữ cái ngữ âm sau khi loại bỏ ký tự đầu tiên.

return String.fromCharCode(i+64)+k

Thông tin này được sử dụng để tìm chỉ mục nơi chuỗi rơi trong bảng chữ cái để đặt ký tự bắt đầu trở lại.

.sort()

JavaScript ngầm sắp xếp các chuỗi theo các giá trị ASCII của các ký tự

Giải thích về ví dụ thứ hai

Hàm g = k => ... tìm chỉ mục mà chuỗi sẽ nằm trong bảng chữ cái ngữ âm.

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

Sắp xếp các chuỗi theo các số được trả về bằng cách thực hiện g (...)

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

Thay thế ký tự đầu tiên của mỗi chuỗi bảng chữ cái ngữ âm


Tại sao .sort()trong câu trả lời 169 byte của bạn? Trong câu hỏi có ghi " 3. Khôi phục các chữ cái đầu tiên của mỗi từ. ", Nhưng nó không đề cập đến đầu ra cũng phải được sắp xếp.
Kevin Cruijssen

@KevinCruijssen Mục tiêu của bạn là sắp xếp các từ trở lại trật tự ban đầu chỉ bằng các chữ cái bạn có. Nói cách khác: tìm hiểu làm thế nào '[A] lfa' xuất hiện trước '[B] ravo', v.v. Mã của bạn không được tham chiếu danh sách gốc, khóa chỉ mục, v.v.
fnɛtɪk

Ah, tôi đã đọc sai một phần từ viên đạn thứ 2. Tôi sẽ chỉnh sửa mã của tôi.
Kevin Cruijssen


1

05AB1E , 29 27 byte

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

Hãy thử trực tuyến!

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

-2 nhờ vào phép thuật của Emigna .•.


Bạn cũng có thể xây dựng chuỗi với .•C5ê™вrΓ˜3åóMîõxÿ•u.
Emigna

Có phải đó chỉ là một không gian phím được lập chỉ mục bằng cách sử dụng A-Za-z0-9thay vì 0-9A-Za-z?
Bạch tuộc ma thuật Urn

Đó là bản đồ cơ sở 27 vào <space> 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;}

Hãy thử nó ở đây.

Giải trình:

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

Nó cần phải trở về theo thứ tự ban đầu (Alfa Bravo Charlie ...)
fnɛtɪk

@ fəˈnɛtɪk Đã sửa với giá 18 byte, làm cho nó 169.
Kevin Cruijssen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.