Golf seorang juru bahasa Compute


9

pengantar

Compute adalah bahasa lelucon esoterik .

Dari entri esolangs:

Compute tidak memiliki sintaks yang diperlukan dan memiliki kekuatan untuk menyelesaikan setiap dan semua masalah. Cukup pintar untuk menafsirkan bahasa manusia (Inggris, Spanyol, Latin, dll), bahasa pemrograman apa pun (C ++, Java, brainfuck, dll), atau jenis data apa pun yang dapat Anda pikirkan. Satu-satunya kejatuhan adalah bahwa sama sekali tidak ada I / O.

Beberapa contoh program

Hello World

Program dasar Hello World

What is love?

Yang menentukan adalah cinta (bayi tidak menyakitiku).

When will we ever graduate?

Tentukan tanggal pasti situs ini untuk keluar dari versi beta.

Tantangan

Tugas Anda adalah untuk menulis juru bahasa Compute sepenuhnya. Ini terdengar sangat sulit, tetapi perlu diingat bahwa Compute secara absolut tidak memiliki I / O. Jadi penerjemah Anda hanya akan tidur satu detik untuk setiap baris dalam program input dan output \n\nDone.setelah ini (ini adalah satu-satunya pengecualian untuk hal no I / O).

Anda dapat menemukan juru bahasa resmi di bagian bawah situs ini .
Perhatikan bahwa penerjemah resmi berhenti satu detik untuk setiap karakter dalam kode sumber yang diberikan. Untuk menghindari waktu menunggu yang lama saat menguji juru bahasa Anda dengan pertanyaan yang berarti, kami tetap mengikuti garis dalam tantangan ini.

Aturan

  • Input mungkin berisi beberapa baris yang dipisahkan oleh a \n. Akan selalu ada setidaknya satu baris.
  • Berbeda dengan implementasi resmi Anda tidak harus mengambil file sebagai input. Anda dapat mengambil program Hitung dalam bentuk input apa pun yang Anda inginkan.
  • Satu-satunya keluaran yang diizinkan adalah \n\nDone.. Baris baru tambahan dibolehkan.
  • Fungsi atau program lengkap diizinkan.
  • Aturan default untuk input / output.
  • Celah standar berlaku.
  • Ini adalah , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.

1
Mau tidak mau mengingatkan saya tentang ini
Luis Mendo

14
Yah, kita tidak perlu program untuk memberi tahu kita kapan kita akan lulus. Kita sudah tahu bahwa ini tanggal 26.
Gagang Pintu

7
@ Doorknob, abad berapa?
msh210

1
@ DenkerAffe Saya pikir Anda harus menjelaskan bahwa tantangannya tidak sama persis dengan bahasa.
PurkkaKoodari

9
@ msh210, tidak, itu abad.
Peter Taylor

Jawaban:


5

05AB1E , 16 15 14 13 byte

Kode:

[Ig>#w’

D€µ.

Penjelasan:

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

Bagian ini setara dengan "\n\nDone.":

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

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

Cobalah online!

Menggunakan pengodean CP-1252 .


4

Orasi , 117 byte

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

Mari kita jelaskan ini. Pertama, ini mentransformasikan ke:

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

Masih bingung? Mari kita katakan seperti ini:

I need time!

Mengimpor modul time.

To iterate, input().

Ini adalah loop sementara yang kondisinya input().

Inhale.

Program kami perlu bernafas sekarang, dan inhale, meskipun kurang sehat, golfier.

Now sleep(1).

Nowambil modul terbaru yang diimpor dan tambahkan .sleep(1)padanya.

Backtracking.

Mari kita keluar dari while loop.

Boring,
boring.

Mencetak dua baris baru.

Listen!

Mulai menangkap string.

Capture Done.

Menambahkan Done.ke string yang ditangkap.

Carry on!

Selesai menangkap string.


3
Sepertinya bahasa yang menyenangkan. Apakah Anda menambahkan tautan ke juru bahasa + dokumen?
Denker

@DenkerAffe Docs dan interpreter dapat ditemukan di tajuk yang baru saja saya edit.
Conor O'Brien

@Conor Terima kasih, akan melihatnya. :)
Denker

4

JavaScript Shell REPL, 38 byte

Sebagai fungsi yang menerima program sebagai argumen string dan mengembalikan hasilnya:

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

Done.`

29 byte jika fungsi dapat menerima inputnya dalam bentuk array baris, atau jika harus tidur 1 detik per karakter:

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

Done.`

34 byte jika itu juga harus lebih seperti sebuah program dan secara eksplisit mencetak Selesai:

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

