15文字のアルファベットから6文字の文字列を生成します


17

作業中のプロジェクトの1つで、15文字のアルファベットから6文字の文字列を生成する特に大きな方法を最近発見しました。私たちの何人かは、「一行でそれを手に入れることができるに違いない」と主張し、コードゴルフの小さな内部ゲームを始めました。

あなたの仕事は私たちを打ち負かすことです、それは間違いなく長くはかからないでしょう!

元のアルゴリズムはアルファベット0-9A-Eを使用していましたが、他のアルファベットを試しました。したがって、3つのサブタスクがあります。

  1. のような6任意のハードコードされた15文字アルファベットからランダムに選択する文字列を生成しますABC123!@TPOI098。(これは単なる例であり、バイトカウントに影響を与えずにカスタマイズできる必要があります。)
  2. 文字アルファベット6からランダムに選択した文字列を生成し15ます0123456789ABCDE
  3. 6選択した15文字アルファベットからランダムに選択した文字列を生成します(印刷可能な文字のみを使用してください)。

各キャラクターは選択の機会等しくなければならず、繰り返しが可能であるべきです。

各サブタスクで管理できた最高の機能は次のとおりです。

  • 「ABC123!@ TPOI098」- 24 bytes
  • 「0123456789ABCDE」- 21 bytes
  • カスタムアルファベット- 13 bytes

スコアは、各サブタスクのソリューションのバイトの合計です。つまり、現在のスコアは58です。

CJamとRubyを使用してみました。オリジナルはC#でした。好きな言語を使用しますが、特にこれらの言語でのソリューションをご覧ください。


5
マルチパートの課題について。残念ながら、これらの3つのサブタスクはあまりにも類似しているため、これらを複数の課題に分割するのが理にかなっていないため、この場合には良い解決策がありません。また、サブタスクが同じチャレンジのほんのわずかなバリエーションであるマルチパートチャレンジについて、そのポリシーの例外を提案することも検討しています。(それでもサブソリューションは他の回答から取れるという問題があります。)だから私はこれを改造することはせず、コミュニティが何を考えているか見てみましょう。
マーティンエンダー

「あなたのスコアはバイトの合計です...」ですので、私の最初の例は残念です。別の潜在的な例を修正します
ジェームズウェブスター

2
@MartinEnder私の2セント:それは大丈夫だと思うし、VTCはしません。確かに、1つの興味深いタスクでのチャレンジの方が一般的には良いと思いますが、これらのタスクは非常に似ているため、「これらの8つのランダムな無関係なタスクを行う」という「ゴルフコース」よりもはるかに優れています。タスク間に相互作用はありませんが、私の目には、この挑戦​​はゴルフの16個の論理ゲートすべてと言ってもそれほど変わりません。
DJMcMayhem

時間やメモリの制限はありますか?サブタスクは独立している必要がありますか、それともコードを共有できますか?
デニス

2
「文字列を生成する」とは、コードが実際に適切な文字を含む文字列値を生成する必要があるか、6文字(スペースまたは改行で区切られていない)を出力できるかを意味しますか?
DLosc

回答:


6

ゼリー、38 バイト

TryItOnlineはAB、およびCをリンクします。

AABC123!@£POI098、22バイト

“ABC123!@£POI098”Wẋ6X€

(これを減らすために圧縮を考える)

B0123456789ABCDE、8バイト:

ØHṖWẋ6X€

C:(123456789ABCDEF選択)、8バイト:

ØHḊWẋ6X€

どうやって?

...Wẋ6X€ - common theme
   W     - wrap (string) in a list
    ẋ6   - repeat six times
      X€ - random choice from €ach

ØH...... - hexadecimal digit yield: "0123456789ABCDEF"

..Ṗ..... - pop: z[:-1] (B)

..Ḋ..... - dequeue: z[1:] (C)

8

CJam(23 + 14 + 10 = 47バイト)

