最短コナミコード


15

問題

実行時にコナミコードを入力すると、文字列「+30 lives」がれ、コンピューターのスピーカーから選択したノイズが聞こえるます。

定義

「コナミコード」は次のように定義されています UUDDLRLRBA、Enterキーを押すことでます。

ルール

  • コードが矢印または文字と一致している限り、上矢印U、下矢印D、左矢印L、右矢印の使用を選択できますR
  • 入力はコントローラーまたはキーボードから受け入れられますが、両方をサポートする必要はありません。
  • 既存の回答はのBABA代わりに引き続き使用できますがBA、必要に応じて短縮することもできます。BA一貫性のために、将来の回答はすべて使用する必要があります。

  • 空の入力をサポートする必要はありません。


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
マーティンエンダー

回答:


13

05AB1E、33バイト(空の入力でファイン)

Dg0Qiq}•ï“뙵yê!•36BQi7ç“+30™‹“J,

オンラインでお試しください!

05AB1E30 26バイト(空の入力で失敗)

-4アドナンに感謝

•ï“뙵yê!•36BQi7ç,“+30™‹“,

オンラインでお試しください!

•ï“뙵yê!•36B                  # UUDDLRLRBABA in base-214, converted back to base-36.
             Qi                # If implicit input is equal to...
               7ç,             # Print 7 converted to a character to the console (bell sound)...
                  “+30™‹“, # Print +30 lives.

免責事項:BellItのサウンドはTryItOnlineで再生されません。おそらく、実行時に彼のサーバーのいずれかがpingを実行しているかどうかをDennisに尋ねてください。


あなたはほとんど勝ちました!1バイトだけオフ
クリストファー

2
の圧縮バージョン"+30 lives"“+30™‹“:)
Adnan

これは、入力が空の場合でも、オンラインインタープリターで常に「+30ライフ」を出力します。
redstarcoder 16

2
空の入力、がらくた、固定でのみ@redstarcoder *
マジックタコ壷

@carusocomputingあなたが(私のせいには申し訳ありません)一度BAが唯一である必要があり、この問題を解決することができます
クリストファー・

7

JavaScriptの(ES6)、202の 200 198バイト

ChromeとFirefoxでのみテスト済み。UDLR矢印キーではなく使用します。CapsLockがオフになっていることを確認してください。

(o=(A=new AudioContext()).createOscillator()).connect(A.destination);s='';document.onkeyup=e=>{(s+=e.key[0]).slice(-11)=='uuddlrlrbaE'&&setTimeout('o.stop()',500,console.log('+30 lives'),o.start())}
Please click inside this area to make sure it gets focus.


これを修正できますか?BAは1回だけです(ごめんなさい)
クリストファー

7

Pythonの3、 55の 、53バイト

isaacgのおかげで-1バイト(代わりにビット単位を使用-10してください~9)。
CalculatorFelineのおかげで-1バイト(リテラルを使用することが可能ですBELバイトます)。

while'UUDDLRLRBA'!=input()[~9:]:1
print('+30 lives7')

どこ 7上記に示したリテラルバイトであります0x07(コードブロックに印刷不可能)。

Enterを押すと、whileループ条件がチェックされます。最後の~9= 10文字(最大)がContraコマンドコードと一致しない場合、no-op 1が実行されます(置換pass簡潔ための)。彼らがあればやる一致し、ループが終了し、一方、printステートメントが実行され、その書き込みASCIIのベル文字(「アラーム」)、と一緒に必要なテキスト0x07、それが明示的に無効にされた(または端末が何のスピーカーを持っていない場合を除き、音を生成し、 !)。


これを修正できますか?BAは1回だけです(ごめんなさい)
クリストファー

修正、ヘッズアップに感謝します。
ジョナサンアラン

1
-10= ~9、1バイト節約できます。
-isaacg

-1バイトの文字列にリテラル\ x07を入れることはできませんか?
電卓

@CalculatorFelineわかりませんが、できますか?人々\nはPythonゴルフのストリングスでよく使用しますが、なぜ使用しないの\x0aですか?
ジョナサンアラン

5

ゼリー、33 30 29 27バイト

