Semacam-macam

30

Diberikan string x, output karakter dalam xdiurutkan sesuai dengan urutan penampilan dalam kode sumber Anda.

Contohnya

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:

Aturan

  • Berlaku celah standar & aturan i / o
  • Input & output dapat berupa string, daftar karakter, atau daftar byte.
  • Jika karakter digunakan beberapa kali dalam sumber, gunakan kejadian pertama.
  • Jika satu atau lebih karakter tidak muncul di sumber, mereka harus di akhir; pesanan mereka tidak penting, juga tidak harus konsisten.
  • Sumber harus tidak kosong
  • Baris baru diperlakukan sama dengan karakter lain.
  • Urutan di mana kode dieksekusi tidak masalah; hanya benang mentah.
  • Input dalam pengkodean yang sama dengan kode.
  • Input diurutkan berdasarkan karakter, bukan oleh byte.
  • Penyortiran peka huruf besar-kecil
  • Ini adalah , jadi jawaban terpendek dalam byte untuk setiap bahasa menang!

tjjfvi
sumber
2
@negativeseven Setiap karakter dari pengkodean kode sumber harus diperhitungkan, termasuk spasi.
tjjfvi
2
terkait
Rod
3
Anda mungkin harus menyebutkan secara eksplisit dalam spesifikasi bahwa pencocokan sensitif huruf.
Shaggy
1
Bisakah kita xdikodekan dalam UTF-8 atau UTF-16 jika solusi kita tidak dikodekan dalam Unicode sama sekali, dan karakter Unicode xmewakili karakter dalam halaman kode solusi? Misalnya, beberapa bahasa golf menggunakan halaman kode khusus untuk mengurangi jumlah byte mereka tetapi masih dapat dibaca dengan mata telanjang.
Erik the Outgolfer
1
@ tjjfvi Saya tidak berbicara tentang no-ops di sini (yang tentunya tidak valid); setidaknya beberapa jawaban di bawah ini, alih-alih mengambil input dalam byte polos (0x00-0xFF), gunakan input sebagai string UTF-8 yang akan diwakili oleh urutan byte (misalnya ketika kami memposting jawaban, kami biasanya memposting UTF -8 versi kode kami, bukan hexdump), dan kemudian gunakan representasi UTF-8 dari kode sumber untuk mengurutkan input. Apakah ini diizinkan? Saya merasa seperti itu harus menjadi pilihan juga (di samping aliran byte polos), karena jika tidak solusi dalam bahasa golf dengan codepages kustom akan sangat terhalang.
Erik the Outgolfer

Jawaban:

13

Python 3.8 (pra-rilis) , 102 100 96 85 79 76 68 61 59 60 byte

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

Cobalah online!

-2 byte dengan menggunakan ini

-4 byte dengan menyadari bahwa <0== ==-1dan menghapus yang tidak perlu+1

-11 byte terima kasih kepada Neil

-6 byte berkat dzaima

-3 byte berkat batang

-8 byte berkat negatif tujuh yang menunjukkan bahwa program dapat menampilkan daftar karakter

-7 byte karena Perwujudan Ketidaktahuan beralih kembali ke Python 3.8 dan menggunakan :=

-2 byte karena Jo King mengganti nama variabel s untuk c, jadi kita bisa mengabaikan ;c

+1 byte karena negatif tujuh menunjukkan bahwa itu tidak disaring ;dengan benar

MilkyWay90
sumber
('s=%r;exec(s)'%s+x).find(x)?
Neil
@ Neil Apakah solusi saat ini tidak valid, dan mengganti ('s=%r;exec(s)'%s).find(x)dengan kode Anda akan membuatnya valid?
MilkyWay90
@Neil Oh, tunggu, saya melihat golf Anda
MilkyWay90
Anda dapat beralih ke input()dan menyimpan 4 byte
Rod
4
;tidak diurutkan dengan benar dalam versi saat ini
negatif tujuh
7

APL (Dyalog Unicode) , 14 byte SBCS