任意のアルファベット:23バイト(オンラインデモ

{"ABC123!@TPOI098"mR}6*

16進アルファベット:14バイト(オンラインデモ

{FmrAbHb'0+}6*

カスタムアルファベット:ABCDEFGHIJKLMNO、10バイト(オンラインデモ

{Fmr'A+}6*

解剖

16進数は興味深いものです。

{      e# Loop...
  Fmr  e#   Select a random number from 0 to 14
  AbHb e#   Convert to base 10 and then to base 17
       e#   (i.e. add 7 if the number is greater than 9)
  '0+  e#   Add character '0' (i.e. add 48 and convert from integer to character)
       e#   Note that 'A' - '0' = 17
}6*    e# ...six times

6文字がスタックに残り、自動的に印刷されます。


2
AbHb素晴らしいです。私はその一般的なアプローチについて考えましたが、長_9>7*+すぎました。
マーティンエンダー

6

Perl、46 + 26 + 26 = 98バイト

多くのクレジットは、13バイトの節約に対して@Dom Hastings寄付されます!

3つのプログラムは、アルファベットが変わることを除いて、ほとんど同じです。

  • ハードコードされたアルファベット(ABC123!@)POI098この例では)-> 46バイト:

    say map{substr"ABC123!@)POI098",15*rand,1}1..6

  • 固定アルファベット0123456789ABCDE-> 26バイト:

    printf"%X",rand 15for 1..6

  • 0123456789ABCDEその場合のカスタムアルファベット-> 26バイト:

    printf"%X",rand 15for 1..6

それらをすべてファイルに入れて実行できます:

$ cat 6chr_strings.pl
say map{substr"ABC123!@)POI098",15*rand,1}1..6;
say "";
printf"%X",rand 15for 1..6;
say "";
printf"%X",rand 15for 1..6;
say "";
$ perl -M5.010 6chr_string.pl
CB8!8!
24D582
9ED58C

say "";出力形式を改善するためにここにあります)


2
良い答えです!最初と最後についてはほぼ同じでしたが、saysay map{("ABC123!@)POI098"=~/./g)[rand 15]}1..6とを使用してバイトを保存できますsay map{(A..O)[rand 15]}1..6。2番目の場合、printfprintf"%X",rand 15for 1..6を使用して、全体で11を節約できます!トンは、もっともっと節約するために、いくつかの不可解な魔法についてアドバイスできると確信しています!
ドムヘイスティングス

1
実際にカスタムアルファベットとsubstr別のものを保存しますsay map{substr"ABC123!@)POI098",15*rand,1}1..6
ドムヘイスティングス

1
@DomHastingsうーん、それはいいですね、よくプレイされています!ありがとう:
ダダ

2
コードが簡単であるというメモを削除したことを気に入っています:D
Dom Hastings

@DomHastings printf"%X"substr..randおよびmap、それだけで少しはあまり目立たないのですが、私は人々が無スポイラーとperlの魔法を楽しむことができます!:D-
ダダ

4

R、33 + 43 + 59 = 135バイト

任意のハードコードされたアルファベット(アルファベットを変更するには文字列を変更します):

cat(sample(strsplit("ABC123!@TPOI098","")[[1]],6,1),sep="")

のアルファベット[0-9A-E]

cat(sample(c(0:9,LETTERS[1:6]),6,1),sep="")

stdinのユーザー定義アルファベット:

cat(sample(scan(,''),6,1),sep="")

すべてのケースで、出力ワードが標準出力に出力されます。


4

JavaScript(ES6)、167 166 164 163バイト

Neilのおかげで1バイト
を節約ETHproductionsのおかげで2バイトを節約premek.vの
おかげで1バイトを節約

ハードコーディング: "ABC123!@TPOI098"(58バイト)

f=(n=6)=>n?"ABC123!@TPOI098"[Math.random()*15|0]+f(n-1):''

修正済み: "0123456789ABCDE"58 57バイト)

f=(n=6)=>n?f(n-1)+("ABCDE"[n=Math.random()*15|0]||n-5):''

カスタム: "()+.1=>?M[afhnt"51 49 48バイト)

f=(n=6)=>n?(f+1)[Math.random()*15|0+5]+f(n-1):''

1
(n=6)=>n?f(n-1)+("ABCDE"[n=Math.random()*15|0]||n-5):''バイトを節約します。
ニール

1/8+Math素晴らしいです:)
ETHproductions

しかし.1+JSON、より良いです;)
ETHproductions

1
またはJSON+f[object JSON](n=> " (JNOS[]bcejnot"
ETHproductions

@ETHproductionsいいね。:)
Arnauld

3

JavaScript(ES6)、184バイト

カスタムアルファベット:66バイト

_=>"......".replace(/./g,c=>"ABC123!@TPOI098"[Math.random()*15|0])

0-9A-E:63バイト

_=>"......".replace(/./g,c=>"ABCDE"[n=Math.random()*15|0]||n-5)

0-9a-e:55バイト

_=>(Math.random()*11390625+1e8|0).toString(15).slice(1)

(日付ベースのランダム性が許容される場合、6バイトを減算します。)


