Minumlah kopi pagi Anda


21

Gambarkan cangkir kopi Ascii ini:

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

Poin Brownie untuk skrip kopi atau java :)

Kode terpendek dalam byte, fungsi atau program, mengikuti baris baru atau ruang putih dapat diterima, minum!


37
Saya akan sangat curiga dengan secangkir kopi bersoda. ;)
Dennis

8
@Dennis ini kopi spesial saya untuk Jumat pagi;)
Aaron

1
Bukankah ini akan lebih menarik dengan 2 minuman atau lebih: yang panas akan memiliki uap yang disimbolkan dengan “(” dan “)”, yang dingin berkilau? Dan dengan meminjam dari komentar Rod, kode harus menampilkan satu atau lainnya berdasarkan waktu saat ini.
manatwork

1
Apakah bisa diterima untuk memiliki ruang putih di garis?
Jonathan Allan

2
@ Harun cawan tidak memiliki pola yang baik, hard-coding / kompresi akan lebih pendek dalam banyak bahasa
Rod

Jawaban:


3

SOGL , 48 byte

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

Penjelasan:

SOGL memiliki kompresi string bawaan dan salah satu yang dimilikinya adalah kompresi kamus char. Lebih baik lagi, ia memiliki tipe kompresi boxstring di mana satu-satunya karakter yang tersedia adalah "/ \ | _- \ n". Jadi keseluruhan program adalah sebuah string yang terbungkus dalam "'(the" implisit).

Tali yang saya berikan pada kompresor adalah (lolos):

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

16

JavaScript (ES6), 110 104 byte

Disimpan 4 byte berkat edc65

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())

Bagaimana itu bekerja

Kompresi seni ASCII asli dicapai dengan mengganti semua urutan 2 hingga 10 ruang berturut-turut dan dua urutan 10 garis bawah berturut-turut dengan satu digit:

  • Setiap urutan Nruang berurutan dikodekan dengan digit N-1.
  • Urutan garis bawah dikodekan dengan a 9.

Kami menggunakan N-1daripada Nagar kami tidak perlu menggunakan lebih dari satu digit. Maka kebutuhan ++nketika decoding.

Ekspresi n>>3(pergeseran bitwise ke kanan) sama dengan 0 untuk n = 1ke n = 7dan sama dengan 1 untuk n = 8(tidak digunakan) dan n = 9. Oleh karena itu, ' _'[n>>3]berikan garis bawah untuk 9, dan ruang untuk semua nilai yang dijumpai lainnya.

Satu-satunya kasus khusus adalah urutan 10 ruang berurutan tepat di atas "JAVA". Pengkodean dengan 9konflik akan dengan urutan garis bawah. Jadi kita perlu membaginya menjadi dua urutan 5 ruang, disandikan sebagai 44.


Saya menghitung 108 byte (tidak termasuk f=). Anda dapat menyimpan 4 byte dengan cara ini: n>>3alih- alih +!(n&7), 9alih-alih _8(dua kali) dan 44bukannya9
edc65

@ edc65 Saya tidak tahu mengapa saya menghitungnya f=... Terima kasih atas byte yang disimpan!
Arnauld

Bisakah Anda jelaskan bagaimana regex bekerja sedikit? Tampaknya ia menggantikan digit d, dengan d spasi ('4' menjadi ' '). Tapi tidak yakin bagaimana melakukannya. Apa yang dilakukan bit shift? Mengapa kita menambah n?
Cruncher

1
@Cruncher Saya telah menambahkan bagian 'Cara kerjanya'.
Arnauld

@Arnauld Sangat pintar :)
Cruncher

16

Jelly , 67 64 byte

-2 bytes terima kasih kepada Dennis (1. hapus redundant , dan 2. ganti transpos dan run-length decode ZŒṙ,, dengan pengurangan oleh elemen repetition x/,.)

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

Cobalah online!

Bagaimana?

“...“...’ adalah daftar dua angka dasar-250 terkompresi:

