Minecraft Aynalı


51

Bu Calvin . Sadece 20 rep almaya çalışıyorum ki bu kullanıcı PPCG Minecraft Server sohbet odasında sohbet edebilecek .

Olumlu bir tamsayı alır bir program veya işlev yazın.

Tam sayı eşitse (2, 4, 6, ...), bu ASCII resim dizesini yazdırın ya da döndürün:

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

Tamsayı tekse (1, 3, 5, ...), bu ASCII art dizesini yazdırın veya döndürün:

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

Girişin her zaman pozitif bir tamsayı olduğunu varsayabilirsiniz.

Her iki çıkış durumunda, isteğe bağlı olarak her satırda "T" nin sağ kenarına kadar herhangi bir sayıda takip alanı ve / veya tek bir takip eden yeni satır olabilir. Her harf arasında nasıl iki boşluk olduğuna dikkat edin.

Bayt cinsinden en kısa kod kazanır.


54
Temsilci arayan yeni bir kullanıcı olsam Calvin’e de isim veririm;)
Geobits

13
@Geobits Benim.
Calvin'in Hobileri

52
@Geobits Hayır, benim. Aslında ben olduğunu açıklarsam kimsenin affetmeyeceğini biliyordum.
Doktor

19
Neden onu yarattığı önemli? Temsilcinin gönderinin içeriğine dayanması gerekmiyor mu?
marsh

19
@ marsh Teoride, evet. Gerçekte, insanlar kusurlu. Alış farkını ölçmek için birkaç zorluk çıkaran yeni bir hesap oluşturmak için üst düzey bir kullanıcının yeni bir hesap oluşturması ilginç bir deney olurdu.
Geobits,

Yanıtlar:


23

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

Sadece eğlenmek için ... :) (46 byte kesip attığım ve beni 37 tane daha kesmem için teşvik eden Xufox'a teşekkürler.)

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):'\\':'|  |')

a(4)Veya benzeri denir . Burada dene:

İ basamak dizgelerde boşluk kondanse ettik 2için 8(örneğin 887= 23 boşluklar). Her hane daha sonra karşılık gelen boşluk sayısı ile değiştirilir. 0temsil eder | |ve 1temsil eder __. Sonuçta, bu program birleştirilen iki dizgiden 170 bayt daha kısadır (203 + 227 = 430), bu yüzden mutluyum. :)

Düzenleme: Her nasılsa, tam olarak bu noktadaki diğer girişle aynı uzunlukta .... o_o

Düzenleme 2: değiştirerek biraz boşluk Kaydedilen n%2<1?için n%2?ve dizeleri takas. Ayrıca, iki dizenin başlangıcının bir başka 5 baytı azaltmak için aynı olması gerçeğinden faydalandı.

Düzenleme 3: |2| Berbat bir sürü ortaya çıktı, bu yüzden x7 byte tasarruf sağlayarak her bir olayı basitleştirdi . Xufox'un önerileri 40 bayt daha kesildi.

Düzenleme 4: Xufox'un \n, toplam satırdaki 6 bayt kaldırarak gerçek satır sonları ile değiştirilmesi önerisi . Değişen xiçin 0ve __için 1onun girişte yaptığı gibi, o zaman (burada Regex insert çoğul) tüm birleştirerek (burada kötülük kahkaha insert), extra 16 bayt kaydedildi.

Düzenleme 5: ES6 standartlarını kullanmayı seçtiğimden, 2 son bayt'ı tıraş etmek için özel şablon string interpolasyonu kullandım.


1
Bu numaranın bir şeyi olmalı! Mükemmel bir küp olmanın yanı sıra, bu :-) JavaScript hakkında bir fikrim olmadığı için cevabınıza oy veremiyorum ...
Luis Mendo

1
Nasıl hakkında .replace(/\d/g,d=>' '.repeat(d))?
Sebastian Simon

1
@ETHproductions Güzel! Şimdi cevabımı yenebilir misin? Gitmek için sadece 9 byte…;) Bu arada, byte'lerinizi saydığımda gEdit sayma aracını kullanarak 289 yazıyor…
Sebastian Simon

1
Belki de yerine gerçek satır sonları yapabilmek için şablon dizeleri kullanmak \n, her satır sonu için bir bayt tasarruf etmek?
Sebastian Simon

