短い

同僚の1人は、これを得るために先行ゼロ付きの数値を印刷する必要がありました。
 1 => 001
 23 => 023
 456 => 456
 7.89 => 007.89
 12345.6 => 12345.6


彼の場合、整数部に少なくとも3桁の数字が必要でした。 私の他の同僚は、彼を助ける方法について深く考えていました... 10分後に、彼らはもちろん、より速い選択肢を比較して、ダースの選択肢を投げました。 最終的に、彼らは迅速な解決策を見つけましたが、それは十分ではないように思われました。 「さあ、どっちが短いの!」その結果、私たちはかなり簡潔なバージョンに焦点を当てて、半日利益を上げました。 しかし、希望の光は、貴重なディスク容量をさらに数バイト節約できるという心の中にくすぶります。

すぐにバージョンをレイアウトしたくはありません。
何人のキャラクターが
33

関数の説明とリターンを除外します。 大まかに言えば、解決策は、$ a(変換される数)と$ b(整数部の桁数)を特定の$ cにする演算子のセットです。要件は上記のとおりです。

もちろん、他の言語でのソリューションを検討することは興味深いでしょう。

UPD。 整数部の桁数は変数であることに注意してください。 そして、小数部分があるかもしれないという事実、
sscanf('%0'.$b.'d', $a); 
適切ではありません。

UPD2。 コメントからわかるように、多くの決定が特定のケースに対して与えられているか、問題を適切に解決していません。 一部の人にとって、タスクは最初は些細なように見えたので、マイナスを拾いました。 しかし、あなたの提案を読むのはまだ面白かったです。 一般的に、私たちは誤って欺かれました。33バイトのソリューションは、関数の結果としてではなく、単に変換としてテストされました。

 for(;strlen($a|0)<$b--;$a="0$a"); 

したがって、タスクはリターンとともに検討する必要があります。

 for(;strlen($a|0)<$b--;$a="0$a");return $a; 

これは現在、最短のオプション-43バイトです。 しかし、 dnaも非常に近かったが、リターンがあると45になった。

誰かが解散して確認番号を見つけた場合:
 foreach ( array( 0, // 000 .1, // 000.1 1, // 001 1.2, // 001.2 12, // 012 12.3, // 012.3 123, // 123 123.4, // 123.4 12345, // 12345 12345.6 // 12345.6 ) as $n) { echo foo($n, 3), '<br>'; } 


タスクで何が必要か、そしてあなたがそれほど冷酷にならないことを皆さんが理解したことを願っています:)

Source: https://habr.com/ru/post/J173307/


All Articles