Minecraft Mirror

51

Ini Calvin . Hanya berusaha mendapatkan 20 rep sehingga pengguna ini dapat mengobrol di chatroom PPCG Minecraft Server .

Tulis program atau fungsi yang menggunakan bilangan bulat positif.

Jika bilangan bulat genap (2, 4, 6, ...), cetak atau kembalikan string seni ASCII ini:

                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |

Jika bilangan bulat ganjil (1, 3, 5, ...), cetak atau kembalikan string seni ASCII ini:

                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Anda mungkin menganggap input selalu bilangan bulat positif.

Dalam kedua kasus keluaran, secara opsional mungkin ada sejumlah ruang trailing hingga ke tepi kanan "T" pada setiap baris, dan / atau satu baris trailing tunggal. Perhatikan bagaimana ada dua kolom spasi di antara setiap huruf.

Kode terpendek dalam byte menang.

Relay Obrolan Lama
sumber
54
Saya akan
beri
13
@ Geobits Ini aku.
Hobi Calvin
52
@ Geobits Tidak, ini aku. Saya tahu tidak ada yang akan membenarkan jika saya mengungkapkan itu sebenarnya saya.
Pengoptimal
19
Mengapa penting siapa yang membuatnya? Bukankah seharusnya rep didasarkan pada konten posting?
marsh
19
@ Marsh Secara teori, ya. Pada kenyataannya, orang cacat. Ini akan menjadi percobaan yang menarik untuk dijalankan, memiliki pengguna yang tinggi membuat akun baru untuk memposting beberapa tantangan untuk mengukur perbedaan dalam penerimaan.
Geobits

Jawaban:

23

JavaScript (ES6), 343 336 289 267 265 260 byte

Hanya untuk bersenang-senang ... :) (Terima kasih kepada Xufox karena telah memotong 46 byte, dan mendorong saya untuk memotong 37 byte saya sendiri.)

n=>`887141${n%2?`
98/202/05/4|3/29 1 /2|5|
 92/92/30 / 0--2|5|--/492/3|--3|
29/29/40/2013912|1|59/4|12_|_`:`3185121_
2/92/9409205/405/94|5|
 /29/2930 9 0--2|5|--94/193|--3|
/892029013912|392/492|5|`}`.replace(/\d/g,x=>+x?x<2?'__':x<9?' '.repeat(x):'\\':'|  |')

Disebut sebagai a(4)atau mirip. Coba di sini:

Saya telah meringkas spasi putih menjadi string digit dari 2ke 8(misalnya 887= 23 spasi). Setiap digit kemudian diganti dengan jumlah spasi yang sesuai. 0mewakili | |, dan 1mewakili __. Secara keseluruhan, program ini lebih pendek 170 byte dari gabungan dua string (203 + 227 = 430), jadi saya senang. :)

Sunting: Entah bagaimana, panjangnya persis sama dengan satu-satunya entri lain pada saat ini .... o_o

Edit 2: Disimpan beberapa ruang dengan mengubah n%2<1?ke n%2?dan bertukar string. Juga mengambil keuntungan dari fakta bahwa awal dari dua string adalah sama untuk mengurangi 5 byte lainnya.

Sunting 3: |2| tampaknya menunjukkan banyak sekali, jadi setiap kejadian disederhanakan x, menghemat 7 byte. Saran Xufox memotong 40 byte lagi.

Sunting 4: Saran Xufox untuk mengganti \ndengan jeda baris yang sebenarnya terbayar, menghapus 6 byte dari total. Mengubah xke 0dan __ke 1(masukkan tawa jahat di sini), kemudian menggabungkan semua (masukkan jamak dari Regex di sini), seperti yang ia lakukan dalam entri, menyimpan tambahan 16 byte.

Sunting 5: Karena saya telah memilih untuk menggunakan standar ES6, saya menggunakan interpolasi string templat kustom untuk mengurangi 2 byte terakhir.

Produksi ETH
sumber
1
Angka itu pasti ada hubungannya! Selain menjadi kubus yang sempurna, yaitu :-) Tidak dapat memberi suara pada jawaban Anda karena saya tidak tahu tentang JavaScript ...
Luis Mendo
1
Bagaimana dengan .replace(/\d/g,d=>' '.repeat(d))?
Sebastian Simon
1
@ EHProduk Bagus! Sekarang, bisakah Anda mengalahkan jawaban saya? Hanya 9 byte yang tersisa ...;) Ngomong-ngomong, ketika saya menghitung byte Anda dikatakan 289, menggunakan alat penghitungan gEdit ...
Sebastian Simon
1
Mungkin menggunakan string template untuk dapat membuat jeda baris yang sebenarnya, bukan \nmenghemat satu byte per jeda baris?
Sebastian Simon
1
Sekarang saya punya 2 byte kurang dari Anda. = P
Sebastian Simon
12

Matlab, 343 341

a=' -/\_|';
if mod(input(''),2)
x='003C00E00E000L0005N5000I000005550I0000I0055N4UVYO26R4004400400U005300UUXO060O060003C00C30CO00IO00UUUS060S5B54000';else
x='0I2000L0000L000E05H50C0000000555000C00C00H554UVYO26R4004400400U000250WUU006O006O0I2002I00O0I0O0C0UUU006S05BT0004';end
disp(a(reshape(dec2base(base2dec(reshape(x,[],7),36),6),4,[])-47))

Nomor input disediakan dari stdin.

Contoh dijalankan:

>> a=' -/\_|';
if mod(input(''),2)
x='003C00E00E000L0005N5000I000005550I0000I0055N4UVYO26R4004400400U005300UUXO060O060003C00C30CO00IO00UUUS060S5B54000';else
x='0I2000L0000L000E05H50C0000000555000C00C00H554UVYO26R4004400400U000250WUU006O006O0I2002I00O0I0O0C0UUU006S05BT0004';end
disp(a(reshape(dec2base(base2dec(reshape(x,[],7),36),6),4,[])-47))
1
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     | 
Luis Mendo
sumber
1
Itu hanya lol gila. +1.
rayryeng
1
@rayryeng Ya :-) Sayang sekali bahwa Matlab hanya memungkinkan basis hingga 36. Nilai yang lebih besar akan menyelamatkan beberapa byte
Luis Mendo
1
@LuisMendo Persis seperti yang saya pikirkan saat membuat solusi JavaScript saya ...
Sebastian Simon
@ Xufox di JS fungsi btoa () dan atob () masing-masing adalah base64 encode dan decode.
bertepuk tangan
11

CJam, 158 149 145 138 byte

