js-taiso-003-twitter-1200x630-v1-2-2
js-taiso-003-hubspot-overtime

【延長戦】以下の114文字の回答を更に短くしてください!

export default(s,r=Math.random,z=n=>n>0?String.fromCharCode(768+r()*112)+z(n-1):'')=>s.replace(/./g,c=>c+z(r()*8))

(8/6火 23:59:59 提出締切)

延長戦の詳細は以下のブログ記事をご覧ください

https://techblog.kayac.com/js-taiso-003-extension-match-announcement

問題をダウンロード
回答を提出する

『JS体操』〜JavaScriptで頭の体操をしよう!〜


『JS体操』は、面白法人カヤックが主催するJavaScriptのコードゴルフ大会。JavaScriptの問題をゲーム感覚で解きながら言語仕様の理解とプログラミング能力を深める、まさに頭の体操。
出題される問題は、JavaScriptの言語仕様を駆使するものから数学や様々なアルゴリズムを使う問題まで様々。
上級者の方からJavaScriptを使い始めたという方まで、たくさんの挑戦お待ちしています!

※コードゴルフとは、与えられたアルゴリズムを可能な限り短いソースコードで記述することを競うプログラミング競技です。ソースコードの文字数が、その人のスコアとなります

目次


1. 問題概要

2. 参加方法

3. 提出フォーム

第3問「Zalgo Textの生成」


js-taiso-003-twitter-1200x630-v2-2

今回の問題は、任意の文字列をZalgo Textに変換する問題です。すでに要件を満たすリファレンス実装がzalgo.jsに書いてあります。これをなるべく短い文字数で書き直してみましょう。

Zalgo(ザルゴ)とは、FlashアニメータDave Kallyによって生み出されたインターネット上の人々を狂気に陥れ破滅へと導く架空の生物。
Zalgo Textはダイアクリティカルマークとも呼ばれる「結合文字(Combining Character)」をまとい、まるでZalgoのような、狂気に満ちた呪われた文字列。世にも恐ろしいウェブサイトを作る際には必須なテクニックです!

問題ファイル(ZIP 14KB)をダウンロード

目標文字数


まずは200文字以下を目指しましょう!

  • 200文字以下:GREAT
  • 150文字以下:EXCELLENT
  • 120文字以下:AMAZING
  • 115文字以下:UNBELIEVABLE

※JS体操ではJavaScriptの文字列のlengthプロパティの値を文字数とみなします。つまり、UTF-16のコードユニットの数を文字数とします。コードポイントや書記素クラスタの数、またJSファイルのバイト数ではないことに注意してください。

参加方法


問題のZIPファイルをダウンロードして挑戦してください。コードを書き終えたら、サイト下部の提出フォームに提出して参加完了です。

※推奨ブラウザはGoogle Chrome(最新版)です。提出されたコードはChrome上で確認します。

問題ファイル(ZIP 14KB)をダウンロード

締切


7月31日(水) 23:59:59

参加特典(学生限定)


優秀なコード・面白いコードを提出された学生さんには「カヤックの新卒採用・インターンでの書類選考免除」特典をお送りします。ぜひ、今回の機会をご活用ください!

希望される方は、提出フォームの「特典を希望する」にチェックを入れてください。後日、対象者にのみご連絡差し上げます。

※学生とは、大学生・大学院生・短大生・専門学校生・高等専門学校生・高校生・中学生のいずれかであることを指します

解説・次回以降のお知らせ


問題の解答・解説はカヤック技術部ブログで公開します。考えられる様々なアプローチ、投稿された面白いコードや凄いコードの紹介、どのように実際の仕事に応用できるのかなどを解説します。過去の問題・解説を見たい方はこちらをご覧ください。

以下よりご登録いただくと、今後の問題や解説のお知らせが届きます。リマインドが欲しい方は、ぜひ、ご登録ください!

参加方法(詳細)


①ダウンロードしたZIPファイルを解凍し、エディタで開く

1エディタで開く

