興味のある人


28

バックグラウンド

関心のある人は CBSの犯罪ドラマであり、最近の私のお気に入りのテレビ番組です。

このショーは、億万長者のプログラマーであるハロルド・フィンチという男と、特殊部隊のベテランで元CIAの工作員であるパー​​トナーのジョン・リースに関するものです。このプログラマーは、暴力犯罪が発生する前に予測する「機械」と呼ばれる感覚的なAIを作成しました。世界中のすべての監視カメラと電子通信を監視および分析することにより、地球上のすべての人を常に追跡します。

ハロルドは、米国政府がテロ行為を事前に検出するためにマシンを構築しました。国家安全保障に関連するかどうかに基づいて、予測する犯罪をリストに分割します。関連するケースは政府によって処理されますが、「無関係な」リストは毎日削除されるようにプログラムされています。

ハロルドは、「無関係な」リストに対処することを望んで、自分自身のために小さなバックドアを作りました。このバックドアにより、マシンはハロルドに最も近い公衆電話を呼び出し(毎日1回程度)、社会保障番号を読み取ります。このSSNは、計画的な犯罪の一部として命が危険にさらされている人、またはそのような犯罪を計画している人に属します。


チャレンジ

入力を行わず、30個のランダムな電話番号とSSNを出力するプログラムを作成します(以下を参照)。


出力

「毎日」印刷されるテキストは2行あります。

  1. Crime predicted: 555-55-5555
  2. Calling: 1-555-555-5555 改行が続きます

このプロセスは1つの「月」(30「日」)の間繰り返す必要があります。


電話番号

すべての電話番号には次の要素が必要です。

  • 米国の国コード(最初の数字)が必要です。

  • ランダムな市外局番(3桁の最初のセット)が必要です。

  • 自身が電話番号の最初の3桁であるべきであるが555、4つの乱数によってその後に続きます。

以下に注釈付きの例を示します。

1-814-555-3857
|  |   |   |
|  |   |   |
|  |   |   +---------->   random four digits
|  |   |
|  |   +-------------->   the set 555
|  |
|  +------------------>   area code
|
+--------------------->   country code

社会保障番号

すべてのSSNは、次の形式の9桁のランダムな数字でなければなりません。

342-98-1613

Crime predicted: 234-72-8311
Calling: 1-633-555-0188

Crime predicted: 135-77-0910
Calling: 1-202-555-4719

Crime predicted: 722-90-6653
Calling: 1-466-555-1069

...

さらに27サイクル続けます。


スコアボード

ボードにスコアを表示するには、次の形式にする必要があります。

# Language, Bytes

取り消し線は問題を引き起こさないはずです。


3
また、米国の国番号/市外局番の有効な値は何ですか?
mınxomaτ

2
時間制限を解除しました。2番目の質問に関して、米国の国コードは明示的にa 1です。市外局番については、このチャレンジの目的のために、任意の3桁で対応します。@minxomat
ザック・ゲイツ

1
@LuisMendo 完全に定義されていない場合、ランダムが何を意味するかについてメタに関するコンセンサスがあります
-FryAmTheEggman

5
もちろん、ショーでマシンが実際に送信する形式で番号生成することはさらに複雑になります...;)
メイソンウィーラー

回答:


10

CJam、68 66 64バイト

2バイトを節約してくれたDennisに感謝します!

"Crime predicted: --
Calling: 1--555-

"30*{_5<{iAa*:mr}&}/

いくつかの印刷できないもの(各ランダムグループの代わりに1つ)があるため、コピー貼り付けは機能しません。ここにxxdダンプがあります。

00000000: 2243 7269 6d65 2070 7265 6469 6374 6564  "Crime predicted
00000010: 3a20 032d 022d 040a 4361 6c6c 696e 673a  : .-.-..Calling:
00000020: 2031 2d03 2d35 3535 2d04 0a0a 2233 302a   1-.-555-..."30*
00000030: 7b5f 353c 7b69 4161 2a3a 6d72 7d26 7d2f  {_5<{iAa*:mr}&}/

逆にするには、ファイルに貼り付けて起動しxxd -r in_file > out_fileます。オンラインで試すこともできます