li2%"A+×rµ^ÅÆÿ»£ºoU#ü T^U^ÝZe<ÄÊKÞÒ£^ÛWWø5Úí§¹T^Úêer^^°^Ã}Ã^A0R2"281b7b"/
 -_\|"f=N/S3**_"_ ":T/TW%*4/zW%1m>N*1>"\/"_W%er"^W^]5OU"{i_32>T=t}/\4/zN*?

Di atas menggunakan notasi tanda kuret, karena kode mengandung karakter yang tidak patut dicetak.

Cobalah online di juru bahasa CJam .

Jika permalink tidak berfungsi di browser Anda, Anda dapat menyalin kode dari paste ini .

Contoh dijalankan

$ LANG=en_US
$ xxd -ps -r > minecraft.cjam <<< 6c69322522412bd772b585c6ffbba3ba6f5523fc2054159d5a653cc4ca4bded2a39b5757f835daeda7b9549aea65721eb0837dc30130523222323831623762222f0a202d5f5c7c22663d4e2f53332a2a5f225f20223a542f5457252a342f7a5725316d3e4e2a313e225c2f225f5725657222171d354f55227b695f33323e543d747d2f5c342f7a4e2a3f
$ cjam minecraft.cjam <<< 2; echo
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     | 
$ cjam minecraft.cjam <<< 1; echo
                       __    __                        
\        /  |  |  /|  |     /    |   /  \ __ /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Ide

Alih-alih menyandikan string MINECRAFT (diisi untuk mencapai panjang garis konstan) secara langsung, kami akan menyandikan versi "zip", di mana baris dan kolom telah ditransposisi.

Setelah zip dan menghapus umpan baris, string ini (sebut saja R ) harus dikodekan:

   /  /  /   \    \   /  /   \    \    \         |||         ||| \    \    \ |||         |||_ -__ -_          |  / \_  __  _         |||_ - _ -  |\    \           /  /  /_  \_   \    \         |||_ - _ -         _   _|||_   

Ada banyak spasi, jadi kami akan mengganti setiap kemunculan triplet ruang dengan linefeed.

Ini memberi kita tujuh karakter yang berbeda ( \n -/\_|), jadi kami menetapkan masing-masing angka dari 0 hingga 6 dan mempertimbangkan digit array yang dihasilkan dari nomor basis 7, yang kemudian kami encode sebagai string byte.

Decoding bekerja dengan membalik langkah-langkah dari atas.

String cermin dapat dibangun dari yang asli.

Jika kami membalik urutan keempat baris dan menukar solidus, kami mendapatkan yang berikut:

\        /  |  |  /|  |__   /__  |   /  \    /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \__/   |--   | 
  \/  \/    |  |/  |  |     \    |  |     \/    |     | 
                       __    __   __             __  ___

Entah bagaimana mirip, tapi kami jelas harus memutar baris untuk membawa baris bawah ke atas:

                       __    __   __             __  ___
\        /  |  |  /|  |__   /__  |   /  \    /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \__/   |--   | 
  \/  \/    |  |/  |  |     \    |  |     \/    |     | 

Itu akan terjadi jika bukan karena garis bawah sial itu.

Jika kita membaca string asli dari atas ke bawah dan mengabaikan umpan baris (sehingga mendapatkan R ) dan mengganti setiap garis bawah diikuti dengan spasi dengan spasi diikuti dengan garis bawah sebelum menggeser baris, ini hasilnya:

                         _     _                      _ 
\        /  |  |  /|  |_    /_   |   /  \ __ /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Jauh lebih baik! Semua yang tersisa untuk dilakukan adalah menghapus ruang pertama dari baris pertama (pergeseran semua garis bawah pada baris pertama kiri karakter), memindahkan garis bawah salah tempat di E dan C satu baris dan membuang garis bawah lebih T .

Kode

li2%           e# Read an integer from STDIN and push its parity.

"A+×rµ^ÅÆÿ»£ºoU#ü T^U^ÝZe<ÄÊKÞÒ£^ÛWWø5Úí§¹T^Úêer^^°^Ã}Ã^A0R2"

281b7b         e# Convert the byte string from base 281 to base 7.
"/\n -_\\|"f=  e# Replace each digit by its corresponding character.
N/S3**         e# Turn linefeeds into three spaces.
_              e# Copy the resulting string.
"_ ":T         e# Define T.
/TW%*          e# Replace occurrences of T with T reversed.
4/z            e# Split into chunks of length 4 and zip.
W%1m>          e# Reverse and rotate the rows.
N*             e# Join the rows, separating by linefeeds.
1>             e# Discard the first character.
"\/"_W%er      e# Swap the soliduses.
"^W^]5OU"      e# Push the string that corresponds to [23 29 53 79 85].
{              e# For each character:
  i            e#   Push its code point.
   _32>        e#   Push 1 iff the code point is larger than 32.
       T=      e#   Select the element at that index from T = "_ ".
         t     e#   Replace the element at the code point's index with that char.
}/             e#
\              e# Swap the partially generated MINECARFT string on top.
4/z            e# Split into chunks of length 4 and zip.
N*             e# Join the rows, separating by linefeeds.
?              e# Select the first string iff the input was odd.
Dennis
sumber
Bagaimana cara kerjanya?
anatolyg
@anatolyg Saya sudah mengedit jawaban saya.
Dennis
10

Pyth - 182 byte

Menggunakan pendekatan pengkodean dasar. Karena pengindeksan adalah modular dalam Pyth, saya bahkan tidak perlu melakukan apa pun untuk bahkan aneh, cukup taruh di urutan yang benar, dan gunakan @Q. Sebagai bonus, ini juga berfungsi dengan angka negatif.

@mjbcs@L"_| /\\-"jCd6 56,"EWbòH\x00B)þK٣ĭIOõìæ«FFãbÐÄBØ\«¼,vã<RN>­º:w÷ò¾<éifP9e|ÉWf!FÔèà""EWbòH\x00B)þOHÿ$@ËþçX'D[¾«Â?°´=&£üá ¹»ázH×Æz3äkÕg{`!|ðY!ðGV"Q

Saya hanya mencoba meng-enkode yang pertama, kemudian membalik dan mengganti garis miring, tetapi baris pertama dan terakhir terlalu sulit.

Saya bisa menyimpan 6 byte dengan memasukkan byte sebenarnya dalam kode, tapi itu terlalu banyak kesulitan.

Cobalah online di sini .

Terlihat online sangat buruk karena kotak output terlalu kecil dan membungkus. Saya merekomendasikan mengutak-atik konsol dev dan mengubah col-md-5ke col-md-7.

Maltysen
sumber
Dua string memiliki banyak karakter yang digandakan, Anda dapat menghapus 11 byte seperti itu .
PurkkaKoodari
8

JavaScript (ES6), 312, 285, 281, 272, 270, 263, 262, 260

Untuk pengeditan sebelumnya, lihat riwayat edit .

