कोड गोल्फ: पत्र-सीमेंट


15

चुनौती:

एक अक्षर X (A से Z तक ऊपरी या निचला मामला) और एक अंक N (0-9) के इनपुट के लिए N * X से संबंधित संबंधित अक्षर X प्रिंट करें।

पत्र इस सूची से होना चाहिए:

 AAA      BBBB       CCCC     DDDD      EEEEE     FFFFF      GGG      H   H
A   A     B   B     C         D   D     E         F         G         H   H
AAAAA     BBBB      C         D   D     EEEE      FFFF      G  GG     HHHHH
A   A     B   B     C         D   D     E         F         G   G     H   H
A   A     BBBB       CCCC     DDDD      EEEEE     F          GGG      H   H


IIIII         J     K   K     L         M   M     N   N      OOO 
  I           J     K  K      L         MM MM     NN  N     O   O
  I           J     KKK       L         M M M     N N N     O   O
  I       J   J     K  K      L         M   M     N  NN     O   O
IIIII      JJJ      K   K     LLLLL     M   M     N   N      OOO 


PPPP       QQQ      RRRR       SSSS     TTTTT     U   U     V   V     W   W
P   P     Q   Q     R   R     S           T       U   U     V   V     W   W
PPPP      Q   Q     RRRR       SSS        T       U   U     V   V     W   W
P         Q  QQ     R  R          S       T       U   U      V V      W W W
P          QQQQ     R   R     SSSS        T        UUU        V        W W 


X   X     Y   Y     ZZZZZ
 X X       Y Y         Z 
  X         Y         Z  
 X X        Y        Z   
X   X       Y       ZZZZZ

उदाहरण:

इनपुट: एक १

उत्पादन:

 AAA
A   A
AAAAA
A   A
A   A

इनपुट: ए ०

उत्पादन: A


इनपुट: ए २

उत्पादन:

      AAA  AAA  AAA
     A   AA   AA   A
     AAAAAAAAAAAAAAA
     A   AA   AA   A
     A   AA   AA   A
 AAA                 AAA
A   A               A   A
AAAAA               AAAAA
A   A               A   A
A   A               A   A
 AAA  AAA  AAA  AAA  AAA
A   AA   AA   AA   AA   A
AAAAAAAAAAAAAAAAAAAAAAAAA
A   AA   AA   AA   AA   A
A   AA   AA   AA   AA   A
 AAA                 AAA
A   A               A   A
AAAAA               AAAAA
A   A               A   A
A   A               A   A
 AAA                 AAA
A   A               A   A
AAAAA               AAAAA
A   A               A   A
A   A               A   A

इनपुट: ए -1

आउटपुट: क्या कभी: यह कोई फर्क नहीं पड़ता


अतिरिक्त नियम:

  • इनपुट पैरामीटर्स को आप जो चाहते हैं, उसके द्वारा अलग किया जा सकता है।
  • प्रत्येक अक्षर को इसे खींचने के लिए एससी-चरित्र के रूप में खुद की पूंजी का उपयोग करना चाहिए।
  • ट्रेलिंग स्पेस, नई लाइनों आदि की अनुमति है
  • एक कार्यक्रम के बजाय, आप एक फ़ंक्शन लिख सकते हैं जो अंक स्ट्रिंग को तर्क के रूप में लेता है। आउटपुट सामान्य रूप से मुद्रित किया जाना चाहिए।
  • Stdout / Stderr कोई फर्क नहीं पड़ता, बस एक चुनें। अगर दूसरे पर छपा हुआ सामान भी मायने नहीं रखता।
  • संभावित आउटपुट स्वरूपों को STDOUT में मुद्रित किया जा सकता है, स्ट्रिंग्स की एक सूची के रूप में लौटाया जाता है, एक चरित्र मैट्रिक्स के रूप में लौटाया जाता है, आदि जब तक परिणाम केवल भाषाओं के डिफ़ॉल्ट प्रिंट विधि का उपयोग करके मुद्रित किया जा सकता है। *

