Definisi
Pangkat kata didefinisikan sebagai posisi kata ketika semua kemungkinan permutasi (atau pengaturan) huruf-hurufnya diatur secara alfabet, seperti dalam kamus, tidak peduli apakah kata-katanya bermakna atau tidak.
Mari kita perhatikan dua kata ini - "biru" dan "terlihat". Untuk memulainya, kami akan menulis semua susunan huruf yang mungkin dari kata-kata ini dalam urutan abjad:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Sekarang mari kita lihat dari kiri dan temukan posisi kata-kata yang kita butuhkan. Kita melihat bahwa kata "biru" berada di posisi ke-4 dan "terlihat" berada di posisi ke-10. Jadi pangkat kata "biru" adalah 4, dan "terlihat" adalah 10. Ini adalah cara umum untuk menghitung pangkat kata. Pastikan Anda mulai menghitung dari 1 saja.
Tugas
Tugas Anda adalah menulis kode untuk mengambil kata apa pun sebagai input dan menampilkan peringkatnya. Pangkat harus menjadi output. Hati-hati dengan kata-kata yang mengandung huruf berulang.
Contohnya
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Anda dapat menganggap input sepenuhnya dalam huruf kecil dan input hanya akan berisi karakter alfabet . Juga jika ruang kosong atau string tidak valid dimasukkan, Anda dapat mengembalikan apa pun.
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek menang!
sumber
O(n log n)
atau kurang. (maaf, tidak ada Python) Kiriman saya (C ++) membutuhkan 2,53 untuk menyelesaikan tes 14.['h', 'e', 'l', 'l', 'o']
sebagai lawan'hello'
?Jawaban:
Gaia , 4 byte
Cobalah online!
sumber
Python 3 , 71 byte
Cobalah online!
sumber
05AB1E , 5 byte
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
Pyth , 6 byte
Suite uji.
Penjelasan
sumber
Jelly , 5 byte
Cobalah online! atau lihat test suite
Bagaimana itu bekerja
sumber
Œ¿
tidak berhasil.ṢŒ¿
bekerja?1
Python 2 , 78 byte
Cobalah online!
Python 3 , 73 byte
Cobalah online!
sumber
CJam , 8 byte
Cobalah online!
+1 byte karena persyaratan 1-diindeks.
sumber
Haskell , 56 byte
Cobalah online!
+6 byte karena persyaratan pengindeksan 1. :(
sumber
Japt ,
810 byteDiindeks 0.Poxy, pengindeksan 1 yang tidak perlu, meningkatkan jumlah byte saya sebesar 25%!Menguji
Penjelasan
á
mendapatkan semua permutasi input,â
menghapus duplikat,n
mengurutkannya danb
mendapatkan indeks kemunculan input pertamaU
,.sumber
J ,
2823 byte-5 byte berkat FrownyFrog
Bagaimana itu bekerja?
Cobalah online!
sumber
1+/:~@~.@(A.~i.@!@#)i.]
Tcl, 196 byte
Tcl tidak memiliki metode bawaan untuk menghitung permutasi leksikografis berikutnya, jadi kita harus melakukannya sendiri. Tapi tunggu ... lebih pendek melakukannya dengan fungsi rekursif sederhana yang menghitung semua permutasi yang memungkinkan dalam urutan apa pun.
Tidak Disatukan:
sumber
K (oK) ,
2318 byteLarutan:
Cobalah online!
Contoh:
Penjelasan:
Hasilkan permutasi dari indeks string input yang diurutkan, gunakan mereka untuk mengindeks kembali ke string input, ambil perbedaan, lihat di mana string asli cocok, dan tambahkan satu.
sumber
Java 8, 211 byte
Penjelasan:
Cobalah online.
sumber
Python 3 ,
183182 byteJawaban pertama yang dijalankan dalam waktu polinomial!
Cobalah online!
Membutuhkan input untuk semua huruf besar, karena ... menghemat satu byte.
Program lengkap, mengambil input dari
stdin
dan output kestdout
.Nama-nama variabel: (semacam kode yang tidak dipisahkan)
Sayangnya,
from math import factorial as f
dibutuhkan tepat 1 byte lagi.(Catatan yang tidak terkait: Saya memeriksa
Combinatorica`
paket Mathematica, tidak ada yang berguna, termasukRankPermutation
)sumber
Sekam , 6 byte
Cobalah online! Saya merasa harus ada cara untuk menjatuhkan
(
.Penjelasan:
sumber
Bersih ,
113111 byteCobalah online!
+3 byte untuk menangani pengindeksan 1: /
sumber
APL (Dyalog Unicode) , 33 byte (SBCS)
Cobalah online!
sumber
Python 3 ,
105104103 byteCobalah online!
sumber
Ruby , 49 byte
Cobalah online!
sumber
JavaScript (ES6),
106100 byteUji kasus
Tampilkan cuplikan kode
Bagaimana?
P () adalah fungsi permutasi rekursif kami. Tetapi objek P yang melingkupi juga digunakan untuk menyimpan peringkat permutasi.
Kode pembungkus sekarang terbaca sebagai:
sumber
C ++, 230 byte
Sesuai permintaan saya, kode pasti harus dapat dieksekusi apa adanya. Klausa fungsi-satunya pada dasarnya adalah sampah. : - @
Terima kasih kepada mereka yang dengan ramah menjawab pertanyaan tentang apa yang bisa cocok untuk saya. Untuk kepentingan kode yang valid , saya telah menghindari GCC-isme yang populer termasuk <bits / stdc ++. H>, yang saya selalu anggap sebagai cheat loophole yang buruk.
Berikut ini apa yang tersisa dari postingan asli saya:
Saya selalu tidak yakin ketika menggunakan C dan C ++ apa yang diperhitungkan terhadap total byte. Menurut Program, Fungsi, atau Cuplikan? jawabannya masih kabur (asalkan bukan potongan, saya kira). Jadi saya pergi dengan dua kemungkinan terpendek.
Ini dia ungolfed dengan header yang diperlukan, dll:
Itu golf turun ke 230 byte, sepertiga dari pelat standar yang dibutuhkan oleh setiap program C ++. (Jadi, saya merasa tidak terlalu buruk untuk tidak menghitungnya, tetapi karena saya belum pernah melihat keluhan yang tegas, OP harus memberi tahu saya mana yang dia inginkan untuk memuaskan “tulis kode untuk menerima kata sebagai masukan dan tampilkan peringkatnya. ")
Saya juga tidak yakin apakah ini memuaskan "peringkat harus menjadi output."
sumber
using namespace std
,#include <algorithm>
tajuk yang digunakan untuk mendefinisikan fungsi dalam byte. Dan ... Tidak,main(){}
adalah program C ++ (g ++) yang valid pada 8 byte.import math
seringkali diperlukan. Biarkan saya menemukan meta yang relevan ...puts
danprintf
). Kode Anda harus dikompilasi dan dijalankan dengan sukses apa adanya agar valid. Lihat: codegolf.meta.stackexchange.com/a/10085/45941main
fungsi tidak dapat dijalankan apa adanya.Perl 5 , 98 + 3 (
-pF
) = 101 byteCobalah online!
sumber
Oktaf , 43 byte
Cobalah online!
sumber
Perl 6 , 53 byte
Cobalah online!
sumber
PowerShell , 275 byte
Cobalah online!
Jadi, ini berantakan sekali.
PowerShell tidak memiliki permutasi bawaan, jadi kode ini menggunakan algoritme dari sini (golf sangat), yang tersedia di bawah Lisensi Publik Terbatas Microsoft ( Bukti B pada halaman lisensi ini).
Program mengambil input
$s
sebagai string, lalu program yang sebenarnya dimulai dengan$b=New-Object ...
. Kami sedang membangun objek StringBuilder baru , yang (pada dasarnya) adalah string karakter yang bisa berubah. Ini akan memungkinkan kita untuk menangani permutasi dengan lebih mudah. Kami kemudian memanggil fungsin
(pengaturan$j
sepanjang panjang string input),sort
dengan-u
flag nique output, ambil.indexOf()
untuk menemukan string input, dan tambahkan1
karena PowerShell diindeks nol.Fungsi adalah bagian utama dari program. Dibutuhkan sebagai input nomor, dan masing-masing iterasi akan dihitung mundur sampai kita mencapai
1
(yaitu, satu huruf). Sisa dari fungsi tersebut pada dasarnya memanggil fungsi secara berulang serta mengambil huruf saat ini dan beralih ke setiap posisi.Ada sedikit logika tambahan
if($s.length-eq1){1;exit}
untuk menjelaskan panjang input string1
karena cara fungsi permutasi bekerja.sumber
Pyt , 5 byte
Penjelasan:
Cobalah online!sumber