あなたが最後の1にバイトを保存することができます**_=>((Math.random()+1)*15**6|0).toString(15).slice(1)
ETHproductions

@ETHproductions確かにES6ではなくES7になりますか?(また、私にとっては3バイトの節約のように見えます。)
ニール

はい、3バイトを節約するようです。私は含まれていなければならないf=バイト数で
ETHproductions

3

q、42バイト

A

19バイト

6?"ABC123!@TPOI098"

B

14バイト

6?15#.Q.n,.Q.A

C

9バイト

6?15#.Q.a

(アルファベットの最初の15文字を使用)



2

CJam、48バイト

任意のアルファベット、23バイト:

{"ABC123!@TPOI098"mR}6*

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

16進数、15バイト:

{A,'F,65>+mR}6*

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

アルファベットABCDEFGHIJKLMNO、10バイト:

{Fmr'A+}6*

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


悪い考えがありました。U + FFFEを文字と見なす場合、技術的に印刷可能なもの~c'A+返すのではありません。
jimmy23013

たぶん私は間違っています。印刷可能なUnicode文字の定義が見つかりませんでした。
jimmy23013

2

ルビー47 + 37 + 31 = 115

ハードコード: "ABC123!@ TPOI098"(47)

(1..6).map{"5CABC123!@TPOI098".chars.sample}*''

修正済み: "0123456789ABCDE"(37)

(1..6).map{[*0..9,*?A..?E].sample}*''

カスタム:「ABCDEFGHIJKLMNO」(31)

(1..6).map{[*?A..?O].sample}*''


1

Python 2、70 + 70 + 64 = 204バイト

from random import*
s=""
exec"s+=choice('ABC123!@TPOI098');"*6
print s

from random import*
s=""
exec"s+=choice('0123456789ABCDE');"*6
print s

from random import*
s=""
exec"s+=chr(randint(65,80));"*6
print s

残念ながら、2番目の例は、次のようなものよりも最初の方法の方が簡単です。 choice([randint(48,57)),choice(65,69)])


なぜ使用するのfrom random import*ですか?私はあなたが使用することができると思うimport randomと、random.choice最初の2つの例では、少なくとも。
ローマングラフ

import random random.choice27ですfrom random import* choiceが、26であり、またimport random as r r.choice27です
カールナップ

16進数の場合、を使用することで少し改善できformat(randrange(8**8),'X')ます。
DSM

@DSM問題は、何もないはずですF
カールナップ


1

J、24 + 24 + 18 10 = 58バイト

マイルのおかげで8バイト節約!

'ABC123!@TPOI098'{~?6#15
'0123456789ABCDE'{~?6#15
u:65+?6#15

ええ、Jでは2番目の文字列は簡単に圧縮できません:

u:47+23#.inv 12670682677028904639x
u:47+;(+i.@])/"1&.>1 10;18 5
('ABCDE',~1":i.10)
(toupper,hfd?6#15)
'0123456789ABCDE'

小文字の16進数のアルファベットで問題ない場合は、,hfd?6#15@ milesで述べたように、9バイトがあります。

とにかく、?6#150〜15の6つの乱数です。{~テイクフロムです。u:数値を文字に変換します。最後の例はエンコードしますABCDEFGHIJKLMNOPます。

ボーナス:一般的なケース

{~6?@##

{~6?@## おおよそです:

{~6?@##  input: y
      #  length of y
  6  #   six copies of the length
   ?@    random numbers between 0 and the length
{~       taken from y

第二の場合には、名前の組み込みがありますhfdに変換する時間 EX F ROM D ecimal。を使用して9バイトのソリューションを取得できます,hfd?6#15。最後の場合、ちょうど読みやすい何かを持っているから、アルファベットを使用する'A'10バイトの解決のためにu:65+?6#15= 45、合計24 + 9 + 10を作り、
マイル

@miles 2番目のケースでは大文字が必要だと思います。最後のケースについては...笑、おっと。ベクトル化された加算を完全に忘れました。
コナーオブライエン

1

PHP、46 + 36 + 35 = 117バイト

ハードコード(46バイト)

for(;$i++<6;)echo"ABC123!@TPOI098"[rand()%15];

(47バイト)

for(;$i++<6;)echo"ABC123!@TPOI098"[rand(0,14)];

16進数(小文字)(36バイト)

for(;$j++<6;)echo dechex(rand()%15);

大文字の場合、ハードコーディングされたバージョンで46バイト。

カスタム(AO)(35バイト)

for(;$k++<6;)echo chr(rand(65,79));

私はあなたの第二部を受け入れることができるとは思わない。aeはAEと同じではない
ジェームズウェブスター

0

Scala、154バイト

ハードコードされたアルファベット(54バイト):

Seq.fill(6)("ABC123!@TPOI098"((math.random*14).toInt))

16進アルファベット(54バイト):

Seq.fill(6)("0123456789ABCDE"((math.random*14).toInt))

カスタムアルファベットABCDEFGHIJKLMNO(47バイト):

Seq.fill(6)(('A'to'O')((math.random*14).toInt))

説明:

Seq.fill(6)(               //build a sequence of 6 elements, where each element is...
  "ABC123!@TPOI098"(         //from the string
    (math.random*14).toInt   //take a random char
  )
)

'A'to'O' AからOまでの15文字のシーケンスを作成します


0

ピップ、42バイト

ハードコードされたアルファベット、22バイト:

L6ORC"ABC123!@TPOI098"

16進数、11バイト:

L6ORR15TB16

最初の15個の小文字、9バイト:

L6Oz@RR15

説明

3つのプログラムはすべてL6O:で始まり、6回ループし、指定された式を出力します。

  • RC"...":ハードコーディングされた文字列からの文字のランダムな選択
  • RR15TB16:RandRange(15)、ベース16に変換
  • z@RR15zRandRange(15)でインデックス付けされた小文字のアルファベット

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



0

Jolf、26 + 14 + 13 = 51バイト

Μ*S6d rG"ABC123!@TPOI098"E

カスタムアルファベット、24バイト。ここで試してみてください!

Μ*S6d r lp^0wά

0-9A-Eアルファベット、14バイト。ここで試してみてください! lp^0wάであるlp(0、Z)スライス(lから)015)。

Μ*S6d r lp^1ά

1-9A-Fアルファベット、13バイト。ここで試してみてください!lp^1άを除いて上記と同じです116です。


一般的な方法:

Μ*S6d r
M*S6d      map six newlines over this function:
      r    select random element from array.

その他の試み(文字列圧縮を使用):

Μ*S6d rGμpwΞ $AE

0

PowerShell v2 +、45 + 44 + 37 = 126バイト

固定アルファベット、45バイト

-join(0..5|%{'ABC123!@TPOI098'[(Random)%15]})

ほぼ16進数のアルファベット、44バイト

-join[char[]](0..5|%{Random(48..57+65..69)})

カスタムアルファベット(A〜O)、37バイト

-join[char[]](0..5|%{Random(65..79)})

これらのすべては、同じパターンをたどる-ループから05選択各反復、Random文字またはASCII値を、キャストとchar必要に応じて-array、および-join文字列にそれを一緒にする。その文字列はパイプラインに残り、出力は暗黙的です。


PS C:\Tools\Scripts\golfing> -join(0..5|%{'ABC123!@TPOI098'[(Random)%15]})
32ATB3

PS C:\Tools\Scripts\golfing> -join(0..5|%{'ABC123!@TPOI098'[(Random)%15]})
III@B2

PS C:\Tools\Scripts\golfing> -join(0..5|%{'ABC123!@TPOI098'[(Random)%15]})
@302O@

PS C:\Tools\Scripts\golfing> -join[char[]](0..5|%{Random(48..57+65..69)})
74E117

PS C:\Tools\Scripts\golfing> -join[char[]](0..5|%{Random(48..57+65..69)})
09D7DD

PS C:\Tools\Scripts\golfing> -join[char[]](0..5|%{Random(65..79)})
COJDFI

PS C:\Tools\Scripts\golfing> -join[char[]](0..5|%{Random(65..79)})
EAKCNJ

-1

パイク、35バイト

任意のアルファベット、20バイト

6V"ABC123!@TPOI098"H

ここで試してみてください!

16進アルファベット、8バイト

6V~J15<H

ここで試してみてください!

~J15< - "0123456789abcdefghijklmno..."[:15]

カスタムアルファベット、7バイト

6VG15<H

ここで試してみてください!

G15< - alphabet[:15]

選択されたアルファベット: abcdefghijklmno

6V     - repeat 6 times:
  ...  -   get alphabet
     H -  choose_random(^)

これは、6文字の文字列ではなく、改行で区切られた6文字を出力するようです。
エミグナ

質問には出力形式は記載されていません。
ブルー

仕様の4か所に「Generate a 6 character string」という言葉があります。
エミグナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.