②ローカルHTTPサーバを介し、ブラウザでindex.htmlを開く

3ローカルサーバを介して2

index.htmlをローカルファイルとして直接ブラウザで開くと実行できません。JSモジュールやその他ファイルの読み込みのため、XMLHttpRequestで通信可能な環境で実行する必要があるためです。

よって、ローカルHTTPサーバを介してindex.htmlを開いてください。VS Codeをご利用の方はLive Serverプラグインが便利です。

③ブラウザの開発者コンソールを開く

4ブラウザのコンソール2222

今回は文字数だけでなく、テストの結果やエラーがグラフなどで可視化されます。是非デバッグの参考にしてください。等幅フォントで表示されるようにCSSを設定していますが、もし崩れていたらごめんなさい。

④zalgo.jsをエディタで編集する

5-zalgo.js-を編集する

編集して良いのはzalgo.jsのみです。zalgo.jsをなるべく短く書き直しましょう!

なお、今回のテストは少々時間がかかります。もし重い処理を書いてしまうと、とても時間がかかります。ご注意ください。

要件を満たすかどうかは、test.jsのテストで判断します。テスト内容は具体的には以下です。

  • 元の1文字に、1文字以上8文字以下の「結合文字(Combining Character)」が付与されること
  • 結合文字が付与される文字数のパターン(1文字、2文字、3文字、4文字、…8文字の計8パターン)それぞれの出現率が等しい(小数点第二位を四捨五入で12.5%)こと
  • 全ての結合文字(本問題では Unicode コードポイントで 0x300 〜 0x36f の範囲の文字)が少なくとも1文字は使用されること
  • 付与される結合文字の数や種類が、適度にばらつき、規則性や連続性が見られないこと

要件を満たしていても、たまたま奇跡的にエラーになることもありえます。その時はごめんなさい。何度か実行してエラーになる確率が低ければOKです。

今回の第3問は、前回の第2問のようなハックやチートは想定していません。ただし、出題側が想定していない、既出でないチートがもしあれば、ぜひ投稿してください。なお、既出のチートは以下です。

  • console.log()、console.assert() を上書きする
  • fetch() を上書きする
  • Response.prototype.text() を上書きする
  • String.prototype.trim() を上書きする

チートの詳細は、第2問「チート部門①②③」解説ブログを御覧ください。

⑤エラーが出たらデバッグする

6エラーが出たらデバッグする3

テストに通らなかった場合、エラーメッセージが表示されます。デバッグの参考にしてください。なお、要件を満たしていてもたまたま奇跡的にエラーになることもありえます。何度か実行してエラーになる確率が低ければOKです。

⑥テストに合格し、文字数も短くしたらいよいよ提出

7いよいよ提出

本ページ下部の提出フォームにzalgo.jsの内容をコピペし送信してください。何度でも提出可能です。

⑦SNS で結果をシェア

8Xでシェア-1

テストに合格すると「Xでシェアする」ボタンが表示されます。画面(Zalgo Textと文字数の)スクリーンショットを添付の上、ぜひ #JS体操 のハッシュタグを付けてシェアしてください。

提出フォーム


コードを書き終えたら、zalgo.jsを下記フォームにコピペして送信してください。より短いコード、よりスマートなコードが書けた時など、何度でも提出可能です!
面白い!と思ったコードは、解説ブログにて紹介させていただきます。

面白法人カヤックとは


面白法人カヤックは、「つくる人を増やす」の経営理念のもと、面白いサービスを次々にリリースするクリエイター集団です。広告やPRの受託開発を行う『面白プロデュース事業』、ゲームの開発・運用を行う『ゲーム・エンタメ事業』、持続可能なまちづくりをジブンゴト化する『ちいき資本主義事業』などの主要事業の他、新規事業を企画・運用する環境も整っています。サイコロ給や採用キャンペーンなど、面白い組織制度にも力をいれています。

download-1

面白法人カヤック公式ウェブサイト

download

新卒・中途採用も随時実施中です!

©2024 KAYAC Inc.