Sabah kahvenizi için


21

Bu Ascii kahve fincanını çizin:

  O
       O
    O
 __________
/ \ __
| J | \
| A | |
| V | |
| A | __ /
\ __________ /

Brownie kahve betiği veya java için puan veriyor

Bayt, işlev veya programdaki en kısa kod, izleyen yeni satır veya beyaz alan kabul edilebilir, içilebilir!


37
Bir fincan köpüklü kahve için çok şüpheli olurdum. ;)
Dennis,

8
@Dennis Cuma sabahları için özel kahvem;)
Aaron

1
2 ya da daha fazla içecekle daha ilginç olmaz mıydı: Sıcak olanın soğuk parıldıyorsa “(” ve “)” ile sembolize edilmiş buharları olur mu? Ve Rod'un yorumundan ödünç alarak, kod geçerli saate göre bir veya diğerini göstermelidir.
Manatwork

1
Çizgiler üzerinde beyaz boşluk olması kabul edilebilir mi?
Jonathan Allan

2
@Aaron kupasında iyi bir desen yok, kodlama / sıkıştırma birçok dilde daha kısa olacak
Rod

Yanıtlar:


3

SOGL , 48 bayt

mγmλ⁶…Jcēņ▒&↓¡℮štΥ{ιE‽▼⅛÷εγ╝Ξ∫$■⌡πθ&χF׀▼ΡQ7L↓F¶‘

Açıklama:

SOGL yerleşik string sıkıştırmasına sahiptir ve sahip olduğu karakterlerden biri char sözlük sıkıştırmasıdır. Daha da iyisi, mevcut tek karakterlerin "/ \ | _- \ n" olduğu bir kutu sıkıştırma tipi var. Bu nedenle, tüm program "'(" gizlidir ") içine alınmış bir dizedir.

Kompresöre verdiğim dizi (kaçtı):

"  o\n       o\n    o\n ",
"__________",
"\n/          \\__\n|   ",
"J",
"      |  \\\n|    ",
"A",
"     |  |\n|     ",
"V",
"    |  |\n|      ",
"A",
"   |__/\n\\",
"__________",
"/"

16

JavaScript (ES6), 110 104 bayt

Edc65 sayesinde 4 byte kurtarıldı

let f =

_=>`1o
6o
3o
 9
/44\\__
|2J5|1\\
|3A4|1|
|4V3|1|
|5A2|__/
\\9/`.replace(/\d/g,n=>' _'[n>>3].repeat(++n))

console.log(f())

Nasıl çalışır

Orijinal ASCII tekniğinin sıkıştırılması, 2 ila 10 ardışık boşluktaki tüm dizilerin ve 10 ardışık altı altlığın iki dizisinin tek bir rakam ile değiştirilmesiyle elde edilir:

  • NArdışık boşlukların her sırası basamakla kodlanır N-1.
  • Alt çizgi dizileri a ile kodlanır 9.

Bunun N-1yerine kullanmaktayız Nki hiçbir zaman birden fazla rakam kullanmak zorunda kalmayız. Dolayısıyla ++nkod çözme için ihtiyaç duyulur .

Sentezleme n>>3(sağ bitler vardiya) eşittir 0 n = 1için n = 7ve için 1 olduğunda n = 8(kullanılmaz) ve n = 9. Bu nedenle, karşılaşılan diğer tüm değerler için ' _'[n>>3]bir alt çizgi 9ve bir boşluk verir.

Tek özel durum, "JAVA" nın hemen üstündeki 10 ardışık boşluğun dizisidir. Bir kodla kodlamak 9, alt çizgi dizileriyle çakışacaktır. Bu yüzden, onu olarak kodlanan 5 boşluğun iki dizisine bölmemiz gerekiyor 44.


108 bayt sayıyorum (saymıyor f=). Bu şekilde bayt 4 kaydedebilirsiniz: n>>3yerine +!(n&7), 9yerine _8(iki kez) ve 44yerine9
edc65

@ edc65 Neden bunu saydım bilmiyorum f=... Kaydedilen bayt için teşekkürler!
Arnauld,

Regex'in nasıl çalıştığını açıklayabilir misin? D hanesi yerine d boşluğu ('4' olur ' ') ile belirir . Ama tam olarak bunu nasıl yaptığını bilmiyorum. Bit kaydırma ne işe yarıyor? Neden n artırıyoruz?
Cruncher

1
@Cruncher 'Nasıl çalışır' bölümü ekledim.
Arnauld

@Arnauld Çok zekice :)
Cruncher

