Golf a Compute yorumlayıcısı


9

Giriş

Compute ezoterik bir şaka dilidir.

Gönderen esolangs girişi:

Hesaplamanın gerekli bir sözdizimi yoktur ve tüm sorunları çözme gücü vardır. Herhangi bir insan dilini (İngilizce, İspanyolca, Latince vb.), Herhangi bir programlama dilini (C ++, Java, brainfuck vb.) Veya aklınıza gelebilecek her türlü veriyi yorumlamak için yeterince akıllıdır. Tek düşüş kesinlikle hiçbir G / Ç olmamasıdır.

Bazı örnek programlar

Hello World

Temel bir Merhaba Dünya programı

What is love?

Aşk olduğunu belirler (bebek bana zarar verme).

When will we ever graduate?

Betadan çıkmak için bu sitenin kesin tarihini belirler.

Meydan okuma

Göreviniz tam bir Compute tercüman yazmaktır. Bu oldukça zor görünüyor, ancak Compute'nin mutlak olarak G / Ç'si olmadığını unutmayın. Bu yüzden tercümanınız giriş programındaki her satır için bir saniye uyuyacak ve \n\nDone.bundan sonra çıktı alacaktır (bu G / Ç olmayan şey için tek istisnadır).

Resmi tercümanı bu sitenin altında bulabilirsiniz .
Resmi tercümanın verilen kaynak koddaki her karakter için bir saniye durakladığını unutmayın. Tercümanınızı anlamlı sorularla test ederken uzun bekleme sürelerinden kaçınmak için bu meydan okumadaki çizgilerle kalacağız .

kurallar

  • Giriş, a ile ayrılmış birden çok satır içerebilir \n. Her zaman en az bir satır olacaktır.
  • Resmi uygulamanın aksine bir dosyayı girdi olarak almak zorunda değilsiniz. Compute programını istediğiniz herhangi bir girdi biçiminde alabilirsiniz.
  • İzin verilen tek çıkış \n\nDone.. Sondaki satırsonuna izin verilir.
  • İşlev veya tam programa izin verilir.
  • Giriş / çıkış için varsayılan kurallar .
  • Standart boşluklar geçerlidir.
  • Bu , en düşük bayt sayısı kazanır. Tiebreaker daha erken sunuluyor.

1
Kaçınılmaz olarak bana bunu
Luis Mendo

14
Ne zaman mezun olacağımızı söyleyecek bir programa ihtiyacımız yok. Bunun 26. olduğunu biliyoruz.
Kapı tokmağı

7
@Doorknob, hangi yüzyılın?
msh210

1
@DenkerAffe Zorluğun dil ile tam olarak eşleşmediğini açıkça belirtmelisiniz.
PurkkaKoodari

9
@ msh210, hayır, bu yüzyıl.
Peter Taylor

Yanıtlar:


5

05AB1E , 16 15 14 13 bayt

Kod:

[Ig>#w’

D€µ.

Açıklama:

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

Bu bölüm şuna eşdeğerdir "\n\nDone.":

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

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

Çevrimiçi deneyin!

CP-1252 kodlamasını kullanır .


4

Oration , 117 bayt

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

Bunu açıklayalım. İlk olarak, bu:

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

Hâlâ karıştı mı? Şöyle koyalım:

I need time!

Modülü içe aktarır time.

To iterate, input().

Bu durumu olan bir while döngüsüdür input().

Inhale.

Programımızın şimdi nefes alması gerekiyor ve inhaledaha az sağlıklı olmasına rağmen daha golfçü.

Now sleep(1).

Nowen son modülü alın ve .sleep(1)ona ekleyin .

Backtracking.

While döngüsünden çıkalım.

Boring,
boring.

İki yeni satır yazdırır.

Listen!

Bir dize yakalamaya başlar.

Capture Done.

Done.Yakalanan dizeye ekler .

Carry on!

Dizeyi yakalamayı bitirir.


3
Eğlenceli bir dil gibi görünüyor. Bir tercüman + dokümana bağlantı ekler misiniz?
Denker

@DenkerAffe Hem dokümanlar hem de tercüman az önce düzenlediğim pozisyonda bulunabilir.
Conor O'Brien

@Conor Teşekkürler, bir göz atacağım. :)
Denker

4

JavaScript Kabuğu REPL, 38 bayt

Programı dize argümanı olarak kabul eden ve sonucu döndüren bir işlev olarak:

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

Done.`

İşlev girdisini bir satır dizisi biçiminde kabul ederse veya karakter başına 1 saniye uyması gerekiyorsa 29 bayt:

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

Done.`

34 bayt da daha fazla bir program gibi olmalı ve açıkça Bitti yazdırın:

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

