Một loạt các loại


30

Đưa ra một chuỗi x, xuất các ký tự được xsắp xếp theo thứ tự xuất hiện trong mã nguồn của bạn.

Ví dụ

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:

Quy tắc

  • Quy tắc tiêu chuẩn & quy tắc i / o áp dụng
  • Đầu vào và đầu ra có thể là một chuỗi, một danh sách các ký tự hoặc một danh sách các byte.
  • Nếu một ký tự được sử dụng nhiều lần trong nguồn, hãy sử dụng lần xuất hiện đầu tiên.
  • Nếu một hoặc nhiều ký tự không xuất hiện trong nguồn, chúng sẽ ở cuối; trật tự của họ không quan trọng, cũng không nhất quán.
  • Nguồn phải không trống
  • Dòng mới được đối xử giống như các nhân vật khác.
  • Thứ tự thực thi mã không thành vấn đề; chỉ là chuỗi thô.
  • Đầu vào là cùng mã hóa với mã.
  • Đầu vào được sắp xếp theo các ký tự, không phải theo byte.
  • Sắp xếp là trường hợp nhạy cảm
  • Đây là , vì vậy câu trả lời ngắn nhất tính theo byte cho mỗi ngôn ngữ sẽ thắng!


2
@negativeeven Bất kỳ ký tự nào từ mã hóa mã nguồn cần phải được tính đến, bao gồm cả khoảng trắng.
tjjfvi


3
Bạn có lẽ nên đề cập rõ ràng trong thông số kỹ thuật phù hợp với trường hợp nhạy cảm.
Shaggy

1
Chúng tôi có thể được xmã hóa bằng UTF-8 hoặc UTF-16 không nếu giải pháp của chúng tôi không được mã hóa bằng Unicode và các ký tự Unicode xđại diện cho các ký tự trong trang mã của giải pháp? Ví dụ, một số ngôn ngữ chơi gôn sử dụng các trang mã tùy chỉnh để giảm số byte của chúng nhưng vẫn có thể đọc được bằng mắt thường.
Erik the Outgolfer

1
@tjjfvi Tôi không nói về no-op ở đây (điều này chắc chắn không hợp lệ); ít nhất một vài câu trả lời dưới đây, thay vì lấy đầu vào theo byte đơn giản (0x00-0xFF), hãy lấy đầu vào dưới dạng chuỗi UTF-8 mà chuỗi byte sẽ đại diện (ví dụ: khi chúng tôi đăng câu trả lời, chúng tôi thường đăng UTF -8 phiên bản mã của chúng tôi, không phải là hexdump), và sau đó sử dụng biểu diễn UTF-8 của mã nguồn để sắp xếp đầu vào. Điều này có được phép không? Tôi cảm thấy như nó cũng là một tùy chọn (bên cạnh luồng byte đơn giản), bởi vì nếu không thì các giải pháp trong ngôn ngữ chơi gôn với mật mã tùy chỉnh sẽ bị cản trở rất nhiều.
Erik the Outgolfer

Câu trả lời:


13

Python 3.8 (tiền phát hành) , 102 100 96 85 79 76 68 61 59 60 byte

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

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

-2 byte bằng cách sử dụng này

-4 byte bằng cách nhận ra rằng <0== ==-1và loại bỏ những thứ không cần thiết+1

-11 byte nhờ Neil

-6 byte nhờ dzaima

-3 byte nhờ thanh

-8 byte nhờ bảy âm chỉ ra rằng chương trình có thể xuất ra một danh sách các ký tự

-7 byte do Hiện thân của Vô minh chuyển trở lại Python 3.8 và sử dụng :=

-2 byte do Jo King chuyển đổi tên biến s cho c, vì vậy chúng tôi có thể bỏ qua ;c

+1 byte vì âm bảy chỉ ra rằng nó không lọc ;chính xác


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

@Neil Giải pháp hiện tại không hợp lệ và việc thay thế ('s=%r;exec(s)'%s).find(x)bằng mã của bạn sẽ khiến nó hợp lệ?
MilkyWay90