説明

"..."30*     Push the string 30 times
{ ... }/     For each character in the string:
_5<{ ... }&    If the ASCII code is < 5:
iAa*             Push an array of as many 10s as the ASCII code
:mr              For each 10, choose a random 0-9 number

私は自分でこれを考えたことがなかったでしょうが、Pythでは2バイト短くなっているようです。
FryAmTheEggman

@FryAmTheEggman Pythを学ぶべきでしょう。CJamよりも短いことが多いです。必要に応じてその答えを投稿できます:)
アンドレアビオンド

8

Python 2、129

from random import*
print''.join([c,`randint(0,9)`][c>'w']for c in'Crime predicted: xxx-xx-xxxx\nCalling: 1-xxx-555-xxxx\n\n'*30)

素朴な方法。メッセージを受け取ります

Crime predicted: xxx-xx-xxxx
Calling: 1-xxx-555-xxxx

30回コピーします。次に、それぞれxをランダムな数字で置き換えrandint(0,9)、他のすべての文字を同じままにします。


6

Python 2、151バイト

主(および@Dennis)に感謝し%0ndます:D

from random import randrange as r
for i in[1]*30:print"Crime predicted: %03d-%02d-%04d\nCalling: 1-%03d-555-%04d\n"%(r(1e3),r(100),r(1e4),r(1e3),r(1e4))

6

Perl、85バイト、デニスとgrcに感謝!

$_="Crime Predicted: NNN-NN-NNNN 
Calling: 1-NNN-555-NNNN 

"x30;s/N/0|rand 10/eg;print

元のPerl、91 92バイト

print"Crime Predicted: NNN-NN-NNNN
Calling: 1-NNN-555-NNNN

"=~s/N/int rand 10/egr for 1..30

1
@Dennis aw、この答えを見るまで投稿しようとしていた。私は旗$_="..."x30;s/_/0|rand 10/eg;printを救った/r
-grc

@Dennisと@grcに感謝します!コメントで提案された変更を組み込むことは慣習ですか?そうでない場合、編集を元に戻します。しかし、いずれにしても、ありがとう!それ0|rand ...を逃したために繰り返し頭をたたくために今使っているトリックと繰り返し演算子を完全に忘れていました!
type_outcast

2
はい、それは慣習です。まだ行っていない場合は、Perlでのゴルフのヒントを確認してください。これは素晴らしいリソースです。
デニス

5

CJam、73 71 70バイト

30{"Crime predicted: x-x-x
Calling: 1-x-555-x
"'x/[ZY4Z4]Aaf*::mr.+N}*

CJamインタープリターでオンラインで試してください。

使い方

30{     e# Repeat 30 times:

e# Push the following string:

"Crime predicted: x-x-x
Calling: 1-x-555-x
"

'x/     e# Split at x's.
[ZY4Z4] e# Push the array [3 2 4 3 4].
Aaf*    e# For each integer in that array, repeat [10] that many times.
        e# This pushes [[10 10 10][10 10][10 10 10 10][10 10 10][10 10 10 10]].
::mr    e# For each 10, select a random integer between 0 and 9 (inclusive).
.+      e# Vectorized concatenation.
        e# This places the digits at the spots of the x's.
N       e# Push a linefeed.
}*      e#

5

ß、121 118 112バイト

°/N=1°(30°/M°=ß$-ß$$'Crime predicted: 000-00-0000\nCalling: 1-000-555-0000\n\n'),'',3)µ€(M='0')?ß!G0,9,1):M)°)°)

基本的に、0をそれぞれ乱数に置き換え、30回呼び出します。

オンラインターミナルを使用してテストします

sharps:~$ "<ctrl+v the code here>"                       
Crime predicted: 214-59-4707                              
Calling: 1-850-555-8529                                   

Crime predicted: 722-97-6832                              
Calling: 1-864-555-6965                                   

<and so on...>

編集(112B):($$sprintfのような)&三項演算子を使用します。


この言語の仕様へのリンクを提供していただけますか?
LegionMammal978

@ LegionMammal978書くのに時間がかかります。簡単に言えば、AutoItのすべての機能を備えています。
mınxomaτ


