diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-06-27 23:39:31 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-06-27 23:39:31 +0900 |
| commit | 674fe965550444db87edc7937ff6932e1a918d9d (patch) | |
| tree | e8a80dd958d3e082485286bf5785a7992b6e6b0e /vhosts/blog/public/posts/2022-08-27/php-conference-okinawa-code-golf | |
| parent | fe4d1d625b53796c5f20399790e5ff8c7a7e1608 (diff) | |
| download | nsfisis.dev-674fe965550444db87edc7937ff6932e1a918d9d.tar.gz nsfisis.dev-674fe965550444db87edc7937ff6932e1a918d9d.tar.zst nsfisis.dev-674fe965550444db87edc7937ff6932e1a918d9d.zip | |
feat(meta): rename vhosts/ directory to services/
Diffstat (limited to 'vhosts/blog/public/posts/2022-08-27/php-conference-okinawa-code-golf')
| -rw-r--r-- | vhosts/blog/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html | 178 |
1 files changed, 0 insertions, 178 deletions
diff --git a/vhosts/blog/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html b/vhosts/blog/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html deleted file mode 100644 index 5835615d..00000000 --- a/vhosts/blog/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html +++ /dev/null @@ -1,178 +0,0 @@ -<!DOCTYPE html> -<html lang="ja-JP"> - <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="author" content="nsfisis"> - <meta name="copyright" content="© 2022 nsfisis"> - <meta name="description" content="PHP カンファレンス沖縄の懇親会 LT で出題されたコードゴルフの問題を解いてみた。"> - <meta name="keywords" content="カンファレンス,PHP,PHP カンファレンス沖縄"> - <meta property="og:type" content="article"> - <meta property="og:title" content="PHP カンファレンス沖縄で出題されたコードゴルフの問題を解いてみた|REPL: Rest-Eat-Program Loop"> - <meta property="og:description" content="PHP カンファレンス沖縄の懇親会 LT で出題されたコードゴルフの問題を解いてみた。"> - <meta property="og:site_name" content="REPL: Rest-Eat-Program Loop"> - <meta property="og:locale" content="ja_JP"> - <link rel="icon" type="image/svg+xml" href="/favicon.svg"> - <title>PHP カンファレンス沖縄で出題されたコードゴルフの問題を解いてみた|REPL: Rest-Eat-Program Loop</title> - <link rel="stylesheet" href="/style.css?h=9513229b52eb2041b99ba1b959305633"> - </head> - <body class="single"> - <header class="header"> - <div class="site-logo"> - <a href="/">REPL: Rest-Eat-Program Loop</a> - </div> - <nav class="nav"> - <ul> - <li> - <a href="/about/">About</a> - </li> - <li> - <a href="/posts/">Posts</a> - </li> - <li> - <a href="/slides/">Slides</a> - </li> - <li> - <a href="/tags/">Tags</a> - </li> - </ul> - </nav> - </header> - <main class="main"> - <article class="post-single"> - <header class="post-header"> - <h1 class="post-title">PHP カンファレンス沖縄で出題されたコードゴルフの問題を解いてみた</h1> - <ul class="post-tags"> - <li class="tag"> - <a href="/tags/conference/">カンファレンス</a> - </li> - <li class="tag"> - <a href="/tags/php/">PHP</a> - </li> - <li class="tag"> - <a href="/tags/phpconokinawa/">PHP カンファレンス沖縄</a> - </li> - </ul> - </header> - <div class="post-content"> - <section id="changelog"> - <h2><a href="#changelog">更新履歴</a></h2> - <ol> - <li class="revision"> - <time datetime="2022-08-27">2022-08-27</time>: 公開 - </li> - </ol> - </section> - <section id="section--intro"> - <h2><a href="#section--intro">はじめに</a></h2> - <p> - 本日 <a href="https://phpcon.okinawa.jp/" rel="noreferrer" target="_blank">PHP カンファレンス沖縄 2022</a> が開催された (らしい)。 - </p> - <p> - カンファレンスには参加できなかったものの、懇親会の LT で出題されたコードゴルフの問題が Twitter に流れてきたので、解いてみた。 - </p> - <ul> - <li> - ツイート: <a href="https://twitter.com/m3m0r7/status/1563397620231712772" rel="noreferrer" target="_blank">https://twitter.com/m3m0r7/status/1563397620231712772</a> - </li> - <li> - スライド: <a href="https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3" rel="noreferrer" target="_blank">https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3</a> - </li> - </ul> - </section> - <section id="section--solution"> - <h2><a href="#section--solution">解</a></h2> - <p> - 細かいレギュレーションは不明だったので、勝手に定めた。 - </p> - <ul> - <li> - コマンドライン引数の第1引数で受けとる - </li> - <li> - 結果は標準出力に出す - </li> - <li> - コンマの直後にはスペースを1つ置く - </li> - <li> - 末尾コンマは禁止 - </li> - <li> - 数字でないものは入ってこないものとする - </li> - <li> - 負数は入ってこないものとする - </li> - </ul> - <p> - 書いたものがこちら: - </p> - <div class="codeblock"> - <pre class="shiki github-light" style="background-color:#f5f5f5;color:#24292e" tabindex="0"><code><span class="line"><span style="color:#24292E">[</span><span style="color:#D73A49"><?</span><span style="color:#005CC5">php</span><span style="color:#24292E"> $n</span><span style="color:#D73A49">=</span><span style="color:#24292E">$argv[</span><span style="color:#005CC5">1</span><span style="color:#24292E">];</span><span style="color:#D73A49">foreach</span><span style="color:#24292E">([</span><span style="color:#005CC5">1e4</span><span style="color:#24292E">,</span><span style="color:#005CC5">5e3</span><span style="color:#24292E">,</span><span style="color:#005CC5">2e3</span><span style="color:#24292E">,</span><span style="color:#005CC5">1e3</span><span style="color:#24292E">,</span><span style="color:#005CC5">500</span><span style="color:#24292E">,</span><span style="color:#005CC5">100</span><span style="color:#24292E">,</span><span style="color:#005CC5">50</span><span style="color:#24292E">,</span><span style="color:#005CC5">10</span><span style="color:#24292E">,</span><span style="color:#005CC5">5</span><span style="color:#24292E">,</span><span style="color:#005CC5">1</span><span style="color:#24292E">]</span><span style="color:#D73A49">as</span><span style="color:#24292E">$x)</span><span style="color:#D73A49">for</span><span style="color:#24292E">(;$n</span><span style="color:#D73A49">>=</span><span style="color:#24292E">$x;$n</span><span style="color:#D73A49">-=</span><span style="color:#24292E">$x)$r[]</span><span style="color:#D73A49">=</span><span style="color:#24292E">$x;</span><span style="color:#005CC5">echo</span><span style="color:#005CC5"> implode</span><span style="color:#24292E">(</span><span style="color:#032F62">', '</span><span style="color:#24292E">,$r</span><span style="color:#D73A49">??</span><span style="color:#24292E">[]);</span><span style="color:#D73A49">?></span><span style="color:#24292E">]</span></span></code></pre> - </div> - <p> - しめて 123 バイトとなった (末尾改行を含めずにカウント)。 - </p> - <p> - こちらは改行とスペースを追加したバージョン: - </p> - <div class="codeblock"> - <pre class="shiki github-light" style="background-color:#f5f5f5;color:#24292e" tabindex="0"><code><span class="line"><span style="color:#24292E">[</span><span style="color:#D73A49"><?</span><span style="color:#005CC5">php</span></span> -<span class="line"></span> -<span class="line"><span style="color:#24292E">$n </span><span style="color:#D73A49">=</span><span style="color:#24292E"> $argv[</span><span style="color:#005CC5">1</span><span style="color:#24292E">];</span></span> -<span class="line"><span style="color:#D73A49">foreach</span><span style="color:#24292E"> ([</span><span style="color:#005CC5">1e4</span><span style="color:#24292E">, </span><span style="color:#005CC5">5e3</span><span style="color:#24292E">, </span><span style="color:#005CC5">2e3</span><span style="color:#24292E">, </span><span style="color:#005CC5">1e3</span><span style="color:#24292E">, </span><span style="color:#005CC5">500</span><span style="color:#24292E">, </span><span style="color:#005CC5">100</span><span style="color:#24292E">, </span><span style="color:#005CC5">50</span><span style="color:#24292E">, </span><span style="color:#005CC5">10</span><span style="color:#24292E">, </span><span style="color:#005CC5">5</span><span style="color:#24292E">, </span><span style="color:#005CC5">1</span><span style="color:#24292E">] </span><span style="color:#D73A49">as</span><span style="color:#24292E"> $x)</span></span> -<span class="line"><span style="color:#D73A49"> for</span><span style="color:#24292E"> (; $n </span><span style="color:#D73A49">>=</span><span style="color:#24292E"> $x; $n </span><span style="color:#D73A49">-=</span><span style="color:#24292E"> $x)</span></span> -<span class="line"><span style="color:#24292E"> $r[] </span><span style="color:#D73A49">=</span><span style="color:#24292E"> $x;</span></span> -<span class="line"><span style="color:#005CC5">echo</span><span style="color:#005CC5"> implode</span><span style="color:#24292E">(</span><span style="color:#032F62">', '</span><span style="color:#24292E">, $r </span><span style="color:#D73A49">??</span><span style="color:#24292E"> []);</span></span> -<span class="line"></span> -<span class="line"><span style="color:#D73A49">?></span><span style="color:#24292E">]</span></span></code></pre> - </div> - </section> - <section id="section--techniques"> - <h2><a href="#section--techniques">使用したテクニック</a></h2> - <section id="section--techniques--exponential-notation"> - <h3><a href="#section--techniques--exponential-notation">指数表記</a></h3> - <p> - 割と多くの言語のゴルフで使えるテクニック。<code>e</code> を用いた指数表記で、大きな数を短く表す。このコードでは <code>10000</code>、<code>5000</code>、<code>2000</code>、<code>1000</code> を指数表記している。 - </p> - </section> - <section id="section--techniques--shorten-loop"> - <h3><a href="#section--techniques--shorten-loop">foreach や for の中身を1つの文に</a></h3> - <p> - <code>foreach</code>、<code>for</code>、<code>if</code> などの後ろには、通常 <code>{</code> を続けて複数の文を連ねるが、中身の文を1つにしてしまえば、<code>{</code> と <code>}</code> を省略できる。C言語などでも使える。 - </p> - </section> - <section id="section--techniques--omit-initialization"> - <h3><a href="#section--techniques--omit-initialization">$r に初期値を入れない</a></h3> - <p> - PHP では、<code>$r[] = ......</code> のような配列の末尾に追加する式を実行したとき、<code>$r</code> が未定義だった場合は <code>$r</code> を勝手に定義して空の配列で初期化してくれる。これを利用すると、<code>$r = [];</code> のような初期化が不要になる。 - </p> - <p> - ただし、プログラムに 0 が渡されるとループを一度も回らないので、<code>$r</code> が未定義になってしまい、<code>implode()</code> に渡すところでエラーになる。それを防ぐために <code>$r ?? []</code> を使っている。 - </p> - <p> - もし 0 が渡されたケースを無視するなら、これが不要になるので 4 バイト縮む。 - </p> - </section> - <section id="section--techniques--put-text-outside-php-tag"> - <h3><a href="#section--techniques--put-text-outside-php-tag">PHP タグの外に文字列を置く</a></h3> - <p> - PHP では、<code><?php</code> <code>?></code> で囲われた部分の外側にある文字列は、そのまま出力される。今回のケースでは、先頭と末尾に必ず <code>[</code> と <code>]</code> を出力するので、そのまま書いてやればよい。 - </p> - </section> - </section> - <section id="section--outro"> - <h2><a href="#section--outro">おわりに</a></h2> - <p> - 最後になりましたが、 <a href="https://twitter.com/m3m0r7" rel="noreferrer" target="_blank">めもりー</a> さん、楽しい問題をありがとうございました。 - </p> - </section> - </div> - </article> - </main> - <footer class="footer"> - © 2021 nsfisis - </footer> - </body> -</html> |
