aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html')
-rw-r--r--public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html74
1 files changed, 37 insertions, 37 deletions
diff --git a/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html b/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html
index d1765f4..2aa8c03 100644
--- a/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html
+++ b/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html
@@ -60,68 +60,68 @@
</ol>
</section>
<section id="section--_はじめに">
- <h2><a href="#section--_はじめに">はじめに</a></h2>
+ <h2><a href="#section--_はじめに">はじめに</a></h2>
<p>
- 本日<a href="https://phpcon.okinawa.jp/">PHP カンファレンス沖縄 2022</a>が開催された (らしい)。
+ 本日 <a href="https://phpcon.okinawa.jp/">PHP カンファレンス沖縄 2022</a> が開催された (らしい)。
</p>
-
+
<p>
カンファレンスには参加できなかったものの、懇親会の LT で出題されたコードゴルフの問題が Twitter に流れてきたので、解いてみた。
</p>
-
+
<p>
- ツイート:<a href="https://twitter.com/m3m0r7/status/1563397620231712772">https://twitter.com/m3m0r7/status/1563397620231712772</a>
+ ツイート: <a href="https://twitter.com/m3m0r7/status/1563397620231712772">https://twitter.com/m3m0r7/status/1563397620231712772</a>
<br>
- スライド:<a href="https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3">https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3</a>
+ スライド: <a href="https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3">https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3</a>
</p>
</section>
-
+
<section id="section--_解">
- <h2><a href="#section--_解">解</a></h2>
+ <h2><a href="#section--_解">解</a></h2>
<p>
細かいレギュレーションは不明だったので、勝手に定めた。
</p>
-
+
<ul>
<li>
コマンドライン引数の第1引数で受けとる
</li>
-
+
<li>
結果は標準出力に出す
</li>
-
+
<li>
コンマの直後にはスペースを1つ置く
</li>
-
+
<li>
末尾コンマは禁止
</li>
-
+
<li>
数字でないものは入ってこないものとする
</li>
-
+
<li>
負数は入ってこないものとする
</li>
</ul>
-
+
<p>
書いたものがこちら:
</p>
-
+
<pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight">[<span class="hljs-meta">&lt;?php</span> <span class="hljs-variable">$n</span>=<span class="hljs-variable">$argv</span>[<span class="hljs-number">1</span>];<span class="hljs-keyword">foreach</span>([<span class="hljs-number">1e4</span>,<span class="hljs-number">5e3</span>,<span class="hljs-number">2e3</span>,<span class="hljs-number">1e3</span>,<span class="hljs-number">500</span>,<span class="hljs-number">100</span>,<span class="hljs-number">50</span>,<span class="hljs-number">10</span>,<span class="hljs-number">5</span>,<span class="hljs-number">1</span>]<span class="hljs-keyword">as</span><span class="hljs-variable">$x</span>)<span class="hljs-keyword">for</span>(;<span class="hljs-variable">$n</span>&gt;=<span class="hljs-variable">$x</span>;<span class="hljs-variable">$n</span>-=<span class="hljs-variable">$x</span>)<span class="hljs-variable">$r</span>[]=<span class="hljs-variable">$x</span>;<span class="hljs-keyword">echo</span> <span class="hljs-title function_ invoke__">implode</span>(<span class="hljs-string">&#x27;, &#x27;</span>,<span class="hljs-variable">$r</span>??[]);<span class="hljs-meta">?&gt;</span>]</code></pre>
-
+
<p>
しめて 123 バイトとなった (末尾改行を含めずにカウント)。
</p>
-
+
<p>
こちらは改行とスペースを追加したバージョン:
</p>
-
+
<pre class="highlight" language="php" linenumbering="unnumbered"><code class="highlight">[<span class="hljs-meta">&lt;?php</span>
<span class="hljs-variable">$n</span> = <span class="hljs-variable">$argv</span>[<span class="hljs-number">1</span>];
@@ -132,48 +132,48 @@
<span class="hljs-meta">?&gt;</span>]</code></pre>
</section>
-
+
<section id="section--_使用したテクニック">
- <h2><a href="#section--_使用したテクニック">使用したテクニック</a></h2>
+ <h2><a href="#section--_使用したテクニック">使用したテクニック</a></h2>
<section id="section--_指数表記">
- <h3><a href="#section--_指数表記">指数表記</a></h3>
+ <h3><a href="#section--_指数表記">指数表記</a></h3>
<p>
- 割と多くの言語のゴルフで使えるテクニック。<code>e</code>を用いた指数表記で、大きな数を短く表す。このコードでは<code>10000</code>、<code>5000</code>、<code>2000</code>、<code>1000</code>を指数表記している。
+ 割と多くの言語のゴルフで使えるテクニック。<code>e</code> を用いた指数表記で、大きな数を短く表す。このコードでは <code>10000</code>、<code>5000</code>、<code>2000</code>、<code>1000</code> を指数表記している。
</p>
</section>
-
+
<section id="section--_foreach_や_for_の中身を1つの文に">
- <h3><a href="#section--_foreach_や_for_の中身を1つの文に">foreach や for の中身を1つの文に</a></h3>
+ <h3><a href="#section--_foreach_や_for_の中身を1つの文に">foreach や for の中身を1つの文に</a></h3>
<p>
- <code>foreach</code>、<code>for</code>、<code>if</code>などの後ろには、通常<code>{</code>を続けて複数の文を連ねるが、中身の文を1つにしてしまえば、<code>{</code>と<code>}</code>を省略できる。C言語などでも使える。
+ <code>foreach</code>、<code>for</code>、<code>if</code> などの後ろには、通常 <code>{</code> を続けて複数の文を連ねるが、中身の文を1つにしてしまえば、<code>{</code> と <code>}</code> を省略できる。C言語などでも使える。
</p>
</section>
-
+
<section id="section--_r_に初期値を入れない">
- <h3><a href="#section--_r_に初期値を入れない">$r に初期値を入れない</a></h3>
+ <h3><a href="#section--_r_に初期値を入れない">$r に初期値を入れない</a></h3>
<p>
- PHP では、<code>$r[] = &amp;#8230;&amp;#8203;</code>のような配列の末尾に追加する式を実行したとき、<code>$r</code>が未定義だった場合は<code>$r</code>を勝手に定義して空の配列で初期化してくれる。これを利用すると、<code>$r = [];</code>のような初期化が不要になる。
+ PHP では、<code>$r[] = &amp;#8230;&amp;#8203;</code> のような配列の末尾に追加する式を実行したとき、<code>$r</code> が未定義だった場合は <code>$r</code> を勝手に定義して空の配列で初期化してくれる。これを利用すると、<code>$r = [];</code> のような初期化が不要になる。
</p>
-
+
<p>
- ただし、プログラムに 0 が渡されるとループを一度も回らないので、<code>$r</code>が未定義になってしまい、<code>implode()</code>に渡すところでエラーになる。それを防ぐために<code>$r ?? []</code>を使っている。
+ ただし、プログラムに 0 が渡されるとループを一度も回らないので、<code>$r</code> が未定義になってしまい、<code>implode()</code> に渡すところでエラーになる。それを防ぐために <code>$r ?? []</code> を使っている。
</p>
-
+
<p>
もし 0 が渡されたケースを無視するなら、これが不要になるので 4 バイト縮む。
</p>
</section>
-
+
<section id="section--_php_タグの外に文字列を置く">
- <h3><a href="#section--_php_タグの外に文字列を置く">PHP タグの外に文字列を置く</a></h3>
+ <h3><a href="#section--_php_タグの外に文字列を置く">PHP タグの外に文字列を置く</a></h3>
<p>
- PHP では、<code>&lt;?php</code><code>?&gt;</code>で囲われた部分の外側にある文字列は、そのまま出力される。今回のケースでは、先頭と末尾に必ず<code>[</code>と<code>]</code>を出力するので、そのまま書いてやればよい。
+ PHP では、<code>&lt;?php</code> <code>?&gt;</code> で囲われた部分の外側にある文字列は、そのまま出力される。今回のケースでは、先頭と末尾に必ず <code>[</code> と <code>]</code> を出力するので、そのまま書いてやればよい。
</p>
</section>
</section>
-
+
<section id="section--_おわりに">
- <h2><a href="#section--_おわりに">おわりに</a></h2>
+ <h2><a href="#section--_おわりに">おわりに</a></h2>
<p>
最後になりましたが、https://twitter.com/m3m0r7[めもりー] さん、楽しい問題をありがとうございました。
</p>