4

Pyth、62

アンドレアの素晴らしいCJam回答実装。

sm?<Cd5jkmOTCdd*30"Crime Predicted: --
Calling: 1--555-

"

ソースには複数の印刷できない文字があり、末尾に"。があってはならないことに注意してください。これはSEに追加されたので、もう少し読みやすくなっています。私はまだhexdumpを取得することができませんでしたが、以下のリンクは機能し、それからコピー&ペーストできるはずです。

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


3

CJam、74バイト

30{[ZY4Z4]{Aa*:mrs}%"Crime predicted: %s-%s-%s
Calling: 1-%s-555-%s

"e%}*

勝者ではありませんが、デニスがこれまでに持っていたものに少なくともある程度近づいており、異なるアプローチを使用しています。とにかく投稿する価値があると思いました。

これは、e%printfスタイルのフォーマット文字列で出力を生成するCJam 演算子を使用します。

30      Repeat count for whole output.
{       Start loop.
  [ZY4Z4] Build list of random number lengths: [3 2 4 3 4].
  {       Start loop over all random number lengths.
    Aa*     Build list of [10 ... ] with the random number length.
            E.g. for length 3, this will be [10 10 10].
    :mr     Apply the random number operator to the list. This will generate
            a list of random numbers between 0 and 9, with the given length.
    s       Convert it to a string.
  }%      End of loop over random number lengths.
  "..."   Format string, with a %s for each random number.
  e%      Apply printf style formatting.
}*      End of main repeat loop.

ああ、あなたはあのアバターの@DavidCarraherだと思った!
ベータ崩壊

@BetaDecayこれ?codegolf.stackexchange.com/users/3967/david-carraher。同じ動物でもありません!:)しかし、色はほとんど同じです。
レトコラディ

アプローチを組み合わせると、70バイトに達することができます。パーマリンク
デニス

@Dennisお気軽にどうぞ。あなたは私を何度も助けてくれました。
レトコラディ

@RetoKoradi十分近い;)
ベータ崩壊


3

JavaScript(ES6)、142

ßのサイドノートミックスマットの回答は、このタスクを達成するための非常に優れた方法を示しており、JSで簡単に実装してより良いスコアを与えることができます。私はそれについて考えていたらよかったのに。

編集不足しているテキストを追加しました(チャレンジを読み間違えました)

EcmaScript 6準拠のブラウザーで以下のスニペットを実行してテストします

/* TEST redirect console.log */ console.log=x=>O.innerHTML+=x+'\n'

for(i=30;i--;)console.log(`Crime predicted: ${(R=d=>(1e-9+Math.random()+'').substr(2,d))(3)}-${R(2)}-${R(4)}
Calling: 1-${R(3)}-555-${R(4)}
`)
<pre id=O></pre>


非常に素晴らしい解決策!ただし、電話番号の最後の部分は4桁未満である場合があります。SSNの2番目と3番目の部分と同じです。
ETHproductions

@ETHproductionsラット!前のバージョンに戻す!
-edc65

3

フーリエ、166 142バイト

45~d030(~i67a114a-9a+4a-8a32a112a^^a101ava+5a-6a116a101ava58a32a999roda99roda9999ro10a67a97a108aa-3a+5a-7a58a32a1oda999roda5oooda9999ro10aai^)

これは、バイト数が最も多いものの1つですが、私はフーリエの大ファンであり、解決策を試してみたいと思いました。あまり最適化されていません。

分解する:

45~d

変数dを45(ハイフンのASCIIコード)に設定します。この文字は非常に多く出力されるため、ここで宣言するためにいくつかのバイトが節約されます。

030(...)

アキュムレーターをゼロに設定し、30に達するまで括弧内でループします。

67a114a-9a+4a-8a32a112a^^a101ava+5a-6a116a101ava58a32a

「犯罪予測:」を印刷します。

999roda99roda9999ro10a

完全にランダムなSSN +改行を印刷します。

67a97a108aa-3a+5a-7a58a32a

「Calling:」を印刷します。

1oda999roda5oooda9999ro

ガイドラインに従って電話番号を印刷します:1-xxx-555-xxxx