Done.`

Bu benim için bağımsız Spidermonkey yorumlayıcısında işe yarıyor.


4

Javascript ES6, 46 45 bayt

a=>setTimeout(x=>alert`

Done.`,a.length*1e3)

Bir bayt tasarrufu için ӍѲꝆΛҐӍΛПҒЦꝆ'ye teşekkürler

Bir diziyi girdi olarak kabul eder.

Hem itibariyle ӍѲꝆΛҐӍΛПҒЦꝆ ve edc65 dikkat çekmişlerdir aşağıdakileri yazabilir, ama o alışkanlık herhangi bayt kaydet:

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

1
1e3daha iyidir 10e2.
Mama Fun Roll

Ayrıca, ok işlevini bir dizeye dönüştürün. Bkz. Codegolf.stackexchange.com/a/60960/41247
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ Bunun işe yarayacağından emin değilim. Zaten bir şablon dizesi olduğundan, kaçmanız gerekir
Cyoce

@ ӍѲꝆΛҐӍΛПҒЦꝆ 1e3 is better than 10e2bunu özlediğime inanamıyorum.
andlrc

@ edc65 Bu konuda ilk konuşan siz değilsiniz, ӍѲꝆΛҐӍΛПҒЦꝆ de bahsetti. :-)
andlrc

4

Bash + coreutils, 28

sleep `wc -l`
echo "

Done."

Her satır için 1 saniye uyur. Kullan wc -cher byte için yerine veya wc -mher karakter için yerine.


1
Fazladan bir satırsonu olmamalı mı?
user253751

@immibis Evet - haklısın - düzeltildi.
Dijital Travma

3

Pyth, 15 14 bayt

.dcl.z1b"Done.

( Çevrimiçi olarak deneyebilirsiniz , ancak bunu yapmanın gerçekten bir anlamı yoktur.)


Sonraki süreyi kaçırıyorsunuz Done(bir başkasına aynı cevaba söylediğiniz için oldukça komik): P
Denker

@DenkerAffe Teşekkürler. (Bayt sayısı doğru olsa da.)
PurkkaKoodari

@muddyfish Bu meydan okuma ne diyor. Resmi tercüman akıllıca gidiyor, ancak bekleme sürelerinden kaçınmak için satırları değiştirdim.
Denker

@DenkerAffe Şimdi girişlerimiz tamamen aynı. Kim saklayacak? Pietu1998'i varsayacağım çünkü ilk önce doğrulardı
Mavi

B gerekli mi?
busukxuan

2

Perl, 21 + 1 = 22 bayt

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

-pBayrağı gerektirir :

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


Done.              

2

Python 3, 58 bayt

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

Sadece bunu işaret etmek istiyorum, python 2'de 2 Bayt daha kısa olacak, "\ n \ nBitti" yazdı
Random Guy

Oh evet, unuttum ... Üzgünüm.
Random Guy

2

MATL , 17 bayt

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

Girişin sonunu işaretlemek için boş bir satır (ardından satırsonu) kullanılır. Bu, MATL'de gereklidir çünkü girdi etkileşimlidir ve her girdi bir satırsonu ile biter.

Çevrimiçi deneyin!

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

Sonraki dönemi mi kaçırıyorsunuz Done?
PurkkaKoodari

@ Pietu1998 Hata. Düzeltildi. Teşekkürler!
Luis Mendo

2

QBasic, 54 bayt

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

Programı boş satırla sonlanan kullanıcı girişinden satır satır alır. Her satırı okuduktan 1 saniye sonra duraklatarak, belki de ruh olmasa da, yasa mektubuna uyar. (Teknik özellik teknik olarak duraklamaların giriş tamamlandıktan sonra gelmesi gerektiğini söylemez.) Bu çok gölgeli olarak kabul edilirse, tüm program girdikten sonra duraklayan 64 baytlık bir sürüm:

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

I / O dosyalı bonus versiyonu (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 bayt

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

Stdin'den okur.


1

OCaml, 61 bayt

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

Girdinin bir liste olduğunu varsayar.


0

Jöle , 12 bayt (rakip olmayan)

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

Çevrimiçi deneyin!

Not: Lütfen do not koyarak önermek ⁷⁷sıkıştırılmış dizede, bu (buna daha yapacak“¡OÑL[Ṁ» ).

Açıklama:

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

Bu, çünkü rekabet etmiyor œS.
Outgolfer Erik

0

awk, 34 bayt

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

G / Ç olmadığı ve nihai sonuç kaçınılmaz olduğu için, Done.parça başlangıçta çıkar.

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

AWK'da uyumanın tek yolu sistemi kullanmaktır sleep. Çağırmanın en kısa yolu budur print|"sleep "NRve biz de işe yaramaz hale getirebiliriz print.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.