1
Şimdi senden 2 bayt daha az var. = 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))

Giriş numarası stdin'den verilmiştir.

Örnek çalışma:

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

1
Bu sadece çılgın lol. +1.
rayryeng

1
@rayryeng Yeah :-) Matlab'ın yalnızca 36 taneye kadar temeli sağlamasına üzücü. Daha büyük bir değer epeyce bayt kazandıracaktı
Luis Mendo

1
@LuisMendo JavaScript çözümümü yaparken tam olarak düşündüklerim…
Sebastian Simon

JS'de @Xufox, btoa () ve atob () işlevleri, sırasıyla base64 kodlama ve kod çözme işlevini yerine getirir.
alkış

11

CJam, 158 149 145 138 bayt

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*?

Yukarıdakiler, kod yazdırılamayan karakterler içerdiğinden şapka gösterimi kullanır.

CJam tercümanında çevrimiçi olarak deneyin .

Permalink tarayıcınızda çalışmazsa, kodu bu yapıştırmadan kopyalayabilirsiniz .

Örnek çalışma

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

Fikir

MINECRAFT dizisini doğrudan kodlamak yerine (sabit bir çizgi uzunluğu elde etmek için dolgulu), satırların ve sütunların aktarıldığı "sıkıştırılmış" bir sürümünü kodlayacağız.

Satır beslemelerini sıkıştırdıktan ve çıkardıktan sonra, bu dizenin (hadi R diyelim ) kodlanması gerekir:

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

Çok sayıda uzay koşusu var, bu yüzden bir uzay üçlüsünün her oluşumunu satır besleme ile değiştireceğiz.

Bu yedi farklı karakterlere (bize bırakıyor \n -/\_|), bu yüzden bunların her bir numara atamak 0 ile 6 ve biz daha sonra bir bayt dizesi olarak kodlamak bir taban 7 sayı elde edilen dizisi basamak, düşünün.

Kod çözme, adımları yukarıdan tersine çevirerek çalışır.

Yansıtılmış dize orijinalinden oluşturulabilir.

Dört sıranın sırasını tersine çevirip katı maddeleri değiştirirsek, aşağıdakileri elde ederiz:

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

Her nasılsa benzer, ancak alt satırı en üste getirmek için satırları açıkça döndürmemiz gerekecek:

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

Bu sinir bozucu alt çizgi için olmasaydı bu olurdu.

Orijinal dizgiyi yukarıdan aşağıya okursak ve satır beslemelerini yok sayarsak (bu nedenle R elde edilir ) ve her alt çizgiyi, ardından boşlukları takip eden bir boşlukla, ardından satırları değiştirmeden önce bir alt çizgiyle değiştirirsek, sonuç şu:

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

Çok daha iyi! Tek yapılması gereken ilk satırın ilk boşluğunu silmek (ilk satırdaki tüm alt çizgileri bir karakter sola kaydırmak), E ve C'deki yanlış yerleştirilmiş alt çizgileri bir satır yukarı kaydırmak ve alt çizgiyi T üzerinden atmaktır .

kod

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.

O nasıl çalışır?
anatolyg

@anatolyg Cevabımı düzenledim.
Dennis,

10

Pyth - 182 bayt

Temel kodlama yaklaşımını kullanır. İndeksleme Pyth'ta modüler olduğundan, tek olanlar için hiçbir şey yapmam gerekmiyor, doğru sıraya koyup kullanıyorum @Q. Bir bonus olarak bu, negatif sayılarla da çalışır.

@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

Sadece birinciyi kodlamayı denedim, sonra eğik çizgileri çevirip değiştirdim, ama ilk ve son satır çok zordu.

6 bayt'ı gerçek boş baytları koda koyarak kaydedebilirim, ancak bu çok fazla sorun.

Burada çevrimiçi deneyin .

Çevrimiçi olarak çok kötü görünüyor çünkü çıktı kutusu çok küçük ve tamamladı. Ben dev-konsol ile işe yaramaz ve değiştirilmesini tavsiye col-md-5a col-md-7.


İki dizeleri çoğaltılamaz karakterlerin bir grup var, sen 11 byte kaldırabilirsiniz şöyle .
PurkkaKoodari

