N番目の文字を実行してNを取得します


19

最初の文字とその後のN番目のすべての文字を新しいプログラムに結合すると、出力はNになるように、可能な限り最短のプログラムを作成します。これは、N = 1、2、...、16で機能する必要があります。

あなたがあればそれを言うための別の方法は、ある削除プログラムからのすべての文字を除い最初の1とその後のN番目ごとの1、残りのコードの出力はNでなければなりません

あなたのコードが

ABCDEFGHIJKLMNOP

N = 1の結果はになりABCDEFGHIJKLMNOPます。これを実行すると、1が出力されます
。N= 2の結果はになりACEGIKMOます。これを実行すると、2が出力されます
。N= 3の結果はになりADGJMPます。これを実行すると、3が出力されます
。N= 4の結果はになりAEIMます。これを実行すると、4が出力されます
。N= 5の結果はになりAFKPます。これを実行すると、5が出力されます
。N= 6の結果はになりAGMます。これを実行すると、6が出力されます
。N= 7の結果はになりAHOます。これを実行すると、7が出力されます
。N= 8の結果はになりAIます。これを実行すると、8が出力されます
。N= 9の結果はになりAJます。これを実行すると、9が出力されます
。N= 10の結果はになりAKます。これを実行すると10が出力されます
。N= 11の結果はになりALます。これを実行すると、11が出力されるはずです
。N= 12は、AM。これを実行すると、12が出力されます
。N= 13の結果はになりANます。これを実行すると13が出力されます
。N= 14の結果はになりAOます。これを実行すると、14が出力されます
。N= 15の結果はになりAPます。これを実行すると、15が出力されます
。N= 16の結果はになりAます。これを実行すると、16が出力されるはずです。

詳細

  • ASCIIおよび非ASCIIのすべての文字が許可されます。(改行と印刷不能ASCIIも使用できます。キャリッジリターンとラインフィードは別個の文字としてカウントされることに注意してください。)
  • スコアは、変更さていないプログラムの文字の長さです(例では15)。最も低いスコアが勝ちます。
  • 16未満のスコアは明らかに変更できません。変更されたプログラムの少なくとも2つが同一になるからです。
  • 出力は、ファイルまたは標準出力、またはその他の妥当なものに出力される場合があります。ただし、16の異なるプログラムの出力はすべて同じ場所に移動する必要があります(たとえばAO、stdoutにA行くがファイルに行く場合は大丈夫ではありません)。入力はありません。
  • 出力は16進数ではなく10進数でなければなりません。実際の出力には、1から16までの数字を構成する1または2文字のみが含まれている必要があります。(Matlabのようなものans =は問題ありません。)
  • プログラムは、N = 17以上で機能する必要はありません。

プログラムのコメントに対するあなたのスタンスは?賛成か反対か?
AndoDaan

1
@AndoDaan Yay
カルビンの趣味14

お帰りなさい!=)Calvin Hobbiesによって編集されたのではなく、これが本当に求められていることに気付く前に、私はしばらく凝視しなければなりませんでした。
2014

2
ええ、だからあなたは結局私たちを離れませんでした!:D
ドアノブ

3
コードがABCDEFGHIJKLMNOありN = 15、結果コードがちょうどであるように見えAます。
スナック14

回答:


11

APL、49

⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_×   1_   _⍝_⍝ __2

変更されたプログラム

1  ⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_×   1_   _⍝_⍝ __2
2  ⌊⍟7⍟|21189×1×345× 1  ⍝⍝_2
3  ⌊○⍟/119-××5 1 ⍝ 2
4  ⌊7|18××4×1 ⍝2
5  ⌊⍟21×○5   
6  ⌊⍟19×51⍝2
7  ⌊11-4 ⍝
8  ⌊|8×× 2
9  ⌊/9×1 
10 ⌊2×5 
11 ⌊11 ⍝
12 ⌊1×12
13 ⌊13 
14 ⌊14⍝
15 ⌊15 
16 ⌊8×2

説明

説明を簡単にするため、下から始めます

APLには2つの言語機能があります。1つは、APLには演算子の優先順位がなく、ステートメントは常に右から左に評価されるということです。二つには、多くのAPL機能は、それがその右側に一つの引数を指定した場合、かなり違っによって振る舞い(モナド)またはその左側にある2つの引数右(二項)。

モナディック×は切り捨てられ(床関数)、ダイアディックは明らかに乗算であり、残りの行をコメントアウトします