10aa

最初からやり直すには、2つの改行を印刷します。


1
ちょっと、あなたは今、fourier.tryitonline.net(およびlabs.turbo.run/beta/fourier)にオンライン通訳がいることに興味があるかもしれません
ベータ崩壊

2

Pyth、67バイト

V30s.ic"Crime predicted: |-|-|
Calling: 1-|-555-|
"\|mjkmOTdj32434T

改行は重要であり、バイトカウントに含まれます。ここで試してみてください

                                Implicit: T=10, k=''
       "..."                    The output string
      c     \|                  Split on '|' placeholders
                     j32434T    32434 to base ten -> [3,2,4,3,4]
              m                 Map for d in the above:
                 mOTd             Generate d random numbers from 0-9
               jk                 Concatenate into string (join on empty string)
    .i                          Interleave segments of output string with random strings
   s                            Concatenate and output
V30                             Perform the above 30 times

2

Haskell、150バイト

import System.Random
p '#'=putChar=<<randomRIO('0','9')
p x=putChar x
main=mapM p$[1..30]>>"Crime predicted: ###-##-####\nCalling: 1-###-555-####\n\n"

2

JavaScript(ES6)、130 123バイト

minxomatのßソリューションをさらに一歩進めて、0sを0そこにあったはずのs の数に置き換えました。コードは、これらの数値を使用して、から正しい桁数を引き出しMath.random()、プロセスのバイト数を節約します。

for(i=30;i--;)console.log(`Crime predicted: 3-2-4
Calling: 1-3-555-4
`.replace(/[2-4]/g,x=>`${Math.random()}`.substr(2,x)))

やってみて:

// redirecting console.log() for this demonstration
console.log=x=>O.innerHTML+=x+'\n';
O.innerHTML='';

for(i=30;i--;)console.log(`Crime predicted: 3-2-4
Calling: 1-3-555-4
`.replace(/[2-4]/g,x=>`${Math.random()}`.substr(2,x)))
<pre id=O>

いつものように、提案は大歓迎です!


2

Java、246バイト

import java.util.*;class C{static{Random r=new Random();for(int i=0;i++<30;)System.out.printf("Crime predicted: %s-%s-%s\nCalling: 1-%s-555-%s\n\n",r.nextInt(900)+100,r.nextInt(90)+10,r.nextInt(900)+100,r.nextInt(900)+100,r.nextInt(9000)+1000);}}

改行あり:

import java.util.*;
class C{
    static{
       Random r = new Random();
       for(int i = 0; i++<30;)
           System.out.printf("Crime predicted: %s-%s-%s\nCalling: 1-%s-555-%s\n\n",r.nextInt(900)+100,r.nextInt(90)+10,r.nextInt(900)+100,r.nextInt(900)+100,r.nextInt(9000)+1000);
    }
}

始まりです。ランダムな数字を生成する代わりに、ランダムな3桁または4桁の数字を使用しました。


2

R、151 146または144バイト

コード

for(l in 1:30)cat(sep="","Crime predicted: ",(i=floor(runif(16,,10)))[1:3],"-",i[4:5],"-",i[6:9],"\nCalling: 1-",i[10:12],"-555-",i[13:16],"\n\n")

オンラインでテストする

非ゴルフ

for(l in 1:30) {
  i=floor(runif(16,,10))
  cat(sep="","Crime predicted: ",
      i[1:3],"-",i[4:5],"-",i[6:9],
      "\nCalling: 1-",i[10:12],"-555-",
      i[13:16],"\n\n")
  }

改善する余地はたくさんあると思いますが、Rの文字列をいじるのはよくありません。

編集1:変更runif(16,max=10)runif(16,,10)

私は別のコード(147 144バイト)を使用しましたsprintfが、あまりRライクなコードではないと思います。

for(l in 1:30)cat(do.call(sprintf,as.list(c('Crime predicted: %s%s%s-%s%s-%s%s%s%s\nCalling: 1-%s%s%s-555-%s%s%s%s\n\n',floor(runif(16,,10))))))

別のアプローチ(149バイト):

