全単射ベースでのカウント62


20

タスクは、次のような大文字を含む「a」から「999」までのすべての文字列を生成することです。

'a', 'b', 'c' ... 'y', 'z', 'A', 'B', 'C' ... 'Y', 'Z', '0', '1', 2' ... 
'8', '9', 'aa', 'ab', 'ac' ... 'az', 'aA', 'aB' ... 'aZ', 'a0' ... 'a9', 'ba'

など(ギャップを埋める)、オプ​​ションで空の文字列で始まります。

入力:

  • プログラムが印刷しなければならない連続文字の量。

出力:

  • 各文字列または行ごとに1つの文字列を含む配列

明確化:

  • 順序は関係ありません。必要に応じて、最初に大文字または小文字を印刷できます。

  • 出力はあらゆる種類の列挙型を返すことができ、特に配列である必要はありませんが、すべての組み合わせを印刷するのが最も簡単な方法ではないことを疑います。

  • 入力3からすべての文字列を印刷することになる'a'(または'')へ'999'の入力、5最大'99999'のように。


配列を出力するとはどういう意味ですか?
フレデリック

文字と数字だけですか?どの順序を使用しますか?ASCII番号では最初に、次に大文字、小文字が来る
ルイスメンドー

すべての値、つまり['a'、 'b'、 'c' ..]を含む列挙可能。STDOUTを介して各行の出力を確認するか、を介して出力を割り当てることができますa = (function return)
サイモンランドリー

1
@ edc65私の理解では、入力は結合する最大文字数です。したがって、入力4の場合はからaに進み9999、5の場合a99999になります。
アレックスA.

3
OK、それを片付けてくれてありがとう。それは多くのバイトを節約しました。:) 全単射のベース62 が必要だと思われるので、現在のタイトルは少し混乱していると思います
デニス

回答:


13

ゼリー、7 バイト

ØWṖṗR;/

これは、整数を入力として受け入れ、文字列の配列を返すモナドリンクです。

オンラインでお試しください!

使い方

ØWṖṗR;/  Main link. Argument: n

ØW       Yield 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'.
  Ṗ      Remove the last element (underscore).
    R    Range; yield [1, ..., n].
   ṗ     Cartesian product. For each k in the range, this yields the arrays of all
         strings of alphanumeric characters.
     ;/  Concatenate the arrays of strings of each length.

1
codegolf用に独自の言語を作成する場合、それをフォークし、修正し、1バイトのソリューションを使用することはできませんか?
フロリアンウェンデルボルン16年

9
いいえ。許容されるプログラミング言語には厳格なルールがあります。その1つは、チャレンジが投稿される前に、有効なインタープリターが存在していなければならないということです。今、このタスクにビルトインを追加できましたが、将来の課題でのみ使用できました。
デニス

8
ばかげている?許可された場合、各チャレンジは1バイトで解決されます
ジベラス

7
@UncleZeivゼリーコードページは投稿タイトルにリンクされています
-edc65

7
@UncleZeivそれを行う文字セットは実際には1つだけです。これはJellyコードページです。
isaacg

8

Haskell、65バイト