[1021021021332411532617161526181616261916162618163425334, 2117114111551155121131612111415121115141211161312111551]

D dikonversi ke desimal untuk menghasilkan dua daftar digit:

[[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/ mengurangi dengan pengulangan elemen untuk memberikan satu daftar digit (mengulangi angka dari daftar pertama dengan nilai yang sesuai dari yang lain):

[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]

menginstruksikan untuk mengindeks ke dalam daftar hak, satu berdasarkan dan modular (0 indeks ke item paling kanan). Daftar di sebelah kanan,, ¶_/\|JAVoadalah karakter yang digunakan dalam urutan yang disyaratkan di mana pilcrow ,, adalah titik kode yang sama dengan umpan baris. Mitra penutupan tidak diperlukan karena ini adalah akhir dari program:

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

Jelly melakukan cetakan implisit dari daftar ini, yang, karena berisi karakter, dicetak seolah-olah itu adalah string:

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

7
Saya bersumpah beberapa bahasa ini adalah algoritma kompresi langsung
Cruncher

6
@Cruncher itu adalah Bubblegum
Jonathan Allan

4
Tentu saja, bahasa apa pun yang dapat menampilkan teks lebih lama dari kode, harus memiliki kode lebih panjang dari teks keluaran untuk beberapa teks keluaran. Saya berasumsi jika Anda mencoba menulis sesuatu untuk input acak sepenuhnya kode untuk itu (kecuali jika Anda beruntung) akan lebih lama?
Cruncher

Yap jika acak. Bubblegum sebenarnya menggunakan kompresi, tujuannya adalah tantangan kompleksitas Kolmogorov dan karenanya input harus memiliki pola (atau setidaknya pengulangan seperti di sini).
Jonathan Allan

Final bersifat implisit dan Anda dapat menggantinya ZŒṙdengan x/. Selain itu, meskipun tidak memiliki byte, menggunakan alih-alih baris baru literal membuat kode imo lebih dapat redable.
Dennis

9

CoffeeScript ES6, 214 180 byte

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, 135 byte dengan hardcoding

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

8
Tidak ada suara naik / turun; Saya tidak suka jawaban ini karena umumnya titik dalam jawaban kompleksitas-kolmogorov adalah untuk menghasilkan output tanpa menggunakan seluruh hal dalam kode.
HyperNeutrino

@HyperNeutrino, saya setuju, berupaya memperbaikinya.
Tom

7

Python 2, 174 172 171 167 byte

Tidak ada hard-coding.
Tidak ada pengkodean Base-64.
Tidak Ada Regex.

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+'/'])

Disimpan 2 byte dengan mengeksternalkan '_'*10dan dengan mengeksploitasi konversi Python True -> 1dan False -> 0.
Disimpan 1 byte dengan menghapus spasi yang tidak perlu.
Disimpan 4 byte berkat @TuukkaX!


Anda tampaknya memiliki 2 spasi putih tidak berguna di ] fordan in [.
Yytsi

Sebenarnya, Anda dapat mempersingkat [2,7,4]dan [3,4,5,6]ke 2,4,7dan 3,4,5,6.
Yytsi

7

PowerShell , 136 124 123 105 byte

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

Cobalah online!

Terima kasih kepada @briantist karena menemukan -replacemetode yang lebih pendek yang saya tahu ada di suatu tempat.

Ini mengambil string dengan angka menggantikan jumlah ruang yang diperlukan. Kami kemudian regex -replacedigit dengan ekspresi skrip $(" "*$1). Jadi, misalnya, baris pertama dari string adalah $(" "*2)o, baris kedua adalah $(" "*7)odan seterusnya. Karena triple-quoting, ini dibiarkan sebagai string pada pipa. Kami membuangnya ke iex(kependekan dari Invoke-Expressiondan mirip dengan eval), yang memproses ekspresi skrip dan meninggalkan string multi-line yang dihasilkan pada pipa. Output tersirat.


Aneh, hardcoding lebih pendek. Hm +1 tetap :)
HyperNeutrino

