가장 짧은 코나미 코드


15

문제

런타임 중에 Konami Code를 입력하면 문자열 " +30 lives"이 (가) 인쇄 되고 컴퓨터 스피커에서 원하는 소리가 나는 프로그램을 작성해야합니다 .

정의

"Konami Code"는 UUDDLRLRBAenter 키를 눌러 정의됩니다 .

규칙

  • 코드가 화살표 나 문자와 일치 하는 한 위 U, 아래 D,, 왼쪽 L, 오른쪽 을 사용할 수 있습니다 R.
  • 컨트롤러 나 키보드에서 입력을 받아 들일 수 있지만 두 가지를 모두 지원할 필요는 없습니다.
  • 기존 답변은 BABA대신에 계속 사용할 BA수 있지만 원하는 경우 답변을 줄일 수도 있습니다. 향후 답변은 BA일관성을 위해 사용해야 합니다.

  • 빈 입력은 지원할 필요가 없습니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Martin Ender 2013

답변:


13

05AB1E , 33 바이트 (빈 입력에 대한 정밀)

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

온라인으로 사용해보십시오!

05AB1E , 30 26 바이트 (빈 입력시 실패)

Adnan 덕분에 -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.

면책 조항 : Bell 사운드는 TryItOnline에서 재생되지 않습니다. Dennis가 서버를 실행할 때 어딘가에 핑이 있는지 물어보십시오.


당신은 거의 이겼습니다! 단 1 바이트 할인
Christopher

2
압축 버전 "+30 lives"“+30™‹“:)
Adnan

이것은 빈 입력으로도 온라인 통역사에서 항상 "+30 life"를 출력합니다.
redstarcoder

2
@redstarcoder 전용 ** 빈 입력, 크랩, 고정
Magic Octopus Urn

@carusocomputing이 BA를 한 번만 수정하면 문제를 해결할 수 있습니까 (죄송합니다)
Christopher

7

자바 스크립트 (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가 한 번만되어야합니다 (죄송합니다)
Christopher

7

파이썬 3,  55  53 바이트

-1 isaacg에 바이트 감사 (사용 비트는 교체하지 않을 경우 -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가 한 번만되어야합니다 (죄송합니다)
Christopher

고마워요.
Jonathan Allan

1
-10= ~9당신에게 바이트를 저장할 수있다.
isaacg 2016 년

-1 바이트의 문자열에 리터럴 \ x07을 넣을 수 없습니까?
CalculatorFeline

@CalculatorFeline 잘 모르겠습니다. 사람들은 종종 \n파이썬 골프에서 문자열을 사용 하는데, 왜 사용하지 \x0a않습니까?
Jonathan Allan

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”압축은 “¡}ʠƈ[ỵ»(미래의 참조를 위해 여기에 , 그것이 젤리 위키에있는 튜토리얼에서 링크의 IT에 대한 게시물입니다).
Jonathan Allan

소리는 어디에 있습니까?
tuskiomi

1
난 그냥 공식 통역을 테스트하고 그것은 참으로 않습니다 코나미 코드를 입력 할 때까지 루프
JayDepp을

@JayDepp 당신은 BA가 한 번만 있어야이 문제를 해결할 수 있습니까 (죄송합니다)
Christopher

내가 생각 이 너무 많은 (상수 체인을 선도)이 LLC의 암시 프린트로 자동 문자열 연결 아니에요 7Ọnilad의 암시 인쇄 다음 “¡}ʠƈ[ỵ»은 연결 것처럼 표준 출력에 나타나는. 쇼케이스로을 (를) 사이에 2 초의 잠을 추가 할 수 있습니다 ɠ⁻“UUDDLRLRBABA”$¿ṛ7Ọ2“+30 lives”œS.
Jonathan Allan

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작업이다.

우리가 사용하는 이유는 keyTypedProcessing에 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파일 크기에 관계없이 파일 크기는 중요하지 않습니다. Processing은 소리로 재생합니다.
Kritixi Lithos

@KritixiLithos이 문제를 해결하려면 BA가 한 번만되어야합니다 (죄송합니다)
Christopher

@ChristopherPeart 완료! (I는 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.


소리가 나나요?
Kritixi Lithos

@KritixiLithos, 그렇습니다. 마지막 두 번째 줄에는 "7"이 있습니다. 종소리입니다.
redstarcoder

첫 줄 사용을 이해하지 못했기 때문에 코드를 약간 리팩터링 했습니까? 여기에서 시도하십시오이 링크는> <> 용이지만 *> <>에서도 작동합니다 (다이빙 메카니즘을 사용하지 않았 음)-또한 19 바이트에 저장되었습니다! :)
청록 펠리컨

@Tealpelican, 첫 번째 줄은 입력을 기다리는 동안 계속 실행됩니다! 귀하의 링크 된 버전은 그렇게하지 않습니다.
redstarcoder

당신이 맞아요! 나는 그것을 놓쳤다! -오류를 수용하기 위해 줄을 추가하고 일부 중복 반전 및 인쇄를 교체 했습니다. 67 바이트로 줄인 새 버전사용해보십시오 . : D
Teal pelican

3

C119-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

@Christopher는이 Stack Exchange 사이트에서 사람들의 코드를 편집하지 마십시오. 수정 사항이 승인되지 않아야합니다.
고양이

Mukul, 당신은 공간을 직접 제거 할 수 있습니다.
고양이

1
@MukulKumar 물론 :) 응답자가 자신의 코드를 편집하는 것이 중요합니다.
cat

1
@MukulKumar BA를 한 번만 수정하면 문제를 해결할 수 있습니까?
Christopher

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

오토 핫키, 63 바이트

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

이 스크립트를 실행 한 후 다음 10 개 키가 코나미 코드인지 확인하고 "+30 수명"이라는 메시지 상자를 표시 하고 경고음을 재생 해야 합니다 (테스트 할 스피커가 없습니다) ).