ɠ⁻“UUDDLRLRBA”$¿ṛ7Ọ“¡}ʠƈ[ỵ»

結局、追加()は必要ありません。文字列は自動的に結合され、両方が印刷されます。

ɠ⁻“UUDDLRLRBABA”$¿ṛ7Ọṭ“¡}ʠƈ[ỵ»

非圧縮

ɠ⁻“UUDDLRLRBABA”$¿ṛ7Ọṭ“+30 lives”

オンラインで試してみてください
¿にすべてを削除すると、入力が乱れ、入力文字列が正しい場合にのみ返されることがわかります。

ɠ⁻“UUDDLRLRBABA”$¿ṛ7Ọṭ“+30 lives” - main link
ɠ                                 - takes a line of input
 ⁻“UUDDLRLRBABA”$                 - $ groups it into a monadic !="UUDDLRLRLRBABA"
                 ¿                - while (the inequality, which takes from the getline)
                  ṛ               - take the right argument (to ignore the input string)
                   7Ọ             - chr(7), the bell character
                     ṭ“+30 lives” - append that bell character to the output

@JonathanAllanが文字列の圧縮を理解してくれてありがとう。


“+30 lives”で圧縮された“¡}ʠƈ[ỵ»(将来の参考のために、ここではそれについてのポストである、それはゼリーのwikiのチュートリアルにリンクされています)。
ジョナサンアラン

音はどこですか?
tuskiomi

1
私はちょうど公式の通訳でそれをテストし、それは確かにないコナミコードが入力されるまでループを
JayDepp

@JayDeppはこれを修正できますか?BAは1回だけです(ごめんなさい)
クリストファー

私は、LLCの暗黙的な印刷(リードコンスタントチェーン)とそれに続くniladの暗黙的な印刷、つまりまるで連結であるかのようにstdoutに表示される自動文字列連結ではないことを信じています。ショーケースとして、の間に2秒のスリープを追加してみてください。7Ọ“¡}ʠƈ[ỵ»ɠ⁻“UUDDLRLRBABA”$¿ṛ7Ọ2“+30 lives”œS
ジョナサンアラン

5

処理中、161 157 155バイト

String k="";void keyTyped(){if(match(k+=key,"uuddlrlrba\\n$")!=null){print("+30 lives");new processing.sound.SoundFile(this,"a.mp3").play();}}void draw(){}

オーディオファイルはとして保存する必要がありますsketchName/data/a.mp3。注:ファイルをダウンロードするのが面倒なので、音声ファイルなしでこのプログラムをテストしただけmp3です(限られた拡張子のみがからサポートされているためprocessing.sound.SoundFile)。

draw()関数がためにそこに必要とされていますkeyTypedに。

使用してkeyTypedいる理由は、ProcessingにSTDINがないため、実行中のスケッチを介して押されたキーのみをリッスンできるためです。

説明

String k="";
void keyTyped(){
  if(match(k+=key,"uuddlrlrba\\n$")!=null){
    print("+30 lives");
    new processing.sound.SoundFile(this,"a.mp3").play();
  }
}
void draw(){
}

ユーザーのすべてのキーストロークは、String内に文字として保存されkます。keyTypedいつでもユーザーがキーと呼ばれる作り付けの機能です。同時に、この文字列がキーストロークで終わるかどうかを確認しています。次に+30 lives、サウンドファイルを印刷して再生します。そして、draw機能は継続的に更新するためにありkeyTypedます。コナミコードを入力すると、他には何も出力されず、オーディオは再生されません。


あなたはmp3ファイルのサイズカウントするように思える

@ricyje Processingには、サウンドを出力する他の方法はありません。また、サイズ.mp3のファイルは実際にそれが何であるかに関係なく、処理が音としてそれを再生されますので、問題ありません
KritixiのLithosに

@KritixiLithosあなたはこれが(私のせいには申し訳ありません)一度BAのみでなければなりません修正することができます
クリストファー・

@ChristopherPeart完了!(さらに2バイトを保存できてうれしいです。)
Kritixi Lithos

4

> <>、132 69 64 62バイト*> <>、84バイト

i:1+?\0[
:1+?!\i
BA"a~/"UUDDLRLR
{v!?l/!?=
7/"+30 lives"
o<;!?l

ここで試してみてください!

これはベルチャイム(ascii 7)に最後のノイズ(オンラインインタープリターでは聞こえない)にます。

さらに15バイトを節約してくれた@TealPelicanに感謝します!

BA代わりにチェックする2バイトを保存しましたBABA


これは音を出しますか?
クリチキシリトス

@KritixiLithos、はい、最後の2行目にある「7」はベルチャイムです。
redstarcoder 16

最初の行の使用方法がよくわからなかったので、コードを少しリファクタリングしましたか?ここで試してみてくださいこのリンクは> <>用ですが、*> <>でも機能します(あなたのようなダイブメカニックは使用しません)-19バイトも節約できます!:)
ティールペリカン

@Tealpelican、最初の行は実行を続け、入力を待っています!リンクされたバージョンはそれを行いません; p。
redstarcoder 16

あなたが正しいです!私は逃しました!-私は私のエラーに対処するための行を追加し、反転して印刷するいくつかの冗長を交換してきた新バージョン試してみてください、私は67のバイトまで得ている:D
ティールペリカン

3

C 119 -1-2 = 116バイト

ゴルフ

i;f(){char a[14];a[13]=0;while(strcmp(a,"UUDDLRLRBA"))for(i=0;i<12;a[i]=a[i+++1]);a[i]=getch();puts("+30 Lives\a");}  

非ゴルフ

#include<stdlib.h>
#include<conio.h>

i;
f()
{
    char a[14];
    a[13]=0;
    while(strcmp(a,"UUDDLRLRBA"))
    {
        for(i=0;i<12;a[i]=a[i+++1]);
        a[i]=getch();
        puts(a); //This is to print every step in the runtime
    }
    puts("+30 Lives\a"); // '\a' is the acsii char that makes sound when passed to STDOUT
}

main()
{
    f();
}

s/UUDDLRLR BABA/UUDDLRLRBABA-1バイトの場合、strcmpは正しい文字列を探します!
redstarcoder 16

@Christopherは、このStack Exchangeサイトでユーザーのコードを編集しないでください。編集が承認されることはありませんでした。

ムクル、自分でスペースを削除できます。

1
@MukulKumarもちろん:)回答者が自分のコードを編集することが重要です。

1
@MukulKumarは、あなたがこの問題を解決することができBAは(私のせい申し訳ありません)後でなければなりません
クリストファー・

3

積み上げ、41バイト

['+30 lives'BEL+out]prompt'UUDDLRLRBA'=if

キーボードから入力を読み取ります。

['+30 lives'BEL+out]prompt'UUDDLRLRBA'=if
[                  ]prompt'UUDDLRLRBA'=if  if the input is the desired string,
 '+30 lives'BEL+out                           output '+30 lives' and the BEL character. 

3

AutoHotkey、63バイト

Input,K,L10
if(K="UUDDLRLRBA"){
MsgBox,"+30 lives" 
SoundBeep
}

次の10個のキーはコナミコードであり、それがあれば、それは「30人の生活」というメッセージボックスが表示され、それがあれば、このスクリプトを実行した後、それがチェックする必要がありますテストに(私は今のスピーカーを持っていないビープ音を再生します)。


涼しい!AutoHotkeyは興味深いプログラムです。
クリストファー

3

GNU sed、32 25 + 1 = 33 26バイト

-nフラグ用に+1バイト。

/UUDDLRLRBA$/a+30 Lives\a

オンラインでお試しください!

説明

Enterキーを押すたびに($)、プログラムは、前の10回のキーストロークがコードであったかどうかをチェックします。存在する場合、aコマンドはテキスト+30 Livesとベル音(\a)をキューに入れて、現在のサイクルの終了時に印刷します(この場合、すぐに実行されます)。


これを修正できますか?BAは1回だけです(ごめんなさい)
クリストファー

これはすでにBA一度だけです。
ヨルダン

ああすごい気づかなかった
クリストファー

3

Mathematica、50バイト

While[x=!=UUDDLRLRBA,x=Input[]];Beep[];"+30 lives"

最初はxは単なるシンボルであるため、シンボルと同一(=!=)ではないUUDDLRLRBAためx=Input[]、評価されます。これにより、カーソルが既に入力フィールドにあるダイアログボックスが開き、ユーザーはすぐにキーボードで入力を開始できます。

Enterが押された場合、またはOK何も入力せずにクリックされた場合、InputField[]が返されますNull。これはとは同じではないUUDDLRLRBAため、ループが続行され、別のダイアログボックスが開きます。

ユーザーがCancelダイアログボックスをクリックするか、ダイアログボックスを終了すると、InputFieldを返しますが$Canceled、これも同じではありませんUUDDLRLRBAため、ループが続行されます。

ユーザーは、ダイアログボックスに思いのままに入力できます。ヒットするEnterと、入力はWolfram言語表現(おそらく単なるボックス)として解釈されます。その式がsymbol以外の場合UUDDLRLRBA、ループは継続します。

「コナミコードが入力されるまでループする必要があります」は少しあいまいですが、これで満足できると思います。一度While、ループが完成します。Beep[];"+30 lives"


これを修正できますか?BAは1回だけです(ごめんなさい)
クリストファー

1
UUDDLRLRB?どこAだ?
電卓

@CalculatorFeline固定
ngenisis

3

Petit Computer BASIC、91バイト

@L
WAIT 1S$=S$+CHR$(B)*!!B
B=BTRIG()IF B<1024GOTO@L
IF"xxxxxxxxxx"==S$THEN BEEP?"+30 lives

最後に、実際にコントローラー入力を使用するソリューション!

新しいバージョン(SmileBASIC)ではなくPetit Computerを使用しました。これは、[スタート]ボタンへのアクセス権があり、BTRIG()が短いためBUTTON()です。

データ文字列をx'sに置き換えました。ASCIIコード1,1,2,2,4,8,4,8,32,16の文字が含まれている必要があります

退屈なバージョン、46バイト

INPUT S$IF"UUDDLRLRBA"==S$THEN BEEP?"+30 lives

プチコンピュータエントリの名前にSmileBASIC 2を使用することをお勧めします。必要に応じてSmileBASICをSmileBASIC 3として指定します。
snail_

コントローラを使用して素晴らしい仕事を!
クリストファー

2

Powershell、89 86バイト

if((Read-Host)-eq"UUDDLRLRBABA"){"+30 Lives";[System.Media.SystemSounds]::Beep.Play()}

Enterは文字列をに送信するRead-Hostため、動作するはずです。


2
Contraコードには「」がないため、「UUDDLRLR BABA」ではなく「UUDDLRLRBABA」を確認する必要があると思います。また、1バイト節約できます。入力を送信するためにEnterキーを押さなければならないため、Enterを仮定するのは有効だと思います。
redstarcoder

ちなみに仕事をしています
クリストファー

1
@ChristopherPeartあなたがOPである場合でも、バイトを保存している場合でも、他の人のコードを編集しないでください。

オッケー、私がやります。しかし、それは私のせいだった
クリストファー

@ConnorLSWあなたはこれを修正することができますBAは1回だけです(ごめんなさい)
クリストファー

2

C#(退屈なバージョン)、80バイト

void n(){while(Console.ReadLine()!="UUDDLRLRBA"){}Console.Write("+30 Lives\a");}

C#(興味深いもの)、202バイト

void n(){t();Console.Write("+30 Lives\a");}void t(){var k="UUDDLRLRBA";var s="";while(s!=k){s+=Console.ReadKey().Key.ToString();s=k.StartsWith(s)?s:"";}if(Console.ReadKey().Key!=ConsoleKey.Enter){t();}}

これがうまくいくと思う、残念ながらオンラインテスターはコンソール入力の存在をサポートしていないので、私が行ったテストに行かなければならない

おそらく大いにゴルフすることができます-私はこれが得意ではありません!:)

