Golf một phiên dịch tính toán


9

Giới thiệu

Tính toán là một ngôn ngữ đùa bí truyền .

Từ mục esolang:

Compute không có cú pháp cần thiết và có khả năng giải quyết bất kỳ và tất cả các vấn đề. Nó đủ thông minh để diễn giải bất kỳ ngôn ngữ nào của con người (tiếng Anh, tiếng Tây Ban Nha, tiếng Latin, v.v.), bất kỳ ngôn ngữ lập trình nào (C ++, Java, brainfuck, v.v.) hoặc bất kỳ loại dữ liệu nào bạn có thể nghĩ ra. Sự sụp đổ duy nhất là hoàn toàn không có I / O.

Một số chương trình ví dụ

Hello World

Một chương trình Hello World cơ bản

What is love?

Xác định là tình yêu là (em bé không làm tổn thương tôi).

When will we ever graduate?

Xác định ngày chính xác của trang web này để thoát khỏi phiên bản beta.

Các thách thức

Nhiệm vụ của bạn là viết một trình thông dịch điện toán đầy đủ. Điều này nghe có vẻ khó, nhưng hãy nhớ rằng Compute hoàn toàn không có I / O. Vì vậy, trình thông dịch của bạn sẽ chỉ ngủ một giây cho mỗi dòng trong chương trình đầu vào và đầu ra \n\nDone.sau này (đây là ngoại lệ duy nhất cho điều không có I / O).

Bạn có thể tìm thấy thông dịch viên chính thức ở dưới cùng của trang web này .
Lưu ý rằng trình thông dịch chính thức tạm dừng một giây cho mỗi ký tự trong mã nguồn đã cho. Để tránh thời gian chờ đợi lâu trong khi kiểm tra thông dịch viên của bạn với các câu hỏi có ý nghĩa, chúng tôi tiếp tục tham gia thử thách này.

Quy tắc

  • Đầu vào có thể chứa nhiều dòng được phân tách bằng a \n. Sẽ luôn có ít nhất một dòng.
  • Không giống như triển khai chính thức, bạn không phải lấy tệp làm đầu vào. Bạn có thể lấy chương trình Tính toán dưới mọi hình thức nhập mà bạn muốn.
  • Sản lượng duy nhất được phép là \n\nDone.. Một dòng mới được cho phép.
  • Chức năng hoặc chương trình đầy đủ cho phép.
  • Quy tắc mặc định cho đầu vào / đầu ra.
  • Tiêu chuẩn áp dụng.
  • Đây là , do đó, số byte thấp nhất sẽ thắng. Tiebreaker là trình trước đó.

1
Chắc chắn nhắc nhở tôi về điều này
Luis Mendo

14
Chà, chúng tôi không cần một chương trình để nói với chúng tôi khi nào chúng tôi sẽ tốt nghiệp. Chúng tôi đã biết rằng đó là ngày 26.
Doorknob

7
@Doorknob, của thế kỷ nào?
msh210

1
@DenkerAffe Tôi nghĩ bạn nên nói rõ rằng thử thách không hoàn toàn khớp với ngôn ngữ.
PurkkaKoodari

9
@ msh210, không, đó là thế kỷ.
Peter Taylor

Câu trả lời:


5

05AB1E , 16 15 14 13 byte

Mã số:

[Ig>#w’

D€µ.

Giải trình:

[        # Starts an infinite loop
 I       # Input string
  g>     # Length + 1
    #    # If equal to 1, break out of the loop
     w   # Wait 1 second

Phần này tương đương với "\n\nDone.":

      ’  # Push "\n\nDone." on top of the stack

D€µ.     # The compressed string is ended implicitly
         # Implicit, print top of the stack

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

Sử dụng mã hóa CP-1252 .


4

Oration , 117 byte

I need time!
To iterate, input().
Inhale.
Now sleep(1).
Backtracking.
Boring,
boring.
Listen!
Capture Done.
Carry on!

Hãy giải thích điều này. Đầu tiên, bản dịch này tới:

import time
while input():
    time.sleep(1)
print("\n")
print("\n")
print("Done")

Vẫn còn bối rối? Hãy đặt nó như thế này:

I need time!

Nhập khẩu mô-đun time.

To iterate, input().

Đây là một vòng lặp while có điều kiện input().

Inhale.

Chương trình của chúng tôi cần thở ngay bây giờ, và inhale, trong khi ít khỏe mạnh hơn, là người chơi gôn.

Now sleep(1).

Nowlấy mô-đun gần đây nhất được nhập và nối .sleep(1)vào nó.

Backtracking.

Hãy thoát khỏi vòng lặp while.

Boring,
boring.

In hai dòng mới.

Listen!

Bắt đầu chụp một chuỗi.

Capture Done.

Thêm Done.vào chuỗi đã bắt.

Carry on!

Kết thúc chuỗi chụp.


3
Trông giống như một ngôn ngữ vui vẻ. Bạn có thể thêm một liên kết đến một trình thông dịch + tài liệu không?
Denker

@DenkerAffe Cả hai tài liệu và thông dịch viên đều có thể được tìm thấy trong tiêu đề tôi vừa chỉnh sửa.
Conor O'Brien

@Conor Cảm ơn, sẽ có một cái nhìn về nó. :)
Denker

4

JavaScript Shell REPL, 38 byte

Là một hàm chấp nhận chương trình dưới dạng đối số chuỗi và trả về kết quả:

s=>sleep(s.split`
`.length)||`

Done.`

29 byte nếu hàm có thể chấp nhận đầu vào của nó ở dạng một mảng các dòng hoặc nếu nó sẽ ngủ 1 giây trên mỗi ký tự:

s=>sleep(s.length)||`

Done.`

34 byte nếu nó cũng giống như một chương trình và in rõ ràng Xong:

s=>sleep(s.length)||print`

Done.`

Điều này làm việc cho tôi trong trình thông dịch Spidermonkey độc lập.


4

Javascript ES6, 46 45 byte

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Cảm ơn ӍѲꝆΛҐӍΛNETҒЦꝆ vì đã lưu một byte

Giả sử một mảng là đầu vào.

Vì cả ӍѲꝆΛҐӍΛNETҒЦꝆedc65 đã chỉ ra rằng bạn có thể viết như sau, nhưng nó sẽ không lưu bất kỳ byte nào:

a=>setTimeout("alert`\n\nDone`",a.length*1e3)

1
1e3là tốt hơn so với 10e2.
Mama Fun Roll

Ngoài ra, chuyển đổi chức năng mũi tên thành một chuỗi. Xem codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll

@ ӍѲꝆΛҐӍΛNETҒЦꝆ Tôi không chắc điều đó sẽ hoạt động. Vì anh ta đã có một chuỗi mẫu, bạn sẽ cần phải thoát nó
Cyoce

@ ӍѲꝆΛҐӍΛNETҒЦꝆ 1e3 is better than 10e2không thể tin rằng tôi đã bỏ lỡ điều đó.
andlrc

@ edc65 Bạn không phải là người đầu tiên nói về nó, ӍѲꝆΛҐӍΛӍѲꝆΛҐӍΛҒЦꝆ cũng đã đề cập đến nó. :-)
andlrc


3

Bình thường, 15 14 byte

.dcl.z1b"Done.

(Bạn có thể thử trực tuyến , nhưng thực sự không có lý do gì để làm như vậy.)


Bạn đang bỏ lỡ khoảng thời gian sau Doneđó (điều này khá buồn cười vì bạn đã nói với ai đó tương tự về câu trả lời khác): P
Denker

@DenkerAffe Cảm ơn. (Tuy nhiên, số lượng byte là chính xác.)
PurkkaKoodari

@muddyfish Đó là những gì thách thức nói. Thông dịch viên chính thức đi khôn ngoan, nhưng tôi đã thay đổi nó thành dòng để tránh thời gian chờ đợi.
Denker

