ソースコードという名前のエンジニア向け日本酒が発売、ラベルにコードが書いてある…のをBingのAIチャットに解読してもらった。基本、JavaScriptを難読化していて、+!![]は1、~~[]は0、joinで数字をまとめてfromCodePointでUnicode文字にして出力している。
エンジニア向け日本酒「ソースコード」発売 ラベルには“ソースコード”で隠しメッセージ
という記事を見た。なんだこのラベル…JavaScriptであるということだけはわかるが…
ということでBingのAIチャットに聞いてみた。
javasciriptのこのコードの解説をしてください。
console.log(String.fromCodePoint([!![]+!![]+!![]+!![]+!![]+!![],!![]+!![]+!![]+!![]+!![]+!![]+!![],].join("")))
こんにちは、これはCopilotです。JavaScriptのコードについてお尋ねですね。😊
このコードは、次のような処理を行っています。
!![]は、空の配列を論理否定演算子!で二回否定することで、trueに変換します。trueは数値に変換すると1になります。したがって、!![]+!![]+!![]+!![]+!![]+!![]は1+1+1+1+1+1と同じで、6になります。- 同様に、
!![]+!![]+!![]+!![]+!![]+!![]+!![]は1+1+1+1+1+1+1と同じで、7になります。 [!![]+!![]+!![]+!![]+!![]+!![],!![]+!![]+!![]+!![]+!![]+!![]+!![],]は、[6,7]という配列を作ります。.join("")は、配列の要素を文字列に変換して、引数で指定した文字列(この場合は空文字列)で連結します。したがって、[6,7].join("")は"67"という文字列になります。String.fromCodePointは、引数で指定したコードポイントに対応する文字列を返します。コードポイントとは、文字を表す数値のことです。例えば、String.fromCodePoint(65)は"A"という文字列になります。- このコードでは、
String.fromCodePoint("67")という引数を渡しています。この場合、"67"は数値に変換されて67になります。そして、コードポイント67に対応する文字は"C"です。 console.logは、引数で指定した値をコンソールに出力します。コンソールとは、ブラウザの開発者ツールにある画面のことです。- したがって、
console.log(String.fromCodePoint([!![]+!![]+!![]+!![]+!![]+!![],!![]+!![]+!![]+!![]+!![]+!![]+!![],].join("")))は、"C"という文字列をコンソールに出力します。
このコードは、JavaScriptの特徴を利用して、わざと分かりづらく書かれたものです。実際には、console.log("C")と書けば同じ結果になります。
ではこのコードを解説してください。
console.log(String.fromCodePoint([+!![],+!![],~~[],].join("")))
このコードも前のコードと同様に、JavaScriptの特徴を利用して、わざと分かりづらく書かれたものです。次のような処理を行っています。
+!![]は、空の配列を論理否定演算子!で二回否定することで、trueに変換し、さらに単項プラス演算子+で数値に変換します。したがって、+!![]は1になります。~~[]は、空の配列をビット単位の否定演算子~で二回否定することで、0に変換します。ビット単位の否定演算子は、数値を32ビットの符号付き整数に変換してから、ビットを反転します。空の配列は数値に変換すると0になり、そのビットを反転しても0になります。[+!![],+!![],~~[],]は、[1,1,0]という配列を作ります。.join("")は、配列の要素を文字列に変換して、引数で指定した文字列(この場合は空文字列)で連結します。したがって、[1,1,0].join("")は"110"という文字列になります。String.fromCodePointは、引数で指定したコードポイントに対応する文字列を返します。このコードでは、String.fromCodePoint("110")という引数を渡しています。この場合、"110"は数値に変換されて110になります。そして、コードポイント110に対応する文字は"n"です。console.logは、引数で指定した値をコンソールに出力します。- したがって、
console.log(String.fromCodePoint([+!![],+!![],~~[],].join("")))は、"n"という文字列をコンソールに出力します。
このコードは、console.log("n")と書けば同じ結果になります。
なるほど…というかこれメッセージが現れるだけなのか?とりあえず最初の5文字だけは見えた。瓶がじゃまで…
Congr
追記:
Pythonでこの難読JavaScriptのコードを再現するコードを書いて(何をしていることやら)
ラベルと見比べた結果、
Congratulations!
を繰り返してるな…
…いや違う!
ネタバレは避けるがまだ先があった!
ソースコードという名前の日本酒。
— tomo (@tonagai) February 9, 2024
ラベルに難読JavaScriptが書いてあって、Congratulations!
だと推定したが違ってた!実はわざと間違っていて、それを公式ページのあるところのコンソール画面を解読するとどこかをクリックするように指示され…
最終的にお得に。https://t.co/If4UyledLJ https://t.co/BHiDiWPI3x pic.twitter.com/wuJTY6aNuy
ヒントはこれ。
ソースコードという名前の日本酒の隠しメッセージのヒントを同じ難読JavaScriptで書いてみた。 pic.twitter.com/udonqQDNk1
— tomo (@tonagai) February 13, 2024
« 富の分布(最初に同じお金を持っていて、任意の2人でじゃんけんで勝った人が負けた人から1つもらうとだんだん指数分布になる)をPythonでGIFアニメにしてみた。 | トップページ | Pythonの高周波用ライブラリscikit-rfを含んだコードをPyinstallerでEXE化するときFileNotFoundError が出て動かない…が何とかなった。がファイルサイズがでかい…あとspecファイルにonefileしようとしてこれもハマる(option(s) not allowed)が、これは完全に勘違いしていた。 »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/3/1-3/8(2026.03.08)
- MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って様々なアンテナ(ホーン、フラクタル(スノーフレーク)パッチ、Vivaldi、誘電体共振器)のSパラメータ、指向性を計算する。(2026.03.11)
- MATLAB OnlineでAntenna ToolboxのantennaArrayDesigner機能を使って一行もスクリプトを書かずにパッチアンテナアレイを設計してSパラメータ、指向性などを計算する。1素子とちがって計算にはかなり時間がかかるのでとりあえず2素子のアレイで。(2026.03.09)
- MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って一行もスクリプトを書かずにH型パッチアンテナ(Rogers基板)設計、Sパラメータ、インピーダンス、指向性などを計算する。最適化も実施できる。電磁界シミュレーションソフトのようだ。メッシュも確認できる。(2026.03.06)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)のモデルをGemini 3 ProからGemini 3.1 Proにして作り直したものと3で作ったものを3.1で改善してもらったものを作る。どちらも結構いい出来だが、改善したほうがまとめられていてよさそう。(2026.03.05)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2026年3月11日 STMicroelectronicsが新UWBチップ発表、Ericssonが主導のVICTOR6G発足、Silicon LabsのBluetooth SoCがBANFのタイヤモニタリングシステムに採用、京セラが新しい差動クロック水晶発振器を発表など(2026.03.11)
- 高周波・RFニュース 2026年3月10日 IEEE Microwave MagazineはHF-VHF-UHF特集、Pythonの高周波ライブラリscikit-rfがv1.11.0に、Samsung Galaxy S26 Ultra分解動画、フジクラが4000心SWR/WTC製品化、Perasoの60GHzモジュールが軍用ドローン識別に採用など(2026.03.10)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/3/1-3/8(2026.03.08)
- MATLAB OnlineでAntenna ToolboxのantennaDesigner機能を使って様々なアンテナ(ホーン、フラクタル(スノーフレーク)パッチ、Vivaldi、誘電体共振器)のSパラメータ、指向性を計算する。(2026.03.11)
- MATLAB OnlineでAntenna ToolboxのantennaArrayDesigner機能を使って一行もスクリプトを書かずにパッチアンテナアレイを設計してSパラメータ、指向性などを計算する。1素子とちがって計算にはかなり時間がかかるのでとりあえず2素子のアレイで。(2026.03.09)
« 富の分布(最初に同じお金を持っていて、任意の2人でじゃんけんで勝った人が負けた人から1つもらうとだんだん指数分布になる)をPythonでGIFアニメにしてみた。 | トップページ | Pythonの高周波用ライブラリscikit-rfを含んだコードをPyinstallerでEXE化するときFileNotFoundError が出て動かない…が何とかなった。がファイルサイズがでかい…あとspecファイルにonefileしようとしてこれもハマる(option(s) not allowed)が、これは完全に勘違いしていた。 »







コメント