Saya berharap untuk beberapa jawaban menggunakan skema pengkodean (huffman) yang inovatif, tetapi implementasi python saya masih akan muncul lebih lama juga ..
Aaron

untuk beberapa alasan tangan pendek jika / tidak tampak bekerja ($_,' '*$_)[+$_-in48..57]- tidak peduli apa yang saya ubah tampaknya gagal untuk saya.
colsw

@ ConnorLSW Itu karena kedua ekspresi dievaluasi dan array dibangun sebelum pengindeksan terjadi. Akibatnya, PowerShell tidak tahu bagaimana untuk memperbanyak spaceoleh odan barfs.
AdmBorkBork

1
@ Brianantist Terima kasih telah menemukan itu! Saya tahu itu ada di sana, tidak bisa menghasilkan kombinasi kutipan yang tepat untuk membuatnya bekerja.
AdmBorkBork

4

GNU sed , 113 112 bytes

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

Pengkodean dasar, ini menyimpan 3 ruang sebagai S, \nsebagai @dan 5 menggarisbawahi sebagai U. Saya akan terus mencoba kombinasi untuk menemukan sesuatu yang lebih pendek.

Cobalah online!

Solusi sepele untuk mencetak string langsung diberikan di bawah ini. Ini memiliki 136 byte, menghasilkan kompresi 18%, menggunakan skema pengkodean di atas.

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

Cobalah online!



@Riley Terima kasih. Saya juga baru saja menemukan solusi 1 byte lebih sedikit, dengan Smenyimpan 3 ruang, tidak s. Saya pikir saya akan mengedit yang ini sebagai gantinya, karena ia menyimpan jumlah transformasi yang sama.
seshoumara

4

MATL, 87 86 83 82 78 byte

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

Solusi ini memecah kopi menjadi dua bagian: "gelembung" dan cangkir. Untuk membuat gelembung, kami membuat matriks jarang dengan 111 yang terletak di tiga lokasi dan mengubahnya menjadi array karakter

[TIH][IAC]111Z?c

Untuk komponen mug, kami mengandalkan kompresi string

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

Kedua komponen dicetak ke output dan baris baru secara otomatis ditempatkan di antara komponen

Cobalah di MATL Online


4

Python 2 , 128 127 byte

-1 byte terima kasih kepada Rod (gunakan perkalian tuple ('_'*10,)untuk menghindari deklarasi).

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))

Cobalah online!

Catatan: bahwa garis miring terbalik ganda yang diperlukan sebelum pindah baris.

Segala sesuatu di antara '''dan '''merupakan string tunggal, keduanya %sadalah formatters yang digantikan oleh konten trailing %(...)tuple, yang pada gilirannya berisi dua salinan '_'*10melalui penggandaan tuple (...)*2. The '_'*10Melakukan String perkalian untuk menghasilkan '__________'.

