कैसे हो! मैं कोड गोल्फ का प्रधान हूँ!


30

यह संभावना है कि जो कोई भी कुछ महीने पहले ट्विटर का इस्तेमाल करता था उसे 'हाउडी' के बारे में पता होगा! मैं X "मेम का प्रधान हूं। जहां एक शेरिफ की एक साधारण छवि इमोजी के साथ खींची गई है, और एक विषय को फिट करने के लिए बदलता है। इसलिए मैंने सोचा कि यह कोड गोल्फ के शेरिफ के लिए समय था। यहां वह है:

    ###
   #####
    ###
    ###
    ###
     #
   #####
  #  #  #
 #   #   #
 #   #   #
     #
    ###
   #   #
   #   #
   #   #
   #   #

यह एक विशेष रूप से 'पिक्सेल' है जो एक वर्ण विस्तृत है, और एक वर्ण उच्च है। उसे उत्पन्न करने के लिए, तर्क 1 और 1 होंगे।

क्या होगा यदि वह लंबा होने की तुलना में व्यापक होना है?

      ######
    ##########
      ######
      ######
      ######
        ##
    ##########  
  ##    ##    ##
##      ##      ##
##      ##      ##
        ##
      ######
    ##      ##
    ##      ##
    ##      ##
    ##      ##

उसे 1 की ऊंचाई मिली है, लेकिन 2 की चौड़ाई।


नियम:

  • यह चुनौती है कि कोड गोल्फ के अपने शेरिफ को आकर्षित करने के लिए कोड लिखना संभव सबसे कम पात्रों में।
  • किसी भी प्रोग्रामिंग लैंग्वेज का उपयोग अपनी दिल की इच्छाओं के लिए करें।
  • शेरिफ की ऊंचाई और चौड़ाई के लिए आपके कोड को दो तर्क देने चाहिए, जो पूर्णांक हैं।
  • आउटपुट को बैकग्राउंड के लिए सिंगल व्हाइट स्पेस से बनाया जाना चाहिए, और आप शेरिफ के लिए चुने गए किसी भी अन्य कैरेक्टर को। (मैंने परीक्षण मामलों के लिए हैश का उपयोग किया है, लेकिन इससे कोई फर्क नहीं पड़ता कि आप क्या उपयोग करते हैं)।
  • ऊँचाई के लिए यह संभव होना चाहिए कि वह एक नकारात्मक पूर्णांक हो, छवि को निष्क्रिय कर रहा है।
  • चौड़ाई एक नकारात्मक पूर्णांक हो सकती है, लेकिन क्योंकि छवि सममित है, यह सकारात्मक मूल्य के समान होगा।
  • ट्रेलिंग व्हाइट-स्पेस अप्रासंगिक हैं।
  • यदि या तो तर्क 0 है, तो वह आयाम एक पंक्ति या स्तंभ के लिए 'चपटा' है। इस पंक्ति की लंबाई क्रमशः शेरिफ की ऊंचाई, या चौड़ाई से गुणा किया गया अन्य तर्क है।
  • यदि दोनों तर्क 0 हैं, तो दोनों रेखाएं 'चपटा' होती हैं, जिससे एक भी सकारात्मक वर्ण निकल जाता है।
  • आवश्यक नहीं है, लेकिन tio.run जैसे ऑनलाइन दुभाषिया के लिए एक लिंक शामिल करें
  • आउटपुट एक स्ट्रिंग होना चाहिए, कई लाइनों पर, या कंसोल पर आउटपुट होना चाहिए।

परीक्षण के मामलों

1 ऊँचा, 1 चौड़ा

    ###
   #####
    ###
    ###
    ###
     #
   #####
  #  #  #
 #   #   #
 #   #   #
     #
    ###
   #   #
   #   #
   #   #
   #   #   

2 ऊँचा, 1 चौड़ा

    ###
    ###
   #####
   #####
    ###
    ###
    ###
    ###
    ###
    ###
     #
     #
   #####
   #####
  #  #  #
  #  #  #
 #   #   #
 #   #   #
 #   #   #
 #   #   #
     #
     #
    ###
    ###
   #   #
   #   #
   #   #
   #   #   
   #   #
   #   #
   #   #
   #   #  

1 ऊँचा, 2 चौड़ा

      ######
    ##########
      ######
      ######
      ######
        ##
    ##########  
  ##    ##    ##
