Program harus mencetak setiap kombinasi huruf (huruf kecil atau huruf besar, tidak masalah) dalam urutan abjad. Itu harus dimulai dengan a
dan kombinasi yang dicetak terakhir harus password
.
Outputnya harus:
a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ... passwora passworb passworc password
Jawaban:
Perl, 19 karakter
Gunakan baris baru sebagai pembatas, sesuai klarifikasi di atas. Jalankan dengan
perl -M5.010
(atau hanyaperl -E 'say for a..password'
) untuk mengaktifkan fitur Perl 5.10+say
. Per meta , ini tidak dihitung sebagai karakter tambahan.(Jika Anda bersikeras spasi sebagai pembatas,
$,=$";say a..password
hanya dua karakter lagi. Namun, itu juga sangat lambat dan boros memori, sampai-sampai tidak dapat digunakan dalam praktik, karena mencoba membangun seluruh daftar dalam memori sebelum mencetaknya.)sumber
Ruby, 33 karakter (versi optimal tetapi lebih lama)
Saya suka
'a'.upto('password')
; itu memberitahu Anda persis apa yang dilakukannya. Ruby hebat dan ekspresif seperti itu.:D
Tentu saja,
print c,' '
juga akan jauh lebih jelas, tetapi menggunakan$>
dua karakter lebih pendek.Ruby,
2925 karakter (versi lambat)Yang ini lebih pendek, tetapi mencetak semua token sekaligus, sehingga butuh waktu yang sangat lama untuk dijalankan!
sumber
(?a..'password').to_a
dapat disingkat menjadi[*?a..'password']
Perl,
333224 karakterSolusi dalam 32 karakter:
Tidak banyak yang bisa dikatakan tentang yang satu ini. Saya bisa mengurangi ini menjadi 27 karakter jika saya bisa menggunakan baris baru dan bukan spasi untuk memisahkan entri.
Ilmari Karonen menunjukkan bahwa
..
panggilan internal++
, jadi solusi yang lebih baik (25 karakter) adalah:Dengan memanfaatkan opsi baris perintah Perl, berikut ini adalah solusi setara 24 karakter:
Aturan untuk menghitung flag perl ada di sini, bagi mereka yang tidak terbiasa dengannya.
Tentu saja, solusi 21-karakter Ilmari masih lebih pendek, tetapi membutuhkan mesin yang dapat mengalokasikan sejumlah 129.052.722.140 string.
sumber
.$"
alih-alih," "
menyimpan karakter?Perl 6, 20 karakter
Anda tidak membutuhkan hal lain
sumber
Python 2, 91
sumber
PHP
383736 karakterAnda harus mengatur penyandian ke ISO 8859-1 dan menonaktifkan peringatan.
sumber
$w
awalnya diatur ke 'a' dan kemudian bertambah hingga mencapai nilai pertama setelah 'kata sandi' (string terakhir tidak dicetak).for
loop biasa . Tidak ada yang aneh dalam kode ini, kecuali untuk 2 karakter terakhir, yang merupakan spasi putih terbalik. Lagi pula, ya, saya mengujinya hingga kata yang lebih pendek.passwoqs
kepassword
. Karena pengkodean codepad bukan ISO 8859-1, saya harus mengganti~ß
dengan spasi putih.$w<passwore
sebagai pengganti$w!=passwore
.Ruby (40 karakter)
Menafsirkan string huruf az sebagai angka dalam basis 26, dengan a = 1, b = 2, ..., z = 26.
Jadi "kata sandi" dapat dianggap sebagai angka N =
Jika kami membiarkan
s = "a"
(yaitu: 1) dan kami melakukan (N-1) panggilan kes.succ!
, s akan menjadi"password"
(N). Dengan kata lain, N = 1 + (N-1).Untuk contoh yang akan berjalan lebih cepat, untuk membuktikan perhitungan N sudah benar, anggap
"pass"
sebagai target, di mana N beradadan
Karena kami ingin mencetak
"a"
juga, kami perluJadi kembali ke "kata sandi" penuh.
N = 129052722140
, pergi:Saya mencari bentuk yang lebih ringkas
129052722140 == 0x1e0c2443db
tetapi tidak dapat menemukannya.(Diperbarui untuk memperbaiki kekurangan pencetakan
"a"
, terima kasih kepada Cary.)sumber
N
alih-alihN-1
dalam iterasi saya! Terima kasih, saya akan mengedit untuk memperbaikinya. (Meskipun 129052722140 adalah nomor yang menarik untuk Google :).)s=?a
,s.succ!
dimulai pada 'b'`.s=?a
danN-1
Anda mendapatkan 'b ... password'; dengans =
<backtick> danN
Anda mendapatkan 'a ... kata sandi'. SO meminta output untuk memulai'a'
. Itu saja.Javascript, 73
Ini adalah versi 73 karakter dari kode @Briguys ', yang hanya mencetak kombinasi huruf
for(i=s=0;1982613533018>i++;s=i.toString(36))/\d/.test(s)||console.log(s)
sumber
APL (Dyalog),
4634Secara teoritis, itu akan mencetak sampai PASSWORD, tapi saya mengalami kesalahan ruang kerja penuh setelah ZZZZ: array 5-dimensi terlalu mengagumkan.
EDIT: Pasti sudah terlalu lama sejak terakhir saya mengutak-atik APL. Beraninya aku merindukan perbandingan identitas (
≡
) !!!Penjelasan
{...}
: Mendeklarasikan fungsi yang ...⎕A∘.,⍵
: Mengambil produk luar dari penggabungan (Setiap kombinasi elemen dari operan kiri digabungkan dengan elemen dari operan kanan, seperti halnya Produk Cartesian) antara 26 huruf besar alfa (⎕A
) dan argumen (⍵
){...}¨
: Dan untuk setiap elemen dari himpunan yang dihasilkan, hubungkan itu ke fungsi yang ...⍞←⍵
: mencetaknya'PASSWORD '≡
dan membandingkannya dengan'PASSWORD '
→
: Jika perbandingan mengembalikan true (1
), maka batalkan program.⍵
: Lain hanya mengembalikan string yang dicetak.∇
: Akhirnya, fungsi luar berulang sendiri.(Kemudian Anda mengambil produk luar atas concat antara 26 alpha dan 26 alpha, yang memberikan semua kombinasi 2 huruf, dan kemudian produk luar atas concat antara kombinasi 2 huruf dan 26 alpha, dll ... Sampai Anda mencapai PASSWORD yang memicu pembatalan)
' '
: Percikan!! Itu memulai fungsi rekursif dengan karakter spasi.sumber
Python 2 -
153 152 151149 byteDisimpan satu byte dengan menggunakan UPPERCASE dan satu dengan menggunakan baris baru, bukan spasi.
sumber
Naskah Golf 41
Karena kurangnya
'z'+1 == 'aa'
logika, Golfscript tidak dapat memenangkan yang satu ini.168036262484,
buat array dari 0 hingga 168036262483(;
jatuhkan 0{
..}%
iterate over array27base
konversi elemen ke basis 27 array{96+}%
tambahkan 96 ke setiap digit' '+
konversi ke string dan tambahkan spasi ke ujung.96?0<*
potong string ke nol jika berisi char 96sumber
Di Ruby,
3940...atau
129052722140
. (Sunting: sebelumnya saya punya129052722
. Saya telah kehilangan beberapa digit memotong dan menempel. Sebelumnya hex (0x7B13032
) adalah untuk nomor yang salah.). Dipinjama=?`
dari @Doorknob untuk menyimpan karakter.sumber
a=?`
, kelihatannya agak aneh dan memiliki ruang ekstra pada akhirnya, tetapi setidaknya berhasil: PORD_BASE_ASCII = 'a'.ord-1; def nbr(word); len = word.size; word.split('').inject(0) {|t,c| offset = c.ord - ORD_BASE_ASCII; t + offset*(26**(len -= 1))}; end
Sangat mudah untuk mengkonfirmasi ini benar dengan hanya mencetak beberapa urutan.Javascript:
5756 karakter (terima kasih C5H8NNaO4)Berikut solusi yang menyertakan angka sebanyak mungkin karakter ("0", "1", "2", .., "passwor9", "passwora", "passworb", "passworc", "passworc", "password")
Berikut biola untuk pengujian (dengan hanya 100 iterasi terakhir sehingga tidak mengunci browser Anda).
sumber
print every **letter** combination
Pokoknya, simpan karakter:{} -> ;
Haskell, 101
sumber
Befunge (72)
Mencetak string 'a' ke 'kata sandi' yang dipisahkan oleh spasi, lalu keluar.
Di bawah ini adalah versi yang hanya mencetak 9 * 9 = 81 kata pertama ('a' to 'dd'), untuk perbandingan. Ini
99*
adalah jumlah iterasi yang harus dilakukan.sumber
JavaScript
8076biola - berhenti di "pa".
Namun ini mengulangi hal-hal.
sumber
i=s=0
untuk menyimpan tiga karakter lagi.var
?i
adalah global sebelumnya; sekarangs
adalah global. Anda bisa menyimpan kedua bola golf dalam kode golf, biasanya.