a#b=[a..b]
k n=mapM id.('a'#'z'++'A'#'Z'++'0'#'9'<$)=<<(1#)<$>1#n

使用例:k 3-> ["a","b","c",....,"997","998","999"]

使い方

a#b = [a..b]        -- helper function that builds a list from a to b


        (1#n)<$>    -- map the function (1#), i.e. "build the list from 1 up to" 
                1#n -- on the list from 1 to n

                    -- now we have [[1],[1,2],[1,2,3]]

              =<<   -- map over this list (and combine results in a single list)
  (        <$)      -- a function that makes length of input copies of
 'a'#'z'++ ... '9'  -- all characters we need

                    -- now we have [["a..9"],["a..9","a..9"],["a..9","a..9","a..9"]]

mapM id.            -- and make the cartesian product of each sublist 

5

Python、86バイト

f=lambda n:n*[1]and[x+chr(y)for x in['']+f(n-1)for y in range(128)if chr(y).isalnum()]

空でない文字列のリストを出力します。n-1空の文字列の各出力に各英数字を再帰的に追加します。


5

JavaScript(Firefox 30-57)、108バイト

f=n=>n?[for(s of['',...f(n-1)])for(c of(t='abcdefghijklmnopqrstuvwxyz')+t.toUpperCase()+'0123456789')s+c]:[]

toUpperCaseを使用して3バイトを保存しました。62文字を計算すると、さらに10バイト余分にかかります。


4
関数fが未定義であるとコードを機能させることはできません。
サイモンランドリー

1
@SimonLandryおっと、最初は忘れていf=ました。(私はいつも再帰的な答えのためにそれをするのを忘れています。)
ニール

上記の理由で機能しません。
CalculatorFeline

@CatsAreFluffyを入れましf=た、それ以上の問題はあなたがそれを呼ぼうとしている方法によるものです。
ニール

4

シナモンガム、15バイト

0000000: 689b b718 05be a345 9c4b c283 d077 de    h......E.K...w.

これは、シナモンガムが作成されたチャレンジの正確な種類であるにもかかわらず、十分ではありません:(

全単射の96から256に変換して圧縮します。オンラインで試してください。入力が2を超えると、TIOで問題が発生します。

説明

これは正規表現に解凍され[a-zA-Z0-9]{1,%s}ます。次に、hモードは入力を入力に置き換え%s、正規表現に一致するすべての文字列を出力します。


4

ルビー、82バイト

指定された長さまでの文字セットのデカルト積を構築します。文字セットは0zとの間のすべての文字を取得し、非単語文字とを除外することによって生成され_ます。

->n{a=(?0..?z).grep(/\w/)-[?_];r=[]
n.times{|i|r+=a.product(*[a]*i).map &:join};r}

4

05AB1E9 8バイト

コード:

ƒžj¨Nã€,

説明:

ƒ          # For N in range(0, input + 1), do:
 žj        #   Push predefined literal [a-zA-Z0-9_]
   ¨       #   Remove the last character (the underscore)
    N      #   Push N
     ã     #   Take the Cartesian product, with N repetitions.
      €,   #   For each element in the array, print with a newline

CP-1252エンコードを使用します。オンラインでお試しください!


4

パイソン2.7、136の 134バイト

2バイトを節約してくれたMaltysenとNonlinearFruitに感謝

from itertools import*;from string import*;f=lambda n:[''.join(a) for i in range(1,n+1) for a in product(ascii_letters+digits,repeat=i)]

受け取りascii_lettersdigitsstringモジュールからととしてデカルト製品を使用するproductすべての組み合わせを計算するitertoolsから。

出力

out = f(3)

print out[:10]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

print out[100:110]
['aM', 'aN', 'aO', 'aP', 'aQ', 'aR', 'aS', 'aT', 'aU', 'aV']

print out[-10:]
['990', '991', '992', '993', '994', '995', '996', '997', '998', '999']

1
括弧と文字の間のスペースを削除できます。
マルティセン

試しi in range(n)repeat=i+1
NonlinearFruit

マイナス入力の場合は+1。それはrange関数に組み込まれていますか?
ケビンCruijssen

3

Pyth- 13 12バイト

@ジャクベのおかげで1バイト節約できました。

sm^s+rBG1UTh

こちらからオンラインでお試しください

s                    Add up the lists of different lengths  
 m          (Q)      Map implicitly over input
  ^     h(d)         Cartesian product of string to implicit lambda var + 1
   s                 Add up list
    ++               Concat up three things
     G               Alphabet
     rG1             Uppercase alphabet
     UT              All digits

良いですね!説明を提供しますか?
サイモンランドリー

辞書編集順に文字列を反復処理するコマンドがあると思いましたか?
リーキー修道女

@KennyLau nvm、数字をしません。
マルティセン

rBG11バイト節約+GrG1
ジャクベ

@ジャクベああ、Bifurcateは引数で動作しますか?ありがとう。
マルティセン

3

Python 2、106 97バイト

from string import*
f=lambda n,r=['']:n and r+f(n-1,[x+y for x in r for y in letters+digits])or r

Ideoneで試してみてください。


数バイト長く、ほぼ同じ考えを持っていましたが、...
バイト司令

@Dennisから2つの答えがあります、あなたはそれを殺しています!:)
サイモンランドリー

2

MATL、12バイト

:"3Y24Y2h@Z^

これは入力として数値を取ります。

オンラインでお試しください!

説明

:       % Implicitly take input, say N. Generate range [1 2... N]
"       % For each number in that range
  3Y2   %   Predefined literal: string with all letters, uppercase and lowercase
  4Y2   %   Predefined literal: string with all digits
  h     %   Concatenate horizontally
  @     %   Push number of characters corresponding to current iteration
  Z^    %   Cartesian power. Each result is a row 
        % End for each. Implicitly display

1

𝔼𝕊𝕄𝕚𝕟、21文字/ 27バイト

ⒶïⓜᵖɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)ė)

