Sardalyaları severim


33

Sardalyaları severim, onlardan yeterince alamam, ve bilgisayarım da, dil agnostiği olan Omnilang 5000.

Bilgisayarıma sardalye yaşama sevincini vermek için, çeşitli yönlerde sardalye kutularını ekranda gösterebilecek ve on sardalye gösterebilecek bir dizi programı beslemeye karar verdim.

Bu zorlukla, bu parametrelere dayanarak programlar oluşturmaktan siz sorumlusunuz:

Girdi

Bir sayı (0 ile 10 arasında) ve aşağıdaki "LR" den birinden bir harf (sırasıyla Sol veya Sağ'ı temsil eder) Örneğin: 3Lveya 5R; Bunun programa girişi nasıl size kalmış.

Çıktı

Açık bir sardalye sardalye, belirtilen yöne bakacak şekilde, anahtar (" %" karakteriyle temsil edilir ) ve soyulmuş kapağı (" @" karakteriyle gösterilen uçta sarılmış teneke kutu ) kalayın üstünde bulunur.

  • Tüm sardalyalar girdi tarafından belirtilen yöne bakmalıdır.
  • Bütün sardalyaların solungaç (" )" veya " (") ve kuyruk " ><" arasında beş karakter uzunluğunda gövdeleri olacaktır.
  • Anahtar ve soyulmuş kapak rulosu her zaman sardalye yerine ters yönde bakar.
  • Teneke, örneklerde aşağıda gösterildiği gibi 3 boyutlu bir görünüme sahip olmalıdır.
  • Kalayın minimum yüksekliği 3 sardalyadır. Bu nedenle, bir sayı 3'ten küçükse, girilen sayıda sardalya olacak şekilde, yüksekliği 3 sardalye içeren bir kutu gösterilmelidir. Aksi takdirde, kalay, girişte belirtilen sardalyaların sayısı olmalıdır. Yani giriş boş bir sardalya teneke 0Rveya 0Lgösterecektir.
  • Doğrulanamayan başka bir giriş hiçbir şey göstermez.

Örneğin, " 3L" için

 __________
(__________@%
|<*)_____><||
|<*)_____><||
|<*)_____><||
'==========''

" 7R" İçin

   __________
 %@__________)
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ''=========='  

" 2L" İçin

 __________
(__________@%
|<*)_____><||
|<*)_____><||
|          ||
'==========''

" 0R" İçin

   __________
 %@__________)
 ||          |
 ||          |
 ||          |
 ''=========='

" 0L"

 __________
