Mã Konami ngắn nhất


15

Vấn đề

Bạn phải viết một chương trình, khi Mã Konami được nhập trong thời gian chạy, in chuỗi " +30 lives" và phát ra tiếng ồn do bạn chọn từ loa của máy tính.

Định nghĩa

"Mã Konami" được định nghĩa như UUDDLRLRBAsau bằng cách nhấn phím enter.

Những quy định

  • Bạn có thể chọn sử dụng mũi tên lên cho U, xuống cho D, trái cho Lvà phải R, miễn là mã của bạn phù hợp với mũi tên hoặc chữ cái.
  • Đầu vào của bạn có thể được chấp nhận từ bộ điều khiển hoặc bàn phím, nhưng không cần hỗ trợ cả hai.
  • Các câu trả lời hiện tại có thể tiếp tục sử dụng BABAthay vì BA, nhưng cũng có thể rút ngắn nếu họ muốn làm như vậy. Câu trả lời trong tương lai nên sử dụng BAcho sự nhất quán.

  • Đầu vào trống không cần phải được hỗ trợ.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Martin Ender

Câu trả lời:


13

05AB1E , 33 byte (Phạt trên đầu vào trống)

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

Hãy thử trực tuyến!

05AB1E , 30 26 byte ( Thất bại khi nhập dữ liệu trống)

-4 cảm ơn Ad Nam

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

Hãy thử trực tuyến!

•ï“뙵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.

Tuyên bố miễn trừ trách nhiệm: Âm thanh chuông không phát trên TryItOnline, có thể hỏi Dennis nếu một trong các máy chủ của anh ấy ở đâu đó bị rè khi bạn chạy nó.


Bạn gần như đã thắng! Chỉ cần một byte tắt
Christopher

2
Phiên bản nén "+30 lives"“+30™‹“:)
Adnan

Điều này luôn tạo ra "30 cuộc sống" cho tôi trên trình thông dịch trực tuyến, ngay cả với đầu vào trống.
redstarcoder

2
@redstarcoder Chỉ * với đầu vào trống, tào lao, sửa lỗi
Magic Octopus Urn

@carusocomputing bạn có thể sửa lỗi này BA chỉ nên một lần (lỗi của tôi xin lỗi)
Christopher

7

JavaScript (ES6), 202 200 198 byte

Chỉ được thử nghiệm trên Chrome và Firefox. Sử dụng UDLRchứ không phải là các phím mũi tên. Vui lòng đảm bảo rằng CapsLock đã tắt.

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


bạn có thể sửa cái này không, BA chỉ nên một lần thôi (lỗi của tôi xin lỗi)
Christopher

7

Con trăn 3  55  53 byte

-1 byte nhờ vào isaacg (sử dụng bitwise không để thay thế -10bằng ~9).
-1 byte nhờ vào CalculatorFeline (có thể sử dụng một BELbyte bằng chữ ).

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

trong đó 7hình trên là một byte bằng chữ 0x07(không thể in được trong khối mã).

Khi nhập được nhấn, whileđiều kiện vòng lặp được kiểm tra. Nếu cuối cùng ~9= 10 ký tự (nhiều nhất) không khớp với mã lệnh Contra thì lệnh no-op 1được thực thi (thay thế passcho ngắn gọn); nếu họ làm phù hợp sau đó trong khi vòng lặp kết thúc và printstatement được thực hiện, trong đó viết các văn bản cần thiết cùng với một nhân vật chuông ASCII ( "báo động"), 0x07mà tạo ra một âm thanh trừ khi nó đã bị vô hiệu hóa một cách rõ ràng (hoặc nhà ga không có loa !).


bạn có thể sửa cái này không, BA chỉ nên một lần thôi (lỗi của tôi xin lỗi)
Christopher

Đã sửa, cảm ơn vì đã ngẩng cao đầu.
Jonathan Allan

1
-10= ~9, có thể giúp bạn tiết kiệm một byte.
isaacg

Bạn không thể đặt một chữ \ x07 trong chuỗi cho -1 byte?
Máy

@CalculatorFeline Tôi không có ý kiến ​​gì, tôi có thể không? Lưu ý mọi người thường sử dụng \nchuỗi trong golf Python, tại sao họ không sử dụng \x0a?
Jonathan Allan

5

Thạch, 33 30 29 27 byte

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

Hóa ra, append ( ) không cần thiết, các chuỗi được tự động nối với nhau cả hai được in.

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

Không nén

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