* - जैसे फंक्शन f (a, 1) स्ट्रिंग लौटाता है और कोई बस प्रिंट (f (a, 1)) को प्रिंट () कॉल को उत्तर का हिस्सा बना सकता है। (यह केविन क्रूज़सेन और अर्नुल्ड द्वारा इंगित किया गया था)।

जीतना:

यह कोड-गोल्फ है, सबसे कम बाइट-काउंट जीतता है। मज़े करो!


संपादित करें : इस सवाल लगता है बहुत समान करने के लिए यह हालांकि मैं कहूंगा कि यह नहीं है, करना चाहिए क्योंकि यह न केवल एच के लिए लेकिन वर्णमाला से प्रत्येक अक्षर के लिए काम करते .. लगता अगर आप या न करने का निर्णय यह डुप्लिकेट है।



3
@ElPedro धन्यवाद! मुझे सैंडबॉक्स के बारे में अभी तक पता नहीं था, बहुत-बहुत धन्यवाद, मैं इस पर करीब से नज़र डालूंगा!
निकोलस ब्रेउर

2
अच्छी पहली चुनौती! हालाँकि, आपका प्रश्न वर्तमान में सुझाव देता है कि हम केवल परिणाम प्रिंट कर सकते हैं । डिफ़ॉल्ट नियम यह है कि कार्यों को इसे वापस करने की अनुमति है। सामान्यतया, I / O प्रारूप बहुत लचीले होते हैं। आप मेटा में इस पोस्ट पर एक नज़र डालना चाहते हैं जो बताते हैं कि क्यों।
अरनौलड

2
@Arnauld जैसा कि यह ASCII कला के बारे में है मैं कहूंगा कि परिणाम को प्रिंट करना कार्य के लिए कुछ हद तक महत्वपूर्ण है, लेकिन मुझे लगता है कि यदि आपका कोड परिणाम देता है और लौटी हुई स्ट्रिंग को केवल भाषाओं के डिफ़ॉल्ट प्रिंट विधि (जैसे आपके फ़ंक्शन f) का उपयोग करके मुद्रित किया जा सकता है (ए, 1) स्ट्रिंग लौटाते हैं और मैं बस प्रिंट (एफ, ए, 1) कह सकता हूं कि प्रिंट () कॉल का उत्तर कोड का हिस्सा नहीं है। यदि यह कुछ हद तक समझ में आता है और आप सहमत हैं तो मैं इसे जोड़ सकता हूं। चुनौती का वर्णन।
निकोलस ब्रेउर

2
@ केविनक्रूजसेन मैंने सवाल को थोड़ा अपडेट किया, कृपया मुझे बताएं कि क्या इसका तरीका मेरे द्वारा लिखे गए तरीके से है :)
निकोलस ब्रयूअर

जवाबों:


6

जावास्क्रिप्ट (ईएस 8), 281 बाइट्स

के रूप में इनपुट लेता है (letter)(N)। एक स्ट्रिंग लौटाता है।

c=>n=>(g=y=>y--?''.padEnd(w).replace(/./g,(_,x)=>(h=d=>~~(d/=5)?(P=parseInt)('hhvhefhfhfu111ufhhhfv1f1v11f1vehp1ehhvhhv444vehgggh979hv1111hhlrhhpljhehhhe11fhfuphheh9fhffge1u4444vehhhh4ahhhalhhhha4ah444ahv248v'[y/d%5+5*P(c,36)-50|0],36)>>x/d%5&1?h(d):' ':c)(w))+`
`+g(y):'')(w=5**n)

इसे ऑनलाइन आज़माएं!

कैसे?

फ़ॉन्ट एन्कोडिंग

5×5031

संग्रहीत पैटर्न को क्षैतिज और लंबवत दोनों रूप से प्रतिबिंबित किया जाता है।

'F' के लिए उदाहरण:

#####     ....#     00001      1     '1'
#....     ....#     00001      1     '1'
####. --> .#### --> 01111 --> 15 --> 'f' --> '11f1v'
#....     ....#     00001      1     '1'
#....     #####     11111     31     'v'

