一部の人々は、タブとインデントにスペースを使用することを主張します。
集計については、それは間違いなく間違っています。定義により、集計にはタブレータを使用する必要があります。
インデントの場合でも、タブレーターは客観的に優れています。
Stack Exchangeコミュニティには明確なコンセンサスがあります。
インデントに単一のスペースを使用することは視覚的に不快です。複数を使用するのは無駄です。
すべての
ゴルファーが知っているように、プログラムはできるだけ短くする必要があります。ハードディスクのスペースを節約するだけでなく、処理するバイト数が少ない場合はコンパイル時間も短縮されます。タブ幅1を調整することにより、同じファイルが各コンピューターで異なるように見えるため、誰もが実際のファイルを変更せずに好みのインデント幅を使用できます。
すべての優れたテキストエディターは、デフォルトで(および定義)タブレータを使用します。
私はそう言います、私はいつも正しいです!
悲しいことに、誰もが理性に耳を傾けるわけではありません。誰かがあなたに間違ったTMをしているファイルを送ってきたので、あなたはそれを修正しなければなりません。手動で行うこともできますが、他にもあります。
スペーサーが貴重な時間を浪費するのは十分に悪いので、問題を処理するために可能な限り短いプログラムを書くことにします。
仕事
次のことを行うプログラムまたは関数を作成します。
STDINから、またはコマンドラインまたは関数の引数として単一の文字列を読み取ります。
集計またはインデントにスペースが使用されているすべての場所を特定します。
行の先頭にある場合、スペースの実行はインデントです。
インデントでない場合、2つ以上のスペースの実行は集計です。
単一インデントではありませんスペースはや集計のために使用されていない可能性があります。同じキャラクターを異なる目的に使用する場合、予想通り、簡単に伝える方法はありません。したがって、混乱のためにスペースが使用されたと言います。
ファイルの外観を変更せずに、タブまたはインデントに使用されるすべてのスペースをタブレータで置き換えることができる、可能な限り長いタブ幅1を決定します。
入力に表もインデントも含まれていない場合、タブ幅を決定することは不可能です。この場合、次の手順をスキップします。
以前に決定されたタブ幅を使用して、タブまたはインデントに使用されるすべてのスペースをタブレータに置き換えます。
また、ファイルの外観を変更せずに可能な限り、混乱に使用されるすべてのスペースをタブレータに置き換えます。(疑わしい場合は、スペースを取り除きます。)
変更した文字列を関数から返すか、STDOUTに出力します。
例
すべてのスペース
a bc def ghij
集計です。
スペースを実行するたびに、前のスペース以外の文字列が5の幅になるまでパディングされるため、正しいタブ幅は5で、正しい出力2は
a--->bc-->def->ghij
最初の2つのスペース
ab cde f ghi jk lm
集計、その他の混乱です。
正しいタブ幅は4なので、正しい出力2は
ab->cde>f ghi>jk lm
最後のスペースは、タビュレーターで置き換えられると2つのスペースとしてレンダリングされるため、変更されません。
ab->cde>f ghi>jk->lm
1つを除くすべてのスペース
int main( ) { puts("TABS!"); }
インデント、他は混乱です。
インデントレベルは0、4、および8スペースであるため、正しいタブ幅は4で、正しい出力2は
int --->main( ) --->{ --->--->puts("TABS!"); --->}
のスペースは
( )
、タビュレーターに置き換えると3つのスペースとしてレンダリングされるため、そのまま残ります。最初の2つのスペース
x yz w
インデント、他の混乱です。
適切なタブ幅は2で、正しい出力2は
->x>yz w
最後のスペースは、タビュレーターに置き換えると2つのスペースとしてレンダリングされるため、そのまま残ります。
最初の2つのスペース
xy zw
インデント、他の3つは表です。
タブ幅1のみですべてのスペースを削除できるため、正しい出力2は
>>xy>>>zw
すべてのスペース
a b c d
混乱しています。
可能な限り長いタブ幅はないため、正しい出力2は
a b c d
追加のルール
入力は、印刷可能なASCII文字と改行のみで構成されます。
最大100行のテキストと、1行に最大100文字あると想定できます。
出力にSTDOUTを選択した場合、単一の後続改行を印刷できます。
標準のコードゴルフ規則が適用されます。
1 タブの幅は、等幅フォントを使用して、2つの連続するタブストップ間の文字の距離として定義されます。
2 ASCIIアートの矢印は、Stack Exchangeが適切にレンダリングすることを拒否するタブレータを表します。これについては、バグレポートを提出しました。実際の出力には、実際のタブレータが含まれている必要があります。
programs should be as short as possible
アーサー・ホイットニーの長い間行方不明の兄弟を見つけたと思う!