ゴルフをしていない:

void n()
{
    t();
    Console.WriteLine("+30 Lives\a");
}

void t()
{
    var k = "UUDDLRLRBA";
    var s = "";
    while(s != k)
    {
        s += Console.ReadKey().Key.ToString();
        s = k.StartsWith(s) ? s : "";
    }
    if(Console.ReadKey().Key != ConsoleKey.Enter)
    {
        t();
    }
}

Hmm, does C# have a way to read until a newline is detected? That'd save you from looking for the enter key. Look at how it's implemented in Python here.
redstarcoder

There's Console.Readline but I thought that might be aganist the spirit of the challenge! If that's fine I can make this much shorter
Alfie Goodacre

@redstarcoder added a Console.ReadLine() version
Alfie Goodacre

@AlfieGoodacre can you fix this the BA should only be once (my fault sorry)
Christopher

@ChristopherPeart It originally was but I had to change it ;)
Alfie Goodacre

2

Wonder, 50 bytes

ol"•";f\@[="UUDDLRLRBA"rl0?ol"+30 lives•"?f0];f0

Replace with the character of code \x07 (the BEL control char). Takes input through STDIN.


can you fix this the BA should only be once (my fault sorry)
Christopher

Well I fixed. Thanks for the notice!
Mama Fun Roll