Dùng thử trực tuyến
Nếu bạn xóa mọi thứ sau đó ¿, bạn có thể gây rối với đầu vào và thấy rằng nó chỉ trả về khi chuỗi đầu vào đúng.

ɠ⁻“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

Cảm ơn @Jonathan ALLan đã giúp tôi tìm ra tính năng nén chuỗi :)


“+30 lives” nén là “¡}ʠƈ[ỵ» (để tham khảo trong tương lai ở đây là một bài viết về nó, nó được liên kết trong hướng dẫn trên wiki wiki).
Jonathan Allan

âm thanh ở đâu
tuskiomi

1
Tôi vừa thử nó với trình thông dịch chính thức và nó thực sự lặp lại cho đến khi mã Konami được nhập
JayDepp

@JayDepp bạn có thể sửa lỗi này BA chỉ nên một lần (lỗi của tôi xin lỗi)
Christopher

Tôi tin rằng đó không phải là quá trình ghép chuỗi tự động quá nhiều như một bản in ngầm của LLC (chuỗi liên tục hàng đầu) 7Ọtheo sau là một bản in ngầm của nilad “¡}ʠƈ[ỵ», xuất hiện trên thiết bị xuất chuẩn như thể nó được nối. Như một chương trình giới thiệu, bạn có thể thử thêm một giấc ngủ 2 giây giữa vớiɠ⁻“UUDDLRLRBABA”$¿ṛ7Ọ2“+30 lives”œS .
Jonathan Allan

5

Đang xử lý, 161 157 155 byte

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

Các tập tin âm thanh phải được lưu dưới dạng sketchName/data/a.mp3. Lưu ý: Tôi chỉ thử nghiệm chương trình này mà không có tệp âm thanh vì tôi quá lười để tải xuống một mp3tệp (vì chỉ có các tiện ích mở rộng hạn chế được hỗ trợ từprocessing.sound.SoundFile ).

Các draw() chức năng là cần thiết để có keyTypedđể làm việc.

Lý do chúng tôi đang sử dụng keyTyped là vì Xử lý không có STDIN, nó chỉ có thể lắng nghe các phím được nhấn thông qua bản phác thảo đang chạy.

Giải trình

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

Tất cả các tổ hợp phím của người dùng được lưu trữ dưới dạng ký tự bên trong Chuỗi k . Hàm keyTypedinbuilt được gọi bất cứ khi nào người dùng gõ khóa. Đồng thời, chúng tôi đang kiểm tra xem Chuỗi này kết thúc bằng tổ hợp phím. Sau đó chúng tôi in +30 livesvà phát tệp âm thanh. Và drawchức năng là có để cập nhật liên tục keyTyped. Sau khi nhập mã Konami, sau đó không có gì khác được xuất ra và không có âm thanh nào được phát.


có vẻ như bạn nên đếm kích thước tệp mp3 của mình

@ricyje Xử lý không thực sự có cách nào khác để phát ra âm thanh. Ngoài ra, kích thước của .mp3tệp không thực sự quan trọng vì dù đó là gì, Xử lý sẽ phát nó dưới dạng âm thanh
Kritixi Lithos

@KritixiLithos bạn có thể sửa lỗi này BA chỉ nên một lần (lỗi của tôi xin lỗi)
Christopher

@ChristopherPeart Xong! (Tôi rất vui khi lưu thêm 2 byte :)
Kritixi Lithos

4

> <>, 132 69 64 62 byte *> <> , 84 byte

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

Hãy thử nó ở đây!

Điều này phụ thuộc vào tiếng chuông (ascii 7) cho tiếng ồn ở cuối (không nghe thấy trên trình thông dịch trực tuyến).

Cảm ơn @TealPelican đã lưu thêm 15 byte!

Đã lưu hai byte kiểm tra BAthay vì BABA.


Điều này có tạo ra âm thanh không?
Kritixi Lithos

@KritixiLithos, vâng, bạn sẽ thấy trên dòng cuối cùng thứ hai ở cuối là "7", đó là tiếng chuông.
redstarcoder

Tôi đã cấu trúc lại mã của bạn một chút vì tôi không hiểu các dòng đầu tiên sử dụng? Hãy thử ở đây Liên kết này dành cho> <> nhưng cũng hoạt động cho *> <> (không sử dụng cơ chế lặn như bạn có) - nó cũng được lưu trên 19 byte! :)
Teal pelican

@Tealpelican, dòng đầu tiên là để nó tiếp tục chạy, chờ đầu vào! Phiên bản được liên kết của bạn không làm điều đó; p.
redstarcoder