@DenkerAffe Ok bây giờ các mục của chúng tôi giống hệt nhau. Ai giữ? Tôi sẽ giả sử Pietu1998 vì họ đã đúng trước
Blue

Là b cần thiết?
busukxuan

2

Perl, 21 + 1 = 22 byte

sleep 1}{$_="\n\nDone."

Yêu cầu -pcờ:

$ perl -pe'sleep 1}{$_="\n\nDone."' <<< $'a\nb\nc'


Done.              


2

MATL , 17 byte

10c'Done.'`jt?1Y.

Một dòng trống ở cuối (theo sau là dòng mới) được sử dụng để đánh dấu kết thúc đầu vào. Điều này là cần thiết trong MATL vì đầu vào là tương tác và mỗi đầu vào kết thúc bằng một dòng mới.

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

10c           % push newline character
'Done.'       % push string
`             % do...while
  j           % input string
  t           % duplicate
  ?           % if non-empty
    1Y.       % pause for 1 second
              % loop condition is the current string. If non-empty: next iteration
              % If empty: exit loop and print stack contents. There are two strings
              % and a newline is printed after each, so the desired output is obtained

Bạn đang bỏ lỡ khoảng thời gian sau Done?
PurkkaKoodari

@ Pietu1998 Rất tiếc. Đã sửa. Cảm ơn!
Luis Mendo

2

QBasic, 54 byte

LINE INPUT x$
IF x$=""GOTO 1
SLEEP 1
RUN
1?
?
?"Done."

Lấy dòng chương trình theo từng dòng từ đầu vào của người dùng, được kết thúc bằng một dòng trống. Tuân thủ thư pháp luật, mặc dù có thể không phải là tinh thần, bằng cách tạm dừng 1 giây sau khi đọc từng dòng. (Thông số kỹ thuật không nói về mặt kỹ thuật rằng tất cả các tạm dừng phải đến sau khi hoàn thành đầu vào.) Nếu điều này được coi là quá mờ ám, đây là phiên bản 64 byte tạm dừng sau khi toàn bộ chương trình được nhập:

DO
LINE INPUT x$
IF x$=""GOTO 1
t=t+1
LOOP
1SLEEP t
?
?
?"Done."

Phiên bản thưởng với tệp I / O (87 byte):

INPUT f$
OPEN f$FOR INPUT AS 1
1LINE INPUT #1,x$
SLEEP 1
IF 0=EOF(1)GOTO 1
?
?
?"Done."

1

Ruby, 32 byte

$<.map{sleep 1}
puts"\n\nDone."

Đọc từ stdin.


1

OCaml, 61 byte

fun a->List.iter(fun _->Unix.sleep 1)a;print_string"\n\nDone"

Giả sử đầu vào là một danh sách.


0

Jelly , 12 byte (không cạnh tranh)

ỴLœS@⁷⁷“ẋḲp»

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

Lưu ý: Vui lòng không đề xuất đưa ⁷⁷chuỗi nén vào, nó sẽ làm cho nó dài hơn ( “¡OÑL[Ṁ»).

Giải trình:

ỴLœS@⁷⁷“ẋḲp» Main link. Arguments: z.
ỴL           The number of lines in z. (x)
     ⁷       Newline ("\n") (y)
  œS@        After sleeping for x seconds, return y.
      ⁷      Newline ("\n")
       “ẋḲp» Compressed string ("Done.")

Điều này là không cạnh tranh vì œS.
Erik the Outgolfer

0

ôi, 34 byte

END{print"\nDone."|"cat;sleep "NR}

Vì không có I / O và kết quả cuối cùng là không thể tránh khỏi, Done.phần này được xuất ra ngay từ đầu.

$ awk 'END{print"\nDone."|"cat;sleep "NR}' file

Cách duy nhất để ngủ trong awk là sử dụng hệ thống sleep. Cách ngắn nhất để gọi nó là print|"sleep "NRvà chúng ta cũng có thể lạm dụng nó vô dụng print.

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.