(__________@%
|          ||
|          ||
|          ||
'==========''

Geçersiz giriş hiçbir şey döndürmez ...

  • Bu kod golf, yani en az sayıda karakter bu mücadeleyi kazanacak.
  • Her zamanki gibi delik yok .

Yanıtlar:


39

> <> , 250 235 + 3 = 238 bayt

</~?{"  __________"a:="L"i&
o/?=1l
:/}rv?{~$?{"()__________@%":
l< o/?=1
:&oa/&~$?(3$@0-3:
/!?:</"||><_____(*>|"av?@:$-1
 /=?/v"|<*)_____><||"a/
 \2lo/
\~&
\>:?!\1+$::{a"|"{?:"          ||"{?~
<\?=2 lo
"'":~/~?{"''==========":?{
;!?lo<

Çevrimiçi deneyin ya da balık oyun alanında izleyin ! STDIN'den "L" veya "R" okur ve sardalya sayısının zaten yığında olduğunu varsayar ( -v+3 baytlık bir bayrak gerekir).

Elbette bunu> <> bölümüne yazmak zorunda kaldım.


3
Bu çözümü
Fish'te yazmak

Balık oyun alanı nasıl çalışır? Koşmasını sağlayamıyorum. Girişi nereye yerleştiririm?
JAD

@JarkoDubbeldam, kodu pencereye kopyaladıktan ve gönderdikten sonra, "başlangıç ​​yığını" ( -vbayrağı simüle eder ) yazan yere sardalya sayısını ve "altında" işaretini ("L" veya "R") koymanız gerekir. programa girdi "sonra" ver "i tıklayın. (Cevabı daha da netleştirmek için cevabı değiştirdim.)
Ağaç değil

1
Başar: D Çok hata ayıklama sırasında da güzel olmalı
JAD

15

Emojicode , 456 448 bayt

🐋🚂🍇🐖🐟d🚂🍇🍦a😛0d🍊a🍇😀🔤 __________❌n(__________@%🔤🍉🍓🍇😀🔤  __________❌n%@__________)🔤🍉🔂i⏩0🐕🍇🍊a🍇😀🔤|<*)_____><||🔤🍉🍓🍇😀🔤||><_____(*>|🔤🍉🍉🍊▶️4🐕🍇🔂i⏩0➖3🐕🍇🍊a🍇😀🔤|          ||🔤🍉🍓🍇😀🔤||          |🔤🍉🍉🍉🍊a🍇😀🔤'==========''🔤🍉🍓🍇😀🔤''=========='🔤🍉🍉🍉

2 argüman alır: ilki çizgiler, ikincisi yön (0 veya 1).

Çevrimiçi deneyin!

"Okunabilir" ungolfed versiyonu ve sözde kodu versiyonu:

🐋 🚂 🍇
  🐖 🐟  d 🚂  🍇
    🍦 a  😛 0 d

    🍊 a 🍇
      😀 🔤 __________❌n(__________@%🔤
    🍉
    🍓 🍇
      😀 🔤  __________❌n%@__________)🔤
    🍉

    🔂 i ⏩ 0 🐕 🍇
      🍊 a 🍇
        😀 🔤|<*)_____><||🔤
      🍉
      🍓 🍇
        😀 🔤||><_____(*>|🔤
      🍉
    🍉

    🍊 ▶️ 4 🐕 🍇
      🔂 i ⏩ 0  ➖ 3 🐕  🍇
        🍊 a 🍇
          😀 🔤|          ||🔤
        🍉
        🍓 🍇
          😀 🔤||          |🔤
        🍉
      🍉
    🍉

    🍊 a 🍇
      😀 🔤'==========''🔤
    🍉
    🍓 🍇
      😀 🔤''=========='🔤
    🍉
  🍉
🍉

👵
extendclass int { // this makes the first argument be an int without declaring it
  func 🐟(int d) {
    const a = 0 == d // a bool

    if a {
      print " __________\n(__________@%"
    }
    else {
      print "  __________\n%@__________)"
    }

    for i in range(1, arg) {
      if a {
        print "|<*)_____><||"
      }
      else {
        print "||><_____(*>|"
      }
    }

    if 4 > arg {
      for i in range(0, arg - 3) {
        if a {
          print "|          ||"
        }
        else {
          print "||          |"
        {
      }
    }

    if a {
      print "'==========''"
    }
    else {
      print "''=========='"
    {
  }
}
👵

2
Daha önce hiç Emojicode ile karşılaşmayın, ama bu bir akıldır. Sevdim!
WallyWest

... neden bu dil bile var? Yani, hoşuma gitti ama neden? ve onu ne kadar sürede öğrendin?
Taylor Scott

1
@TaylorScott 1) ​​harikaydı, ben yaratmadım. 2) birkaç saat gerçekten
Temmuz’a kadar

6

Python 2 , 155 bayt

lambda x,y,t='_'*10:'\n'.join(x[::1-2*y]for x in[' %s  '%t,'()'[y]+t+'@%']+['|'+('<>**)(%s><<>'%t)[y::2]+'||']*x+['|'+' '*10+'||']*(3-x)+["'"+'='*10+"''"])

Çevrimiçi deneyin!

Giriş uzunluğu 2 demetden oluşur. İlk eleman sardalye sayısını gösterir. İkinci eleman yönü gösterir; 0sola, 1sağa.

-Jagan ve officialaimm sayesinde lamda büyüsü kullanan 84 bayt


1
174 bayt (sorta orada @ officialaimm tarafından ninja'd var).
notjagan



1
@officialaimm yeterince içgüdüsel olarak, negatif bir değerle beslenirse, kalayın boyutunu uzatır, ancak sardalye koymaz.
Pavel

3
@Phoenix Evet. OP menzili belirlediğinden önemli değil 0 to 10. PS` -10` boş kalay basar, çünkü 10sardalye olduğunu gösterir , ama sen zaten onları yedin. : D
officialaimm

5

Balık tutma , 1311 bytes

v+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC?CCCDCC[CCCCCCCCCCCCCCCCCCCCC?CCCCCCCCCCCCCCCCCCCC[CCC[CCCCC?CCCC?DDDDD[CCCCCCCCCCCCCCCCCCC?CCCCCCCCCCCCCCCCC[?CCCCCCCCCCCCCCCC_
  `3`n{n{In{I{`L`{`  __________ `}}!{{rD}}D{{NE`%@__________)`}}!{{E`(__________@%`}}D{{NDE}}}}={d}}!  d  D{{{{{`><_____(*>`}}!{{E`<*)_____><`}}D!{{{E`|`P}PE`||`ND
                                   [DDDDDD|                     [DDDDDDDDDDDDDDDDDDDD|   D     [C?CDDDDDDDDCCCCCCCCCCCCCCCCCCC[DDDDDDDDDDDDDDDDD|[CCCCCCCCCCCCCCCC_
                                                                                         D      }=d [^+Cv-|{{{{{`          `}}                    {{{E`||`P}PE`|`ND
                                                                                         D       [CCCCCCCCCCCCCCCCCCC?DDDDDDDDD+CCCC                              D
                                                                                         D        E`''=========='`{{{= }}}r{{{ [CCCC                              D
                                                                                         D                           [^CCCCCCCv|}}}N                              D
                                                                                         |DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD]

Girişi alır stdin :

5
R

Balık tutma Çevrimiçi Deneyin'i deneyin , ancak Ruby'de bağlı esolangs sayfasında bir tercüman var.

Bu, Balıkçılık'ta yaptığım ilk program - aslında, herhangi bir 2D dilinde yaptığım ilk program - bu yüzden muhtemelen çok daha kısa olabilir. Golf ipuçlarını bekliyoruz (hiç kimse vermediyse şaşırmam, ancak ne halt yazdığımı bile bilmiyorum).

İşte programın giriş için aldığı yolun bir GIF'i ( 1Rdüşük kalite için üzgünüm):

GIF

(Bu benim yaptığım bir tercüman kullanılarak yaratıldı; bildiğim kadarıyla, Balıkçılığı "görselleştiren" kamuya açık hiçbir program yok)


C ve D sözdizimi, şişkinliğe katkıda bulunuyor gibi görünüyor ... Bunu azaltmak için herhangi bir kestirme yol var mı?
WallyWest

Aslında çizik, kodun ayrılmaz bir parçası gibi görünüyor ... İlginç bir dil seçimi! :)
WallyWest

4

Kömür , 49 bayt

A⌈⟦Iθ³⟧ζBχ²_←↓(↓ζ'×=χ''↖P↑ζ←↑ζ@%FN“#∨‹VB“«ji”FN‖T

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. İlk argüman sardalya sayısı, ikincisi yöndür (0 = sol, 1 = sağ).


Harika işti, Neil. Derleyici bağlantısı verdiğiniz için teşekkür ederiz!
WallyWest

2
Bana teşekkür etme, sizin için tüm kazan plakasını üreten TIO'yu yarattığınız için @Dennis'e teşekkür edin.
Neil,

3

SOGL V0.12 , 51 48 bayt

!gX⁴‘gj⁰%!⁵‘b⌡"κN╥█*≤⌡║)‘3b-"÷AZ⁴‘∙_"Χccσ«‘⁰e?±↔

Burada dene!
Giriş sayısının 1, 1'inin 1 veya 0 ile temsil edildiği sola veya sağa olmasını bekler.

Açıklama:

..‘..‘                          push 2 compressed strings - the 1st two lines of the box - "  __________ " and "%@__________)"
      b⌡                        input times do
        "..‘                      push a line with a sardine - "||><_____(*>|"
            3b-                 push 3-input
               "..‘∙            get an array of that many "||          |"
                    _           put all the arrays contents on the stack
                     "..‘       push "''=========='" - the last line
                         ⁰      wrap all of that in an array
                          e?    if the 2nd input [is not 0]
                            ±↔    reverse the array horizontally

2

R, 334 bayt 311 bayt

s=function(n,d){
a="__________"
b="'=========='"
if(d == "L"){cat(paste(c(" ",a,"\n(",a,"@%\n",rep("|<*)_____><||\n",n),rep("|          ||\n",max(c(3-n,0))),b,"'\n"),collapse=""))} else {cat(paste(c("  ",a,"\n%@",a,")\n",rep("||><_____(*>|\n",n),rep("||          |\n",max(c(3-n,0))),"'",b,"\n"),collapse=""))}}

İşlev n için sayısal bir değer ve yön için bir dize alır.

Bu benim ilk gönderim, bu yüzden nasıl kod bayt sayılacağından emin değilim kabul ediyorum.


1
Kodunuzu , insanların kodunuzu test edebileceği TIO'ya yapıştırabilirsiniz :) bu da bayt sayınızı gösterir, bu durumda 310'tır.
Ian H.

2

C ++, 307 296 292 bayt

#include<string>
auto z(int n,char c){std::string r=c-82?" __________\n(__________@%\n":"  __________\n%@__________)\n";int l=0;for(;l<n;++l)r+=c-82?"|<*)_____><||\n":"||><_____(*>|\n";for(;l<3;++l)r+=c-82?"|          ||\n":"||          |\n";r+=c-82?"'==========''":"''=========='";return r;}

Kullanım:

z(<number of sardines>,<'L' or 'R'>);

-11 bayt kullanıcısı sayesinde kurtarıldı ThePirateBay -4 bayt Zacharý sayesinde


1
Parantez içindeki parantezleri kaldırabilir misiniz #define? Test etmedim ama onlara gerek yok gibi görünüyor.

1
Can c!=82olmak c-82Kullanmaya nereye her durumda?
Zacharý

1

Python 2,287 bayt

n,d=input()
t,a,b,c,e,k=' __________   ','(__________@% ','|<*)_____><|| ','|          || ',"'=========='' ",'\n'
print[t+k+a+k+k.join([b]*n)+k+k.join([c]*(3-n))+k*(n<3)+e,t[::-1]+k+a[::-1].replace(*'()')+k+k.join([b[::-1].replace(*')(')]*n)+k+k.join([c[::-1]]*(3-n))+k*(n<3)+e[::-1]][d]

Çevrimiçi deneyin!

Giriş, bu biçimdeki sayıların virgülle ayrılmış bir dizisidir: 2, 1 . İlk sayı balık miktarı, ikincisi sol için 0, sağ için 1'dir.

Bu, diğer cevabı atma çabası olarak başladı (tamamen yapabileceğimi düşündüm), ama berbattı. : P Herhangi biri onun kafasını ve kuyruğunu açıp golf oynamasına yardım edebilirse (şu an saat 12'de olduğu için onu suçlarım), memnun olurum.


Yine de büyük girişim!
WallyWest

1

C # (.NET Core), 289 bayt

(h,d)=>{var l=d=='L';string r=(l?" ":"  ")+"__________\n"+(l?"(":"%@")+"__________"+(l?"@%":")")+"\n";for(int i=0;i<(h>3?h:3);i++){r+=(l?"|":"||")+(i<h?(d=='L'?"<*)_____><":(d=='R'?"><_____(*>":"")):"          ")+(l?"||":"|")+'\n';}var b=(l?"'":"''")+"=========="+(l?"''":"'");return r+b;}

Çevrimiçi deneyin!

Parametre olarak bir tamsayı ve bir karakter (L, R) alır ve elde edilen dizgeyi çıkarır.

Ugh. Bazı sinir bozucu dize sabitleri ile uğraşmak zorunda string * lengthkaldı , ne yazık ki sadece C # yapamazsınız . Ve yöntem ile new string(char, length)byte maliyeti değmezdi.


Algoritma aşağıdaki gibi çalışır:

  1. Başlangıçta, sardalyelerin sağa mı sola mı baktığını belirleriz, çünkü daha sonra iplerimizi buna göre biçimlendiririz. L ve R perspektifi arasında geçiş yapmak için bazı koşullu işleçlerle üst için bir dize oluştururuz.
  2. Sonra en az 3 kez, en fazla da sol giriş zamanını çalıştıran bir döngü yaratırız. Bu şekilde, kutumuzda 3'ten az sardalye varsa boş alanlar oluşturabiliriz.
  3. Bu döngünün içine, perspektife bağlı olarak bir dize biçimlendiririz ve eğer öyleyse h > i, içine bir sardalya koyarız. Eğer i >= hbir sardalyenin normalde olacağı boş bir yer olacaksa.
  4. Sonunda yine perspektife göre biçimlendirilmiş kutunun altını yaratırız.

1

Perl 5 , 167 + 1 (-n) = 168 bayt

($n,$d)=/(\d+)([LR])/ or die;say('R'eq$d?(reverse$_)=~y/()></)(<>/r:$_)for" __________  ","(__________@%",("|<*)_____><||")x$n,("|          ||")x(3-$n),"'==========''"

Çevrimiçi deneyin!


1

JavaScript (ES6), 283 273 269 251 bayt

@WallyWest sayesinde 10 bayt kaydedildi

Ekstra parenler kaldırarak 4 bayt kaydedildi

@ThePirateBay sayesinde 18 bayt kaydedildi

Standart kütüphanede string string eksikliğinden muzdariptir. nBalık sayısı ve dyönü için girdi alan bir işlevi tanımlar . d"L" veya "R" değilse atıyor .

(n,d,_=c=>c.repeat(10),x=_(`_`),z=a=>a.reverse``.join``)=>
([p,q,g,r,s]=d>`L`?d>`R`?[]:[`)`,`(`,`>`,z,y=>z(y.split``)]:
[`(`,`)`,`<`,a=>a.join``,y=>y],` ${x}
`+r([p,x,s(`@%`)])+`
`+(r([`|`,g,`*`,q,`_____`,`><`,`||`])+`
`).repeat(n)+r([`'`,_(`=`),`''`]))

Çevrimiçi deneyin


PPCG'ye Hoşgeldiniz! Buradan hoşlandığınızı umuyoruz ... Puanınızı düşürmek için neler yapabileceğimize bir bakalım ... Harika bir çalışma!
WallyWest,

@WallyWest teşekkürler! Bir işlev if...else ifçıkartarak ve iç içe geçmiş üçlüsleri yıkıcı bir atama ile değiştirerek, 17 bayttan daha fazla tıraş alın. Yine de fikirlerim dışında ...
Jared Smith,

1
@WallyWest Bu _işlevi iki kez kullandım, bir kez 10 alt çizgi için (iki kez kullanıldı), bir kez 10 eşit işaret için, bu nedenle bir işlevde olması bana bir bayt kazandırdı. Şablon dizelerini yanlış kullanmazsam, birleştirme yerine bunları kullanmak 3 bayt daha fazladır .
Jared Smith,

1
@WallyWest bahşiş için teşekkürler, bu ve bazı gereksiz parenleri kaldırırken 14 bayt kaldı.
Jared Smith,

1
@ Zacharý yapıldı. İnternette yabancıları mutlu etmekten hoşlanmazsam, ilk başta SE'de olmazdım.
Jared Smith,
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.