Bạn đúng rồi! Tôi đã bỏ lỡ nó! - Tôi đã thêm một dòng để khắc phục lỗi của mình và thay thế một số đảo ngược và in dự phòng Hãy thử phiên bản mới mà tôi đã nhận được xuống còn 67 byte: D
Teal pelican

3

C 119 -1 - 2 = 116 byte

Chơi gôn

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

Ung dung

#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/UUDDLRLRBABAcho -1 byte và strcmp sẽ tìm chuỗi đúng!
redstarcoder

@Christopher vui lòng không bao giờ chỉnh sửa mã của mọi người trên trang web Stack Exchange này. chỉnh sửa của bạn sẽ không bao giờ được phê duyệt.
mèo

Mukul, bạn có thể tự loại bỏ không gian.
con mèo

1
@MukulKumar Tất nhiên :) điều quan trọng là người trả lời chỉnh sửa mã của riêng họ.
con mèo

1
@MukulKumar bạn có thể sửa lỗi này BA chỉ nên một lần (lỗi của tôi xin lỗi)
Christopher

3

Xếp chồng lên nhau , 41 byte

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

Đọc đầu vào từ bàn phím.

['+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 byte

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

Sau khi chạy tập lệnh này, nó sẽ kiểm tra xem 10 phím tiếp theo có phải là mã Konami hay không và nếu có, nó sẽ hiển thị hộp thông báo có nội dung "+30 cuộc sống" và nó sẽ phát ra tiếng bíp (Bây giờ tôi không có loa để kiểm tra ).


Mát mẻ! AutoHotkey là một chương trình thú vị.
Christopher

3

GNU sed, 32 25 + 1 = 33 26 byte

+1 byte cho -ncờ.

/UUDDLRLRBA$/a+30 Lives\a

Hãy thử trực tuyến!

Giải trình

Mỗi lần nhấn enter ( $), chương trình sẽ kiểm tra xem 10 lần nhấn phím trước đó có phải là mã không. Nếu có, alệnh sẽ xếp hàng văn bản +30 Livesvà âm thanh chuông ( \a) sẽ được in ở cuối chu kỳ hiện tại (trong trường hợp này là ngay lập tức).


bạn có thể sửa cái này không, BA chỉ nên một lần thôi (lỗi của tôi xin lỗi)
Christopher

Điều này đã có BAchỉ một lần.
Jordan

Ồ wow không để ý
Christopher

3

Toán học, 50 byte

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

Ban đầu, xchỉ là một biểu tượng và do đó không giống ( =!=) với biểu tượngUUDDLRLRBA , do đó x=Input[]được đánh giá. Điều này sẽ mở một hộp thoại với con trỏ đã có trong trường nhập, vì vậy người dùng có thể bắt đầu gõ ngay trên bàn phím.

Nếu Enterđược nhấn hoặc OKđược bấm mà không cần gõ bất cứ thứ gì, thì nó InputField[]sẽ trở lại Null, không giống vớiUUDDLRLRBA , do đó vòng lặp tiếp tục và một hộp thoại khác sẽ được mở.

Nếu người dùng nhấp Cancelhoặc thoát khỏi hộp thoại, sau đó InputFieldsẽ trả lại $Canceled, cũng không giống vớiUUDDLRLRBA , vì vậy vòng lặp sẽ tiếp tục.

Người dùng có thể gõ vào hộp thoại theo mong muốn của trái tim họ. Khi họ nhấn Enter, đầu vào của họ được hiểu là một biểu thức ngôn ngữ Wolfram (có thể chỉ là các hộp). Nếu biểu hiện đó là bất cứ điều gì khác ngoài biểu tượngUUDDLRLRBA , vòng lặp sẽ tiếp tục.

"Phải lặp cho đến khi mã Konami được nhập" hơi mơ hồ, nhưng tôi tin rằng điều này thỏa mãn nó. Khi Whilevòng lặp được hoàn thành , .Beep[];"+30 lives"


bạn có thể sửa cái này không thì BA chỉ nên một lần (lỗi của tôi xin lỗi)
Christopher

1
UUDDLRLRB? Ở đâu A?
Máy

@CalculatorFeline Đã sửa
ngenisis

3

Máy tính Petit BASIC, 91 byte

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

Cuối cùng, một giải pháp thực sự sử dụng đầu vào bộ điều khiển!

Tôi đã sử dụng máy tính Petit thay vì phiên bản mới hơn (SmileBASIC) vì nó có quyền truy cập vào nút Bắt đầu và BTRIG()ngắn hơn BUTTON().

Tôi đã thay thế chuỗi dữ liệu bằng x, nó nên chứa các ký tự có mã ascii 1,1,2,2,4,8,4,8,32,16

Phiên bản nhàm chán, 46 byte

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

Tôi sẽ khuyên bạn nên sử dụng SmileBASIC 2 cho tên của các mục trong Máy tính của Petit và khi cần thiết chỉ định SmileBASIC là SmileBASIC 3 .
ốc_

Công việc tốt đẹp sử dụng bộ điều khiển!
Christopher

2

Powershell, 89 86 byte

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

nhập gửi chuỗi cho Read-Host, vì vậy nó nên .. làm việc?


2
Tôi nghĩ rằng bạn chỉ cần kiểm tra "UUDDLRLRBABA" chứ không phải "UUDDLRLR BABA" vì không có "" trong mã Contra. Điều đó cũng giúp bạn tiết kiệm một byte. Tôi nghĩ rằng giả sử enter vì họ phải nhấn enter để gửi đầu vào là hợp lệ.
redstarcoder

Nhân tiện, tôi làm việc
Christopher

1
@ChristopherPeart Vui lòng không chỉnh sửa mã của người khác ngay cả khi bạn là OP hoặc nếu bạn đang lưu chúng một byte.
con mèo

Được rồi, tôi sẽ làm điều đó. Nhưng đó là lỗi của tôi
Christopher

@ConnorLSW bạn có thể sửa lỗi này chỉ BA một lần không (lỗi của tôi xin lỗi)
Christopher

2

C # (phiên bản nhàm chán), 80 byte

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

C # (Điều thú vị), 202 byte

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

Tôi nghĩ rằng điều này hoạt động, đáng buồn là những người kiểm tra trực tuyến không hỗ trợ sự tồn tại của đầu vào giao diện điều khiển, vì vậy tôi sẽ phải thực hiện các bài kiểm tra tôi đã thực hiện

Rất có thể có thể được chơi golf rất nhiều - Tôi không tuyệt vời ở đây! :)