26×5=130

(एक्स,y)nवें

parseInt('hhvhefhfh...'[y + 5 * n], 36) >> x & 1

मुख्य एल्गोरिथ्म

nw=5n

0एक्स<w0y<w(एक्स,y) , जो यहाँ स्थित पत्र पिक्सेल का परीक्षण करता है:

(एक्स5आधुनिक5,y5आधुनिक5)

[0...n-1]

जैसे ही सभी पुनरावृत्तियों के सफल होने पर एक रिक्त पिक्सेल को किसी गहराई पर या किसी वर्ण के वर्ण के अनुरूप वर्ण का पता चलता है, फ़ंक्शन वापस आ जाता है।


यह वास्तव में अच्छा काम करता है, बधाई! क्या आप कोड को थोड़ा समझाने की कोशिश कर सकते हैं?
निकोलस ब्रेउर

पैटर्न को क्षैतिज और लंबवत रूप से प्रतिबिम्बित करने के लिए क्यों संग्रहीत किया जाता है? यह अधिक बाइट्स ले जाएगा यह भंडारण के लिए बिल्कुल भी दर्पण नहीं है? और स्पष्टीकरण के लिए tyvm *। *
निकोलस

1
yw-10

1
(हालांकि मुझे लगता है कि हम बिना किसी लागत के ऊर्ध्वाधर दर्पण को गिरा सकते हैं।)
अरनौल्ड

6

आर , 348 बाइट्स

function(K,N){if(N)for(i in 1:N)T=T%x%matrix(c(15269425,32045630,16269839,32032318,33061407,33061392,15224366,18415153,32641183,1082926,18444881,17318431,18732593,18667121,15255086,32045584,15255151,32045649,16267326,32641156,18400814,18400580,18400938,18157905,18157700,32575775)[utf8ToInt(K)-64]%/%2^(24:0)%%2,5,5)
write(c(" ",K)[T+1],1,5^N,,"")}

इसे ऑनलाइन आज़माएं!

ऑयरोस के समान एक एन्कोडिंग का उपयोग करता है ; हालाँकि, यह बिट्स को उल्टा नहीं करता है, इसके बजाय उन्हें सीधे उपयोग करने का विकल्प चुना जाता है।

यह तब 5x5 मैट्रिक्स का बिट बनाता है और आवश्यक पैटर्न उत्पन्न करने के लिए क्रोनकर पावर मैट्रिक्स का निर्माण करता है, जिससे नतीजों को लिखा जाता है।


यह क्रोनकर का एक बड़ा उपयोग है!
digEmAll


@digEmAll इस चुनौती का दिल संपीड़न विधि (कोड-गोल्फ दृष्टिकोण से वैसे भी) है। आप इसे उत्तर के रूप में क्यों नहीं पोस्ट करते हैं ताकि आप इसे भी समझा सकें?
ग्यूसेप

ठीक है, ठीक है धन्यवाद!
डाइजेक्सिल

5

साफ , 436 372 बाइट्स

नए IO प्रारूप के साथ महत्वपूर्ण रूप से छोटा।