16 ⌊8×2
15 ⌊15 
14 ⌊14⍝
13 ⌊13 
12 ⌊1×12
11 ⌊11 ⍝
10 ⌊2×5 

9:⌊/9×1
/削減です。基本的には、左の関数と右の配列を受け取り、配列の要素のすべてのペアの間に関数を挿入して評価します。(これは一部の言語では「フォールド」と呼ばれます)
ここでは、正しい引数はスカラーなので/何もしません。

8:⌊|8×× 2
モナド×符号関数であり、モナド|は絶対値関数です。したがって、× 2評価され1|8×1もちろん8

7:⌊11-4 ⍝明白であるべき

6:⌊⍟19×51⍝2
モナディックは自然対数です
ので、と⍟19×51評価されln(19×51) = 6.87626...切り捨てられます6

5:⌊⍟21×○5
単項はπでその引数を乗算し
⍟21×○5ていますln(21×5π) = 5.79869...

4:⌊7|18××4×1 ⍝2
ダイアディックは、|MOD関数である
×4×1と評価され1、そして7|18×1あります18 mod 7 = 4

3:⌊○⍟/119-××5 1 ⍝ 2
スペースで区切られた値は配列です。APLでは、ほとんどのスカラー関数が配列引数を与える場合、暗黙のマップであることに注意してください。
ダイアディックはログである
だから××5 1、5及び1にシグナムのシグナムで与える1 1119-1 1である¯118 ¯118¯単にマイナス記号である。APLは負の数と減算とを区別しなければならない)、および⍟/¯118 ¯118ログである-118(-118)= 1

2:⌊⍟7⍟|21189×1×345× 1 ⍝⍝_2
自分で解決できます

1:⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_× 1_ _⍝_⍝ __2
これは、のより複雑な使用で構成されています/。場合n数であり、F関数であり、A次いで、アレイでnF/Aの各群取りnの連続したエントリをAして適用F/。たとえば2×/1 2 3、連続するエントリの各ペア(1 2および2 3)を受け取り×/、各グループに適用して2 6
So を提供し1|/2111118 9ます2111118 9|/スカラーに適用されるように)を返します。次に、⍟○7⍟⍟lnを適用し、それらの数値に7を記録し、それらにπとlnを再度乗算します。反対側に出てくる数字は1.46424... 0.23972...
ここにあり、配列の最初の要素を選択するために使用されます。


22

Python- 1201 1137(ジェネレータ:241 218)-ハッシュを長く生き続けよう!

戦略:

必要な出力と同じ数のハッシュですべての行を開始しようとしましたn。その後、他のすべてのバージョンはこの行を完全にスキップします。

ただし、主な困難は、正しい数のハッシュを追加して、次の実行が次の行の先頭に正確にヒットするようにすることでした。さらに、バージョン16 printが行5 のコマンドに直接ジャンプするなど、他のバージョンとの干渉が発生する可能性があります。したがって、これは迅速なテストのためのヘルパースクリプトと組み合わせた多くの試行錯誤でした。

統計学:

  • キャラクター:1201 1137
  • ハッシュ:1066 1002(88.1%)
  • 非ハッシュ:135(11.9%)

コード:

#
print 1#####
#p#r#i#n#t# #2######################
##p##r##i##n##t## ##3###
###p###r###i###n###t### ###4
####p####r####i####n####t#### ####5#########
#####p#####r#####i#####n#####t##### #####6##########
######p######r######i######n######t###### ######7###########
#######p#######r#######i#######n#######t####### #######8###
########p########r########i########n########t######## ########9##
#########p#########r#########i#########n#########t######### #########1#########0##
##########p##########r##########i##########n##########t########## ##########1##########1##
###########p###########r###########i###########n###########t########### ###########1###########2##
############p############r############i############n############t############ ############1############3##
#############p#############r#############i#############n#############t############# #############1#############4##
##############p##############r##############i##############n##############t############## ##############1##############5##
###############p###############r###############i###############n###############t############### ###############1###############6

テストスクリプト:

with open('printn.py', 'r') as f:
    c = f.read()

for n in range(1, 17):
    print "n =", n, "yields",
    exec c[::n]

出力:

n = 1 yields 1
n = 2 yields 2
n = 3 yields 3
n = 4 yields 4
n = 5 yields 5
n = 6 yields 6
n = 7 yields 7
n = 8 yields 8
n = 9 yields 9
n = 10 yields 10
n = 11 yields 11
n = 12 yields 12
n = 13 yields 13
n = 14 yields 14
n = 15 yields 15
n = 16 yields 16

更新:生成スクリプト!

私は自分の解決策について考え、それをアルゴリズムで生成するパターンがなければならないと考えました。だからここに行きます:

lines = ['#']
for i in range(1, 17):
    lines.append(('#' * (i - 1)).join('\nprint ' + `i`))
    fail = True
    while fail:
        while ''.join(lines)[::i].find('print ' + `i`) < 0:
            lines[i] = '#' + lines[i]
        fail = False
        for n in range(1, 17):
            try:
                exec ''.join(lines)[::n]
            except:
                lines[i] = '#' + lines[i]
                fail = True
                break
print ''.join(lines)

プログラムを1行ずつビルドします。

  1. ハッシュから始めます。
  2. コマンドに新しい行iを追加し、2つの隣接する文字の間にハッシュします。print ii - 1
  3. 現在のプログラムの「iバージョン」(i番目の文字ごと)にコマンドが含まれていないprint i(位置合わせ不良による)か、n-versionでn in range(1, 17)例外がスローされている間に、前の行に別のハッシュを追加します。

実際に、今朝手動で見つけたよりも短いプログラムを返しました。(したがって、上記のソリューションを更新しました。)さらに、このパターンに続く短い実装はないと確信しています。しかし、あなたは決して知らない!

ゴルフバージョン-241 218:

h='#';L=[h];I=range(1,17);J=''.join
for i in I:
 p='print '+`i`;L+=[(h*(i-1)).join('\n'+p)]
 while 1:
  while J(L)[::i].find(p)<0:L[i]=h+L[i]
  try:
   for n in I:exec J(L)[::n]
   break
  except:L[i]=h+L[i]
print J(L)

たとえば、各行に必要な数の後続のハッシュをハードコーディングすることにより、より短いジェネレーターが存在する可能性があることに注意してください。しかし、これはそれら自体を計算し、N> 16に使用できます。


3
キャラクターは通常「ハッシュ」と呼ばれます(空想を感じる場合は「オクトソープ」、または「番号記号」)
FireFly 14

よくやった!Rubyを使用すると、のp 1代わりにを使用して、Rubyを大幅に短縮できますprint 1
カルビンの趣味14

1
そのとおり!コードゴルフに関しては、これはPythonの大きな弱点かもしれません。-しかし、AndoDaanの5765776文字のソリューションのおかげで、私のコード長はまだ平均をはるかに超えています!:)
ファルコ14

21

Befunge 93-五百六百五十六千五百七十七と七十六文字

私は真剣に受け止められることを要求します...

v                                                                               &(720 720 - 80) X SPACE
""""""""""""""""                                                                &(720 720 - 80) X SPACE
1234567890123456                                                                &(720 720 - 80) X SPACE
"""""""""1111111                                                                &(720 720 - 80) X SPACE
,,,,,,,,,"""""""                                                                &(720 720 - 80) X SPACE
@@@@@@@@@,,,,,,,                                                                &(720 720 - 80) X SPACE
         ,,,,,,,                                                                &(720 720 - 80) X SPACE
         @@@@@@@                                                                &(720 720 - 80) X SPACE

3つの理由。第1の理由:befungeスクリプトは常に80x25であるため、何があっても、コードのある行で何かを減らす必要がありました。第2の理由:何かが約550万スペースである理由は、720 720が1から16の最小公倍数であるためです...文字をスキップしているときに混乱が生じないことを意味します。第三の理由:すごい、これはかなりばかげている。


15

209文字(さまざまな言語)

私は物事をシンプルに保ち、多くの主要な要因を持つ位置に何かを置くことを避けようとしました。利点は、多くのスクリプト言語で実行できることです。意図的に曲がっていない言語で動作し、次の機能を備えている必要があります。

  • 整数リテラル
  • 基本的な算術演算子+、-(減算と否定)、*、/
  • 裸の式の評価を出力します
  • 行コメントを開始する単一の文字があります

例えば、

Python 2コマンドラインインタープリター(ファイルからではありませんが):

+                1 #            4 /   23      #    #   5            #            9   #            7   6 *         #    # -        5     2   *  -        ##  2        6   #2                     *   2       6   4