8

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

Önceki düzenlemeler için düzenleme geçmişine bakın .

Düzenleme 5: Dönüşümde, -(şimdi 0) ve boşlukla (şimdi 1) ilişkili sayıyı değiştirdim . Elde edilen blokta, 1, 2 ve 3 sayıları artık kullanılmadı. Bu, eksik sayıları olan bir dizi kullanmamı sağladı.

Düzen 6: Dizi değişmezi geliştirildi. Daha önce bu çalıştı, ancak kullanılan 777ve 77dizeleri yerine sayılar ve ancak şimdi fark olarak bunu kaçırdığı.

Düzenleme 7: “Golf kodu”, soru tarafından belirtildiği gibi bir işlevdir ve f=bu spesifikasyonu yerine getirmeye gerek yoktur . Böylece, kaldırılması, iki bayt tasarrufu.


Firefox 39’da çalıştırılabilir:

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

Temel 6 sayı sistemine dayanır ve her ASCII karakteri bir sayı anlamına gelir:

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

Sonra, her ASCII dizesinin sayı gösterimini birleştirdim. Örneğin: İlk ASCII dizesi içerdiğinde /bir pozisyonda ve diğeri bir içeren \en aynı konumda , bu pozisyonun olur 32, (baz 6 olan 20ondalık). Bunu üsse 36 dönüştürürseniz ( her iki temel-6 sayı için bir temel-36 sayı almak için ), elde edersiniz .k

Bütün bunlar önceden yapıldı ve işlev temel olarak bu işlemi geri alıyor.

Şimdi iki JavaScript cevabının her ikisinde de birer cevabı var, aynı bayt sayısı aynı…


Not: Kendime not ve başkalarına referans olarak, kullandığım kod şudur:

// 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.

2
Tanrım, neden ~NaN == -1?
Sebastian Simon

: Ben de çizgi ile ASCII dizeleri hattını geri düşündü, henüz daha sonraki boşlukları kurtulmak için (o da değiştirme iki bayt kaydedildi […][x]+77, 77fakat golfed kodda ters ilave artık bir dize olması gerekmez) buna
Sebastian Simon

Bunu bir yıl önce ilk okuduğumda anlamadım, ama şimdi tekniği görüyorum. Ben :-) birine karakterlerin her çifti birleştirerek çok zeki düşünüyorum sen yerini alabilir isNaNile 1+ve ~~(i/6)ile i/6|0.
ETHProductions

Haha, şimdi bir bayt öndeyim;)
ETHproductions

@ETHProductions Eh, bir saniye bekle… Ben sadece f=başlangıçta olmadığını fark ettim , ama var. Ayrıca onu kaldırmanın kabul edildiğini de okudum, bu yüzden kendim yapacağım ve şimdi 260 baytım var. ;)
Sebastian Simon

6

CJam, 136 bayt

"^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*

Yukarıdakiler, kod yazdırılamayan karakterler içerdiğinden şapka gösterimi kullanır.

Kazık sadece "okunabilirlik" içindir. CJam tercümanında çevrimiçi olarak deneyin .

Permalink tarayıcınızda çalışmazsa, kodu bu yapıştırmadan kopyalayabilirsiniz .

Örnek çalışma

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

Fikir

Bu yaklaşımın diğer cevabımdaki ile benzerlikleri var , ancak çok daha basit ve (biraz hayal kırıklığı ile) biraz daha kısa.

Aşağıdaki dizgiyi kodlamanın bir yolunu arıyoruz:

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

Her bir sırayı doldurduktan (sabit bir çizgi uzunluğu elde etmek için), sıkıştırmaktan (satırları ve sütunları transpoze etmek) ve satır beslemelerini çıkardıktan sonra bu dizinin kodlanması gerekir:

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

Her alt değiştirme olacak " |||"bir ile 0 , her bir alt dize " "bir ile 1 ve karakterler "/-_\| "ile 2 bulundunuz 7 bir bayt dizge olarak kodlanabilir tabanı 8 basamak, bir dizi oluşturan.

Kod çözme, adımları yukarıdan tersine çevirerek çalışır.

kod

"^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.


4

Raket, 443 434 386 Bayt

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

Sadece tekmeler için.

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