Sunting 5: Dalam konversi, saya mengganti nomor yang terkait dengan -(sekarang 0) dan spasi putih (sekarang 1). Di blok yang dihasilkan, angka 1, 2 dan 3 tidak digunakan lagi. Ini memungkinkan saya untuk menggunakan array dengan nomor yang hilang.

Sunting 6: Meningkatkan array literal. Saya mencoba ini sebelumnya, tetapi menggunakan 777dan 77sebagai string bukan angka dan hanya memperhatikan sekarang bahwa saya telah melewatkan ini.

Sunting 7: "Kode Golf" adalah fungsi, seperti yang ditentukan oleh pertanyaan dan tidak perlu untuk f=memenuhi spesifikasi ini. Jadi, menghapusnya, menghemat dua byte.


Runnable di Firefox 39:

// Testing:

f=

// Golfed code:

n=>[...`11111113ss17ss1pp11117pp3ppp
97dj3dj7822j78z213e17z3v8397gm78212
7f3kf3k1z27k7z20021200k17fppk1z001z
d7983987j2287jz2ss1lss2aabj3d7987j2aa3aza`.replace(/[123]/g,x=>[,777,'77z',77][x])].map(a=>isNaN(i=parseInt(a,36))?a:'- /\\_|'[n%2?i%6:~~(i/6)]).join``

// Testing:

;document.body.appendChild(document.createElement('pre')).innerHTML=f(0);
document.body.appendChild(document.createElement('pre')).innerHTML=f(1);
document.body.appendChild(document.createElement('pre')).innerHTML=f(2);
document.body.appendChild(document.createElement('pre')).innerHTML=f(35);

Ini didasarkan pada sistem angka 6 dasar dan setiap karakter ASCII singkatan dari angka:

"-": 0
" ": 1
"/": 2
"\": 3
"_": 4
"|": 5

Kemudian, saya telah menggabungkan representasi angka dari setiap string ASCII. Sebagai contoh: ketika string ASCII pertama berisi /pada satu posisi dan yang lain berisi \pada pada posisi yang sama , posisi itu menjadi 32, yang merupakan basis 6 ( 20dalam desimal). Jika Anda mengonversinya menjadi basis 36 (untuk mendapatkan satu nomor basis-36 untuk setiap dua nomor basis-6), Anda dapatkan k.

Semua ini dilakukan sebelumnya dan fungsi dasarnya membatalkan proses ini.

Sekarang kedua jawaban JavaScript masing-masing memiliki satu jawaban lainnya masing-masing, yang memiliki jumlah byte yang sama ...


PS: Sebagai catatan untuk diri sendiri dan referensi ke orang lain, ini adalah kode yang saya gunakan:

// 1. ASCII here
a=`|\\-/ _`;

// 2. ASCII here
b=`/|\\_ -`;

// Note: the ASCII strings’ backslashes have to be escaped!

[...a]
  .map((c,i)=>parseInt((c+b[i])
    .replace(/-/g,'0')
    .replace(/ /g,'1')
    .replace(/\//g,'2')
    .replace(/\\/g,'3')
    .replace(/_/g,'4')
    .replace(/\|/g,'5'),6))
  .map(c=>isNaN(c)
    ?`
`
    :c.toString(36))
  .join``
// Returns "wn3g7o", which is then put into the function as the block at the top.
Sebastian Simon
sumber
2
Astaga, mengapa ~NaN == -1?!
Sebastian Simon
Saya juga berpikir tentang membalikkan garis ASCII string demi baris, untuk menyingkirkan namun lebih spasi (juga menyelamatkan dua byte dalam penggantian: […][x]+77, 77tidak perlu menjadi string lagi), tapi tambahan membalikkan dalam kode golfed tidak membuatnya sepadan ...
Sebastian Simon
Saya tidak mengerti ini ketika saya pertama kali membacanya setahun yang lalu, tetapi sekarang saya melihat tekniknya. Menggabungkan setiap pasangan karakter menjadi satu adalah sangat pintar :-) Saya pikir Anda dapat menggantinya isNaNdengan 1+, dan ~~(i/6)dengan i/6|0.
ETHproduksi
Haha, saya sekarang satu byte di depan;)
ETHproduk
@ ETHproductions Baiklah, tunggu sebentar ... Saya hanya memperhatikan bahwa Anda tidak memilikinya f=di awal, tapi saya punya. Saya juga membaca bahwa itu diterima untuk menghapusnya, jadi saya akan melakukannya sendiri, dan sekarang saya memiliki 260 byte. ;)
Sebastian Simon
6

CJam, 136 byte