Ung dung:

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, C # có cách nào để đọc cho đến khi một dòng mới được phát hiện không? Điều đó sẽ giúp bạn không phải tìm kiếm phím enter. Nhìn vào cách nó được thực hiện trong Python ở đây .
redstarcoder

Console.Readlinenhưng tôi nghĩ rằng đó có thể là chủ nghĩa nông nghiệp của tinh thần thách thức! Nếu ổn, tôi có thể làm điều này ngắn hơn nhiều
Alfie Goodacre

@redstarcoder đã thêm một Console.ReadLine()phiên bản
Alfie Goodacre

@Alfieoodacre bạn có thể sửa lỗi này BA chỉ nên một lần (lỗi của tôi xin lỗi)
Christopher

@ChristopherPeart Ban đầu là vậy nhưng tôi phải thay đổi nó;)
Alfie Goodacre

2

Kỳ quan , 50 byte

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

Thay thế bằng ký tự của mã \x07(char control control). Đưa đầu vào thông qua STDIN.


bạn có thể sửa cái này không thì BA chỉ nên một lần (lỗi của tôi xin lỗi)
Christopher

Vâng tôi đã sửa. Cảm ơn đã thông báo!
Mama Fun Roll

1

flex, 37 + 5 = 42 byte

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

Bản thân mã là 37 byte, biên dịch nó với tùy chọn "-main" có thêm 5 byte. Đương nhiên, bạn phải biên dịch tệp C kết quả với trình biên dịch C yêu thích của bạn, nhưng tôi không nghĩ rằng bước đó nên được tính vào số byte.

Tôi có thể tiết kiệm một byte bằng cách sử dụng ký tự BEL theo nghĩa đen thay vì \a, nhưng tôi muốn đọc mã của riêng mình hơn.


4
Bạn thực sự không cần phải có khả năng đọc mã. Đây là mã golf
Christopher

Cá nhân, tôi nghĩ rằng tôi nên nhận được một phần thưởng cho việc sử dụng flex, do hiếm khi nó được sử dụng ở đây. :)
BenGoldberg

1
Tôi tin rằng bạn có thể giảm hình phạt xuống còn 3 byte thông qua việc cung cấp -lldưới dạng tùy chọn cho trình biên dịch C thay vì -maintùy chọn để uốn.

1

C, 87 85 81 byte

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

1

shortC, 52 byte

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

Giải trình:

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

Hãy thử trực tuyến!


1

C, 114 byte

#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);}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.