Not #lang racket: DrRacket'te çalıştırmak için çizgiye ihtiyacınız olabilir .


1
Tam olarak 100 bayt kapalı.
user253751 4

1
Haydi! Ayrıca 343
Optimizer’e

Bu yaklaşımı bırakmadığım sürece bunun olduğunu görmüyorum.
Winny,

Temel 64 karakter kullanmanıza gerek yoktur. Gunzip'in gönderdiği yalnızca ham unicode karakterleri kullanabilirsiniz
MilkyWay90

4

05AB1E , 179 177 176 bayt

"
 -/\_|"•ÿ%Ò´Åçδ’Üå·Ä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è

Çevrimiçi deneyin.

Açıklama:

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

olduğunu sıkıştırılmış sayı :

669530978249988431396781816197276307266403407188962925862194299697873953319419752813246251351417090709766331736351616127424760949905163941809417778114834562736028512279028673309866195447599979612590918985644583407413903825059942009898007791080822453262749380245316127735585410697701790387188175543639634091138422651942833048832372950797322005040161476426127678479662921265139425

Çevrimiçi deneyin.

Listeyi Base-7'ye dönüştürür, böylece rakamların listesini alırız:

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

Çevrimiçi deneyin.

èdizedeki her basamağı dizine ekler "\n-/\_|"ve Jdaha sonra bize aşağıdakileri veren tüm listeyi birleştirir:

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

Çevrimiçi deneyin.

ipi iki parçaya böler.
girdiyi alın ve indeksleyin (otomatik sarma ile) iki bölümden birini elde etmek için dizine alın, bu daha sonra örtük olarak çıktısını alın.

@MagicOctopusUrn 'un sıkıştırılmış sayıyı ve Base-7 transliteralını oluşturmak için kullanılan ASCII kompresörüne büyük teşekkürler . Çevrimiçi deneyin. (Bundan sonra transliterat, dize ve sayıyı yığın üzerinde tersine çevirerek golf oynamaktadır, вbunun yerine Bbir basamak listesi yapmak ve bununla birlikte dizine indekslemek è.


3

C, 251 bayt

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

Bu kbir parametre alan ve mesajı basan bir fonksiyondur stdout.

Daha okunaklı bir sürüm:

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
}

İlk önce boş bir mesaj hazırlar (boşluklarla dolu). Her karakter için (örneğin |veya -), o karakteri yerleştirmek için bir konumlar listesi bulunur.

Her pozisyon için, baş aşağı versiyonun basılması gerekiyorsa, pozisyon çevrilir. Yani, dikey koordinatı veya yile değiştirilir (karakterin alt çizgi olup olmamasına bağlı olarak). Ayrıca, eğik çizgilerin yönleri ters çevrilir - bu bir ile gerçekleştirilir .4-y3-yXOR115

Bu kontrol yapısı ayrıca yeni satır karakterlerini yerleştirmek için de kullanılır - listeye açık bir döngü yazmaktan daha fazla 4 koordinat eklemek daha etkili görünmektedir.


Bu sistemde birkaç küçük aksaklık var. Her şeyden önce, son harf T çevrilmiş sürümde biraz farklı görünüyor:

___ 
 |    |
 |    |
 |   _|_

Doğru şekilde basmak için, kodun |karakterleri karakterlerden sonra yerleştirmesi gerekir _.

Ayrıca, kontrol dizesinin sadece ASCII karakterleri içerdiğinden emin olmak için kodladım:

  • Konumların kendileri yerine konumlar arasındaki farkları kaydeder - bu, menzili azaltır
  • Dizideki sayılar 37ASCII Range 32 ... 127'ye kaydırmak için onlara eklendi. Daha küçük bir sayı ekleyebilirim, ancak string değişmezlerinin içinde kaçması gereken ve 37gibi karakterlerden kaçınırım."\
  • Sayıların ikisi 127'den büyüktü - örneğin, ilk -karakter 137 konumunda görünüyor. Bunu hesaba katmak için -başka bir konuma (79) yapay bir karakter ekledim , daha sonra üzerine yazılır - karakter |79 konumunda da belirir.

Diğer komik bir şey de putsdizgiyi çıktılamak için kullanamadığımdı - bu ekstra bir izleyen satır oluşturur. Bu yüzden printfonun yerine kullandım .