##      ##      ##
##      ##      ##
        ##
      ######
    ##      ##
    ##      ##
    ##      ##
    ##      ##

2 ऊँचा, 2 चौड़ा

      ######
      ######
    ##########
    ##########
      ######
      ######
      ######
      ######
      ######
      ######
        ##
        ##
    ##########  
    ##########  
  ##    ##    ##
  ##    ##    ##
##      ##      ##
##      ##      ##
##      ##      ##
##      ##      ##
        ##
        ##
      ######
      ######
    ##      ##
    ##      ##
    ##      ##
    ##      ##
    ##      ##
    ##      ##
    ##      ##
    ##      ##

-1 उच्च, 1 चौड़ा

   #   #
   #   #
   #   #
   #   #   
    ###
     #
 #   #   #
 #   #   #
  #  #  #
   #####
     #
    ###
    ###
    ###
   #####
    ###

1 उच्च, -1 चौड़ा

    ###
   #####
    ###
    ###
    ###
     #
   #####
  #  #  #
 #   #   #
 #   #   #
     #
    ###
   #   #
   #   #
   #   #
   #   #   

0 उच्च, 0 चौड़ा

#

1 ऊँचा, 0 चौड़ा

#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#

0 उच्च, 2 चौड़ा

##################

मज़े करो, तुम सब!


1
इस चुनौती ने मुझे उल्टे विश्व उपन्यास की याद दिला दी ।
चार्ली

संबंधित: ASCII कला में एक पुराने दोस्त की तस्वीर (चर तराजू; कोई उलटा या चपटा नहीं)
लुइस मेंडू

अवलोकन: 1 उच्च, 2 विस्तृत परीक्षण मामलों में सबसे अधिक मानवीय है, हालांकि मैं इसके बीच में ऑस्ट्रेलियाई के लिए जयकार करने के लिए बाध्य हूं
जो किंग

@JoKing यदि मैं उनका नामकरण कर रहा था, तो मैं निश्चित रूप से (-1, 1) 'ऑस्ट्रेलियाई' और (-1, 2) 'यथार्थवादी ऑस्ट्रेलियाई' के रूप में होगा। हालांकि ... शायद यह गलत समझा जा सकता है।
AJFaraday

जवाबों:


39

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

करी सिंटैक्स में इनपुट लेता है (width)(height)। स्ट्रिंग्स की एक सरणी देता है।

w=>h=>[...Array((h>0?h:-h)*16||1)].map((_,y)=>'012345678'.replace(/./g,x=>' #'[((c=+'3733317900134444'[(h<0?16-~y/h:y/h)|0]||17)>>4-x|c>>x-4)&1|!h].repeat(w>0?w:-w))||'#')

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

कैसे?

मध्य स्तंभ सहित द्विआधारी बिटमास्क के रूप में केवल शेरिफ का बायाँ भाग एन्कोडेड है:

    ##.         00011     3
   ###..        00111     7
    ##.         00011     3
    ##.         00011     3
    ##.         00011     3
     #          00001     1
   ###..        00111     7
  #  #  .       01001     9
 #   #   .  --> 10001 --> 17
 #   #   .      10001     17
     #          00001     1
    ##.         00011     3
   #   .        00100     4
   #   .        00100     4
   #   .        00100     4
   #   .        00100     4

9170

'3733317900134444'

0x80y15(x,y)

' #'[                                  // character lookup:
  (                                    //   0 = space
    (                                  //   1 = '#'
      c = +'3733317900134444'[y] || 17 // extract the bitmask for this row; 0 -> 17
    )   >> 4 - x                       // test the left part, middle column included
    | c >> x - 4                       // test the right part, middle column also included
  ) & 1                                // isolate the least significant bit
]                                      // end of character lookup

6
कोई फर्क नहीं पड़ता कि आप कितने जवाब देते हैं, मैं हर बार प्रभावित होता हूं ..
केविन क्रूज़सेन

मैंने आपका संस्करण 10 बाइट्स से छोटा कर दिया है। मुझे यकीन नहीं है कि क्या इसे अपने रूप में पोस्ट किया जाए या सिर्फ आपकी वृद्धि के लिए। मेरा आपकी ओर से प्रेरणा है तो यह लगभग एक नकल के रूप में दिखता है। जिस तरह से महान सोच: डी। बहुत बढ़िया!
इब्राहिम माहिर

... 8 बाइट्स नहीं 10. :-P
ibrahim mahrir