Fungsi awalan diam-diam anonim.

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

 sertakan argumen (untuk bertindak secara keseluruhan)

... ⊃¨ dari itu, pilih satu karakter untuk masing-masing indeks berikut:

∘⍋ indeks yang akan mengurutkan argumen dalam urutan yang diberikan oleh string berikut (semua non-anggota mengikuti urutan penampilan di akhir):

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

Cobalah online!

Adm
sumber
5

JavaScript (Node.js) , 60 58 56 byte

-2 byte dari Jo King

f=_=>_.sort((a,b)=>(p=g=>`f=${f+g}`.indexOf(g))(a)-p(b))

Cobalah online!

Luis felipe De jesus Munoz
sumber
Kode Anda sepertinya hanya berfungsi ketika sumbernya f=.... Jika demikian, harap sertakan dalam kiriman & jumlah byte Anda.
tjjfvi
3

Ruby , 57 byte

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

Cobalah online!

Cukup mudah, dengan asumsi saya tidak melewatkan trik golf. Ambil daftar karakter dan urutkan berdasarkan indeks mereka dalam string yang terdiri dari semua karakter unik dalam kode sesuai dengan penampilan mereka. Seringkali penampilan pertama mereka berada di string itu, tetapi itu tidak mengubah urutannya.

histokrat
sumber
3

05AB1E , 24 22 21 byte

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

Cobalah online!

Penjelasan:

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

Pertama kali mencoba barang di 05AB1E jadi mungkin banyak yang bisa diselamatkan

Data Kedaluwarsa
sumber
Apakah Anda yakin ini benar? String yang sekarang diurutkan adalah }krR«'«. CATATAN: 'adalah karakter tunggal, jadi '"sudah cukup (tidak seperti C # di mana ia membutuhkan trailing tambahan '). Saat ini kode Anda pertama-tama mendorong string Σ, lalu string ", lalu string «, lalu string '«Rrk}, dan kemudian menambahkan, membalikkan, membalikkan tumpukan, indeks. Penggunaan cerdas dari kebalikan dari string dan pada akhirnya! Saya akan melihat apakah saya dapat menemukan jawaban untuk jawaban Anda, dan akan menghapus jawaban saya setelahnya.
Kevin Cruijssen
@kevincruijssen Jadi tidak bisakah saya singkirkan yang kedua '
Data Kedaluwarsa
1
Ya, Anda memang bisa. :) Kemudian dengan benar mengatasinya }krR«'"Σ. PS: Saya cenderung menggunakan =(mencetak tanpa muncul) untuk tujuan debug kadang-kadang. Anda juga dapat menambahkan --debug-stacksebagai argumen, tapi agak aneh di versi 05AB1E imho baru.
Kevin Cruijssen
3

Jelly , 16 14 byte (halaman Kode Jelly), 25 byte (UTF8)

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

Cobalah online!

Program lengkap yang membutuhkan argumen tunggal, string yang akan diurutkan.

Terima kasih kepada @JonathanAllan karena telah menunjukkan bug!

Sesuai @EriktheOutgolfer, meskipun kode dapat dimasukkan menggunakan halaman kode Jelly, karakter yang diurutkan adalah yang setara dengan UTF-8 dan bukan byte dari sumber. Karena itu, saya juga memasukkan skor dalam byte UTF-8. Perhatikan hal yang sama mungkin berlaku untuk semua bahasa dengan halaman kode khusus.

Penjelasan

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

String di atas mengevaluasi sebagai:

