ボックス内の言語


8

ランタイム配置用のボーナスが追加されました。

プログラムを小さく保ちながら、プログラムで使用される識別子をテキストボックスに入力するプログラムを記述します。プログラムで使用したすべての識別子(作成したもの除く)を使用して、12x6ボックスにできるだけ多くの識別子を入力します。クロスオーバーする識別子(クロスワードスタイル)に対して余分なポイントを取得しますが、エンドツーエンドで結合することはできません。

出力

プログラムは、パックされた識別子と#境界線を含む12x6文字のボックスを(標準出力に)印刷する必要があります。ボックスには、文字ALでラベル付けされた列と行1〜6(下の例のように間隔が空いている)が必要です。次に、使用する各識別子の行を出力します。各行には、最初の文字の位置、識別子自体、およびスコアがあります。スコアは、「+ボーナス」が追加された識別子の文字数と同じです。識別子は、交差識別子と共有される各文字に対して5ポイントのボーナスを取得します。最後の行は、「TOTAL:」と識別子スコアの合計を報告します。可能なPythonプログラムの出力例は次のようになります。

   ABCDEFGHIJKL
  ##############
1 #  pinsert   #
2 #  o         #
3 #  print     #
4 #    not     #
5 #            #
6 #import      #
  ##############
C1 pop 3+5
D1 insert 6
C3 print 5+10
E3 in 2+10
E4 not 3+5
A6 import 6
TOTAL: 55

ノート:

  • 識別子は(import上記のように)接続解除できます。
  • に参加popしてprintインライン化することはできませんpoprint
  • in内部の文字列はinsert使用できません。結合する単語は直交している必要があります。
  • 識別子は(のような、互いに隣接して配置することが可能popinsert上記)。

回答には、ソースコードを含むプログラム出力と、言語名とスコアで構成されるタイトルを含める必要があります。

スコア

チャレンジのスコアは、パズルスコアの2乗をソースコードのサイズ(バイト単位)で割った値になります。例:300バイトのプログラムを使用した上記のパズルはスコアを付け55*55/300 = 10.08ます。最も高いスコアが勝ちます。

ルール

  • プログラムで定義されていない任意の識別子をプログラムで使用できます。キーワード、クラス名、メソッド名、ライブラリー名、および組み込み関数名は、適格なIDの例です。
  • 編集:最小限の言語リリースに含まれている標準ライブラリのみを使用できます。拡張言語パッケージと外部ライブラリの使用(現在は禁止)は禁止されています。識別子の広範なリストを持つ膨大な範囲のライブラリーは、この課題のバランスを崩します。これがあなたの言語でどのように機能するかわからない場合は、コメントに質問を残してください。
  • 識別子は[a-zA-Z_]文字のみで構成され、2文字以上である必要があります。
  • パズルで使用できるのは、各識別子のみです。
  • 識別子は左から右または下向きにのみ使用できます。

ダイナミックボーナス!

コードが実行時に識別子を配置する場所を決定する場合、共有レターボーナスは5ではなく20になります。使用する識別子をリストすることもできますが、コードはボックス内のどこに配置するかを決定する必要があります。また、コードはスコアリストを計算して印刷する必要があります。プレースメントが識別子リストの順序、ハードコードされたペアリング、またはその他の動的でないプレースメントのショートカットに依存している場合、動的ボーナスの対象にはなりません。

上記の出力例では、実行時配置プログラムのパズルスコアは145になります。コードが800バイトの場合、スコアはになります145*145/800 = 26.28

ダイナミックボーナスは、静的なハードコードされたソリューション文字列ではなく巧妙なアルゴリズムに報酬を与え、より大きなソースコードサイズを補うように設計されています。

編集:

  • 使用されるライブラリを、最小言語リリースのライブラリのみに変更しました。
  • 動的ボーナスオプションを追加しました。

明確にするために、スコアが大きいほど良いですね。
デジタルトラウマ

1
正しい。プログラムをできるだけ小さくしながら、ボックスにできるだけ多くの一意の識別子を詰め込みます->最高のスコア。
ロジックナイト

この課題は実際にプログラミングに関係していますか?
feersum

