行、列、対角、ブロック


13

正の整数Nに対して、幅N文字、高さN文字の正方形のコードブロックを記述します。

たとえば、Nは5で、ブロックは次のようになります。

ThisI
sMy5B
y5Cod
eBloc
kOkay

このブロックは次のように動作する必要があります。

  1. 一番上の行を抽出してプログラムとして実行する場合、正確なテキストrowを標準出力に出力する必要があります。

    たとえば、ThisI印刷しますrow

  2. 左の列を抽出してプログラムとして実行する場合、正確なテキストcolを標準出力に出力する必要があります。

    たとえば、Tsyek印刷しますcol

  3. 左上隅から右下隅までの主要な対角線を抽出してプログラムとして実行する場合、正確なテキストdiaを標準出力に出力する必要があります。

    たとえば、TMCoy印刷しますdia

  4. ブロック全体が改行(オプションの末尾の改行を含む)を含むプログラムとして実行される場合、正確なテキストblkを標準出力に出力する必要があります。

    例えば、

    ThisI
    sMy5B
    y5Cod
    eBloc
    kOkay
    

    印刷しますblk

詳細

  • 4つのプログラムはすべて同じプログラミング言語で実行されます。
  • 元のブロックのN 2文字は、行末記号以外のものである可能性があります
  • 言語に標準出力がない場合は、別の一般的な出力方法を使用できます。4つのプログラムすべてで同じ方法でなければなりません。

オリジナルブロックに含まれる文字列が最も少ない(改行を含まない)提出物が勝ちです。Tiebreakerは、より小さいNを使用してサブミッションに進みます。


確かに2シンボルの難解な言語で解決策があることを考えると、これが最小のNにそれを絞る解決策になると思います。
xnor15年

@xnorおそらく。1種類の言語の答えは可能性の範囲外ではありませんが。それでも、このスコアリング方法は、最小のNが最初に勝つよりも興味深いものです。
カルバンの趣味

行と列のプログラムの長さが同じ場合、Lenguageはどのように機能しますか?
xnor

@xnorああ、あなたは正しい。うまくいきません。
カルビンの趣味

非ブロックプログラムも末尾の改行で終了できますか?
jimmy23013

回答:


6

> <>(魚)、3つの一意の文字(N = 2000)

このコードは1、と-を使用してスタックに任意の数値を配置し、スタックpの上位3つの数値に基づいてコードを(自己)変更します。例えば!、位置にa を置くと、通常の> <>の0 0よう003b*pになり、p1-それとともにになり111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-pます。

変更後、命令ポインター(IP)はコードをラップして、変更された部分を実行します。「ブロック」の場合、IPは「行」の場合とは異なるさらなる変更のためにリダイレクトされます(その後、リダイレクトされます)。「行」の場合、同じ2つのリダイレクトが発生しますが、それらの間にコードがないため、効果はありません。

4つのケースの最終生成コード(変更されていないp1-部分は省略):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

コードサイズは4 MBで、コードにアクセスできます ここます。(実行に問題はありません。)

ジェネレーターpython3プログラムはここからアクセスできます


14

CJam、13 12の一意の文字、N = 5

"row"
cd;"a
oaiaa
l"aa;
"blk"

できるだけ簡単に

UPDATE:変換されたスペースa Runner112が指摘したように、(この場合はノーオペレーション)に変換しました

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


2
すべてのスペースをキャラクターに変えaて、ユニークなキャラクターの数を12に減らすことができますか?
Runer112

@ Runer112くそー!ヒントをありがとう!
オプティマイザー

8

Bash、19個の一意の文字、N = 19

trap echo\ row exit
t=t trap exit      
t=t echo blk       
exit               
=                  
t    e             
      c            
e      h           
c       o          
h                  
o         d        
           i       
c           a      
o                  
l                  
  • 最初の行は trap echo\ row exitです。これは〜をひき起こすecho row、スクリプトの終了時に実行されます(最初の行のみ)
  • 最初の列は ttt=t echo col
  • 対角線は t=tt echo dia
  • 完全なブロックは、最初の行で設定されたEXITハンドラーをキャンセルして機能し、echo blkその後終了します。