16

Jöle , 67 64 bayt

Dennis sayesinde -2 bayt (1. gereksiz olanı kaldırın ve 2. transpozisyonu ve çalışma uzunluğu kod çözücüsünü değiştirin, ZŒṙeleman tekrarı ile azaltın x/.

“Ñṁ{xGgṭḷVỤɲ8ṿfƬT9Ɱ¹=qṀS“$<(ƇỤ08ØÑḌṃṘX6~cuc8HṗḞ2’Dx/ị“ ¶_/\|JAVo

Çevrimiçi deneyin!

Nasıl?

“...“...’ 250 temel 250 sıkıştırılmış sayının listesidir:

[1021021021332411532617161526181616261916162618163425334, 2117114111551155121131612111415121115141211161312111551]

D iki basamaklı listeyi vermek için ondalık değerine dönüştürür:

[[1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 3, 3, 2, 4, 1, 1, 5, 3, 2, 6, 1, 7, 1, 6, 1, 5, 2, 6, 1, 8, 1, 6, 1, 6, 2, 6, 1, 9, 1, 6, 1, 6, 2, 6, 1, 8, 1, 6, 3, 4, 2, 5, 3, 3, 4], [2, 1, 1, 7, 1, 1, 4, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 2, 1, 1, 3, 1, 6, 1, 2, 1, 1, 1, 4, 1, 5, 1, 2, 1, 1, 1, 5, 1, 4, 1, 2, 1, 1, 1, 6, 1, 3, 1, 2, 1, 1, 1, 5, 5, 1]]

x/ Bir basamak listesi vermek için eleman tekrarı ile azalır (ilk listedeki numarayı diğerinin karşılığı ile tekrarlayarak):

[1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 0, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 3, 2, 6, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 6, 1, 1, 5, 2, 6, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 6, 1, 1, 6, 2, 6, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 6, 1, 1, 6, 2, 6, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 6, 3, 3, 4, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4]

biri esaslı ve modüler olarak sağın listesine endekslenmesini söyler (0 en sağdaki öğeye endeksler). Sağdaki liste ¶_/\|JAVo, basitçe, pilcrow'un gerekli sıraya göre kullanılan karakter , satır beslemeyle aynı kod noktasıdır. Programın sonu olduğu için kapanış partneri gerekli değildir:

[' ', ' ', 'o', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', '\n', ' ', ' ', ' ', ' ', 'o', '\n', ' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\n', '/', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '\\', '_', '_', '\n', '|', ' ', ' ', ' ', 'J', ' ', ' ', ' ', ' ', ' ', ' ', '|', ' ', ' ', '\\', '\n', '|', ' ', ' ', ' ', ' ', 'A', ' ', ' ', ' ', ' ', ' ', '|', ' ', ' ', '|', '\n', '|', ' ', ' ', ' ', ' ', ' ', 'V', ' ', ' ', ' ', ' ', '|', ' ', ' ', '|', '\n', '|', ' ', ' ', ' ', ' ', ' ', ' ', 'A', ' ', ' ', ' ', '|', '_', '_', '/', '\n', '\\', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '/']

Jelly, bu listenin örtük bir basımını gerçekleştirir; karakter içerdiğinden, bir dizemiş gibi basar:

  o
       o
    o
 __________
/          \__
|   J      |  \
|    A     |  |
|     V    |  |
|      A   |__/
\__________/

7
Yemin ederim ki bu dillerden bazıları doğrudan sıkıştırma algoritmaları
Cruncher


4
Elbette, koddan daha uzun metin çıkaran herhangi bir dil, bazı çıktı metinleri için mutlaka çıktı metinden daha uzun koda sahip olmalıdır. Tamamen randomize bir giriş için bir şey yazmaya çalıştıysanız, bunun için kodun (şanslı olmadığınız sürece) daha uzun olacağını düşünmüştüm.
Cruncher

Eğer rastgele ise evet. Bubblegum gerçekte sıkıştırma kullanıyor, amaç Kolmogorov karmaşıklığıyla mücadele ediyor ve bu nedenle girdilerin kalıba sahip olması gerekiyor (veya en azından burada olduğu gibi).
Jonathan Allan

Nihai örtülü olduğunu ve yerini alabilir ZŒṙile x/. Ayrıca, herhangi bir bayt bulunmamasına rağmen, değişmez bir yeni satır yerine kullanmak , kodu daha okunabilir hale getirir.
Dennis,

9

CoffeeScript ES6, 214 180 bayt

r="replace";" 1o0n0 6o0n0 3o0n0 _9n0/0 9b0_1n0|0 2J0 5|0 1b0n0|0 3A 4|0 1|0n0|0 4V0 3|0 1|0n0|0 5A0 2|0_1/0n0b0_9/0"[r](/\d/g,(a,b,c)->c[b-1].repeat(a))[r](/n/g,"\n")[r](/b/g,"\\")

CoffeeScript, sabit kodlamalı 135 bayt

f=()->"""  o
       o
    o
 __________
/          \__
|   J      |  \\
|    A     |  |
|     V    |  |
|      A   |__/
\__________/"""

8
Yukarı / aşağı oy yok; Bu cevabı sevmedim, çünkü genellikle kolmogorov-karmaşıklık cevabındaki amaç, koddaki her şeyi kullanmadan çıktıyı üretmektir.
HyperNeutrino,

@HyperNeutrino, geliştirmeye çalışıyorum.
Tom,

7

Python 2, 174 172 171 167 bayt

Kodlama yok.
Base-64 kodlaması yok.
Regex yok.

k=' '
q='_'*10
print'\n'.join([k*i+'o'for i in 2,7,4]+[k+q]+['/'+k*10+'\\__']+['|'+k*s+'JAVA'[s-3]+k*(9-s)+'|'+' _'[s==6]*2+'\\||/'[s-3]for s in 3,4,5,6]+['\\'+q+'/'])

Dışsallaştırmak, 2 bayt Kaydedilen '_'*10ve Python'un dönüşümünü istismar ederek True -> 1ve False -> 0.
Gereksiz boşlukları kaldırarak 1 bayt kaydedildi.
@TuukkaX sayesinde 4 bayt kaydedildi!


Sen 2 yararsız boşlukları var gibi ] forve in [.
Yytsi

Aslında kısaltabilirsiniz [2,7,4]ve [3,4,5,6]karşı 2,4,7ve 3,4,5,6.
Yytsi

7

PowerShell , 136 124 123 105 bayt

"""2o
7o
4o
 $(($a='_'*10))
/55\__
|3J6|2\
|4A5|2|
|5V4|2|
|6A3|__/
\$a/"""-replace'(\d)','$(" "*$1)'|iex

Çevrimiçi deneyin!

@Briantist'e -replace, orada bir yerde olduğunu bildiğim en kısa yöntemi bulduğum için teşekkürler .

Bu, gerekli boşluk sayısının yerine sayıları içeren dizgiyi alır. Daha sonra -replacerakamları komut dosyası ifadesiyle düzenleriz $(" "*$1). Yani, örneğin, dizginin ilk satırı olacak $(" "*2)o, ikincisi olacak $(" "*7)ove böyle devam edecek. Üçlü alıntı nedeniyle, bu, boru hattında bir dize olarak bırakılır. Bunu , betik ifadelerini işleyen ve elde edilen çok satırlı dizgiyi boru hattında bırakan iex(kısaca Invoke-Expressionve benzerlerine eval) atıyoruz. Çıktı kapalı.


Bu garip, kodlama daha kısa. Hm. Yine de +1 :)
HyperNeutrino

Yenilikçi (huffman) kodlama şemalarını kullanarak bazı cevaplar almayı umuyordum, ancak python uygulamam hala daha uzun
Aaron

Bazı nedenlerden dolayı kısa el / eğer işe yaramazsa ($_,' '*$_)[+$_-in48..57]- ne değiştirirsem gideyim benim için başarısız görünüyor.
colsw

@ConnorLSW Bunun nedeni, her iki ifadenin de değerlendirilmesi ve dizin oluşturmadan önce oluşturulmuş dizinin olmasıdır . Sonuç olarak, PowerShell çoğalmaya bilmiyor spacetarafından ove Barfs.
AdmBorkBork

1
@briantist Bunu bulduğun için teşekkürler! Orada olduğunu biliyordum, çalışabilmesi için doğru fiyat kombinasyonunu bulamadım.
AdmBorkBork

4

GNU sed , 113 112 bayt

s:$:  o@SS o@S o@ UU@/SSS \\__@|SJSS|  \\@|S AS  |  |@|S  VS |  |@|SSAS|__/@\\UU/:
s:S:   :g
y:@:\n:
s:U:_____:g

Temel kodlama, bu 3 boşluk olarak depolayan S, \nyanı @sıra, 5 çizgiler U. Daha kısa bir şey bulmak için kombinasyonları denemeye devam edeceğim.

Çevrimiçi deneyin!

Doğrudan dize basmanın önemsiz çözümü aşağıda verilmiştir. Yukarıdaki kodlama şemasını kullanarak,% 18 oranında bir sıkıştırma ile sonuçlanan 136 bayta sahiptir.

c\  o\
       o\
    o\
 __________\
/          \\__\
|   J      |  \\\
|    A     |  |\
|     V    |  |\
|      A   |__/\
\\__________/

Çevrimiçi deneyin!



@Riley Teşekkürler. Ayrıca 1 bayt daha az çözüm buldum, S3 boşluk bırakarak, hayır s. Sanırım bunun yerine bunu düzenleyeceğim, çünkü aynı sayıda dönüşümü sürdürüyor.
seshoumara

4

MATL, 87 86 83 82 78 bayt

[TIH][IAC]111Z?c'(ty!(OWM4J4gW{lm> >bw8ch|.FU2W"@\#2Dj!NQDeIMZ'F'_ /|\JAV'Za7e

Bu çözelti kahveyi iki parçaya böler: "baloncuklar" ve kupa. Baloncukları oluşturmak için üç konumda bulunan 111'lik seyrek bir matris oluşturup karakter dizisine dönüştürüyoruz.

[TIH][IAC]111Z?c

Kupa bileşeni için string sıkıştırmaya güveniyoruz

'(ty!(OWM4J4gW{lm> >bw8ch|.FU2W"@\#2Dj!NQDeIMZ'F'_ /|\JAV'Za7e

Her iki bileşen de çıktıya yazdırılır ve bileşenler arasına otomatik olarak bir yeni satır yerleştirilir

MATL Online'da deneyin


4

Python 2 , 128 127 bayt

Rod sayesinde -1 bayt ( ('_'*10,)bildirimden kaçınmak için demet çarpımını kullanın ).

print''.join('0'<c<':'and' '*int(c)or c for c in'''2o
7o
4o
 %s
/ 9\__
|3J6|2\\
|4A5|2|
|5V4|2|
|6A3|__/
\%s/'''%(('_'*10,)*2))

Çevrimiçi deneyin!

Not: bu çift ters eğik çizgi edilir hat besleme önce gerekli.

Arasındaki her şey '''ve '''tek dizidir, iki %seğik içeriği ile yer değiştirirler biçemleyicileri olan %(...)sırayla iki kopyasını içeren tuple, '_'*10tuple çarpma yoluyla (...)*2. '_'*10Gerçekleştirir dize çarpma vermek üzere '__________'.

Kod, karakterleri geçtiği c, bu bütün dizenin kullanarak for c in '''...ve katılarak yeni bir dize oluşturur ( join(...))
ya tarafından tanımlanan alanların sayısı c, int(c)eğer cbir rakamdır
veya c kendisi
bir rakam ile tanımlanır ediliyor - '0'<c<':'üzerinde tasarruf c.isdigit().


Sen yerini alabilir u,uile ('_'*10,)*2ve bırak ubeyanı
Çubuk

Güzel, buna baktım ve bir yol olduğunu düşündüm - teşekkürler @Rod!
Jonathan Allan

4

Java 8, 294 289 248 bayt

golfed:

()->{String s="";for(char c:"\u026F\n\u076F\n\u046F\n __________\n/\u0A5C__\n|\u034A\u067C\u025C\n|\u0441\u057C\u027C\n|\u0556\u047C\u027C\n|\u0641\u037C__/\n\\__________/".toCharArray()){for(int i=0;i<c>>8;++i)s+=' ';s+=(char)(c&255);}return s;}

ruhu içinde , bu, çıktısını almak için dizeyi zorlaştırmaz. Bunun yerine, yazdırılabilir bir karakterin takip ettiği birçok boşluk olması olgusundan faydalanır. Karakterin yüksek sıra baytındaki bir karakterden önce gelen boşluk sayısını, düşük sıralı bayttaki asıl ASCII karakteriyle kodlar.

Ungolfed:

import java.util.function.*;

public class DrinkYourMorningCoffee {

  public static void main(String[] args) {
    System.out.println(f(
    () -> {
      String s = "";
      for (char c : "\u026F\n\u076F\n\u046F\n __________\n/\u0A5C__\n|\u034A\u067C\u025C\n|\u0441\u057C\u027C\n|\u0556\u047C\u027C\n|\u0641\u037C__/\n\\__________/".toCharArray()) {
        for (int i = 0; i < c >> 8; ++i) {
          s += ' ';
        }
        s += (char) (c & 255);
      }
      return s;
    }
    ));
  }

  private static String f(Supplier<String> s) {
    return s.get();
  }
}

Yüksek bayttaki bir karakterden önce önde gelen boşlukların sayısını kodlamanın daha iyi olacağını düşünüyorum. Böylece, altı boşluktan önce gelen bir 'A' olarak kodlanır \u0641.
David Conrad

@DavidConrad neden her ikisini de yapmıyorsunuz? Dizede herhangi bir yerde ondan fazla ardışık tekrarlama yoktur ve onluk onaltılık hex'e uyar F. İkisine de oturması mümkün olmalı.

İyi bir noktaya değindin.
David Conrad

1
@DavidConrad eklemek zorunda kaldığım ikinci döngü nedeniyle dosya boyutunu daha büyük hale getirdi. Ancak hex'i ondalık sabitlere dönüştürerek birkaç bayt kurtardım. 0xÖneki kaybetmek yardımcı oldu.

1
Yararlı görünen iki kodlama vardır: boşluk sayısı ve tekrar sayısı. Haklıydınız: boşluk sayısını kodlamak net bir kazançtır. Ayrıca diğer kodlardan bazılarını ( iförneğin gereksiz) golf oynatabildim ve boyutun 1 / 6'sını traş edebildim .

2

Befunge, 158 105 101 bayt

<v"XaXXXNYXNY77777'XXXXX2_TXQXX0XZTXDXX0X^TXXRX0X^TXXDX07]27777#"p29+55
:<_@#:,g2/+55,g2%+55
\JV/|_Ao

Çevrimiçi deneyin!

Dize içindeki karakterler ilk önce on olası değerden oluşan arama tablosuna indeks olarak kodlanır. Endeksler daha sonra çiftler halinde gruplandırılır, her çift 0 ila 99 aralığında tek bir sayıya (i1 + i2 * 10) birleştirilir. Arama tablosunun sırasını dikkatlice seçerek, bu değerlerin her zaman geçerli olacağını garanti edebiliriz. Bir dizgede değişmez olarak temsil edilebilen ASCII karakterleri.

Bu, kodun kendisinin bir dökümüdür:

Yürütme yolları vurgulanmış olarak kaynak kodu

*Arama tablosunun son öğesini newline karakteriyle (ASCII 10) başlayarak başlıyoruz.
*Daha sonra kodlanmış içeriği yığının üzerine itmek için bir dizge hazır kullanırız.
*Sonunda, istifin değerlerinin üzerinden geçerek, bir seferde iki karakterin kodunu çözer ve çıkarırız.
*Son satır arama tablosunu tutar: 9. eleman örtük bir alandır ve 10. (yeni satır) daha önce açıklandığı gibi manuel olarak ayarlanır.


2

Retina , 71 bayt

Diğer cevabımdan farklı olarak , bu elle yazılmış.


2o¶6o¶3o¶1=¶/55\__¶|3J6|2\¶|4A5|2|¶|5V4|2|¶|6A3|__/¶\=/
=
10$*_
\d
$* 

(sonunda sonunda boşluk var)

Çevrimiçi deneyin!

Prensip hala, bir fincan kahvenin ikame ile yeniden yapılandırılabildiği "sıkıştırılmış" bir ipe sahiptir. Farklı ikameler denemek, yapmaya değer olanların sadece şöyle olduğu ortaya çıktı:

  • =dönüşüyor __________(10 alt çizgi)
  • herhangi bir rakam bu sayıya dönüşür

2

Ortak Lisp, 125 123 122 120 114 bayt

(format t"~3@{~vto
~} ~10@{_~}
/~11t\\__
|   J~11t|  \\
~2@{|~5t~a~11t|  |
~}|~7tA   |__/
\\~10{_~}/"2 7 4'A" V"1)

Sadece girdi yerine ~&s yerine dizge koyma fikrini kullanarak 6 bayt kurtardım .

İyileştirme fikirleri memnuniyetle karşılandı.


1

Python3, 206 bayt

print('  o\n'+7*' '+'o\n'+4*' '+'o\n'+' '+10*'_'+'\n'+'/'+10*' '+'\__\n'+'|'+3*' '+'J'+6*' '+'|  \\\n'+'|'+4*' '+'A'+5*' '+'|  |\n'+'|'+5*' '+'V'+4*' '+'|  |\n'+'|'+6*' '+'A'+3*' '+'|__/\n'+'\\'+10*'_'+'/') 

2
Çok fazla boşluk karakteri… Bir s=' 'değişkeni tanımlayıp daha iyi kullan.
Manatwork

Ayrıca newline önceden tanımlamak için zarar vermez
Buğday Sihirbazı

3
Çıktı
kodlaması

@WheatWizard, sanmıyorum. Sadece tek bir yeni satır var. Diğerleri dizgilerin içindedir, bu nedenle bir değişken kullanmak da bir birleştirme operatörüne ihtiyaç duyar. Ve 'o\n'aynı uzunlukta 'o'+n.
Manatwork

2
@ manatwork Bir olabilir: print(*(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'),sep='\n')veya for x in(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'):print(x)her ikisi de 197'dir. Hala bir 136 zor koddan daha uzun .
Jonathan Allan


1

C - 179

Format dizesinin kapsamlı kullanımı ile çözüm:

void f(){printf("%1$3c\n%1$8c\n%1$5c\n%2$11s\n/%3$13s\n|%4$4c%5$7c%6$3c\n|%7$5c%5$6c%5$3c\n|%8$6c%5$5c%5$3c\n|%7$7c%5$4c__/\n\\%2$s/\n",'o',"__________","\\__",74,'|',92,65,86);}

İşte daha okunabilir bir versiyon:

void f() {
  printf("%1$3c\n"
         "%1$8c\n"
         "%1$5c\n"
         "%2$11s\n"
         "/%3$13s\n"
         "|%4$4c%5$7c%6$3c\n"
         "|%7$5c%5$6c%5$3c\n"
         "|%8$6c%5$5c%5$3c\n"
         "|%7$7c%5$4c__/\n"
         "\\%2$s/\n"
         'o',"__________","\\__",'J','|','\','A','V');
}

1
Sanatı kodun içine void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
sokmaya

1

Retina , 99 bayt

Bu çözüm bu komut dosyası kullanılarak otomatik olarak üretildi .


0 0o¶ 1¶/32\__¶4 J24\¶|3A 34|¶| 3V34|¶|2A   |__/¶\1/
4
|  
3
    
2
      
1
__________
0
  o¶    

(birçok satırda arkada boşluk var)

Bu, hedef dizgide tekrarlanan bazı karakter dizilerinin yerine 1,2,3,4 sayıları kullanarak ve sonra onları değiştirerek çalışır.

Bu kodu ayarlayarak ya da tamamen değişen bir yaklaşımla daha çok golf oynayabileceğini biliyorum, ancak kolmogorov meta-golf yarışmasında hayal kırıklığı yaratan bir sonuç olduğu için senaryomu gerçek bir meydan okuma üzerinde kullanmayı denemek istedim.

Çevrimiçi deneyin!


Bir son satırın sonunda tüm boşlukları yerini alabilir 3ve daha sonra 3. Ayrıca değiştirmeden önce hiç ikame yukarı taşımak 2\n için 2\n3 ve 3. önce bu ikame taşımak onu çevrimiçi deneyin!
Kritixi Lithos

Ayrıca değiştirebilir 1\n__________için 1\n_____ve ardından her değiştirmek 1için ana yerine 11 çevrimiçi deneyin!
Kritixi Lithos

@KritixiLithos dediğim gibi, bunun golf oynayabildiğini biliyorum :) Sadece algoritmam tarafından doğrudan oluşturulan bir çözümü göndermek istedim, belki de elle optimize edilmiş bir cevap daha gönderirim ^^ ^^
Leo

0

Python 3.6

(Rekabetsiz)

İşte Huffman şifrelemesindeki denemem. Birisi fikri ele almak isterse kesinlikle daha fazla golf oynanabilir.

from bitarray import bitarray as b
a=b()
a.frombytes(bytes.fromhex('ca7fca7e53b6db6db664ffc6d9ae1fd6335e2fad1af83d68d7e2e9b218db6db6db20'))
print(''.join(a.decode({k:b(v)for k,v in zip(" _|\no/\\AJV","1 011 010 0011 00101 00100 00011 00010 00001 00000".split())})))

Değişmez, base64'e veya diğerine dönüştürülerek daha da sıkıştırılabilir ve Huffman ağacı, daha kısa bir çift kanatlı hararet üretmek için optimize edilebilir.


3
Rekabet etmemek, malullük için bir bahane değildir.
Mego

@Mego Düzeltmek için vaktim yok, sadece başkasının çalışacağı bir çözüm çerçevesini vermek istedim. Rekabetçi değil çünkü zorluğun OP'si oldum
Aaron

2
Bu gerçekten önemli değil. Politikamız açık .
Mego

@Mego düzeltildi ... sadece sizin için
Aaron,

0

GameMaker Dili, 138 bayt

show_message("  o#       o#    o# __________#/          \__#|   J      |  \#|    A     |  |#|     V    |  |#|      A   |__/#\__________/")

0

C, 141 Bayt

f(){printf("  o\n%7co\n    o\n __________\n/%11c__\n|   J%6c|  \\\n|    A     |  |\n|%6c    |  |\n|%7c   |__/\n\\__________/",0,92,0,86,65);}

kullanım

main(){f();}

Kolay Çözüm, 148 Bayt:

w(){puts("  o\n       o\n    o\n __________\n/          \\__\n|   J      |  \\\n|    A     |  |\n|     V    |  |\n|      A   |__/\n\\__________/");}

0

PHP, 116 bayt

for(;$c="1o
6o
3o
 9
/44\\__
|2J5|1\\
|3A4|1|
|4V3|1|
|5A2|__/
\\9/"[$i++];)echo$c>0?str_repeat(" _"[$c>8],$c+1):$c;

Bu, Arnauld’un cevabına çok benziyor - ve aynısını yapıyor. İle koş -r.


0

zsh, 86 bayt

printf "^_<8b>^H^@^@^@^@^@^B^CSPÈçR^@^A^P^CJÆÃ^A<97>¾^B^\Ä^@¹5@Ú^KÂ^E2cÀ|^EG^X¿^FÂW^HCæÃTÔÄÇësÅÀ^L^Fq^@<92>}ý^?{^@^@^@"|zcat

Açıklama: bu dize gzip sıkıştırılmış java kupası ascii sanatıdır. Kullandığım printfile çünkü echo, zcatbir uyarı yazdırır ve echo -ebir karakter daha uzundur. O çalışmaz bashya shda bir ikili dosya olduğunu düşünüyorum çünkü. Etkili tarayıcıdan o çıktı yapıştırmak mümkün olmadığından, burada 'kullanılabilir bir dosya bu.


0

Java 9 / JShell, 299 bayt

()->{String s="";BigInteger b=new BigInteger("43ljxwxunmd9l9jcb3w0rylqzbs62sy1zk7gak5836c2lv5t36ej6682n2pyucm7gkm9bkfbn4ttn0gltbscvbttifvtdfetxorj6mmy3mt6r3",36);while(!b.equals(BigInteger.ZERO)){int x=b.intValue()&0x3ff;for(int i=0;i<x>>7;i++)s+=' ';s+=(char)(x&0x7f);b=b.shiftRight(10);}return s;}

Ungolfed:

() -> {
    String s = "";
    BigInteger b = new BigInteger(
        "43ljxwxunmd9l9jcb3w0rylqzbs62sy1zk7gak5836c2lv5t36ej6682n2pyucm7gkm9bkfbn4ttn0gltbscvbttifvtdfetxorj6mmy3mt6r3",
        36);
    while (!b.equals(BigInteger.ZERO)) { 
        int x = b.intValue() & 0x3ff;
        for (int i = 0; i < x >> 7; i++) s+=' ';
        s += (char)(x&0x7f);
        b = b.shiftRight(10);
    }
    return s;
}

JShell'de Kullanım:

Supplier<String> golf = <lambda expression>
System.out.println(golf.get())

Her bir karakteri, en az üç bitteki kod noktasının ardından yüksek üç bitteki karakterden önceki boşluk sayısından oluşan on bit olarak kodlar.

(Sayı için sadece üç bit olduğundan, art arda yediden fazla boşluğu temsil edemez ve dizgede bir noktada on boşluk vardır. Bunlar, altı sayım olarak kodlanır, ardından boşluk bir sonraki karakterin ardından üçün sayısı.)

Ne yazık ki, bu önemsiz 140 bayt Java çözümü kaybeder:

()->"  o\n       o\n    o\n __________\n/          \\__\n|   J      |  \\\n|    A     |  |\n|     V    |  |\n|      A   |__/\n\\__________/"

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.