@ibrahimmahrir कभी-कभी, प्रकोप और सुधार के बीच एक पतली रेखा होती है । ये आप पर निर्भर है। अगर आपको लगता है कि आपका क्रियान्वयन काफी अलग है, तो मुझे इस पर कोई आपत्ति नहीं है यदि आप इसे एक अलग उत्तर के रूप में पोस्ट करते हैं।
अरनुलद

2
@ibrahimmahrir मैं देख रहा हूँ मुझे लगता है कि मैं इस एक के रूप में बेहतर होगा। आप अभी भी एक अलग वैकल्पिक संस्करण के रूप में अपना पोस्ट कर सकते हैं। मेरे साथ ठीक है! (मैं अपने उत्तर में एक कड़ी जोड़ना सुनिश्चित करूंगा।)
अरनौल्ड

16

पायथन 2 , 228 218 202 189 173 बाइट्स

lambda h,w:sum(([''.join('# '[int(n)]*abs(w)for n in bin([62,120,224,238,438,750][int(l)])[2:])or'#']*abs(h)for l in'1211102455013333'),[])[::1-(h<0)*2]or['#'*9*abs(w)or'#']

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


विकल्प:

पायथन 2 , 173 बाइट्स

lambda h,w:sum(([''.join('# '[int(n)]*abs(w)for n in bin(ord(' >w(8\x96I'[l])*l)[2:])or'#']*abs(h)for l in map(int,'3433314655132222')),[])[::1-(h<0)*2]or['#'*9*abs(w)or'#']
lambda h,w:sum(([''.join('# '[int(n)]*abs(w)for n in bin(ord(' >w(8\x96I'[int(l)])*int(l))[2:])or'#']*abs(h)for l in'3433314655132222'),[])[::1-(h<0)*2]or['#'*9*abs(w)or'#']

8

पर्ल 5 , 169 166 157 बाइट्स

@a=map"$_\n",(split 1,'  #####1   ###1    #1 #  #  #1#   #   #1  #   #')
[1011120344215555=~/./g];
print s/./$&x abs"@F"/ger x abs$F[1]for$F[1]<0?reverse@a:@a;

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

शायद बिट फ़िडलिंग द्वारा अधिक प्राप्त किया जा सकता है।


1
महान दृष्टिकोण! मैंने आपके उत्तर के साथ खेला है और कुछ परिवर्तनों के साथ आप काफी कुछ बाइट बचा सकते हैं: इसे ऑनलाइन आज़माएं! तत्वों को फिर से व्यवस्थित करने और कम बाइट्स के लिए उन्हें स्टोर करने के लिए कुछ अलग-अलग I / O और कुछ ट्रिक्स का उपयोग करना बिल्कुल एक ही दृष्टिकोण है! जरूरत पड़ने पर किसी भी चीज पर विस्तार से खुशी!
डोम हेस्टिंग्स

टिप के लिए Thx split, मैं अभी उपयोग कर रहा हूँ और दो बाइट्स बचा रहा हूँ। 'अनुक्रमणिका के चारों ओर s को खो कर एक को बंद कर दिया । sayहालांकि काम करने के लिए नहीं मिल सका ।
Kjetil S.

Thx भी चौड़ाई और ऊंचाई "मुफ्त में" प्राप्त करने के लिए -a, उस के साथ 9 और बाइट्स खो दिया है।
Kjetil S.

बिल्कुल भी परेशानी नहीं है! आप सक्षम कर सकते हैं sayके साथ -M5.010, लेकिन सभी के, आप इस्तेमाल कर सकते हैं करने के लिए पसंद करती है -lबजाय और रखने print, लेकिन अगर नहीं, तो आप एक शाब्दिक न्यू लाइन या उपयोग कर सकते हैं $_.$/के लिए -1। एक और पर्ल गोल्फर को देखकर अच्छा लगा!
डोम हेस्टिंग्स

इसे अकेला नहीं छोड़ सकते थे और कुछ और कम करने में कामयाब रहे। sayकाम नहीं कर रहा था क्योंकि न्यूलाइन को mapइसमें उपयोग करने के लिए जोड़ा गया था ताकि यह थोड़ा अलग कॉल की आवश्यकता हो। मुझे यह भी एहसास हुआ कि जब आपका कोड एक चर में समाप्त होता है और आप उपयोग कर रहे हैं -pया कुछ का उपयोग कर सकते हैं @;जैसा कि इसमें शामिल है: ऑनलाइन इसे आज़माएं! आशा है कि आप मेरी टिप्पणियों का बुरा नहीं मानेंगे!
डोम हेस्टिंग्स