おそらくこれをもっと明確にすべきでしょう。テキスト要件を出力するプログラムを作成して実行する必要があります。出力のテキストは、作成するプログラムで使用される識別子によって異なります。
ロジックナイト

1
参考までに、SIMDまたはShaderを含む一部のライブラリでは、xyzw/ rgba/ stpq:)のすべての組み合わせが定義されています
kennytm

回答:


2

STATA、387 ^ 2/677 = 221.2

私は怠惰になり、最適なスコアでそれを取得しようとする前に動作する何かを出力したかっただけです。もっと言葉を入れたら、後で更新するだろうし、STATA(CodeGolfではあまり人気がないようです)を使用している人からの提案を受け入れるつもりです。STATAは、2文字のコマンド/パラメータをたくさん持つことについて本当に優れています。また、通常、ほとんどの文字を短縮して文字やフィットを節約できます(つまり、表示はdisplay、displa、displ、disp、dis、またはdiにすることができます)。また、キャプチャは、出力およびエラーメッセージを抑制することを意味します。したがって、whileループ全体の出力は0です。

cap infile using a,us(b)
cap while _rc>0{
ls
cap ge c=1 if 0<1
so c
egen d=rownonmiss(c),str
regres c d
notes
clist,noh no
li,compress
dec c,g(f)
do a
}
gl e=";;;ABCDEFGHIJKL ;;############## 1;#rownonmissdo# 2;#e;hd;o;notes# 3;#geii;hif_rc;# 4;#r;ls;clist;;# 5;#egen;ailu;;;# 6;#slcompress;;# ;;############## A1;rownonmiss;10+30 K1;do;2+5 H2;notes;5+20 A3;ge;2+5 G3;if;2+5 I3;_rc;3+15 C4;ls;2+10 F4;clist;5+20 A5;egen;4+20 C6;compress;8+20 A1;regres;6+15 C1;while;5+15 F1;noh;3+5 H1;infile;6+25 I1;so;2+10 J1;str;3+15 K1;dec;3+15 D2;dis;3+5 I3;_s;2+10 F4;cap;3+10 G4;li;2+5 B5;gl;2+5 D5;no;2+10 I5;us;2+5 TOTAL:;387"
token $e
forv x=1/34{
dis subinstr(``x'',";"," ",.)_s(0)
}

生成する

   ABCDEFGHIJKL
  ##############
1 #rownonmissdo#
2 #e hd o notes#
3 #geii hif_rc #
4 #r ls clist  #
5 #egen ailu   #
6 #slcompress  #
  ##############
A1 rownonmiss 10+30
K1 do 2+5
H2 notes 5+20
A3 ge 2+5
G3 if 2+5
I3 _rc 3+15
C4 ls 2+10
F4 clist 5+20
A5 egen 4+20
C6 compress 8+20
A1 regres 6+15
C1 while 5+15
F1 noh 3+5
H1 infile 6+25
I1 so 2+10
J1 str 3+15
K1 dec 3+15
D2 dis 3+5
I3 _s 2+10
F4 cap 3+10
G4 li 2+5
B5 gl 2+5
D5 no 2+10
I5 us 2+5
TOTAL: 387

この回答は有効に見えます。現在はリーダー。
ロジックナイト

3

パイソン、134 2 /349 = 50.02

規則を正しく理解していれば、これは有効な提出物です。

from sys import *
stdout.write("""   ABCDEFGHIJKL
  ##############
1 #from   f  i #
2 #  r   not t #
3 #      write #
4 #  s   import#
5 #  y   False #
6 #  stdout    #
  ##############
A1 from 4+5
C1 or 2+5
H1 format 6+25
K1 iter 4+10
G2 not 3+5
G3 write 5+10
C4 sys 3+5
G4 import 6+10
G5 False 5+5
C6 stdout 6+10
TOTAL 134
""".format(not False or iter([])))

識別子を追加することで、スコアを増やし続けることができます。プログラムのサイズは線形に(識別子の長さの約2倍)増加し、スコアは識別子の長さの約2乗だけ増加します。その後、課題は、ほとんどのキーワードを正方形に詰め込む方法ではなく、それを行う短いプログラムを作成する方法ではなくなります。