@Neil Oh, đợi đã, tôi thấy môn đánh gôn của bạn
MilkyWay90

Bạn có thể chuyển sang input()và lưu 4 byte
Rod

4
;không được sắp xếp chính xác trong phiên bản hiện tại
âm bảy

7

APL (Dyalog Unicode) , 14 byte SBCS

Chức năng tiền tố ẩn danh.

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

 kèm theo đối số (để hành động trên toàn bộ)

... ⊃¨ từ đó, chọn một ký tự cho mỗi người trong số các chỉ số sau:

∘⍋ các chỉ mục sẽ sắp xếp đối số theo thứ tự được đưa ra bởi chuỗi sau (tất cả những người không phải là thành viên sẽ theo thứ tự xuất hiện ở cuối):

'''∘⍋⊃¨⊂' các nhân vật '∘⍋⊃¨⊂

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





3

Ruby , 57 byte

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

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

Khá đơn giản, giả sử tôi đã không bỏ lỡ một cú đánh golf. Lấy một danh sách các ký tự và sắp xếp theo chỉ mục của chúng trong một chuỗi bao gồm tất cả các ký tự uniq trong mã theo thứ tự xuất hiện của chúng. Thường thì sự xuất hiện đầu tiên của họ là trong chuỗi đó, nhưng điều đó không thay đổi thứ tự.


3

05AB1E , 24 22 21 byte

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

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

Giải trình:

Σ                    }               # 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

Lần đầu tiên thử công cụ trong 05AB1E, vì vậy có lẽ rất nhiều thứ sẽ được lưu


Bạn có chắc chắn điều này là chính xác? Chuỗi bây giờ sắp xếp là }krR«'«. LƯU Ý: 'là một ký tự đơn, vì vậy chỉ cần '"là đủ (không giống như C # khi nó cần thêm một dấu '). Hiện tại mã của bạn trước tiên đẩy chuỗi Σ, sau đó là chuỗi ", sau đó là chuỗi «, sau đó là chuỗi '«Rrk}, sau đó nó thực hiện nối thêm, đảo ngược, đảo ngược ngăn xếp, chỉ mục. Mặc dù vậy, việc sử dụng thông minh đảo ngược của chuỗi và ở cuối! Tôi sẽ xem liệu tôi có thể tìm ra cách khắc phục cho câu trả lời của bạn không và sẽ xóa lỗi của tôi sau đó.
Kevin Cruijssen

@kevincruijssen Vì vậy, tôi không thể thoát khỏi lần thứ hai '
Dữ liệu hết hạn

1
Vâng, bạn thực sự có thể. :) Sau đó, nó sắp xếp chính xác }krR«'"Σ. PS: =Đôi khi tôi có xu hướng sử dụng (in mà không xuất hiện) cho mục đích gỡ lỗi. Bạn cũng có thể thêm --debug-stacklàm đối số, nhưng hơi lạ trong phiên bản 05AB1E mới imho.
Kevin Cruijssen

3

Jelly , 16 14 byte (trang Jelly Code), 25 byte (UTF8)

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

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

Một chương trình đầy đủ có một đối số duy nhất, chuỗi được sắp xếp.

Cảm ơn @Jonathan ALLan đã chỉ ra một lỗi!

Theo @EriktheOutgolfer, mặc dù mã có thể được nhập bằng trang mã Jelly, các ký tự được sắp xếp là các UTF-8 tương đương thay vì byte của nguồn. Như vậy, tôi cũng đã bao gồm số điểm tính theo byte UTF-8. Lưu ý tương tự có thể áp dụng cho tất cả các ngôn ngữ với các trang mã tùy chỉnh.

Giải trình

“Ṿ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

Chuỗi trên đánh giá là:

Ṿ          | 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` là không có hiệu quả ở đây, nhưng tồn tại để đảm bảo tất cả các nhân vật được đại diện.


Vì vậy, ... tôi đã đăng câu trả lời Jelly của mình, và sau đó nó đã nhấp vào tôi: trình thông dịch chuyển đổi mã byte thành UTF-8 trước khi thực hiện nó , do đó, nên tăng thêm mã byte hoặc mã được thay đổi để phù hợp với bảng mã.
Erik the Outgolfer

@EriktheOutgolfer Tôi không hiểu bạn đang làm gì ở đây. Làm thế nào điều này khác với bất kỳ thách thức codegolf khác về vấn đề này?
Nick Kennedy

Khía cạnh tự tham chiếu là khác nhau, vì vậy, trên thực tế, mã sắp xếp các ký tự UTF-8 chứ không phải các byte mà nó được cho là.
Erik the Outgolfer

3

Thạch , 14 byte

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

Một chương trình đầy đủ chấp nhận một chuỗi (định dạng Python) (của các ký tự trang mã Jelly ) in ra đầu ra.
(như một liên kết đơn âm, nó mang lại một danh sách các danh sách các ký tự)

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

Làm sao?

“;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

Vì vậy, ... tôi đã đăng câu trả lời Jelly của mình, và sau đó nó đã nhấp vào tôi: trình thông dịch chuyển đổi mã byte thành UTF-8 trước khi thực hiện nó , do đó, nên tăng thêm mã byte hoặc mã được thay đổi để phù hợp với bảng mã.
Erik the Outgolfer

@EriktheOutgolfer Tôi nghĩ rằng phương pháp này an toàn ở khía cạnh đó vì phương pháp này không sử dụng bất kỳ sự sắp xếp nào và đáp ứng I / O trong cùng tiêu chí mã hóa (trang mã của Jelly).
Jonathan Allan

Ơ ... tôi nghĩ flàm việc với các ký tự Unicode, bởi vì đó là loại ký tự mà chuỗi thực sự có bên trong. Ví dụ ”ĿOtrả về 319nếu được kiểm tra mã hóa cục bộ trong JELLY, vì vậy nó nhìn thấy Ŀvà không phải C7.
Erik the Outgolfer

Tôi cũng nghĩ flàm việc với Unicode, nhưng đó có phải là vấn đề ở đây không? Tôi chuyển vào tập hợp các ký tự Unicode bị hạn chế xuất hiện trên trang mã của Jelly (nghĩa là các byte được mã hóa bằng mã hóa đó, đáp ứng "Đầu vào nằm trong cùng mã hóa với mã"); lọc chúng một cách chính xác (vì các byte được nhập vào này được mã hóa dưới dạng Unicode), và sau đó xuất chúng chính xác. Những gì tôi sau đó đếm là các byte của mã (hoàn thành "Đầu vào được sắp xếp theo các ký tự, không phải theo byte" và "câu trả lời ngắn nhất tính theo byte cho mỗi ngôn ngữ sẽ thắng").
Jonathan Allan

1
@Jonathan ALLan Tôi cảm thấy như "đã được mã hóa cho một số nhân vật bằng cách sử dụng trang mã của Jelly" là những gì tôi đang đề cập đến trong bình luận trước đây của mình. Do mã hóa của mã bao gồm các byte đơn từ 0x00 đến 0xFF, nên đó cũng là mã hóa của đối số, nên thay vào đó, đối số được truyền sau khi được ánh xạ từ JELLY sang UTF-8, do đó, mỗi ký tự của nó không nhất thiết phải là một byte nữa. Về cơ bản, mã nằm trong JELLY trong khi đối số là UTF-8, mặc dù nó đã được ánh xạ tới mã đó từ JELLY. Mặc dù đầu ra UTF-8 chính xác được trả về, nhưng nó phải là JELLY.
Erik the Outgolfer

2

Than , 37 byte

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

Hãy thử trực tuyến! Giải trình:

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

Có hai cách trích dẫn các ký tự trong Than; ´trích dẫn bất kỳ ký tự đơn nào trong khi ”y... trích dẫn bất kỳ ký tự nào ngoại trừ và cũng được tính là một chuỗi riêng biệt. Nó chỉ ra rằng chi phí phải giải quyết đồng nghĩa với việc nó không kết thúc bất kỳ tay golf nào.

FηΦθ⁼ικ

Lặp lại lần lượt các ký tự, xuất ra bất kỳ ký tự trùng khớp nào từ đầu vào. Điều này sắp xếp đầu vào.

Φθ¬№ηι

Xuất ra bất kỳ ký tự chưa từng có trong đầu vào.


2

J , 14 byte

Chức năng tiền tố ẩn danh.

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

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

] tranh luận

Giáo dụci:  xuất hiện cuối cùng (không phải là thành viên có được chỉ số vượt quá kết thúc của chuỗi tra cứu) của mỗi nhân vật trong:

']/:''i' các nhân vật ]/:'i

Sọ /: sử dụng để sắp xếp:

] tranh luận


Là bốn không gian hàng đầu là kết quả của tiếng vang hoặc mã?
tjjfvi

1
@tjjfvi Đó là cách TIO được cấu hình. Đã sửa bây giờ.
Adám

2

Java 10, 129 100 byte

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

-29 byte bằng cách chuyển câu trả lời từ câu trả lời C #+c của @EmbodimentOfIgnorance .

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

Giải trình:

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

LƯU Ý: Thông thường sẽ rẻ hơn khi sử dụng s.sort((a,b)->Long.compare(a,b))thay vì s.sort(java.util.Comparator.comparing(c->c), nhưng trong trường hợp này, nó sẽ dài hơn 11 byte:

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

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


2

05AB1E , 31 26 19 byte

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

-7 byte bằng cách lấy cảm hứng từ cách tiếp cận của @ EmbodimentOfIgnorance trong câu trả lời C # của mình về việc nối thêm ký tự hiện tại trước khi lập chỉ mục.

Hãy thử trực tuyến hoặc thử với dòng gỡ lỗi bổ sung để xem các chuỗi được lập chỉ mục .

Giải trình:

Σ                 # 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)

Dường như có một lỗi đánh máy trong lời giải thích ("y" thay vì "s")
ArBo

@ArBo Đã sửa, cảm ơn
Kevin Cruijssen

1
Nói đúng ra, tôi đã có cảm hứng đó hơn 12 giờ trước khi tôi đánh gôn 11 byte câu trả lời của @ MilkyWay90 ...
Neil

Điều này là tốt! Tôi đã thấy điều đó nhưng không thể thấy cách biến tôi thành cái này trong khi lưu byte
Dữ liệu hết hạn

2

PowerShell , 68 byte

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

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


2
1) sortthay vì sort-objectlàm việc quá. 2) biến $bđược xác định ngoài phạm vi mã của bạn. các Standard loopholesđòi hỏi một câu trả lời hoàn chỉnh . Đối với Powershell, điều đó có nghĩa là: bất kỳ ai cũng có thể sử dụng mã cho một tệp dưới dạng tập lệnh powershell và chạy nó trong một thiết bị đầu cuối. Mã của bạn không hoạt động từ tập tin kịch bản. Lấy làm tiếc.
mê mẩn

1
@mazzy, cảm ơn bạn rất nhiều. 1) sortbí danh không hoạt động trong pwsh trên Ubuntu 18.04 2) vâng, đây là lỗi của tôi, nhưng tôi đã tự sửa, và kết quả là, mã trở nên dài hơn, dĩ nhiên :)
Andrei Odegov

(oO)! Tôi đã tạo bí danh sắp xếp cho Powershell . code became longer- đây là thử thách :)
mazzy

1
Yes, you are right. Each individual character of $p is append to the end of the string with the source code and gets an index equal to $src.Length, but since “their order does not matter and should not be consistent,” it is not matter. In this answer, the entire input string is appended to the end of the string with the source code.
Andrei Odegov

1
@dfeuer, I don't understand your question. Sorry.
mazzy


2

Japt, 18 bytes

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

Try it

ñÈ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

Jelly, 26 bytes (UTF-8*)

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

Try it online!

Takes input as a Python-formatted string in the 1st command-line argument.

Unique characters:

“®³nÞṾ©V”

*Note: I discovered that this doesn't work when encoded in JELLY, since it sorts the UTF-8 characters instead of its own bytes.

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.