Ayrıca, sayı 57golf kodunda 4 kez görünür - görünüşte uzun soluklu ifade (w%2?4-i/6-p/57:p/57)*57+p%57değişkenin ortadan kaldırılmasını mümkün kılar y, böylece kodu kısaltır.


C Bu ... um ... çok ... 1 olduğunu ... ... böyle bir "her zaman bu bu kodla inşa yazma" dilin tür gibi görünüyor;)
alkış

3

Perl, 292 259 246 bayt

$_="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 $_

İki dizenin çoğunlukla benzer olması (örneğin tüm IE ve C) gerçeğinden yararlanır ve dizeyi, hangi sürümün görüntülendiğine bağlı olarak farklı gösterilen karakterlerden çıkarır. örneğin, m "yukarı doğru dize için bir eğik çizgi, baş aşağıda bir eğik çizgi" anlamına gelir. Doğru karakteri görüntülemek için harf çevirisi yapar. Boşluklar ayrıca dize ikameleri kullanılarak kodlanmış çalışma uzunluklarıdır.

çok hatlı:

$_="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 $_

Fikir:

Çıktıda yalnızca 22 benzersiz sütun bulunduğundan, onu, 56 karakter aramanın yanı sıra 0-17 (tüm olası "çift anlam" karakterleri) aralığında 22 * ​​4 = 88 karakter olarak saklamak mümkün olmalıdır sütun başına 0-21 aralığında bir girişi olan tablo. Teoride bu <100 bayt ile kodlanabilir, ancak kod çözme işleminin daha karmaşık olması nedeniyle bunu net bir kazanç haline getirmek zordur.


2
Birkaç bayt'ı tıraş edebilirsiniz - y / foo / bar / tr / foo / bar / ile eşanlamlıdır
ryanm

2

CJAM, 206

İki ascii resmi temel 216 kodlu, bir bayt = 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}/

Burada test et


2

Powershell, 275 253 248 bayt

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

Test komut dosyası:

$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

Çıktı:

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

Ana fikirler