7

चारकोल , 61 बाइट्स

NθNη¿θF⪪”{“↷C¿2t´⁴Q19·“*Ty”!E↔θ∨⭆ι×μ↔η#×#∨×⁵↔η¹‖OO←∨↔η¹¿‹θ⁰‖↓

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

NθNη

आयामों को इनपुट करें।

¿θF⪪”{“↷C¿2t´⁴Q19·“*Ty”!

यदि ऊंचाई नोनजरो है, तो शेरिफ के दाहिने आधे भाग पर लूप ...

E↔θ

... बार की निरपेक्ष ऊंचाई को दोहराते हुए ...

∨⭆ι×μ↔η#

... यदि चौड़ाई नॉनजरो है तो प्रत्येक वर्ण को कई बार निरपेक्ष रूप से दोहराएं, अन्यथा ए #

×#∨×⁵↔η¹

लेकिन अगर ऊंचाई शून्य है, तो #5 बार पूर्ण चौड़ाई दोहराएं , लेकिन कम से कम 1 #

‖OO←∨↔η¹

शेरिफ के बाएं आधे हिस्से का उत्पादन करने के लिए प्रतिबिंबित करें।

¿‹θ⁰‖↓

यदि ऊंचाई नकारात्मक है, तो शेरिफ को फ्लिप करें।


4

पायथन 2 , 217 216 बाइट्स

h,w=input();t=[];w=abs(w)
for i in range(16):c=bin(32+int('37333179HH134444'[i],26))[-5:];t+=[[''.join(abs(w)*' #'[d>'0']for d in c+c[3::-1]),'#'][w==0]]*abs(h)
print['\n'.join(t[::[1,-1][h<0]]),'#'*(w*16or 1)][h==0]

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

अर्नुलद के दृष्टिकोण पर एक पायथोनिक रिफ़ ।

ओह! अब सभी परिस्थितियों के लिए काम करता है ...



2

पॉवर्सशेल, 174 170 बाइट्स

अरनुलद की जावास्क्रिप्ट से प्रेरित है

param($w,$h)('CGCCCAGIQQACDDDD'[((0..15),(15..0))[$h-lt0]],31)[!$h]|%{$n=+$_
,(-join(4..0+1..4|%{,' #'[($n-shr$_)%2]*[Math]::Abs($w)}),'#')[!$w]*[Math]::Abs(($h,1)[!$h])}

अधूरा, समझाया और परीक्षण किया स्क्रिप्ट:

<#

Script uses 5 bits of integer as 5 left chars of a line of a sheriff
Script ignores other bits in this integer, so we can use 6 bit to take a ASCII letter
    ##.         1 00011     C
   ###..        1 00111     G
    ##.         1 00011     C
    ##.         1 00011     C
    ##.         1 00011     C
     #          1 00001     A
   ###..        1 00111     G
  #  #  .       1 01001     I
 #   #   .  --> 1 10001 --> Q
 #   #   .      1 10001     Q
     #          1 00001     A
    ##.         1 00011     C
   #   .        1 00100     D
   #   .        1 00100     D
   #   .        1 00100     D
   #   .        1 00100     D

#>

$f = {

param($w,$h)
(
    'CGCCCAGIQQACDDDD'[             # 5 bits of each char correspond to 5 left symbols of line of sheriff.
        ((0..15),(15..0))[$h-lt0]], # forward or reverse sequence of chars
    31                              # or sequence of one element = 11111
)[!$h]|%{                           # choose a sequence and for each
    $n=+$_                          # integer or ASCII code
    ,(  -join(
            4..0+1..4|%{            # loop on bit range 4..0 and append fliped range 1..4
                ,' #'[($n-shr$_)%2]*[Math]::Abs($w)
            }                       # returns space or # depend on bit, repeat $w times
        ),
        '#'                         # returns # for $w equal 0
    )[!$w]*[Math]::Abs(($h,1)[!$h]) # choose a sheriff line, repeat $h times
}

}

@(
    ,(1,0)
    ,(0,1)
    ,(1,-1)
    ,(0,0)
    ,(1,1)
    ,(0,0)
    ,(-2,-1)
    ,(0,0)
    ,(2,2)
) | % {
    $w,$h = $_
    $r = &$f $w $h
    $r
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.