Try it here (Firefox only).

いや。いや。いや。

説明

ⒶïⓜᵖɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)ė) // implicit: 
Ⓐïⓜ                    // [...Array(input)].map(($,_)=>...)
    ᵖ                   // push to stack:
     ɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)   // list of n-digit numbers in [a-zA-Z0-9]-ary
                     ė) // formatted into a matrix (no spaces)
                        // implicit stack output, newline-separated

初めてこの言語を見て、Googleを使用して見つけることができない場合は、ドキュメントやソースコードへのリンクを追加してください。:)
サイモンランドリー

1
github.com/molarmanful/ESMin
ママファンロール

言語の名前は真剣に4つのスペースですか?
バリント

いいえ。ただし、ブラウザは二重打ち文字を正しくレンダリングしない場合があります。ASCIIでは、ESMinと呼ばれます。
ママファンロール

1

Perl、113バイト+空白

@r="";
for (1..shift) {
  @r = sub {
    map { $c=$_; map $c.$_, @{$_[1]} } @{$_[0]}
  }->(\@r, [0..9, "a".."z", "A".."Z"])
}
map say($_), @r

上記の「perl -E」を使用します。引数は数値です。chars countの最後の "map say"を適切に数えていなかっただろう。


1

J、50バイト

62&(('0123456789',~(,toupper)u:97+i.26){~#~#:i.@^)

正確には25バイトの半分のバイトが、必要な文字と数字の生成に費やされます。


1

APL、38 37バイト

{⊃{⍵,,⍺∘.,⍵}/⍵⍴⊂,¨⎕a,⎕d,⍨⎕ucs 96+⍳26}

彼らが通じない場合、どうやって回避するのですか?(⎕ucs 96+⍳26),⎕d=>⎕d,⍨⎕ucs 96+⍳26
ザカリー

私はあなたが通勤できることを保証できます(「仕事と家の間で同じ旅を定期的にすること」は、退屈だからです)。他の人のソリューションを簡単に改善できることがわかったようです。特に、フルタイムの仕事がない場合。次に、すべてをさらに難しくする現実の生活があります
...-lstefano

0

Bash + GNUユーティリティ、90

printf -vs %$1s
eval printf '%s\\n' ${s// /{=,{a..z\},{A..Z\},{0..9\}\}}|sed s/^=*//\;/=/d

コマンドラインパラメーターとして入力します。出力は空白で区切られたリストです。

入力uptおよび3を含めて動作します。4でメモリ不足になりeval printfます-これは、bash拡張の63 n個の要素のセット全体を使用します。


0

Bash + GNU utils、66

私の他の答えへの異なる(そして私は少し斬新だと思う)アプローチ:

dc -e"64 $1^[d2 48^r-P1-d0<m]dsmx"|base64 -w8|sed s_^/*__\;/[+/]/d
  • dc2 48 -1から2 48 -64 nPカウントダウンし、それぞれの結果の数値をバイトストリーム(つまり、ベース256)としてリントします。入力が1〜4の場合、これは数字ごとに正確に6バイトであることが保証されます。
  • base64 これをbase64出力に変換します。したがって、base64桁ごとに8バイト、行ごとに1バイトです。
  • sed先頭/(base64の数字63)を取り除き、+or /(base64の数字62および63)を含む行を削除します。これにより、必要なシーケンスが残ります。

0

R、73バイト

y='';x=c(letters,LETTERS,0:9);for(i in 1:scan())cat(y<-outer(y,x,paste0))

yx基本ケースのように、空の文字列として始まり'a','b','c',...,'8','9'ます。outerその入力引数のそれぞれを取り、関数を適用するpaste0の要素の各組み合わせにyし、x文字列を連結しています。y結果を保存してcat出力し、STDINでこれを行う回数繰り返します。

オンラインでお試しください!


0

Jq 1.5、97バイト

range(.)as$n|[[range(97;123),range(65;91),range(48;58)]|implode/""|combinations($n+1)]|map(add)[]

拡大

  range(.) as $n           # for each n-digit sequence
| [
      [                    # build array of ordinals for
        range(97;123),     #   a-z
        range(65;91),      #   A-Z
        range(48;58)       #   0-9
      ]
    | implode/""           # make into array of strings
    | combinations($n+1)   # generate array of n-element combinations
  ]
| map(add)[]               # convert to sequence of strings

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.