Sıkıştırma metodu Dennis Dennis tarafından CJam metodunu genişletmiştir :

  1. Sıkıştırmadan önce bir dize oluşturun:
    • Her iki ASCII sanatının ilk sütununda karakterler
    • ikinci sütunun karakterleri
    • Üçüncü sütunun karakterleri vb.
  2. 10 ardışık değiştirme kullanarak sıkıştırın (10, Powershell dizeleri olarak 0..9 sayıları kullanabildiği için, bu, dekompresyon algoritmasını daha kısa yapar.

Sıkıştırma için komut dosyası:

$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

Sıkıştırma dizesinden önce:

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

Cevabınızdaki açıklama muhtemelen bütün cevaplarımdan daha fazla çaba harcadı! +1
MilkyWay90

1

SAS, 442 bayt

%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;`

Sigara golfed:

%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;

Testler:

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

Bunları girdi bloklarına koyarak bir miktar kod kaydedebilirsiniz, ancak bu, makroyu bir makro olarak yazma ruhunu ihlal ettiğini düşündüğüm her veri adımında makronun yalnızca bir kez olabileceği kısıtlamasını da ekler. (Ve veri adımına girdi almak için bir bilgi istemi eklediğinden şüpheleniyorum, daha fazla karakter ekler).


1

bash, 247 bayt

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

Dizeler birleştirildi ve gziped edildi.


1

PHP, 225 bayt

Çirkin, kaba kuvvet çözümü.

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

Sıkıştırdım, sonra base64 görüntülenecek birleştirilmiş dizeleri kodladı. Kod kodu çözer, açar ve 224 karakterlik parçalara böler. İlk dize sonunda yeni bir satır olmadan 224 karakter, ikincisi 201 karakterdir (ondan sonra da yeni satır yoktur). Komut satırı argümanının ( $argv[1]%2) paritesi, tarafından oluşturulan dizide indeks olarak kullanılır str_split().


1

Haskell, 138 bayt

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

Bu biraz kesmek. İki minecraft metninin bir araya getirilmesiyle ilgili SHA256 karma değerini alıyorum ve sonra bunları ayırıp x parametresini temel alarak uygun metni seçiyorum. Bu nezaketsizdir ve gerçek zamanlı olarak hesaplanamaz ve bildiğim kadarıyla yol boyunca çarpışmalar olabilir.

Haskell, bir dizede bu hash'ın ASCII temsiline sahip olamadığından, onu "a" adlı bir dosyadan okuyorum ve bunun için puanımı 32 bayt ekledi.

  • readFile ve paket Data.ByteString.Char8'dandır
  • karma Crypto.Hash.SHA256 'den

Açıklama:

replicateM 425"/\\|_- "

425 harften oluşan "/ \ | _-" harflerinin her bir birleşimini oluşturur (her iki minecraft metninin birleştirilmiş uzunluğu)

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

Karma ile eşleşen ilkini seçin

take 225.drop(225*mod x 2)

İlk metin 225 harf uzunluğunda, diğeri tam 200.


106 bayt, 138 değil
kedi

Açıklamalarıma bak, 32 bayt ekledim, çünkü 32 bayt uzunluğunda bir dosya okuyorum
BlackCap

1

Javascript (ES6), 403 296 bayt

( Önceki cevabımdan taşındı ) Yeni bir yöntem denemek:

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

Birkaç yazdırılamayan karakter olduğuna dikkat edin; bunlar örneğin \x83.

Kodlamanın kendisi diğerinden yaklaşık 40 byte daha kısadır, ancak kod çözme işlemi daha ayrıntılıdır. Başkalarının metni kodlamak için kullandıkları base-216 sistemini kullandım. Başvuru için, işte kullandığım kod:

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

Bu, temel olarak ASCII metnini alır (önceden tabana 6'ya dönüştürülür) ve onu üçe katlar, onu taban 216'ya değiştirir. 53 sonra yazdırılamaz karakterlerin çoğunu kaldırmak için 53 eklenir.

Önerilerinizi bekliyoruz!


Orijinal 403 baytlık kodu:

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

Bir fordöngü, bir whiledöngü, sadece bir kez kullanılan dört değişken ve basit şeyler için bir ton uzun algoritma kullanarak. Evlat, düzelmiştim mi ...


Muhtemelen tamamen y=[' ','/','|','\\','_','-'],ve yerine y[x]yazdırabilirsiniz ' /|\\_-'[x]. =)
Sebastian Simon

@Xufox Bunu yaptım ve çok daha fazlası, toplamda 107 bayt golf!
ETHProductions,

0

Python, 312 bayt

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

İşlev int verilen çıktısını yazdırır


Evet, daha sonra onu daha da sıkıştırarak temiz bir şekilde bakıyorum
Mavi 9

Bu nasıl çalışıyor?
Oliver Ni

Baz-36 mı? ancak sorun olduğu takdirde neyin 16598125653940296495007405984048067937906981182427207589486265398555496561913976121109917896233762115477615438181875147062369253802653987802486539858466848179256705775331854915993645
Oliver Ni

Temel olarak, iki sonucu bir listede saklar ve ardından modulus fonksiyonunu kullanarak doğru olanı alır. Daha sonra, düşündüğünüz gibi tabandan 36 kodunu çözer. 2 büyük bir güç olduğu için, bazı karakterleri >> 69 yaparak çıkardım. Sonra doğru çıktıya dönüştürmek için temel bir çeviri işlevi kullanıyorum.
Mavi,

0

C, 321 bayt

Tekrarı ve karakter dizisini bir dizgiye kodladı.

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

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

0

PHP , 263 bayt

<?=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],[__,"  |","  ","     ","--"]);

Çevrimiçi deneyin!


Sekiz bayttan 3 alan için kendi yerine geçerek tasarruf edebilirsiniz.
Titus

0

Ruby, 290 bayt

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

Muhtemelen zayıf ve geliştirilebilir bir giriş. Temelde, çok küçük harflerin (aslında ord (ch) - 'A' boşlukları) ve büyük harflerin birkaç bayttan tasarruf edilen bazı genel terimler olduğu anlamına gelen çok basit (el yapımı) bir sıkıştırma.


0

SOGL V0.12 , 72 71 bayt

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

Burada dene!

SOGL'ların dikey yansıtmaları bunun için mükemmel şekilde çalıştı.


0

Tuval , 70 bayt

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

Burada dene!

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.