Tanda tangani kata 2!
Belum lama ini, saya memposting sebuah tantangan yang disebut Tanda kata itu! . Dalam tantangan, Anda harus menemukan tanda tangan dari kata, yang merupakan huruf dimasukkan ke dalam rangka (misalnya tanda tangan dari this
adalah hist
). Nah, tantangan itu cukup baik, tetapi ada satu masalah utama: itu WAY terlalu mudah (lihat jawaban GolfScript ). Jadi, saya telah memposting tantangan serupa, tetapi dengan lebih banyak aturan, yang sebagian besar telah disarankan oleh pengguna PPCG di komentar pada teka-teki sebelumnya. Jadi, ini dia!
Aturan
- Program Anda harus mengambil input, lalu mengeluarkan tanda tangan ke STDOUT atau setara dalam bahasa apa pun yang Anda gunakan.
- Anda tidak diperbolehkan menggunakan fungsi penyortiran
$
bawaan , jadi hal-hal seperti di GolfScript tidak diperbolehkan. - Multicase harus didukung - program Anda harus mengelompokkan huruf besar dan kecil sekaligus. Jadi tanda tangannya
Hello
adalaheHllo
, tidakHello
seperti yang diberikan oleh jawaban GolfScript pada versi pertama. - Harus ada juru bahasa / kompiler gratis untuk program Anda, yang harus Anda tautkan.
Mencetak gol
Skor Anda adalah jumlah byte Anda. Hitungan byte terendah menang.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ThHihs
, dapat kami outputhHhist
atau kita harus outputhhHist
atauHhhist
?Jawaban:
Pyth, 10 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
Haskell, 51
The
zip
menciptakan daftar pasangan karakter[('a','A'), ...('z','Z')]
. Karena pemotongan, titik akhir kedua tidak perlu ditentukan. Untuk setiap pasangan dalam daftar, kami mengambil huruf dalam string inputs
yang merupakan salah satu dari dua karakter dalam pasangan.sumber
Python 3,
7270 byteAsumsikan input hanya terdiri dari
[a-zA-Z]
.(-2 byte terima kasih kepada @xnor)
sumber
"".join(c*b ...)
untuk"".join(c ... if b)
dengan cara yang samasum(n ... if b)
bisasum(n*b ...)
.c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
(67)GOTO ++, 531 byte
Halaman Proyek GOTO ++
Berikut ini adalah versi kode slighlty yang lebih mudah dibaca dan dikomentari (Catatan yang
GOTO
memulai komentar di GOTO ++):sumber
function(arg)
danfunction() arg
keduanya valid. Juga, tanda kurung prioritas} {
dan tidak membosankan( )
Pyth,
1514 byteTerima kasih atas isaacg untuk menghapus 1 byte.
Saya belum tahu banyak tentang Pyth, jadi ini mungkin tidak golf dengan baik.
Coba di sini.
sumber
s
sama denganjk
daftar string.JavaScript (ES6), 71
74Terbatas untuk A-Za-z (lihat komentar oleh @Matthieu M)
Sunting Terlalu digunakan untuk menulis satu ekspresi dengan koma, untuk menghindari 'kembali'. Di sini output diperlukan, jadi saya bisa menggunakan yang sederhana
for
dan melupakan koma.Menggunakan pemahaman array, jumlah byte adalah 73, tetapi itu tidak valid EcmaScript 6 lagiCatatan biasa: tes menjalankan snippet pada browser apa pun yang mendukung EcmaScript 6 (terutama bukan Chrome bukan MSIE. Saya menguji pada Firefox, Safari 9 bisa pergi)
sumber
Javascript,
112194 byteIni jauh dari "golf" tetapi saya agak sibuk sekarang, hanya diedit untuk menghapus semacam.
sumber
console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
Python 3, 64
Peningkatan kecil pada jawaban Sp3000 , yang menggunakan ide iterasi iterasi indeks karakter, dan untuk masing-masing, iterasi melalui input untuk mengambil karakter yang cocok dengan huruf besar-kecil.
Ini menggunakan satu loop, perulangan melalui input 26 kali. Pemisah
~
digunakan untuk mengetahui kapan harus pergi ke indeks karakter berikutnyac
. Untuk apakah karakterd
cocok dengan nilaic
hingga kasus, lima bit terakhir dari nilai bitd
adalah xor-ed denganc
, dengan 0 menunjukkan kecocokan.Lalu, karakternya
d
dicetak tepat saat hasilnya0
, dengan string kosong sebaliknya.sumber
Python 2.7,
114106 byteLog kehadiran char dalam array 123 panjang (untuk memasukkan rentang AZ dan az) dan kemudian beralih melalui itu untuk mendapatkan entri non-nol.
Tidak efisien, tetapi lebih efisien daripada memaksa kasar (tapi lebih lama :().
Menguji itu-
sumber
HelloWorldhi
, saya mendapatkan['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
if l[j]
keduanya.join
diedit). -8 byte. Terima kasih :)PHP,
275270 bytePenjelasan:
Kode menghasilkan sebuah array dengan setiap huruf dalam alfabet, yang memiliki Nilai ASCII sebagai Kunci Array. Setelah itu kode menghasilkan array baru yang berisi Nilai ASCII dari Input. Kemudian Nilai terendah akan dicetak dan dihapus.
Penggunaan:
Panggil skrip dengan argumen:
php -d error_reporting=0 script.php Hello
Versi Tidak Digubah:
Setiap saran sangat dihargai.
sumber
Haskell,
8353 bytePenggunaan:
f "HelloWorldhi"
->"deHhillloorW"
.Cara kerjanya: biarkan
y
menjadi string inputSunting: 30 byte disimpan, bayangkan itu! Terima kasih @Mauris.
sumber
import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x]
(53 byte)? (Ini akan membutuhkan waktu untuk diakhiri, karenalength [' '..] == 1114080
- tapi itu terbatas.)Python 3, 61 byte
Jawaban baru untuk teknik yang berbeda!
Memperhatikan itu
ord('a')&31==ord('A')&31
dan ituord('z')&31==ord('Z')&31
, kita cukup membuat array string kosong dan untuk setiap karakter menambahkannya ke indeks array nilai ASCII-nya&31
. Ketika Anda mencetaknya, itu akan diurutkan.Terbatas untuk input
a-zA-Z
.sumber
Python 3,
9792 byteCara terbaik untuk mengurutkan adalah dengan jelas menghasilkan semua permutasi, lalu pilih minimum, yang kebetulan diurutkan :)
Senar diturunkan lebih rendah sebelum dibandingkan untuk mematuhi aturan 'sadar kasus'.
Peringatan: mungkin sangat lambat dengan string besar.
Seorang juru bahasa terletak di sini .
sumber
Python 3, 118 byte
Bisa bermain golf lebih pendek, saya tahu
sumber
if q not in i:
denganif~-(q in i):
..remove()
fungsi di atasnya.Powershell, 164 Bytes
Saya yakin ada cara yang lebih bersih untuk melakukan ini, tetapi saya tidak bisa menemukan yang lain. Hanya mengambil input sebagai array karakter, melakukan penyisipan, dan memuntahkan output. Kehilangan mengerikan, bahkan untuk bahasa non-golf lainnya.
Kode:
Pemakaian:
Diperluas & Dijelaskan:
sumber
Julia, 61 byte
Julia akan menampilkannya sebagai output string jika Anda menyebutnya di REPL. Jika memiliki untuk mencetak ke stdout, maka perlu 78 bytes:
Seorang juru bahasa untuk Julia dapat ditemukan di sini . Satu lagi, yang sudah saya masukkan beberapa kode, ada di sini . Perhatikan bahwa, dengan yang kedua, Anda harus membuat terminal (di bagian bawah) terlihat dengan menyeret batas ke atas. Mengklik "eksekusi" akan membuatnya berjalan di terminal pada baris perintah normal (dan dengan demikian tidak akan menampilkan output jika dipanggil tanpa println). Atau, Anda cukup mengetik
julia
ke terminal itu sendiri, lalu menangani semua yang ada di dalam REPL yang akan muncul.Dan untuk sedikit kesenangan ekstra, berikut adalah beberapa implementasi lainnya
Sort Gnome (83 bytes):
Algoritma pengurutan saya sendiri (84 byte):
sumber
Scala, 82 byte
dari baris perintah:
mungkin bisa bermain golf sedikit lebih jauh ... hanya menerapkan penyisipan menggunakan lipatan.
sumber
kode mesin x86,
5142 byteBubble sort, dengan beberapa trik reuse register untuk mencukur byte di sana-sini; yang berkas COM berjalan di DosBox, menerima masukan dari baris perintah dan mencetak output ke output standar.
Majelis yang dikomentari:
sumber
Java (JDK 10) , 125 byte
Cobalah online!
Menggunakan semacam naif.
sumber
Perl, 88 byte
Hanya Sort Bubble sederhana. Panggil dengan opsi -n untuk mengirim teks.
misalnya:
Keluaran:
sumber
PHP, 106 byte
Kode:
Tidak ada yang spesial dalam kode;
count_chars()
menghasilkan array yang diindeks oleh kode ASCII yang berisi jumlah kemunculan untuk setiap karakter ASCII. Sisanya adalah iterasi yang membosankan pada array ini.Contoh eksekusi:
Byte tambahan dapat disimpan menggunakan PHP 7: ganti
$c[$i]
dengan($c=count_chars($argv[1]))[$i]
dan hapus tugas dari$c
awal program.sumber
Haskell, 74 byte
Sangat berbeda dari jawaban saya yang lain . Kali ini adalah jenis Penyisipan sederhana.
sumber
Pip,
1814 byteRepositori GitHub untuk Pip
Sepertinya tidak ada yang bersaing dengan Pyth, tapi ini cukup terhormat.
Hanya berfungsi pada string yang berisi
a-zA-Z
. Untuk setiap huruf alfabet, gunakan operasi filter untuk mengambil huruf dari string input yang sama dengan huruf case-insensitive:Dua catatan:
AZO
akan memindai sebagaiA ZO
gantinyaAZ O
;x
di akhir kode (dengan demikian mencetak string kosong setelah loop selesai).Contoh dijalankan (menggunakan
x
varian):sumber
Perl 5
-a
, 31 byteCobalah online!
sumber