멋있는! 오토 핫키는 흥미로운 프로그램입니다.
Christopher

3

GNU sed, 32 25 + 1 = 33 26 바이트

-n플래그의 경우 +1 바이트

/UUDDLRLRBA$/a+30 Lives\a

온라인으로 사용해보십시오!

설명

Enter 키를 누를 때마다 ( $) 프로그램은 이전 10 개의 키 입력이 코드인지 확인합니다. 만약 그렇다면, a명령 은 현재 싸이클이 끝날 때 (이 경우 즉시) 인쇄 될 텍스트 +30 Lives와 벨 소리 ( \a)를 대기열에 넣습니다 .


이 문제를 해결하려면 BA가 한 번만되어야합니다 (죄송합니다)
Christopher

이것은 이미 BA단 한 번입니다.
Jordan

오 와우는 눈치 채지 못했습니다
Christopher

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가 한 번만되어야합니다 (죄송합니다)
Christopher

1
UUDDLRLRB? 어 '어 A?
CalculatorFeline

@CalculatorFeline 고정
ngenisis

3

쁘띠 컴퓨터 기본, 91 바이트

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

실제로 컨트롤러 입력을 사용하는 솔루션!

그것은 시작 버튼에 대한 액세스 권한을 가지고 있으며, 때문에 쁘띠 컴퓨터가 아닌 최신 버전 (SmileBASIC)를 사용하는 BTRIG()것보다 짧다 BUTTON().

데이터 문자열을로 바 꾸었습니다. xASCII 코드 1,1,2,2,4,8,4,8,32,16이있는 문자가 포함되어야합니다

지루한 버전, 46 바이트

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

Petit Computer 항목의 이름으로 SmileBASIC 2 를 사용 하고 필요한 경우 SmileBASIC을 SmileBASIC 3 으로 지정하는 것이 좋습니다 .
달팽이 _

컨트롤러를 사용하여 좋은 일!
Christopher

2

파워 쉘, 89 86 바이트

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

enter는에 문자열을 제출 Read-Host하므로 작동해야합니까?


2
콘트라 코드에 ""가 없기 때문에 "UUDDLRLR BABA"가 아닌 "UUDDLRLRBABA"를 확인해야한다고 생각합니다. 그것은 또한 당신에게 바이트를 절약 할 것입니다. 입력을 보내기 위해 enter를 눌러야하기 때문에 enter를 가정한다고 생각합니다.
redstarcoder

나는 그런데 일을 해요
Christopher

1
@ChristopherPeart OP 인 경우 나 바이트를 저장하는 경우에도 다른 사람의 코드를 편집하지 마십시오.
고양이

알겠습니다. 그러나 그것은 내 잘못이었다
Christopher

@ConnorLSW이 문제를 해결하려면 BA가 한 번만되어야합니다 (죄송합니다)
Christopher

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();
    }
}

흠, C #에는 줄 바꿈이 감지 될 때까지 읽는 방법이 있습니까? Enter 키를 찾지 않아도됩니다. 이 파이썬에서 구현 어떻게 봐 여기 .
redstarcoder

있다 Console.Readline하지만 난 그 도전의 정신 aganist 될 줄 알았는데! 괜찮다면 나는 이것을 더 짧게 만들 수있다
Alfie Goodacre

@redstarcoder Console.ReadLine()버전을 추가
Alfie Goodacre

@AlfieGoodacre이 문제를 해결하려면 BA가 한 번만되어야합니다 (죄송합니다)
Christopher

@ChristopherPeart 원래 원래이지만 변경해야했다;)
Alfie Goodacre

2

Wonder , 50 바이트

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

교체 코드의 문자로 \x07합니다 (BEL 제어 문자). STDIN을 통해 입력을받습니다.


이 문제를 해결하려면 BA가 한 번만되어야합니다 (죄송합니다)
Christopher

잘 고쳤다. 통지 해 주셔서 감사합니다!
Mama Fun Roll

1

플렉스, 37 + 5 = 42 바이트

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

코드 자체는 37 바이트이며 "-main"옵션으로 컴파일하여 5 바이트를 추가합니다. 당연히, 좋아하는 C 컴파일러로 결과 C 파일을 컴파일해야하지만 그 단계가 바이트 수로 계산되어야한다고 생각하지 않습니다.

대신 리터럴 BEL 문자를 사용하여 바이트를 절약 할 수는 \a있지만 내 코드를 읽을 수는 있습니다.


4
실제로 코드를 읽을 필요는 없습니다. 이것은 코드 골프입니다
Christopher

개인적으로 Flex 사용이 거의 없기 때문에 flex 사용에 대한 보너스를 받아야한다고 생각합니다. :)
BenGoldberg

1
Flex 옵션 -ll대신 C 컴파일러에 옵션을 제공하여 페널티를 3 바이트로 줄일 수 있다고 생각합니다 -main.

1

C, 87 85 81 바이트

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

1

shortC, 52 바이트

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

설명:

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

온라인으로 사용해보십시오!


1

C, 114 바이트

#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.