問題タブ [code-golf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-agnostic - コードゴルフ:シェルピンスキーの三角形
チャレンジ
次の ASCII 三角形から作成されたシェルピンスキーの N 反復の三角形の ASCII 表現を出力する、文字数による最短コード:
入力は単一の正の数値です。
テストケース
コード カウントには、入力/出力 (つまり、完全なプログラム) が含まれます。
java - 最速のアルゴリズム競争を実行する
コードゴルフ大会のような大会を開催したいのですが、勝者は最小のコードではなく、最速のアルゴリズムを持ちます。
- アルゴリズムの速度を測定する公正な方法の 1 つは、Java の JVM のようなニュートラルな仮想マシンを使用することです。実行された JVM 命令の総数を知る簡単な方法はありますか? (エントリが複数のスレッドを使用する場合、JVM 命令の総数はすべてのスレッドで合計されます。)
たとえば、コード
JVMコードを生成します
そして、(正しく数えた場合) 18 個の JVM 命令を実行する必要があります。
応募作品を自宅で走らせて、審査員が見るものを見てもらいたいと思います。明らかに、プログラムに入力を与える場合、最速の解決策は、メモ化され、事前に計算された回答を吐き出すことです。客観的に、人々が自宅でプログラムを実行できるようにし、メモ化された答えを見ないようにする方法はありますか?
非公式の「最速コード競争」の発生を妨げている他の問題は何ですか?
ありがとう!
python - ワンライナースクランブルプログラム
プログラマーがリストをシャッフルして、元の位置に要素が存在しないようにしたいのは、今年もその時期です(少なくともオランダでは、シンタークラースを祝い、誰が誰の詩を書くかを決めるためにストローを選びます)。誰かがそのための素晴らしいPythonシングルステートメントを持っていますか?
したがって、入力例:range(10)
出力例:[2,8,4,1,3,7,5,9,6,0]
間違った出力は、が元の位置にある[2,8,4,1,3,5,7,9,6,0]
ためです。5
これは、人5が自分自身に詩を書かなければならないことを意味し、それはあまり楽しくありません。
編集多くの人は、幸運に恵まれ、実際に解決策が満足のいくものであることに気付くために、必要なだけ割り当てを繰り返します。理論的にはこれには無限に時間がかかる可能性があるため、これは悪いアプローチです。より良いアプローチは確かにバートによって提案されていますが、私は何らかの理由でそれをワンライナーに入れることができません...
編集ワンライナーとは、単一のステートメントを意味します。表示されているように、Pythonは1行で複数のステートメントを圧縮することもできます。私はそれを知りませんでした。現在、単一行の複数行の動作を模倣するためにセミコロンのみを使用する非常に優れたソリューションがあります。したがって、「1つのステートメントでそれを実行できますか?」
code-golf - コードゴルフ:フラクトラン
チャレンジ
Fractranインタープリターとして機能するプログラムを作成します。どの言語でも、文字数で最も短い通訳者が勝者です。プログラムは、実行するフラクトランプログラムと入力整数nの2つの入力を受け取る必要があります。プログラムは、プログラムに便利な任意の形式にすることができます。たとえば、2タプルのリスト、またはフラットリストなどです。出力は、実行終了時のレジスタの値である単一の整数である必要があります。
フラクトラン
Fractranは、JohnConwayによって発明された簡単な難解言語です。フラクトランプログラムは、正の分数のリストと初期状態nで構成されます。インタプリタはプログラムカウンタを維持し、最初はリストの最初の部分を指します。Fractranプログラムは、次の方法で実行されます。
- 現在の状態と現在プログラムカウンターの下にある分数の積が整数であるかどうかを確認します。そうである場合は、現在の状態に現在の端数を掛けて、プログラムカウンターをリストの先頭にリセットします。
- プログラムカウンターを進めます。リストの最後に達した場合は停止し、そうでない場合は手順1に戻ります。
Fractranが機能する方法と理由の詳細については、esolangエントリと良い数学/悪い数学に関するこのエントリを参照してください。
テストベクトル
プログラム: [(3、2)]
入力: 72(2 3 3 2)
出力: 243(3 5)
プログラム: [(3、2)]
入力: 1296(2 4 3 4)
出力: 6561(3 8)
プログラム: [(455、33)、(11、13)、(1、11)、(3、7)、(11、2)、(1、3)]
入力: 72(2 3 3 2)
出力: 15625(5 6)
ボーナステストベクトル:
あなたの提出物は、受け入れられる答えであるためにこの最後のプログラムを正しく実行する必要はありません。しかし、もしそうなら賞賛!
プログラム: [(455、33)、(11、13)、(1、11)、(3、7)、(11、2)、(1、3)]
入力: 60466176(2 10 3 10)
出力: 7888609052210118054117285652827862296732064351090230047702789306640625(5100)
提出物と採点
プログラムは文字の長さで厳密にランク付けされます-最短が最適です。うまくレイアウトされ、文書化されたバージョンと「縮小された」バージョンのコードの両方を自由に提出して、人々が何が起こっているかを確認できるようにしてください。
言語「J」は許容されません。これは、リンクされたページの1つにJですでによく知られている解決策があるためです。Jファンならごめんなさい!
ただし、追加のボーナスとして、フラクトランで実用的なフラクトラン通訳を提供できる人は誰でも、500レピュテーションポイントのボーナスを受け取ります。万が一、複数のセルフホスティング通訳者がいる場合は、端数が最も少ない通訳者がバウンティを受け取ります。
勝者
1779の分数を含む自己ホスティングフラクトランソリューションを提出した後の公式の勝者は、JesseBederのソリューションです。ただし、実際には、ソリューションは遅すぎて1+1でも実行できません。
信じられないことに、これはその後、別のフラクトランソリューション(わずか84分数のAmadaeusのソリューション)によって打ち負かされました!私のリファレンスPythonソリューションで実行すると、最初の2つのテストケースを数秒で実行できます。分数には新しいエンコード方法を使用しており、これもよく見る価値があります。
名誉ある言及:
- Stephen Canonのソリューション、165文字のx86アセンブリ(28バイトのマシンコード)
- 52文字のルビでのJordanのソリューション-長整数を処理します
- 最短のPythonソリューションではありませんが、再帰的ではないため、より難しいプログラムを簡単に処理できる数少ないソリューションの1つである、87文字のPythonでのUselessのソリューション。また、非常に読みやすいです。
language-agnostic - コードゴルフ:流水
チャレンジ
入力からの土地の ASCII 表現で水のくぼみを識別してマークするための、文字数による最短コード。
入力は、丘、谷、平地を含む風景の ASCII 表現になります。プログラムは、 が浸水した場合の風景をシミュレートする必要があります。つまり、すべての谷が水で満たされます (文字x
)。
ランドスケープは常に文字と共に開始および停止し、_
少なくとも 2 文字の長さで、最短の入力になります__
。
丘はレイズとして定義され、水で満たされるべきではありません:
谷はくぼみとして定義され、平地に遭遇するまで水で満たされます。
入力はクリーンであると見なすことができ、スペース ( )、改行 (
\n
)、アンダースコア ( _
)、スラッシュ (/
および\
) の文字のみで構成されます。_/_
入力は連続した行と見なすことができ、またはなどのあいまいな行入力を含む入力
無効と見なされます。
水中洞窟については、洞窟レベルが水位を上回った場合、水位を維持する必要があります。
テストケース
コード カウントには、入力/出力 (つまり、完全なプログラム) が含まれます。
programming-languages - Code-Golf: コンパイルしてクラッシュする最短のプログラムは?
これはちょっとした楽しみです。コンパイルはするが何もせず、実行するとすぐにクラッシュする最短のプログラムを考案できますか? したがって、「クラッシュ」とは、プログラムがエラー状態 (コア ダンプなど) で停止することを意味します。
gcc コンパイラを使用して C よりも速く (7 文字) クラッシュする言語はありますか? [この答えは、誰かが見つけられるように残しておきます。]
(コンパイラ フラグを使用することは許容されるはずです。そうしないと、最近では 7 が機能しなくなります。コンパイラ チェックははるかに優れたものになりました。)
【結果の評価】 複数の言語で複数の正解があるため、1 つにマークすることはできません。ある回答を別の回答で失格にするのは公平ではありません。最良の回答を選ぶために投票を使用してください。
interpreter - チューリングマシンコードゴルフ
皆さん、今日の目標はチューリング マシン シミュレータを構築することです。それが何かわからない人は、ウィキペディアの記事を参照してください。現在使用している状態テーブルは、そのページの一部である Formal Definitionの最後にあります。
このコードは、一連の「0」と「1」の文字列文字、マシンが開始する文字を表す整数、およびプログラムの状態を表す整数 (順不同) を受け取り、次の最終結果を出力します。文字列の操作と最終的な位置。例:
例 1:
例 2:
その他:
- コードは、必要に応じて文字列を拡張して、テープの「空白」への書き込みを適切に処理する必要があります。
- 指定されたステート マシンは、いかなる種類の「ブランク テープ」アクションも指定しないため、すべてのブランク値を 0 として扱います。
- 初期状態の文字列の評価を処理するメソッドのみをカウントする必要があり、そのデータをどのように出力するかはあなた次第です。
- テープ上で右に移動すると上に増加し (文字列位置 0 は一番左)、状態 0 は A、状態 1 は B、状態 2 は C です。
(できれば)最終編集: この質問で混乱とトラブルを引き起こしたことについて、心からお詫び申し上げます。リストした提供された状態テーブルを読み違えて、逆に取得しました。時間を無駄にしてしまったことをお許しください。それは完全に意図的ではありませんでした!
python - string.translate() を使用して印刷できない文字をドットに変更する
だから私は以前にこれをやったことがあり、そのような一見単純なタスクのための驚くほど醜いコードです。
目標は、印刷できない文字を. (ドット)。私の目的では、「印刷可能」は最後の数文字string.printable
(改行、タブなど) を除外します。これは、古い MS-DOS デバッグの「16 進ダンプ」形式などを出力するためのものです ... またはそれに類似したもの (空白を追加すると、意図したダンプ レイアウトが台無しになります)。
使用できることはわかっていstring.translate()
ますが、それを使用するには、変換テーブルが必要です。だから私はそれに使いますstring.maketrans()
。これが私が思いつくことができる最高のものです:
...これは読めない混乱です(ただし、機能します)。
そこから、次のような use を呼び出すことができます。
... そして、幸せになります。(ボンネットの下を見ない限り)。
この恐ろしい表現を別のステートメントに分割すると、より読みやすくなります。
そして、読みやすさのためだけにそれを行うのは魅力的です.
しかし、私はこれをもっとエレガントに表現する方法がなければならないと考え続けています!
language-agnostic - コードゴルフ:ウラムスパイラル
チャレンジ
ユーザー入力によって指定されたスパイラル サイズでウラムのスパイラルを出力するための、文字数別の最短コード。
ウラムのらせんは、素数をマッピングする方法の 1 つです。らせんは、中心にある数字 1 から始まり (1 は素数ではありません)、その周りにらせんを生成し、すべての素数を文字 ' *
' としてマークします。非素数はスペース '
' として出力されます。
代替テキスト http://liranuna.com/junk/ulam.gif
テストケース
コード カウントには、入力/出力 (つまり、完全なプログラム) が含まれます。
language-agnostic - コード ゴルフ: ダイヤモンド ブラックジャック
チャレンジ
与えられた数字カードのリストから最良のケースのブラックジャック ハンドを出力するための、文字数による最短コード。
入力は、スペースで区切られた 1 ~ 10 (両端を含む) の数字のリストです。
出力は、そのカードのリストから形成された最高のブラックジャック ハンドになります。それを超えることなく、すべてのカードの値の合計が 21 に達する最も近い利用可能なコンボです。カードは削除できますが、追加はできません。
同じ結果を達成するために 1 枚のカードを優先して 2 枚以上のカードを削除する場合 (5 または 4,1 を削除して 21 を得る)、最小のカードを削除する必要があります。同量のカードを取り除く場合 (1,4 または 3,2 を取り除く)、最小のうち最小のグループが取り除かれます (前の例では、1,4 がmin(min(3,2), min(1,4))
そのペアに属するものとして取り除かれます)。カードが重複している場合は、最初の遭遇を削除する必要があります。
出力はダイヤモンド カードとして形成され、入力順序は保持されます。
テストケース
コード カウントには、入力/出力 (つまり、完全なプログラム) が含まれます。