var QUESTION_ID=74273,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/74273/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Jawaban:
Python 2, 53
56-3 setelah disadari yang
yield x
dapat digunakan sebagai ekspresi.sumber
'aa'
daripada di''
:S=lambda s:(c+w for f in[str,S]for w in f(s)for c in s)
. Juga tidak berfungsi untuk input kosong.Haskell, 24 byte
Menghasilkan daftar tanpa batas.
sumber
(:)<$>s<*>f s
akan memberikan urutan yang salah. Adaf s="":(flip(:)<$>f s<*>s)
tapi lebih lama.f s=[]:(f s<**>map(:)s)
kecuali yang<**>
tidak adaPrelude
.JavaScript (ES6), 61 byte
Port generator Python @ feersum. Itu
let
perlu. Simpan 2 byte dengan menggunakan pemahaman array (gagal proposal ES7, tetapi berfungsi di Firefox 30-57):Versi alternatif untuk 73 byte yang mengembalikan
n
elemen pertama yang dihasilkan oleh generator di atas:sumber
Mathematica,
3231 BytesEdit:
CatsAreFluffy menghapus satu byte.
sumber
Perl,
393735 byte(Pertama menjelaskan versi yang lebih lama. Program yang lebih pendek baru di akhir)
Termasuk +3 untuk
-alp
Jalankan dengan set karakter pada STDIN, mis
perl -alp kleene.pl <<< "a b c"
kleene.pl
(versi ini adalah 34 + 3 byte):Tambahkan +2 untuk
-F
(drop implisit-a
jika tidak ada spasi di antara karakter input, atau -6 (hanya@a=""
sebelum}
) jika kita sudah meletakkan koma di antara karakter pada STDINPenjelasan:
The
-alp
pilihan membuat kode secara efektif:Seperti yang Anda lihat
<>
di perl tidak hanya digunakan untuk readline, tetapi juga dapat melakukan globbing shell style (sebenarnya di perl kuno itu diimplementasikan dengan memanggil shell).Misalnya
<{a,b}{1,2}>
akan diperluas ke"a1","a2","b1","b2"
Jadi, jika kita memiliki elemen di dalamnya,
@F
kita hanya perlu menambahkan koma peralihan. Karakter inbetween default untuk interpolasi adalah space, yang disimpan dalam variabel khusus$"
. Jadi pengaturan$"
untuk,
akan berubah"{@F}"
menjadi{a,b}
jika@F=qw(a b)
(gumpalan diperluas sebagai string)Sebenarnya saya benar-benar ingin loop dengan sesuatu seperti
glob"{@F}"x$n++
, tetapi saya terus mengalami masalah bahwa baris kosong pertama tidak dapat dihasilkan dan semua solusi yang saya temukan membuat kode terlalu lama.Jadi bagian penting lain dari kode ini adalah bahwa jika Anda menggunakan
for
untuk loop di atas array Anda benar-benar dapat mendorong elemen tambahan di dalamnya selama loop dan loop juga akan mengambil elemen-elemen baru ini. Jadi jika dalam loop kita misalnya pada elemen"ab"
, maka<{@F}$_>
akan diperluas ke<{a,b}ab>
mana dalam konteks daftar menjadi("aab", "bab")
. Jadi jika saya dorong ini@a
maka senar diperpanjang ke kiri menjadi tersedia jugaYang masih perlu saya lakukan adalah prime loop dengan string kosong. Itu dilakukan dengan menggunakan
$#a = 0
(,
dalam konteks numerik menjadi0
) yang menyebabkan elemen pertama dan satu-satunya@a
menjadi undef yang akan berperilaku seperti""
ketika saya menggunakannyaPerbaikan
Bahkan dengan melakukan tes untuk penjelasan ini saya menemukan cara singkat untuk menggunakan gumpalan yang tumbuh yang benar menangani entri kosong pertama. Jalankan sebagai
perl -ap kleene0.pl <<< "a b"
(jadi tambahkan 2 byte untuk-ap
)kleene0.pl
(versi ini adalah 33 + 2 byte):Semua solusi ini akan membuat semakin banyak output dalam memori dan itu akan menyebabkan program gagal setelah beberapa waktu. Anda juga dapat menggunakan perl global untuk generasi malas dengan menggunakannya dalam konteks skalar, tetapi itu membuat program lebih panjang ....
sumber
<{@F}$_>
:? Terima kasih!Pyth, 7
Coba di sini
Ini menghitung produk kartesius dari input dengan setiap nomor dari
0..n-1
, bergabung dengan mereka, dan kemudian hanya menyimpan yang pertaman
. Ini akan habis waktu online untuk nomor atau string yang jauh lebih besar dari 3-4.Atau, untuk mendapatkan hasil tak terbatas lihat jawaban Jakube .
sumber
Jelly,
86 bytesThis is a monadic link that accepts an alphabet and prints an infinite list of strings. Try it online!
How it works
Alternate version, 6 bytes (non-competing)
This is a dyadic link that accepts an alphabet and the desired number of strings as left and right arguments, respectively.
I consider this version non-competing, since it uses bijective base conversion, which has been implemented after this challenge had been sandboxed. Try it online!
How it works
sumber
Python 2,
898483 bytessumber
CJam,
1610 bytesThanks to jimmy23013 for saving 6 bytes.
Input is one command-line argument per character. Output is one string on each line.
Try it online! (But kill it immediately...)
Explanation
sumber
Pyth, 7 bytes
Alternative to @fry. This program reads a string and keeps on printing strings until infinity.
Explanation:
Alternatively the following will also work. A little bit more hacky though.
sumber
Haskell, 33 bytes
For exampe,
k "xyz"
is the infinite list["","x","y","z","xx","xy","xz","yx","yy","yz","zx","zy","zz","xxx",...]
sumber
MATL, 10 bytes
Try it online! But don't leave it running for long, to avoid large computational load on the server.
The program displays the strings dynamically, each string on a different line.
sumber
Python 3, 95
Why must itertools functions have such long names.
sumber
combinations_with_replacement
is never worth it. I'm pretty sure it's shorter to use loops. Always.Ruby,
6560 bytesSuch long builtin names...
sumber
p
callsinspect
on its arguments which would produce output like[] ["a","b"] ["aa", "ab", ...
Pyke (commit 31),
109 bytesExplanation:
sumber
Scala, 69
Lazy streams are quite nice for this kind of thing.
sumber
Japt,
50403428 bytesInput is
"string", number of items
. Output is sorted by length, then reverse alphabet order. Test it online!How it works
This version takes a while if you want to do any more than 100 items. If you want a faster version, try this 32-byte one:
sumber
Cinnamon Gum, 6 bytes
Non-competing because Cinnamon Gum was made after this challenge.
Try it online (TIO limits output).
Explanation
The
h
puts Cinnamon Gum in format and generate mode. The rest of the string decompresses to[%s]*
. The%s
is then replaced with the input, and a generator is created that outputs all possible strings matching the regex.sumber
05AB1E, 9 bytes
Try it online!
sumber
Python, 55 bytes
This is longer than feersum's 53-byte solution, but it illustrates a different method with printed output. The list
l
is updated while it is iterated over, by appending every one-character suffix of each string that is read.It's equally long to use
map
:The same length can be done in Python 3, losing a char for
print()
, and saving one by input unpacking.sumber
Zsh, 31 bytes
Try it online!
Print the array, then zip on the arguments before recursing. Despite including the function name, this is one byte shorter than the iterative version:
sumber