"^ASÓ8¥È÷^K¯¾/^HÕ2^ÄË1jÒÝ^D^Á0îl;)HR§û|^Ê^Þ^ÇÝÅ^ßNlz^TfÑ^Øj>À^à 4#bH\¿^Äî·íì^E^A~(¿ø³(ú´,^È(¡j>è?#'»vçPïju87)×"
265b8b[S9*'|3*+S2*]"/-_\| "+f=s4/56/ri=zN*

Di atas menggunakan notasi tanda kuret, karena kode mengandung karakter yang tidak patut dicetak.

Linefeed semata-mata untuk "keterbacaan". Cobalah online di juru bahasa CJam .

Jika permalink tidak berfungsi di browser Anda, Anda dapat menyalin kode dari paste ini .

Contoh dijalankan

$ LANG=en_US
$ xxd -ps -r > minecraft.cjam <<< 220153d338a5c8f70bafbe2f08d53284cb316ad2dd048130ee6c3b294852a7fb7c8a9e87ddc59f4e6c7a1466d1986a3ec08320342362485cbf84eeb7edec05017e28bff8b328fab42c8828a16a3ee83f2327bb76e750ef6a75383729d7223236356238625b53392a277c332a2b53322a5d222f2d5f5c7c20222b663d73342f35362f72693d7a4e2a
$ cjam minecraft.cjam <<< 2; echo
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     | 
$ cjam minecraft.cjam <<< 1; echo
                       __    __                        
\        /  |  |  /|  |     /    |   /  \ __ /  |     | 
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Ide

Pendekatan ini memiliki beberapa kesamaan dengan yang ada di jawaban saya yang lain , tetapi jauh lebih sederhana dan (agak mengecewakan) sedikit lebih pendek.

Kami mencari cara untuk menyandikan string berikut:

                       __    __   __             __  ___                       __    __                         
  /\  /\    |  |\  |  |     /    |  |     /\    |     | \        /  |  |  /|  |     /    |   /  \ __ /  |     | 
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |  \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | 
/        \  |  |  \|  |__   \__  |   \  /    \  |     |   \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Setelah melapisi setiap baris (untuk mencapai panjang garis konstan), zipping (mentransposisi baris dan kolom) dan menghapus umpan baris, string ini harus dikodekan:

   /  /  /   \    \   /  /   \    \    \         |||         ||| \    \    \ |||         |||_ -__ -_          |  / \_  __  _         |||_ - _ -  |\    \           /  /  /_  \_   \    \         |||_ - _ -         _   _|||_    \    \    \   /  /   \    \   /  /  /           |||         |||   /  /  /   |||         |||_ -__ -_          |  / \_  __  _         |||  -_  -_  /| /           \    \  _ \ _ /  /  /           |||  -_  -_           _ |||   _

Kami akan mengganti setiap substring " |||"dengan 0 , setiap substring " "dengan 1 dan karakter "/-_\| "dengan 2 hingga 7 , membentuk array dari basis 8 digit, yang dapat dikodekan sebagai string byte.

Decoding bekerja dengan membalik langkah-langkah dari atas.

Kode

"^ASÓ8¥È÷^K¯¾/^HÕ2^ÄË1jÒÝ^D^Á0îl;)HR§û|^Ê^Þ^ÇÝÅ^ßNlz^TfÑ^Øj>À^à 4#bH\¿^Äî·íì^E^A~(¿ø³(ú´,^È(¡j>è?#'»vçPïju87)×"

265b8b        e# Convert from base 265 to base 8.
[S9*'|3*+S2*] e# Push ["         |||" "  "].
"/-_\| "+     e# Concatenate to push ["         |||" "  " '/' '-' '_' '\' '|' ' '].
f=            e# Select the elements that correspond to the base 8 digits.
s4/           e# Flatten and chop into chunks of length 4 (columns).
56/           e# Chop into two subarrays of 56 columns.
ri            e# Read an integer from STDIN.
=             e# Select the corresponding subarray.
              e# Arrays wrap around, so [A B]0= eq. [A B]2= and [A B]1= eq. [A B]3=.
zN*           e# Zip and join the rows, separating by linefeeds.
Dennis
sumber
"Diduga mudah dibaca?" : P
FryAmTheEggman
4

Raket, 443 434 386 Bytes

(require file/gunzip net/base64)(define(f n)(define o(open-output-bytes))(gunzip-through-ports(open-input-bytes(base64-decode #"H4sIAK8Lt1UAA22Q3Q3AIAiE352CBcwtRHLpHg7f8lubahRUDuVD5DjItrH9REgOEWgskfVMDeca1GWcSmN2WFBtlUTdzdmSOT0BpEpGnjxUAf2RmvPq1OyKGF6N5V1nvgYcWjeod/Hj8JotBRtH0qM48OeoWrBxJH23KL/dOMh4IDXe8MUbT1AqtKkBAAA="))o)(list-ref(string-split(get-output-string o)"a")(modulo n 2)))

Hanya untuk iseng.

(require file/gunzip net/base64)
(define (f n)
  (define o (open-output-bytes))
  (gunzip-through-ports
   (open-input-bytes
    (base64-decode #"H4sIAK8Lt1UAA22Q3Q3AIAiE352CBcwtRHLpHg7f8lubahRUDuVD5DjItrH9REgOEWgskfVMDeca1GWcSmN2WFBtlUTdzdmSOT0BpEpGnjxUAf2RmvPq1OyKGF6N5V1nvgYcWjeod/Hj8JotBRtH0qM48OeoWrBxJH23KL/dOMh4IDXe8MUbT1AqtKkBAAA="))
   o)
  (list-ref (string-split (get-output-string o) "a") (modulo n 2)))

NB, Anda mungkin perlu menjalankan #lang racketjalur di DrRacket.

Winny
sumber
1
Off persis 100 byte.
user253751
1
Ayolah! Saya tahu Anda juga dapat membuatnya ke 343
Pengoptimal
Saya tidak melihat itu terjadi kecuali saya meninggalkan pendekatan ini.
Winny
Anda tidak perlu menggunakan basis 64 karakter. Anda hanya dapat menggunakan karakter unicode mentah yang dikirim gunzip
MilkyWay90
4

05AB1E , 179 177 176 byte

"
 -/\_|"•ÿ%Ò´Åçδ’Üå·Äm…½µƵδø5)ǝ®∊∊Ý®þCĀ₆áÝoþ²ši¤Æ%ßû¤%¦Ï≠θĀ5¾₃ʒŸQ>Šn°η8±8d¸6':…é’b…÷‡ö©«&‡huѦ%λÁZÊJÌ₅ú∞°»ó₄ι«ÓW´×ƒ×ùqiò2D1āwθóÆ˲’
Tι#и∊²ý‚KʒFæΩZºÿÏ";ηiʒæøвøïž‚è°ć½∊•7вèJ2äIè

Cobalah online.

Penjelasan:

•ÿ%Ò´Åçδ’Üå·Äm…½µƵδø5)ǝ®∊∊Ý®þCĀ₆áÝoþ²ši¤Æ%ßû¤%¦Ï≠θĀ5¾₃ʒŸQ>Šn°η8±8d¸6':…é’b…÷‡ö©«&‡huѦ%λÁZÊJÌ₅ú∞°»ó₄ι«ÓW´×ƒ×ùqiò2D1āwθóÆ˲’
Tι#и∊²ý‚KʒFæΩZºÿÏ";ηiʒæøвøïž‚è°ć½∊•

adalah angka yang dikompresi :

669530978249988431396781816197276307266403407188962925862194299697873953319419752813246251351417090709766331736351616127424760949905163941809417778114834562736028512279028673309866195447599979612590918985644583407413903825059942009898007791080822453262749380245316127735585410697701790387188175543639634091138422651942833048832372950797322005040161476426127678479662921265139425

Cobalah online.

mengubahnya menjadi Basis-7 sebagai daftar, jadi kami mendapatkan daftar digit:

[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,5,5,1,1,1,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,5,5,5,0,1,1,3,4,1,1,3,4,1,1,1,1,6,1,1,6,4,1,1,6,1,1,6,1,1,1,1,1,3,1,1,1,1,6,1,1,6,1,1,1,1,1,3,4,1,1,1,1,6,1,1,1,1,1,6,0,1,3,1,1,4,3,1,1,4,1,1,1,6,1,1,6,1,4,1,6,1,1,6,2,2,1,1,6,1,1,1,1,1,6,2,2,4,1,1,1,1,3,5,5,4,1,1,1,6,2,2,1,1,1,6,0,3,1,1,1,1,1,1,1,1,4,1,1,6,1,1,6,1,1,4,6,1,1,6,5,5,1,1,1,4,5,5,1,1,6,1,1,1,4,1,1,3,1,1,1,1,4,1,1,6,1,1,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,4,1,1,1,1,1,1,1,1,3,1,1,6,1,1,6,1,1,3,6,1,1,6,1,1,1,1,1,3,1,1,1,1,6,1,1,1,3,1,1,4,1,5,5,1,3,1,1,6,1,1,1,1,1,6,0,1,4,1,1,3,4,1,1,3,1,1,1,6,1,1,6,1,3,1,6,1,1,6,2,2,1,1,6,1,1,1,1,1,6,2,2,3,1,1,1,1,4,1,1,3,1,1,1,6,2,2,1,1,1,6,0,1,1,4,3,1,1,4,3,1,1,1,1,6,1,1,6,3,1,1,6,1,1,6,5,5,1,1,1,4,5,5,1,1,6,5,5,6,1,1,1,1,1,4,3,1,1,1,1,6,5,5,1,1,5,6,5]

Cobalah online.

èmengindeks setiap digit dalam string "\n-/\_|", dan Jkemudian menggabungkan seluruh daftar bersama, yang memberi kita yang berikut:

                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |                       __    __                        
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Cobalah online.

membelah string menjadi dua bagian.
mengambil input, dan mengindeksnya (dengan bungkus otomatis) untuk mendapatkan salah satu dari dua bagian, yang kemudian menjadi keluaran secara implisit.

Terima kasih banyak kepada ASCII kompresor @MagicOctopusUrn yang digunakan untuk menghasilkan angka terkompresi dan transliteral Base-7. Cobalah online. (Setelah itu transliterate telah di-golf dengan membalikkan string dan nomor pada stack, menggunakan вalih-alih Bmembuatnya menjadi daftar angka, dan mengindeks ke dalam string dengan è.

Kevin Cruijssen
sumber
3

C, 251 byte

k(w){char*f="_-/\\|]^^^\0<&*&)&3&(&&WX&J&*&\0t_&/&3&\0`);35)I5M\0a).@7).8-;./.-\0j()(0(1+4()(*+4+4()(04+",*o=f+4,m[229]="",i=7,c=10,p;for(memset(m,32,228);i;c=*f++^(w%2&i--/2==2)*115)for(p=0;*++o;m[(w%2?4-i/6-p/57:p/57)*57+p%57]=c)p+=*o-37;printf(m);}

Ini adalah fungsi kyang menerima parameter dan mencetak pesan stdout.

Versi yang lebih mudah dibaca:

k(w)
{
    char*f="\n_-/\\|", // characters to fill in
        *o= " "// for each character, the list of positions to put it in, difference-encoded
        "]%%^^^\0"                  // for '\n' (newline)
        "<&*&)&3&(&&WX&J&*&\0"      // for '_' (underscore)
        "t_&/&3&\0"                 // for '-' (minus)
        "`);35)I5M\0"               // for '/' or '\' (slashes)
        "a).@7).8-;./.-\0"          // for '\' or '/' (slashes)
        "j()(0(1+4()(*+4+4()(04+",  // for '|' (vertical bar)
        m[229]="",  // message to generate
        i, // index of character, running 7...1
        c, // current character to fill in
        p, // where to place the character
        y; // y-coordinate of the character

    memset(m,32,228); // fill the message with spaces
    for(i=7;--i;)
    {
        c=*f++;
        c^=~w%2|i/2^1?0:115; // flip the direction of slashes, if needed
        for(p=0;*++o;)
        {
            p+=*o-37; // jump to next position
            y=p/57; // extract the y-coordinate
            y=w%2?4-i/5-y:y; // flip the y-coordinate, if needed
            m[y*57+p%57]=c; // place the character
        }
    }
    printf(m); // print the message
}

Pertama, ia menyiapkan pesan kosong (diisi dengan spasi). Untuk setiap karakter (misalnya |atau -), ia memiliki daftar posisi untuk menempatkan karakter itu.

Untuk setiap posisi, jika versi terbalik harus dicetak, posisinya terbalik. Artinya, koordinat vertikalnya ydiganti oleh 4-yatau 3-y(tergantung pada apakah karakternya garis bawah). Juga, arah garis miring dibalik - ini dilakukan oleh XORdengan 115.

Struktur kontrol ini juga digunakan untuk menempatkan karakter baris baru - tampaknya lebih efisien untuk menambahkan 4 koordinat lebih ke daftar daripada menulis loop eksplisit.


Ada beberapa gangguan kecil dengan sistem ini. Pertama-tama, huruf terakhir T terlihat sedikit berbeda dalam versi terbalik:

___ 
 |    |
 |    |
 |   _|_

Untuk menampilkannya dengan benar, kode harus menempatkan |karakter setelah _karakter.

Selain itu, untuk memastikan string kontrol hanya berisi karakter ASCII, saya menyandikannya:

  • Ini merekam perbedaan antara posisi dan bukan posisi itu sendiri - ini mengurangi rentang
  • Angka-angka dalam string telah 37ditambahkan kepada mereka, untuk menggesernya ke dalam ASCII Range 32 ... 127. Saya bisa menambahkan angka yang lebih kecil, tetapi 37menghindari karakter seperti "dan \, yang harus melarikan diri dalam string literal.
  • Dua angka lebih besar dari 127 - misalnya, -karakter pertama muncul di posisi 137. Untuk menjelaskan ini, saya menambahkan -karakter buatan di posisi lain (79), yang kemudian ditimpa - karakter tersebut |juga muncul di posisi 79.

Hal lucu lainnya adalah saya tidak bisa menggunakan putsuntuk mengeluarkan string - ini akan menghasilkan baris tambahan tambahan. Jadi saya printfmalah menggunakannya .

Juga, angka 57muncul 4 kali dalam kode golf - ekspresi yang tampaknya bertele-tele (w%2?4-i/6-p/57:p/57)*57+p%57memungkinkan untuk menghilangkan variabel y, membuat kode lebih pendek.

anatolyg
sumber
C tampaknya seperti "selalu menulis konstruksi ini dengan kode ini" jenis bahasa ... Ini ... adalah ... sangat ... um ... +1;)
bertepuk
3

Perl, 292 259 246 byte

$_="Svv __SS__S nnSv nnSnnn
i kjSkj hw|j h|wS /SwrhSi pq hwS |
 mSlmSlS |S| l |S|--wS |--lSSmnnlS |--S |
k ihSih jw|h j|S|__S g__S|oosjSk ih jS|ooSo|o";s/v/SSSSS/g;s/w/S|S/g;s/S/  /g;<>&1?y"g-s"\\/\\  /\\ ___ |":y"g-s"\\  \\/\\/_ /\\| ";print $_

Ini mengambil keuntungan dari fakta bahwa kedua string sebagian besar mirip (misalnya seluruh IE dan C) dan membuat string dari karakter yang ditampilkan berbeda tergantung pada versi yang sedang ditampilkan. misal m berarti "garis miring ke depan untuk string arah kanan, garis miring ke belakang di atas". Itu substitusi transliterasi untuk menampilkan karakter yang benar. Spasi juga run-length dikodekan menggunakan pergantian string.

multi-line:

$_="Svv __SS__S nnSv nnSnnn
i kjSkj hS|S|j h|S|SS /SS|SrhSi pq hS|SS |
 mSlmSlS |S| l |S|--S|SS |--lSSmnnlS |--S |
k ihSih jS|S|h j|S|__S g__S|oosjSk ih jS|ooSo|o";
s/v/SSSSS/g;
s/w/S|S/g;
s/S/  /g;
<>&1?
    y"g-s"\\/\\  /\\ ___ |"
:
    y"g-s"\\  \\/\\/_ /\\| ";
print $_

Ide:

Karena hanya ada 22 kolom unik dalam output, seharusnya dimungkinkan untuk menyimpannya sebagai 22 * ​​4 = 88 karakter dengan kisaran 0-17 (semua karakter "dua arti" yang mungkin), bersama dengan pencarian 56 karakter tabel dengan satu entri di kisaran 0-21 per kolom. Secara teori ini bisa dikodekan dengan <100 byte tetapi sulit untuk membuat ini menjadi kemenangan karena kode yang lebih rumit untuk memecahkan kode itu.

samgak
sumber
2
Anda dapat mencukur beberapa byte - y / foo / bar / adalah sinonim untuk tr / foo / bar /
ryanm
2

CJAM, 206

Dua gambar ascii dikodekan base-216, satu byte = 3 karakter.

" _\/|-":A;S7*"!D!D"+:B;qi2%{B"h  °°¤8 2 °2,J° °"",4# °³8=Ô° Ó\"# Ó °""\"z °Â89D-D·° z ·!¶"}{B"'    '!J"+"#h °¼88 2 °°  ° °""2/\" °²8=Ô° Óh#L Ó °""  h°°9D-D°,2 h° °"}?]{{i32-__36/A=@6/6%A=@6%A=}/N}/

Uji di sini

Arnaud
sumber
2

Powershell, 275 253 248 byte

param($n)$d='8 \83484/7/484302 92984308 92918--118--128||6//0\16116129558| \/ |8 /02083\6/10018/6\302 955776_71 9_7_'
'8\,__,777,/6 /,\6/6\,_8 -- _,88,888,  ,||||||'-split','|%{$d=$d-replace+$i++,$_}
0..3|%{$l=$_;-join$d[(0..55|%{$_*8+$l*2+$n%2})]}

Skrip uji:

$f = {

param($n)$d='8 \83484/7/484302 92984308 92918--118--128||6//0\16116129558| \/ |8 /02083\6/10018/6\302 955776_71 9_7_'
'8\,__,777,/6 /,\6/6\,_8 -- _,88,888,  ,||||||'-split','|%{$d=$d-replace+$i++,$_}
0..3|%{$l=$_;-join$d[(0..55|%{$_*8+$l*2+$n%2})]}

}

&$f 2
&$f 1

Keluaran:

                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |
                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Ide utama

Metode kompresi adalah metode diperpanjang CJam oleh Dennis ♦:

  1. Buat string sebelum kompresi:
    • karakter kolom pertama dari kedua seni ASCII, kemudian
    • karakter kolom kedua, lalu
    • karakter kolom ketiga dan seterusnya ...
  2. Kompres dengan menggunakan 10 penggantian berurutan (10 karena Powershell dapat menggunakan angka 0..9 sebagai string, ini membuat algoritma dekompresi lebih pendek. Penggantian ditemukan oleh brute force.)

Script untuk kompresi:

$src =
"                       __    __   __             __  ___", # line1, art1
"                       __    __                         ", # line1, art2
"  /\  /\    |  |\  |  |     /    |  |     /\    |     | ", # line2, art1
"\        /  |  |  /|  |     /    |   /  \ __ /  |     | ", # line2, art2
" /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   | ", # line3, art1
" \  /\  /   |  | / |  |--  |     |--/    \  /   |--   | ", # line3, art2
"/        \  |  |  \|  |__   \__  |   \  /    \  |     | ", # line4, art1
"  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_"  # line4, art2

$z=-join(0..$src[0].Length|%{
    $p=$_
    $src|%{$_[$p]}
})
$z

String kompresi sebelum adalah:

   \  /     /\    /    \  \    /    \/      /\    /    \  \    /    \/     /  \                   ||||||                  ||||||  \    /    \/     /  \   ||||||          ||||||__  --____  --__                    ||    //  \\__    ____    __                  ||||||_   -- __   -- _  | \/ |   /  \                    \  /     /\  /__  \  \__  /    \/     /  \                   ||||||_   -- __   -- _                _      __ ||||||_      _
mazzy
sumber
Penjelasan dalam jawaban Anda mungkin lebih diusahakan daripada gabungan semua jawaban saya! +1
MilkyWay90
1

SAS, 442 byte

%macro a(b);&b=tranwrd(&b,put(i,1.),repeat('A0'x,i));%mend;%macro b(z);length a b c d$99;if mod(&z,2)then do;a='992__3__';b='\7/1|1|1/|1|4/3|2/1\0__0/1|4|';c='0\1/\1/2|1|0/0|1|--1|4|--/3\1/2|--2|';d='1\/1\/3|1|/1|1|__2\__1|__|4\/3|__1_|_';end;else do;a='992__3__2__65__1___';b='1/\1/\3|1|\1|1|4/3|1|4/\3|4|';c='0/1\/1\2|1|0\0|1|--1|4|--\3/__\2|--2|';d='/7\1|1|1\|1|__2\__1|2\1/3\1|4|';end;do i=0to 9;%a(a)%a(b)%a(c)%a(d)end;put a/b/c/d;%mend;`

Non-golf:

%macro a(b);
  &b=tranwrd(&b,put(i,1.),repeat('A0'x,i));
%mend;

%macro b(z);
length a b c d$99;
if mod(&z,2)then do;
  a='992__3__';
  b='\7/1|1|1/|1|4/3|2/1\0__0/1|4|';
  c='0\1/\1/2|1|0/0|1|--1|4|--/3\1/2|--2|';
  d='1\/1\/3|1|/1|1|__2\__1|__|4\/3|__1_|_';
end;
else do;
  a='992__3__2__65__1___';
  b='1/\1/\3|1|\1|1|4/3|1|4/\3|4|';
  c='0/1\/1\2|1|0\0|1|--1|4|--\3/__\2|--2|';
  d='/7\1|1|1\|1|__2\__1|2\1/3\1|4|';
end;
do i=0to 9;
  %a(a)
  %a(b)
  %a(c)
  %a(d)
end;
put a/b/c/d;
%mend;

Tes:

data a;
  %b(1)
  %b(2)
  %b(0)
  %b(35)
run;
                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |
                       __    __   __             __  ___
  /\  /\    |  |\  |  |     /    |  |     /\    |     |
 /  \/  \   |  | \ |  |--  |     |--\    /__\   |--   |
/        \  |  |  \|  |__   \__  |   \  /    \  |     |
                       __    __
\        /  |  |  /|  |     /    |   /  \ __ /  |     |
 \  /\  /   |  | / |  |--  |     |--/    \  /   |--   |
  \/  \/    |  |/  |  |__   \__  |__|     \/    |__  _|_

Mungkin bisa menyimpan sedikit kode dengan meletakkannya di blok input, tetapi itu menambahkan batasan bahwa makro hanya bisa sekali per datastep yang saya rasa melanggar semangat menulisnya sebagai makro. (Dan saya menduga menambahkan prompt untuk mendapatkan input di datastep menambahkan lebih banyak karakter).

Joe
sumber
1

bash, 247 byte

(($1%2)) && c=tail || c=head
base64 -d <<<H4sIAF/3uFUCA31Q2w3AIAj8ZwoWMLcQyS3i8JWXtWlTI6BwPA7Vz0Nunc9HhKSowlJU57qWJjBoZ/4a41o8aC4NsTBjbMgYkQDStCIrDz3AbmRuYjpzPTOGG5P9/gmKtQddFy8eMbOn4Khb7NE88ObRs+DgUez3iqrtwYPMAoWJhU/KBeJFPOCqAQAA | zcat | $c -n4

String digabungkan dan di-gzip.

g.jaket
sumber
1

PHP, 225 byte

Jelek, solusi kekerasan.

echo str_split(gzinflate(base64_decode('dZDdDcAgCITfnYIFzC1Ecos4fOW3Nm2NgsohfIp8DrJtbB8RkkMEGktk7anhXIO6jFNpzA4Lqq2SqLs5WzKnJ4BUycjOQzXQhdScd6dmV8Rwa7rqP9/QukE9ixeGt2wpODASHoWBN0a1ggMj4fuHsuyBQcYDqfH/XrwA')),224)[$argv[1]%2];

Saya mengompres kemudian base64 menyandikan string bersambung untuk ditampilkan. Kode ini diterjemahkan, didekompresi, dan dipecah menjadi 224 karakter. String pertama adalah 224 karakter tanpa baris baru, yang kedua adalah 201 karakter (juga tidak ada baris baru setelah itu). Paritas argumen baris perintah ( $argv[1]%2) digunakan sebagai indeks dalam array yang dihasilkan oleh str_split().

aksioma
sumber
1

Haskell, 138 byte

m x=do
 h<-readFile"a"
 return$take 225.drop(225*mod x 2)<$>find((==h).hash.pack)(replicateM 425"/\\|_- ")

Ini sedikit peretasan. Saya bruteforcing hash SHA256 dari concatination dari dua teks minecraft, dan kemudian membaginya terpisah dan memilih teks yang sesuai berdasarkan parameter x. Ini adalah keberanian yang sangat tidak praktis dan tidak dapat dihitung secara real time, dan bahkan mungkin ada tabrakan di sepanjang jalan untuk semua yang saya tahu.

Karena Haskell tidak dapat memiliki representasi ASCII dari hash dalam sebuah string, saya membacanya dari file yang disebut "a", dan karenanya telah menambahkan 32 byte ke skor saya.

  • readFile dan paket dari Data.ByteString.Char8
  • hash dari Crypto.Hash.SHA256

Penjelasan:

replicateM 425"/\\|_- "

Membuat daftar setiap kombinasi huruf "/ \ | _-" pada 425 huruf (panjang kedua teks minecraft digabungkan)

find((==h).hash.pack)

Pilih yang pertama yang cocok dengan hash

take 225.drop(225*mod x 2)

Panjang teks pertama adalah 225 huruf, yang lain persis 200.

BlackCap
sumber
106 byte, bukan 138
kucing
Lihat penjelasan saya, saya menambahkan 32 byte karena saya membaca file panjang 32 byte
BlackCap
1

Javascript (ES6), 403 296 byte

(Dipindahkan dari jawaban saya sebelumnya ) Mencoba metode baru:

n=>`55555559Å9Å${n%2?`55555558556776}}5Y75Y¥Æ75786¡YAA[7ćA5Fï5¡YFéA8Y§5}\x83AEÅKÅ\x99}5§5\x999\x95`:`Q5555Q9Ý>6¡77¡}}5Y7756¡75768Y¡AA£7ćA5Fû5u¡FéAY55¡}}­EÅKÅ}G;5¡}5}`}`.replace(r=/./g,x=>(163+x.charCodeAt()).toString(6).slice(1)).replace(r,x=>' /|\\_-'[x]).match(/.{56}/g).join`
`

Perhatikan bahwa ada beberapa karakter yang tidak patut dicetak; ini telah diganti dengan mis \x83.

Pengkodean itu sendiri sekitar 40 byte lebih pendek dari yang lain, tetapi proses decoding lebih rumit. Saya menggunakan sistem base-216 yang digunakan orang lain untuk menyandikan teks. Untuk referensi, inilah kode yang saya gunakan:

// normal MINECRAFT
a='00000000000000000000000440000440004400000000000004400444'+
  '00130013000020023002002000001000020020000013000020000020'+
  '01003100300020020302002550020000025530000144300025500020'+
  '100000000300200200320024400034400200030010000300200000200';

// upside-down MINECRAFT
// un-comment this one to run it
/*
a='00000000000000000000000440000440000000000000000000000000'+
  '30000000010020020012002000001000020001003044010020000020'+
  '03001300100020020102002550020000025510000300100025500020'+
  '003100310000200210020024400034400244200000310000244004240';
*/

console.log(a.replace(/.../g,x=>String.fromCharCode(parseInt(b[i],6)+53)));

Ini pada dasarnya mengambil teks ASCII (pra-dikonversi ke basis 6) dan tiga kali lipat dengan sendirinya, mengubahnya menjadi basis 216. 53 kemudian ditambahkan untuk menghapus sebagian besar karakter yang tidak dapat dicetak.

Saran diterima!


Berikut kode asli 403-byte:

a=n=>{y=[' ','/','|','\\','_','-'],x=`55555559Å9Å${n%2?`55555555¡55Y}}eA5;5};GÝY}5}¡k;77;} 757Ĉ5G;7ć75§H5AB77Ý8ÝEÑ5H5EÅÕ`:`Q5555Q9Ý6¡k5}\u008FAA5;5}}5k5}5}Y§G77G} 757Ċ5?×7ć7;55GAAI7Ý8ÝA865GA5A`}`;b=x.split('').map(x=>x.charCodeAt(0)-53);for(c=[],i=b.length;i--;){c[i]=b[i].toString(6);while(c[i].length<3)c[i]='0'+c[i]}d=c.join('').replace(/\d/g,x=>y[x]).split('');d[56]=d[112]=d[168]=`
`;return d.join('')};

Menggunakan forloop, whileloop, empat variabel yang hanya digunakan sekali, dan satu ton algoritma panjang untuk hal-hal sederhana. Wah, sudahkah saya membaik ...

Produksi ETH
sumber
Anda mungkin dapat menghapus y=[' ','/','|','\\','_','-'],dan bukannya y[x]menulis ' /|\\_-'[x]. =)
Sebastian Simon
@ Xufox Saya telah melakukan itu dan banyak lagi, total golf 107 byte!
ETHproduksi
0

Python, 312 byte

def y(b):
 x=int(['4vwhclv10tuk4z18gf73aimn6zvwkrhxekphfn1lxocj9ezchd1cd1cv97p3f6k12s8hcjznnm5iq3om4vgxvugp3makgu4n3f6qxvdrtl4c0lva12hwt','8uzwdylhtrf6oqnwnck8pfxu25m5844tuo2700v3zoeuvossx1b47rnwyrmqodau3feu3spi9jydhyxvntv48vojx9iq9af78wufzn1'][b%2],36);x<<=69;s="";t=" /\\-|_\n"
 while x:s+=t[x&7];x>>=3
 print s

Fungsi mencetak keluaran yang diberikan int

Biru
sumber
Ya, saya hanya melihat cara yang rapi untuk menekannya lebih jauh dari itu
Biru
Bagaimana cara kerjanya?
Oliver Ni
Apakah base-36? tetapi jika adalah whats 16598125653940296495007405984048067937906981182427207589486265398555496561913976121109917896233762115477615438181875147062369253802653987802486539858466848179256705775331854915993645
Oliver Ni
Pada dasarnya, ini menyimpan dua hasil dalam daftar dan kemudian mendapatkan yang benar menggunakan fungsi modulus. Ini kemudian menerjemahkannya dari base 36 seperti yang Anda pikirkan. Karena itu kekuatan besar 2, saya menghapus beberapa karakter dengan melakukan >> 69. Saya kemudian menggunakan fungsi terjemahan dasar untuk mengubahnya menjadi output yang benar.
Biru
0

C, 321 byte

Mengodekan pengulangan dan indeks karakter ke dalam string.

main(n,v,p,c)char**v,*p,*c;{c=" _/\\|-\n";for(p=atoi(v[1])%2?"8@8iXivs8rhththrthtPrXt`rhspiprhtPtvpshrshr`thtprpthtmhtPtmrXshr`tm`tvhsrhsrXthtrhthti`sihtitPsrXtihqtq":"8@8iXi`i8PihavhrshrsXthtshthtPrXthtPrsXtPtvprhsrhs`thtpspthtmhtPtmsXris`tm`tvr8shththsthti`siht`shrXshtPtw";*p;p++)for(n=*p/8^15;n--;)putchar(c[*p&7]);}
Cole Cameron
sumber
0

Python 3, 486 533 612

r=str.replace;m,p=r(r(r('''YYYYY   __YA AYY   A___
  /\  /\YX\  X Y/YX Y/\Y| Y|
 /  \/  \   X \ X--  | Y|--\Y/__\   |--   |
/YY\  X  \XA \A|   \  /Y\  | Y| ''','X','|  |'),'Y','    '),'A','__  '),print;
if int(input())%2==0:p(m)
else:
 q,i,u=m.split('\n')[::-1],0,[[23,24,29,30],[42,43],[],[23,24,29,30,34,35,53,49,50,55]];q.insert(0,q.pop())
 while i<len(q):
  x=list(r(q[i],'_',' '))+[' ']
  for a in u[i]:x[a]='_'
  p(r(r(r(r(''.join(x),'___',''),"\\",'t'),'/',"\\"),'t','/'))
  i+=1
Oliver Ni
sumber
0

PHP , 263 byte

<?=strtr('3333 20220'.['2 0332 020_
2/\2/\211\113/2113/\212 1
 /2\/2\ 11 \ |1412 14\22/0\ 14 1
/32 \112\|102 \012 \2/22\12 1',
'
\32 /112/|13/212 /2\ 0 /12 1
 \2/\2/ 11 / |1412 14/22\2/ 14 1
2\/2\/211/1102 \010|3\/2102_|_'][$argn&1],[__,"  |","  ","     ","--"]);

Cobalah online!

Jörg Hülsermann
sumber
Anda dapat menghemat delapan byte lagi dengan pengganti sendiri untuk 3 ruang.
Titus
0

Ruby, 290 byte

$><<(gets.to_i%2<1?"xCeCdCnCcC_
c/Bc/Be|ABAAf/e|Af/Be|f|
b/cB/cBd|AbBb|A--Af|--Be/CBd|--d|
/iBAAcB|ACdBCAdBc/eBAf|":"xCeC
Bi/AAc/|Af/e|d/cBbCb/Af|
bBc/Bc/d|Ab/b|A--Af|--/eBc/d|--d|
cB/cB/e|A/AACdBCAC|fB/e|Cc_|_").gsub(?C,'__').tr(?B,?\\).gsub(?A,'c|').gsub(/[a-z]/){|e|' '*(e.ord-97)}

Mungkin entri yang lemah dan tidak bisa diperbaiki. Pada dasarnya kompresi (buatan tangan) yang sangat sederhana di mana huruf kecil berarti bahwa banyak spasi (sebenarnya ord (ch) - spasi 'A') dan huruf besar hanyalah beberapa istilah umum yang menghemat beberapa byte.

Peter Lenkefi
sumber
0

SOGL V0.12 , 72 71 byte

═j;ΗD^⌡⁾yō⁶⅜┐≡¼τ~≡š┘,┼◄‚4øDqψ∫‛²′Ζdκ↓±ģ░○∙ΘΝ◄ōΞ06║⁶╗i-η}┌^JY³‘''n.2%?№↕

Coba Di Sini!

Mirroring vertikal SOGL bekerja dengan sempurna untuk ini.

dzaima
sumber
0

Kanvas , 70 byte

C<aT[≤^5t‽◂6Zr!v↓[u0F∙OF-╫#t┬a*7ZfK1!&)y@½(+M⇵PV-¼G:Uju╋╷(╫:N‟‾)n⁸2%?↕

Coba di sini!

dzaima
sumber