for(p in 1:30)cat(sep="",replace(s<-strsplit("Crime predicted: '''-''-''''\nCalling: 1-'''-555-''''\n\n","")[[1]],which(s<"-"),floor(runif(16,,10))))

2

PHP144 143バイト

<?=preg_replace_callback('/x/',function($x){return chr(rand(48,57));},str_repeat("Crime predicted: xxx-xx-xxxx
Calling: 1-xxx-555-xxxx

",30));


2

C#、280 263 246バイト

ゴルフ:

using System;class C{static string G(){var r=new Random();var s="";n h=x=>r.Next(x).ToString("D"+x);for(int i=0;i++<30;){s+="Crime predicted: "+h(3)+"-"+h(2)+"-"+h(4)+"\nCalling: 1-"+h(3)+"-555-"+h(4)+"\n\n";}return s;}delegate string n(int x);}

インデント:

using System;
class C
{
    static string G()
    {
        Random r = new Random();
        string s = "";
        Func<int, string> f = x => r.Next((int)Math.Pow(10, x)).ToString("D" + x);            

        for (int i = 0; i++ < 30;)
        {
            s += "Crime predicted: " + f(3) + "-" + f(2) + "-" + f(4) + "\nCalling: 1-" + f(3) + "-555-" + f(4) + "\n\n";
        }
        return s;
    }
}

Codegolfの新機能、ヒントを歓迎します!


プログラミングパズルとコードゴルフへようこそ!私はC#と密接に慣れていないんだけど、それは.NETが前提ですので、PowerShellはあるように、私は考えてh(999)から番号を生成します000する998手段は、これがないように、包括かなり仕様の精神を打ちます。私は同じ問題に遭遇しました。
AdmBorkBork

あなたは正しい、私は今それを修正します!
アンソニーティマーズ

修正後に最大280バイトになり、デリゲートハンドラーで書式設定を行うことを考えて、263バイトに戻しました。
アンソニーティマーズ

1

ハッシウム、230バイト

func main(){foreach(x in range(1,31){println("Crime predicted: "+r(3)+"-"+r(2)+"-"+r(4));println("Calling: 1-"+r(3)+"-555-"+r(4)+"\n");}}
func r(l){z=new Random();a="";foreach(y in range(1,l))a+=z.next(0,10).toString();return a;}

拡張:

func main () {
        foreach (x in range(1, 31) {
                println("Crime predicted: " + r(3) + "-" + r(2) + "-" + r(4));
                println("Calling: 1-" + r(3) + "-555-" + r(4) + "\n");
        }
}
func r (l) {
        z = new Random();
        a = "";
        foreach (y in range(1, l))
                a += z.next(0, 10).toString();
        return a;
}

1

ルビー、98文字

30.times{puts"Crime Predicted: DEF-GH-IJKL
Calling: 1-MNO-555-QRST

".tr"D-OQ-T",rand.to_s[2..-1]}

サンプル実行:

bash-4.3$ ruby -e '30.times{puts"Crime Predicted: DEF-GH-IJKL\nCalling: 1-MNO-555-QRST\n\n".tr"D-OQ-T",rand.to_s[2..-1]}' | head
Crime Predicted: 867-29-2637
Calling: 1-278-555-5424

Crime Predicted: 913-31-6306
Calling: 1-744-555-8188

Crime Predicted: 868-36-4612
Calling: 1-926-555-3576

Crime Predicted: 988-06-1643

1

JavaScript、146 141

console.log(Array(30).join("Crime predicted: 3-2-3\nCalling: 1-3-555-4\n\n").replace(/[2-4]/g,function(m){return(m+Math.random()).substr(3,m)}))

あなたよりも少ない文字数で同じ言語の回答が既にあります。
-Jakuje

@Jakujeもう1つの答えは、まだ広く利用できないES6を使用している
ペレグ

その後、おそらく大丈夫です。あなたの答えにこれを記載するのは良いことです。
-Jakuje

1
@Jakujeの人々は何でも好きなものを提出できます!それは、他の人を打ち負かすことと同じくらい挑戦的なことです。
エリック

1

ES6より前のJavascript、128

for(i=30;i--;)console.log('Crime predicted: x-x-x\nCalling: x-555-x\n'.replace(/x/g, function(){return 1e3*Math.random()|0}))

どうにかダッシュを削除できるように感じましたが、確かではありません。


1
いくつかのエラー:1)ランダムな部分の長さが正しくありません(しようとしてさえありません)2) "1-"がありません。
edc65

1

Pyth、73バイト

V30FGPc"Crime predicted: xxx-xx-xxxx\nCalling: 1-xxx-555-xxxx"\xpGpOT)pb"

デモ


1

ジュリア、120バイト

R(n)=lpad(rand(0:10^n-1),n,0)
for i=1:30 println("Crime Predicted: "R(3)"-"R(2)"-"R(4)"\nCalling: 1-"R(3)"-555-"R(4))end

ゴルフをしていない:

# Define a function for returning a random number with a
# specified number of digits
function R(n::Int)
    lpad(rand(0:10^n-1), n, 0)
end

# Print 30 times
for i = 1:30
    println("Crime Predicted: " R(3) "-" R(2) "-" R(4)
            "\nCalling: 1-" R(3) "-555-" R(4))
end


1

PowerShellの、120 108 103 102のバイト

0..29|%{("Crime predicted: XXX-XX-XXXX`nCalling: 1-XXX-555-XXX"-split"X"|%{$_+(Random 10)})-join'';""}

代わりに分割ループを配列に出力して@(..)再結合されるコードブロックに設定することにより、さらに数バイトを短縮しました。

とにかく前に実行されるコードブロック@(...)指定することを覚えて、これを排除しまし-join''た。

これにより、$a変数を割り当てる必要がなくなります。また、-split機能のしくみにより、以前のコードは電話番号に対して桁数が多すぎるため、に縮小することでそこに保存されている空きバイトを取得しました1-XXX-555-XXX。それはRandom 9実際にからランダムに選ぶエラーを補った0-8代わりに指定する必要がありますRandom 10.

Soooは 2桁に近い数字を使いましたが、さらに4つの 3バイトをゴルフで飛ばせるかどうかはわかりません...


前、108

0..29|%{$a="";"Crime predicted: XXX-XX-XXXX`nCalling: 1-XXX-555-XXXX"-split"x"|%{$a+="$_$(Random 9)"};$a;""}

代わりに文字列をで分割Xし、結果の文字列の配列を再ループし、各エントリをRandom数字で連結して最終出力文字列を作成することにより、コードを数バイト短縮しました$a。次のようなことができないことに注意してください"string".replace("x",$(Random 9))ことそうすると、Random一度しか呼び出されないため、1-222-555-2222ため、たとえば電話番号が必要になります。


前者、120

0..29|%{"Crime predicted: "+(Random 1e9).ToString("000-00-0000");"Calling: "+(Random 1e7).ToString("1-000-555-0000");""}

寛大な出力仕様(つまり、000-00-0001有効なSSNとして扱われます)と、.ToString()PowerShellが使用する非常に堅牢なフォーマットアルゴリズムのおかげで、冗長な言語に対してかなり競争力があります。PowerShellも出力します\r\n、すべての文字列後にため、反復間の改行の要件は単純""です。

これはのGet-前で暗黙的に使用されることに注意してくださいRandom。したがって、これは一部のプラットフォーム/実装では本当に遅くなる可能性があります。


0

Befunge-98、170

これはまだ少し下がっていると思います。しかし、少なくとも私はC#を破りました。befungius.aurlien.netでテスト済み。

a3*>  82*v>":detciderp emirC">:#,_$...'-,..'-,....av
>1 -:!#;_v^;v,,,"-555-"...,,,,,,,,,,,"Calling: 1-",<
\  ^v< <2?1v,
+    ^;^3<;<,
^ <0?3vv....<
^;^6<;<>a,v
   v_@#:-1<

0

Python 2、151 150バイト

from random import*
p="Crime predicted: xxx-xx-xxxx\nCalling: 1-xxx-555-xxxx\n\n"*30
while'x'in p:p=p.replace('x',str(randint(0,9)),1)
print p.strip()

私はこの方法を手に入れることができたのでゴルフをしました。

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