Ṿ          | 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` adalah no-op yang efektif di sini, tetapi ada untuk memastikan semua karakter terwakili.

Nick Kennedy
sumber
Jadi ... Saya mengirim jawaban Jelly saya, dan kemudian mengklik saya: penerjemah mengkonversi bytecode ke UTF-8 sebelum mengeksekusinya , maka bytecount harus ditingkatkan, atau kode diubah agar sesuai dengan codepage.
Erik the Outgolfer
@EriktheOutgolfer Saya tidak mengerti apa yang Anda dapatkan di sini. Bagaimana hal ini berbeda dengan tantangan codegolf lain dalam hal ini?
Nick Kennedy
Aspek referensial diri berbeda, jadi, pada kenyataannya, kode tersebut mengurutkan karakter UTF-8 dan bukan byte yang seharusnya.
Erik the Outgolfer
3

Jelly , 14 byte

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

Program lengkap yang menerima string (Python diformat) ( karakter halaman kode Jelly ) yang mencetak output.
(sebagai tautan monadik ia menghasilkan daftar daftar karakter)

Cobalah online!

Bagaimana?

“;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
Jonathan Allan
sumber
Jadi ... Saya mengirim jawaban Jelly saya, dan kemudian mengklik saya: penerjemah mengkonversi bytecode ke UTF-8 sebelum mengeksekusinya , maka bytecount harus ditingkatkan, atau kode diubah agar sesuai dengan codepage.
Erik the Outgolfer
@EriktheOutgolfer Saya pikir ini aman dalam hal itu karena metode ini tidak menggunakan penyortiran apa pun dan memenuhi I / O berada dalam kriteria pengkodean yang sama (halaman kode Jelly).
Jonathan Allan
Eh ... Saya pikir fdan bekerja pada karakter Unicode, karena itulah karakter yang sebenarnya dimiliki string. Misalnya ”ĿOmengembalikan 319jika diuji secara lokal disandikan dalam JELLY, sehingga ia melihat Ŀdan bukan C7.
Erik the Outgolfer
Saya berpikir fdan bekerja pada Unicode juga, tetapi apakah itu masalah di sini? Saya melewati rangkaian terbatas karakter Unicode yang muncul pada halaman kode Jelly (yaitu, byte yang dikodekan menggunakan pengkodean itu, memenuhi "Input dalam pengkodean yang sama dengan kode"); memfilternya dengan benar (karena byte yang dimasukkan ini disandikan sebagai Unicode), dan kemudian mengeluarkannya dengan benar. Yang kemudian saya hitung adalah byte kode (memenuhi "Input diurutkan berdasarkan karakter, bukan oleh byte" dan "jawaban terpendek dalam byte untuk setiap bahasa yang dimenangkan").
Jonathan Allan
1
@ Jonathan Allan Saya merasa seperti "telah dikodekan ke beberapa karakter menggunakan halaman kode Jelly" adalah apa yang saya maksudkan dalam komentar saya sebelumnya. Karena pengkodean kode terdiri dari byte tunggal dari 0x00 ke 0xFF, itu juga yang harus terdiri dari pengkodean argumen, Sebaliknya, argumen dilewatkan setelah dipetakan dari JELLY ke UTF-8, sehingga masing-masing karakternya belum tentu tunggal. byte lagi. Pada dasarnya, kode ini berada di JELLY sementara argumennya adalah di UTF-8, meskipun sudah dipetakan dari JELLY. Meskipun output UTF-8 yang benar dikembalikan, seharusnya JELLY selama ini.
Erik the Outgolfer
2

Arang , 37 byte

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

Cobalah online! Penjelasan:

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

Ada dua cara mengutip karakter di Charcoal; ´mengutip sembarang karakter tunggal saat ”y... mengutip sembarang karakter kecuali dan juga dihitung sebagai string terpisah. Ternyata overhead karena harus berurusan dengan itu berarti tidak berakhir pegolf.

FηΦθ⁼ικ

Ulangi karakter-karakter tersebut secara bergantian, menghasilkan karakter apa saja yang cocok dari input. Ini semacam input.

Φθ¬№ηι

Keluarkan karakter yang tidak cocok dalam input.

Neil
sumber
2

J , 14 byte

Fungsi awalan diam-diam anonim.

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

Cobalah online!

] argumen

... i: kejadian terakhir (bukan anggota mendapatkan indeks di luar akhir string pencarian) dari setiap karakter di:

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

... /: gunakan itu untuk mengurutkan:

] argumen

Adm
sumber
Apakah empat spasi utama merupakan hasil dari gema atau kode?
tjjfvi
1
@tjjfvi Begitulah cara TIO dikonfigurasi. Diperbaiki sekarang
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 dengan porting +cdari @EmbodimentOfIgnorance C # answer .

Cobalah online.

Penjelasan:

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

CATATAN: Biasanya lebih murah untuk digunakan s.sort((a,b)->Long.compare(a,b))daripada s.sort(java.util.Comparator.comparing(c->c), tetapi dalam kasus ini akan lebih panjang 11 byte:

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

Cobalah online.

Kevin Cruijssen
sumber
2

05AB1E , 31 26 19 byte

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

-7 byte dengan mengambil inspirasi dari pendekatan @ EmbodimentOfIgnorance dalam jawaban C # untuk menambahkan karakter saat ini sebelum pengindeksan.

Cobalah online atau coba dengan menambahkan garis-debug untuk melihat string yang diindeks ke dalam .

Penjelasan:

Σ                 # 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)
Kevin Cruijssen
sumber
Tampaknya ada kesalahan ketik dalam penjelasan ("y" bukannya "s")
ArBo
@Arda Tetap, terima kasih
Kevin Cruijssen
1
Sebenarnya saya punya inspirasi lebih dari 12 jam sebelumnya ketika saya bermain golf 11 byte jawaban @ MilkyWay90 ...
Neil
Ini bagus! Saya melihat itu tetapi tidak bisa melihat cara untuk mengubah tambang menjadi ini sambil menyimpan byte
Data Kedaluwarsa
2

PowerShell , 68 byte

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

Cobalah online!

Andrei Odegov
sumber
2
1) sortalih-alih sort-objectbekerja juga. 2) variabel yang $bdidefinisikan di luar cakupan kode Anda. yang Standard loopholesmembutuhkan jawaban yang lengkap . Untuk Powershell artinya: siapa pun dapat memasukkan kode ke file sebagai skrip PowerShell dan menjalankannya di terminal. Kode Anda tidak berfungsi dari file skrip. Maaf.
mazzy
1
@ Mazzy, terima kasih banyak. 1) sortalias tidak berfungsi di pwsh di Ubuntu 18.04 2) ya, ini salah saya, tapi saya memperbaiki sendiri, dan sebagai hasilnya, kodenya menjadi lebih lama, tentu saja :)
Andrei Odegov
(oO)! Saya telah membuat semacam alias untuk Powershell . code became longer- ini tantangannya :)
mazzy
1
Ya kamu benar. Setiap karakter individu $pditambahkan ke akhir string dengan kode sumber dan mendapatkan indeks yang sama dengan $src.Length, tetapi karena "urutannya tidak masalah dan tidak boleh konsisten," itu tidak masalah. Dalam jawaban ini , seluruh string input ditambahkan ke akhir string dengan kode sumber.
Andrei Odegov
1
@ PDFeuer, saya tidak mengerti pertanyaan Anda. Maaf.
mazzy
2

Python 2 , 62 byte

lambda a:sorted(a,key=('lambd :sorted(,ky=\'\\+).fin'+a).find)

Konsep yang sama dengan jawaban C # saya.

Cobalah online!

Perwujudan Ketidaktahuan
sumber
\\\'seharusnya \'\\. Pendekatan yang bagus! Disimpan 23 byte dalam jawaban Java saya.
Kevin Cruijssen
1
@KevinCruijssen Tetap
Perwujudan Ketidaktahuan
2

Japt , 18 byte

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

Cobalah

ñÈ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
Shaggy
sumber
1

Jelly , 26 byte (UTF-8 *)

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

Cobalah online!

Mengambil input sebagai string berformat Python dalam argumen baris perintah 1.

Karakter unik :

“®³nÞṾ©V”

* Catatan: Saya menemukan bahwa ini tidak berfungsi ketika dikodekan dalam JELLY, karena ia mengurutkan karakter UTF-8 alih-alih bytenya sendiri.

Erik the Outgolfer
sumber