あなたの答えは有効に見えます。プログラマーにある程度のイントロスペクションを備えた動的ソルバーを書くように動機づけることを計画していましたが、この埋め込み文字列への埋め込みアプローチがより簡単になると思います。はぁ。
ロジックナイト

課題はプログラミングよりもパズルであるというあなたの主張はよく理解されています。プログラムでランタイムプレースメントを使用する回答にボーナスを追加しました。文字列印刷スタイルはまだ有効ですが、ボーナスを利用するプログラミングソリューションをもっと見たいと思っています。あなたの答えと洞察+1をありがとう。
ロジックナイト

多分私はちょうど何かが足りないのですが、なぜstdout.writeではなくprint、そしてformat(not False or iter([]))最後に何があるのですか?また、「sys」の横に「is」、「from」の下に「for」として簡単に追加することもできます...
aquavitae

@aquavitae有効な構文でプログラムで使用されている識別子のみを使用できるため、Frxstremにはパズルで使用される識別子が含まれています。プログラムは、意味をなしたり、効率的である必要はありません。
ロジックナイト

ああ、申し訳ありませんが、どうやら私は問題を適切に読みませんでした。その場合、format読み取りを変更することができますiter([i for i in [not False is sys]])
aquavitae

0

Perlの、728 2 /639 = 829.4

ああ、これは有効ではありません。コードに識別子を含める必要があることを逃しました。

#!perl -l
use B::Keywords'@Symbols','@Barewords';
use List::Util shuffle;
srand 45502;
@b=@a=shuffle map{push@{+length},$_;$_}grep/^[a-z]{2,}$/,@Symbols,@Barewords;
$z=$"x12 .$/;$z x=6;
$s=length,$z=~s/ {$s}/$_/&&($_=0)for@a;
$_=$z;$"='|';
sub f{join'',/(.)(?=@_.*(\n))/sg}$_=f".{12}(.)"x5;
s/@a/$v=length$&;$tot+=$v*21;$r.=(map{m!.!;map{$&.$_}1..7}A..L)[@-]." $& $v+".($v*20)."\n";uc$&/ge;
$_=f".{6}(.)"x11;
s/@b/$v=length$&;$b=$&=~y!A-Z!!;$tot+=$v+$b*20;$c=lc$&;$r.=(map{m!.!;map{$_.$&}A..M}1..6)[@-]." $c $v+".($b*20)."\n";uc$&/ige;
$_=$z;
s/
/#
/mg;
s/^/++$l.' #'/mge;
print'   ',A..L,'
  ','#'x14,'
',$_,'  ','#'x14,"
${r}TOTAL: $tot"

これには、perlリフレクションモジュール(B::Keywords)が必要です。でUbuntuにインストールできますsudo apt-get install libb-keywords-perl。上記のコードで指定されたシードを使用すると、728の回答が生成されます。

   ABCDEFGHIJKL
  ##############
1 #dumplogforqr#
2 #lcfirstbreak#
3 #socketshmctl#
4 #requiregiven#
5 #lengthgmtime#
6 #getserventdo#
  ##############
B1 uc 2+40
C2 fc 2+40
F3 tr 2+40
G1 gt 2+40
I1 or 2+40
J1 recv 4+80
L4 ne 2+40
A1 dump 4+20
E1 log 3+20
H1 for 3+40
K1 qr 2+0
A2 lcfirst 7+60
H2 break 5+40
A3 socket 6+40
G3 shmctl 6+20
A4 require 7+20
H4 given 5+40
A5 length 6+0
G5 gmtime 6+20
A6 getservent 10+0
K6 do 2+0
TOTAL: 728

perlのバージョンが異なれば、RNGやキーワードリストも異なる可能性がありますが、同等の結果を持つシードを簡単に見つけることができるはずです。


問題の1つを発見しました-コード内で識別子が少なくとも1回発生する必要があります。別の問題があります。基本言語パッケージで提供されていないライブラリは使用しないでください。これは、この課題で不当な利点をもたらすライブラリの使用を停止するために必要なルールです。私はあなたがあなたのアプローチを変えて、挑戦のための良いPerl答えを作成することができることを望みます。
ロジックナイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.