1

flex, 37 + 5 = 42 bytes

%%
UUDDLRLRBA puts("+30 lives\a");

The code itself is 37 bytes, compile it with the "-main" option which adds 5 bytes. Naturally, you have to compile the resulting C file with your favorite C compiler, but I don't think that step should count toward the byte count.

I could save a byte by using a literal BEL character instead of \a, but I'd rather be able to read my own code.


4
You really don't need to be able to read the code. This is code golf
Christopher

Personally, I think I should get a bonus for using flex, due to how rarely it gets used here. :)
BenGoldberg

1
I believe you can reduce the penalty to 3 bytes via giving -ll as an option to the C compiler rather than -main as an option to flex.

1

C, 87 85 81 bytes

s[13];f(){for(;strcmp(s,"UUDDLRLRBA\n");fgets(s,12,stdin));puts("+30 Lives!\a");}

1

shortC, 52 bytes

s[13];AO;Ms,"UUDDLRLRBA\n");Ys,12,N));J"+30 Lives!\a

Explanation:

s[13];                                                // declare array with 13 members
      A                                               // main function
       O;Ms,"UUDDLRLRBA\n");                          // for loop while input is not equal to the Konami Code
                            Ys,12,N));                // read 12 characters of input into array
                                      J"+30 Lives!\a  // print the string

Try it online!


1

C, 114 bytes

#define X "UUDDLRLRBA"
main(i,j){for(i=j=0;!j;)(getchar()==X[i++])&&((j=1?!X[i]|puts("+30 lives\a"):0)|1)||(i=0);}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.