Done.`

Ini bekerja untuk saya dalam penerjemah Spidermonkey mandiri.


4

Javascript ES6, 46 45 byte

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Terima kasih ӍѲꝆΛҐӍΛПҒЦꝆ untuk menghemat satu byte

Mengasumsikan array sebagai input.

Seperti yang ditunjukkan oleh ӍѲꝆΛҐӍΛПҒЦꝆ dan edc65, Anda dapat menulis yang berikut ini, tetapi tidak akan menghemat byte:

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

1
1e3lebih baik daripada 10e2.
Mama Fun Roll

Juga, ubah fungsi panah menjadi string. Lihat codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ Saya tidak yakin itu akan berhasil. Karena dia sudah memiliki string templat, Anda harus menghindarinya
Cyoce

@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2tidak percaya saya melewatkan itu.
andlrc

@ edc65 Anda bukan orang pertama yang membicarakannya, ӍѲꝆΛҐӍΛПҒЦꝆ juga menyebutkannya. :-)
andlrc

4

Bash + coreutils, 28

sleep `wc -l`
echo "

Done."

Tidur 1 detik untuk setiap baris. Gunakan wc -csebagai gantinya untuk setiap byte, atau wc -msebagai gantinya untuk setiap karakter.


1
Tidakkah seharusnya ada baris baru tambahan?
user253751

@immibis Ya - Anda benar - diperbaiki.
Trauma Digital

3

Pyth, 15 14 byte

.dcl.z1b"Done.

(Anda dapat mencobanya secara online , tetapi tidak ada gunanya melakukannya.)


Anda melewatkan periode sesudahnya Done(yang cukup lucu karena Anda memberi tahu orang yang sama tentang jawaban lain): P
Denker

@DenkerAffe Terima kasih. (Tapi hitungan Byte benar.)
PurkkaKoodari

@muddyfish Itulah yang dikatakan tantangan. Penerjemah resmi berjalan dengan bijaksana, tetapi saya mengubahnya menjadi baris untuk menghindari waktu menunggu.
Denker

@ DenkerAffe Ok sekarang entri kita sama persis. Siapa yang harus dijaga? Saya akan berasumsi Pietu1998 karena mereka benar pertama
Biru

Apakah b perlu?
busukxuan

2

Perl, 21 + 1 = 22 byte

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

Membutuhkan -pbendera:

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


Done.              

2

Python 3, 58 byte

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

Hanya ingin menunjukkan ini, itu akan menjadi 2 Bytes lebih pendek dengan python 2, cetak "\ n \ nDone"
Random Guy

Oh ya, aku lupa ... Maaf.
Guy Acak

2

MATL , 17 byte

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

Baris kosong yang tertinggal (diikuti oleh baris baru) digunakan untuk menandai akhir input. Ini diperlukan dalam MATL karena input bersifat interaktif dan setiap input diakhiri dengan baris baru.

Cobalah online!

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

Apakah Anda melewatkan periode sesudahnya Done?
PurkkaKoodari

@ Pietu1998 Whoops. Dikoreksi. Terima kasih!
Luis Mendo

2

QBasic, 54 byte

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

Mengambil baris program demi baris dari input pengguna, diakhiri oleh baris kosong. Mematuhi surat hukum, meskipun mungkin bukan semangat, dengan berhenti 1 detik setelah membaca setiap baris. (Spesifikasi tidak secara teknis mengatakan bahwa jeda semua harus datang setelah input selesai.) Jika ini dianggap terlalu teduh, inilah versi 64-byte yang berhenti setelah seluruh program dimasukkan:

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

Versi bonus dengan file 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."

Baca dari stdin.


1

OCaml, 61 byte

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

Mengasumsikan input adalah daftar.


0

Jelly , 12 byte (tidak bersaing)

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

Cobalah online!

Catatan: Tolong jangan menyarankan menempatkan ⁷⁷dalam string terkompresi, itu akan membuatnya lebih lama ( “¡OÑL[Ṁ»).

Penjelasan:

Ỵ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.")

Ini non-bersaing karena œS.
Erik the Outgolfer

0

awk, 34 byte

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

Karena tidak ada I / O dan hasil akhirnya tidak bisa dihindari, Done.bagian ini dikeluarkan tepat di awal.

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

Satu-satunya cara untuk tidur di awk adalah dengan menggunakan sistem sleep. Cara terpendek untuk memohonnya adalah dengan print|"sleep "NRdan kita mungkin juga menyalahgunakan yang tidak berguna print.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.