Kode melintasi karakter, c, itu seluruh string menggunakan for c in '''...dan menciptakan string baru dengan bergabung ( join(...))
baik jumlah ruang diidentifikasi oleh c, int(c), jika cadalah digit
atau c sendiri
- yang digit diidentifikasi oleh '0'<c<':'untuk menyimpan lebih c.isdigit().


Anda dapat mengganti u,udengan ('_'*10,)*2dan mencabut udeklarasi
Rod

Oh, bagus saya melihat itu dan berpikir ada cara - terima kasih @Rod!
Jonathan Allan

4

Java 8, 294 289 248 byte

Golf:

()->{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;}

Dalam semangat , ini tidak menyulitkan string ke output. Sebaliknya, ia menggunakan fakta bahwa ada banyak kasus beberapa ruang diikuti oleh karakter yang dapat dicetak. Ini mengkodekan jumlah spasi yang mendahului karakter dalam byte orde tinggi karakter, dengan karakter ASCII aktual dalam byte orde rendah.

Tidak Disatukan:

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();
  }
}

Saya pikir akan lebih baik untuk mengkodekan jumlah spasi sebelum karakter dalam byte tinggi. Jadi, 'A' yang didahului oleh enam spasi akan dikodekan sebagai \u0641.
David Conrad

@ Davidvidon mengapa tidak melakukan keduanya? Tidak ada lebih dari sepuluh pengulangan berturut-turut di mana saja dalam string, dan sepuluh desimal cocok dalam hex F. Seharusnya memungkinkan untuk memasukkan keduanya di sana.

Itu poin yang bagus.
David Conrad

1
@ Davidvidon akhirnya membuat ukuran file lebih besar karena loop kedua saya harus menambahkan. Tapi saya memang menghemat beberapa byte dengan mengubah hex ke konstanta desimal. Kehilangan 0xawalan membantu.

1
Ada dua penyandian yang terlihat berguna: jumlah spasi, dan jumlah pengulangan. Anda benar: meng-enkode jumlah spasi adalah keuntungan bersih. Saya juga bisa bermain golf beberapa kode lainnya ( ifberlebihan, misalnya) dan mencukur sekitar 1/6 ukuran.

2

Befunge, 158 105 101 byte

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

Cobalah online!

Karakter dalam string pertama kali dikodekan sebagai indeks ke dalam tabel pencarian dari sepuluh nilai yang mungkin. Indeks kemudian dikelompokkan menjadi pasangan, masing-masing pasangan digabungkan menjadi satu nomor (i1 + i2 * 10) di kisaran 0 hingga 99. Dengan hati-hati memilih urutan tabel pencarian, kami dapat menjamin bahwa nilai-nilai tersebut akan selalu valid Karakter ASCII yang dapat direpresentasikan dalam string literal.

Ini adalah rincian kode itu sendiri:

Kode sumber dengan jalur eksekusi disorot

*Kita mulai dengan menginisialisasi elemen terakhir dari tabel pencarian dengan karakter baris baru (ASCII 10).
*Kami kemudian menggunakan string literal untuk mendorong konten yang disandikan ke tumpukan.
*Akhirnya kita mengulang nilai-nilai stack, decoding dan menghasilkan dua karakter sekaligus.
*Baris terakhir memegang tabel pencarian: elemen ke-9 adalah ruang tersirat, dan ke-10 (baris baru) diatur secara manual, seperti yang dijelaskan sebelumnya.


2

Retina , 71 byte

Berbeda dari jawaban saya yang lain , jawaban ini ditulis dengan tangan.


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

(Ada ruang tambahan di akhir)

Cobalah online!

Prinsipnya masih memiliki string "terkompresi" dari mana secangkir kopi dapat direkonstruksi dengan substitusi. Mencoba substitusi yang berbeda ternyata yang patut dilakukan hanyalah:

  • =berubah menjadi __________(10 garis bawah)
  • setiap digit berubah menjadi jumlah spasi tersebut

2

Common Lisp, 125 123 122 120 120 byte

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

Saya menyimpan 6 byte, menggunakan ide memasukkan saja ke dalam string, bukan ~&s.

Ide untuk perbaikan disambut.


1

Python3, 206 byte

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
Begitu banyak karakter spasi ... Lebih baik mendeklarasikan s=' 'variabel dan menggunakannya.
manatwork

Juga tidak ada salahnya untuk menentukan baris baru
Wheat Wizard

3
Hardcoding output lebih pendek
Kritixi Lithos

@ WoatWizard, saya kira tidak. Hanya ada satu baris tunggal tunggal. Yang lain berada di dalam string, jadi menggunakan variabel juga akan membutuhkan operator gabungan. Dan 'o\n'memiliki panjang yang sama dengan'o'+n .
manatwork

2
@Manatwork One bisa: print(*(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'),sep='\n')atau 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), keduanya 197. Masih lebih lama dari 136 hard code .
Jonathan Allan


1

C - 179

Solusi dengan penggunaan luas format string:

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);}

Ini adalah versi yang lebih mudah dibaca:

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
Brute memaksakan kode di dalam seni memberikan versi yang lebih pendek dan mencetak dengan menempatkan: void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
Churam

1

Retina , 99 byte

Solusi ini dihasilkan secara otomatis menggunakan skrip ini .


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

(Ada spasi tambahan di banyak baris)

Ini bekerja dengan menggunakan angka 1,2,3,4 menggantikan beberapa urutan karakter yang diulang dalam string target dan kemudian menggantikannya kembali.

Saya tahu itu bisa golf lebih dengan mengubah kode ini atau mengubah pendekatan sepenuhnya, tetapi karena tantangan meta-golf kolmogorov memiliki hasil yang cukup mengecewakan saya ingin mencoba menggunakan skrip saya pada tantangan nyata.

Cobalah online!


Anda dapat mengganti semua spasi di akhir baris terakhir ke 3dan kemudian bergerak substitusi hingga sebelum 3. Anda juga dapat mengubah 2\n ke 2\n3 dan bergerak substitusi ini untuk sebelum 3. Cobalah secara online!
Kritixi Lithos

Anda juga dapat mengubah 1\n__________ke 1\n_____dan kemudian mengubah masing-masing 1di substitusi utama untuk 11 Cobalah secara online!
Kritixi Lithos

@KritixiLithos seperti yang saya katakan, saya tahu ini bisa di mainkan :) Saya hanya ingin memposting solusi yang dibuat langsung oleh algoritme saya, mungkin saya akan mengirim jawaban lain yang dioptimalkan secara manual ^^
Leo

0

Python 3.6

(tidak bersaing)

Inilah upaya saya di Huffman encoding. Sudah pasti golf lebih lanjut jika ada yang mau mengambil ide.

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())})))

Literal dapat dikompresi lebih lanjut lagi dengan mengkonversi ke base64 atau lainnya, dan pohon Huffman dapat dioptimalkan untuk menghasilkan bitarray yang lebih pendek.


3
Non-bersaing bukan alasan untuk ketidakabsahan.
Mego

@Mego Saya tidak punya waktu untuk memperbaikinya, saya hanya ingin memberikan kerangka kerja solusi untuk orang lain untuk dijalankan. tidak kompetitif karena saya adalah lawan dari tantangan
Aaron

2
Itu tidak masalah. Kebijakan kami jelas .
Mego

@Mego diperbaiki ... hanya untukmu
Aaron

0

Bahasa GameMaker, 138 byte

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

0

C, 141 Bytes

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);}

Pemakaian

main(){f();}

Solusi Mudah, 148 Bytes:

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

0

PHP, 116 byte

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;

Ini sangat mirip dengan jawaban Arnauld - dan melakukan hal yang hampir sama. Jalankan dengan -r.


0

zsh, 86 byte

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

Penjelasan: string itu adalah seni ascii cup java yang dikompresi gzip. Saya menggunakan printf, karena dengan echo, zcatmencetak peringatan, dan echo -esatu karakter lebih panjang. Itu tidak bekerja dengan bashatau sh, karena mereka pikir itu file biner. Karena Anda tidak dapat secara efektif menempelkan output dari browser, inilah file yang dapat digunakan.


0

Java 9 / JShell, 299 byte

()->{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;}

Tidak Disatukan:

() -> {
    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;
}

Penggunaan di JShell:

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

Mengkodekan setiap karakter sebagai sepuluh bit yang terdiri dari hitungan jumlah spasi sebelum karakter dalam tiga bit tinggi diikuti oleh titik kode dalam tujuh bit rendah.

(Karena hanya ada tiga bit untuk penghitungan, ia tidak bisa mewakili lebih dari tujuh spasi berturut-turut, dan ada sepuluh spasi pada satu titik dalam string. Ini dikodekan sebagai hitungan enam, diikuti oleh spasi, dan kemudian hitungan tiga diikuti oleh karakter berikutnya.)

Sayangnya, ia kalah dari solusi Java 140 byte yang sepele ini:

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

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.