1
小文字exitを使用して、一意の文字を4文字減らすことができます。exitコマンドを次の行に移動して、すべてのセミコロンをスペースに置き換えることもできます。
jimmy23013

6

> <>、14個の一意の文字、N = 10

"wor"\ooo;
     "    
l a  k    
o  i l    
c   db    
"    "    
o    oo   
o    o o  
o    o  o 
;    ;   ;

2D言語では非常に簡単です。唯一のトリッキーな部分は、私たちが必要だということです\区別することrowとしますblk


randomraはp1-、3文字のソリューションを提供しますが、生成するのは本当に面倒です(そしておそらく勝てないでしょう)。
Sp3000

3

Brainfuck、2つのユニークなキャラクター、N = 378

ルールのわずかな曲げの可能性。

プログラムは少し大きいので、ここにあります 、Pastebinにリンクがありますます。

rowcolおよびdiaプログラムが簡単です。正しいASCIIコードに到達するまでバイトセルをインクリメントし、出力します。文字が既に渡されている場合、セルがオーバーフローするまで増分し、0から再び開始できるようにします。

blk曲げ若干のルールが発生するプログラムです。blkチャレンジで要求された「正確なテキスト」を印刷するために、バックスペースが使用されます(ASCIIコード8)。これをサポートするには、表示コンソール/端末が必要です。row/ col/ diaプログラムからの誤った値が印刷されるたびに、いくつかのバックスペース制御コードを出力することにより、それらが確実に削除されるようにします。物事を簡素化するために、ある時点で出力されるすべての誤った値が印刷可能なASCII範囲の一部であることを確認しました。


2

C(gcc)、26の一意の文字、N = 29

*w;main(){printf(w?w:"row");}
ww;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;/*;;;;;;;;;;;;;;;;;;;;;;;;
m;;m;;;;;;;;;;;;;;;;;;;;;;;;;
a;;;a;;;;;;;;;;;;;;;;;;;;;;;;
i;;;;i;;;;;;;;;;;;;;;;;;;;;;;
n;;;;;n;;;;;;;;;;;;;;;;;;;;;;
(;;;;;;(;;;;;;;;;;;;;;;;;;;;;
);;;;;;;);;;;;;;;;;;;;;;;;;;;
{;;;;;;;;{;;;;;;;;;;;;;;;;;;;
p;;;;;;;;;p;;;;;;;;;;;;;;;;;;
r;;;;;;;;;;r;;;;;;;;;;;;;;;;;
i;;;;;;;;;;;i;;;;;;;;;;;;;;;;
n;;;;;;;;;;;;n;;;;;;;;;;;;;;;
t;;;;;;;;;;;;;t;;;;;;;;;;;;;;
f;;;;;;;;;;;;;;f;;;;;;;;;;;;;
(;;;;;;;;;;;;;;;(;;;;;;;;;;;;
";;;;;;;;;;;;;;;;";;;;;;;;;;;
c;;;;;;;;;;;;;;;;;d;;;;;;;;;;
o;;;;;;;;;;;;;;;;;;i;;;;;;;;;
l;;;;;;;;;;;;;;;;;;;a;;;;;;;;
";;;;;;;;;;;;;;;;;;;;";;;;;;;
);;;;;;;;;;;;;;;;;;;;;);;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;};;*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;*w="blk";

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


1

ルビー、24個のユニークな文字、N = 17

trap(0){$><<:row}
rr=a=:blk;%;00000
a0a00000000000000
p00p0000000000000
(000(000000000000
00000000000000000
)00000)0000000000
{000000{000000000
$0000000$00000000
>00000000>0000000
<000000000<000000
<0000000000<00000
:00000000000:0000
c000000000000d000
o0000000000000i00
l;;trap(0){$><<a;
};000000000000;{}

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

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