import StdEnv,StdLib
t=transpose
f=flatten
$0c=[[c]]
$n c=f[t(f[t($(n-1)if(isOdd({#18415150,16301615,31491134,16303663,32554047,1096767,15262766,18415153,32641183,15254032,18128177,32539681,18405233,18667121,15255086,1097263,32294446,18136623,16267326,4329631,15255089,4539953,11191857,18157905,4329809,32575775}.[toInt(max'A'c)-65]>>p))c' ')\\p<-[i..i+4]])\\i<-[0,5..20]]

इसे ऑनलाइन आज़माएं!

~ 700 बाइट को बचाने के लिए पूर्णांक शाब्दिक के बिट्स में अक्षर पैटर्न को संपीड़ित करता है। उदाहरण के लिए A:

  1. समतल [[' AAA '],['A A'],['AAAAA'],['A A'],['A A']]
  2. रिवर्स [' AAA A AAAAAAA AA A']
  3. मुड़ें ['A AA AAAAAAA A AAA ']बाइनरी में ( 'A' = 1, ' ' = 0)
  4. मुड़ें 0b1000110001111111000101110दशमलव में
  5. प्राप्त 18415150

4

आर , 259 बाइट्स

function(K,N,`!`=utf8ToInt){if(N)for(i in 1:N)T=T%x%(sapply(!"			




",intToBits)[1:5,5*(-64+!K)-4:0]>0)
write(c(" ",K)[T+1],1,5^N,,"")}

इसे ऑनलाइन आज़माएं!

डिस्क्लेमर:
यह समाधान @ Giuseppe के उत्तर को ले कर और मैट्रिक्स कंप्रेशन को दूसरे दृष्टिकोण के साथ बदलकर बहुत हद तक @ Arnauld के उत्तर में उपयोग किए जाने वाले के समान है , इसलिए सबसे पहले उनके ऊपर जाएं :)

विचार निम्नलिखित है:

इस 5 x 26*5मैट्रिक्स को देखते हुए 0/1:

(1 replaced by '#', 0 replaced by '.' and '|' added for readability)

.####|#####|.###.|#####|#####|#####|.###.|#####|#...#|...#.|#####|#####|#####|
#.#..|#.#.#|#...#|#...#|#.#.#|#.#..|#...#|..#..|#...#|....#|..#..|....#|.#...|
#.#..|#.#.#|#...#|#...#|#.#.#|#.#..|#...#|..#..|#####|....#|..#..|....#|..#..|
#.#..|#.#.#|#...#|#...#|#.#.#|#.#..|#.#.#|..#..|#...#|....#|.#.#.|....#|.#...|
.####|.#.#.|#...#|.###.|#...#|#....|..##.|#####|#...#|####.|#...#|....#|#####| ...
  ^     ^     ^     ^     ^     ^     ^     ^     ^     ^     ^     ^     ^   
  |     |     |     |     |     |     |     |     |     |     |     |     |   
  A     B     C     D     E     F     G     H     I     J     K     L     M   

प्रत्येक कॉलम को बाइनरी नंबर माना जाता है और एक पूर्णांक में परिवर्तित किया जाता है। ये पूर्णांक 1 श्रेणी में अप्रतिस्पर्धी ASCII में बदल जाते हैं ... 31:

उदाहरण के लिए "B"अंतिम तार के स्तंभ होंगे "\017\021\017\021\017"(अष्टांगिक प्रतिनिधित्व में लिखे गए अप्रकाशित वर्ण):

#####                   ####.     11110          15            '\017'
#.#.#                   #...#     10001          17            '\021'
#.#.#      ------->     ####. --> 11110  ------> 15   ------>  '\017'
#.#.#                   #...#     10001          17            '\021'
.#.#.                   ####.     11110          15            '\017'

          (transposed                  bin to int   int to ASCII
         for reability)    

इसलिए, 5*26 = 130पात्रों के अंतिम तार को देखते हुए , हम उस स्ट्रिंग को 0/1उपयोग करने के मैट्रिक्स में बदल देते हैं :

sapply(utf8ToInt(STRING),intToBits)

तब हम केवल पहले 5 पंक्तियों (intToBits 32 बिट्स लौटाते हैं) का चयन करते हुए मैट्रिक्स को सब्स्क्राइब करते हैं और केवल इनपुट के रूप में दिए गए अक्षर के अनुरूप कॉलम होते हैं और अंत में हम @ Giuseppe के उत्तर में बताए अनुसार क्रोनकर लागू करते हैं ।


आप -48टुकड़े टुकड़े करने के लिए unprintables का उपयोग कर सकते हैं , और !इसके स्थान पर उपयोग कर सकते हैं U: इसे ऑनलाइन आज़माएं
Giuseppe

@Giuseppe: बढ़िया! मैंने जवाब दिया कि यह एक समुदाय का विकि है क्योंकि यह एक सहयोग का परिणाम है :) मेरे गरीब को संपादित करने के लिए स्वतंत्र महसूस करें: D
digEmAll
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.