MATLAB(単に「#」を「%」に置き換えます):

                 1 %            4 /   23      %    %   5            %            9   %            7   6 *         %    % -        5     2   *  -        %%  2        6   %2                     *   2       6   4

NB最初の「1」の前には17個のスペースが必要です。あなたたちはたくさんの言語を知っているので、私がそれを実行できるものをもっとリストしてください(:

編集:Pythonの位置0に単項+を追加して、行がインデントされないようにしました。


Spyder IndentationErrorはコマンドラインで実行をスローします。ただし、ここにコードを投稿するときに正しいマークダウン構文を使用しなかった可能性があります。
ファルコ14

スペースの数が間違っていたのを恐れていたが、今では修正されている。@Falko各プログラムはすべて1行にする必要があります。そのため、不足しているスペースがインデントエラーを引き起こすとは思いません。通訳者は、すべてを揃える必要があるか、各番号のプログラムをすべて一緒にではなく個別に実行する必要があるかもしれません。
feersum 14

私の通訳は、最初の行が最初から始まることを期待しています。そのため、コードを実行できません。
ファルコ14

unexpected indentPython 2.7コンソールも取得しています。しかし、Matlabで動作するので心配はありません。Rubyでも機能すると思います。
カルビンの趣味14

申し訳ありませんが、ファルコとカルビンの趣味は、あなたが正しいことはうまくいきませんでした。しかし、最初の文字を「+」に変更することでエラーを回避することができました。
feersum 14

9

CJam、89バイト

GiiAHH(5A5(7ii)ii;(;(-i((i(-i)i)ii)i()i((i(i(iiii(iii(iiiii(iiiii(i-i(iiiiiii(ii(ii(-ii-

このアプローチでは、コメントは一切使用しません。

i整数にキャストするため、ここでは何もしません。空白に置き換えることもできますが、文字は読みやすいようです...

次のコードを実行してオンラインで試してください

G,{)
"GiiAHH(5A5(7ii)ii;(;(-i((i(-i)i)ii)i()i((i(i(iiiii(iii(iiiii(iiiii(i-i(iiiiiii(ii(ii(-ii-"
%_~}%N*

実行例

$ cat nth-char.cjam 
G,{)"GiiAHH(5A5(7ii)ii;(;(-i((i(-i)i)ii)i()i((i(i(i
iii(iii(iiiii(iiiii(i-i(iiiiiii(ii(ii(-ii-"%_~}%N*N
$ cjam nth-char.cjam 
GiiAHH(5A5(7ii)ii;(;(-i((i(-i)i)ii)i()i((i(i(i
iii(iii(iiiii(iiiii(i-i(iiiiiii(ii(ii(-ii-
1
GiH(A(i)i((i((iii)(i(((
i(i(ii(ii(-(iii(ii(i-
2
GA(5ii(-(-ii(((iii(i(i(iii(((i
3
GHAii((ii(((iii(i-iii(-
4
GH(i(iii(i(i(i(ii-
5
G(i((i((i(((i((
6
G5)-ii(iii(i(
7
GAi(i(iiiii-
8
G5(-(i(ii(
9
G((i((((i
10
G7ii(i(i-
11
Gi((i(i(
12
Gi((ii(
13
G)i(i((
14
Giii(i
15
Giiiii
16

7

GolfScript、61バイト

1})_#;#;;00123358_(_};}_}_}} _}_(__6
_})4_)_+)__(__}__;_}___6

これはコメント(#)と文書化されていない「スーパーコメント」を利用します(一致しないものに続くものはすべて}黙って無視されます)。

_何もありません。空白で置き換えることもできますが、アンダースコアは読みやすいようです...

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

実行例

$ cat nth-char.gs
16,{)"1})_#;#;;00123358_(_};}_}_}} _}_(__6
_})4_)_+)__(__}__;_}___6"\%.~}%n*
$ golfscript nth-char.gs
1})_#;#;;00123358_(_};}_}_}} _}_(__6
_})4_)_+)__(__}__;_}___6
1
1)##;0238(}}}} }(_
}4)+_(__;}_6
2
1_#025(;}}}_
)))(};_6
3
1#;28}} (
4+(_}6
4
1;05}_}64)__6
5
1#2(}}
)(;6
6
1;3; 6)_}
7
1;8}(4(}
8
10(}
);
9
10}}4_6
10
11}_+_
11
12}
(6
12
13})_
13
13 )}
14
15})6
15
18((
16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.