4 बिट्स को डिस्कनेक्ट करें


28

आपका कार्य: एक इनपुट स्ट्रिंग दी गई है, यह निर्धारित करें कि क्या उस स्ट्रिंग के द्विआधारी प्रतिनिधित्व में कहीं भी 4 1s या 0s नहीं है। इसके अलावा, आपके कोड में एक पंक्ति में चार में से कोई भी ऐसा रन नहीं होना चाहिए।

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

String      Binary              Result

U3          01010101 00110011   Truthy

48          00110100 00111000   Falsy

Foobar      01000110 01101111   Falsy
            01101111 01100010
            01100001 01110010

Feeber      01000110 01100101   Truthy
            01100101 01100010
            01100101 01110010

$H          00100100 01001000   Truthy

<Empty>     -                   Truthy

नियम

  • इनपुट हमेशा मुद्रण योग्य ASCII की सीमा के भीतर होगा, जिसमें व्हाट्सएप वर्ण भी शामिल हैं।
    • आपका कोड किसी भी एन्कोडिंग का उपयोग कर सकता है, क्योंकि यह केवल बिट स्तर पर ही मायने रखता है।
  • क्योंकि यह स्थिति सफेद स्थान और कई अन्य वर्णों के उपयोग को रोकती है, इसलिए आपके कोड में वास्तव में एक पंक्ति में चार रन के चार रन हो सकते हैं, प्रत्येक रन के लिए 10 बाइट पेनल्टी।
    • दो रन के रूप में 5 1एस या 0एस की संख्या, एक पंक्ति में 6, तीन रन के रूप में गिना जाता है।
  • इनपुट एक स्ट्रिंग या चार सरणी होगा, किसी अन्य रूप में नहीं।
  • आप एक पूरा कार्यक्रम या फ़ंक्शन लिख सकते हैं।
  • आपको अपने उत्तर में अपने कोड का बाइनरी प्रतिनिधित्व प्रदान करना होगा।

गुड लक, सबसे कम स्कोर जीतता है!

यह स्क्रिप्ट आपकी चुनौती में आपकी मदद कर सकती है, अपना कोड इनपुट में डाल सकती है और यह आपको आपके कोड का बाइनरी प्रतिनिधित्व देगा, यह लंबाई, आपका जुर्माना और कुल स्कोर है, यदि आप UTF-8 का उपयोग कर रहे हैं।

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।


1
मुझे पूरा यकीन है कि स्निपेट छोटी गाड़ी है, उदाहरण के लिए मैं ||सूचीबद्ध देखता हूं और वह है 0111110001111100
अर्जन जोहानसन

सही, अच्छी बात है। एक क्षण।
पावेल

2
यदि कार्य एक स्ट्रिंग के स्कोर को खोजने के लिए होता तो और भी अधिक मजेदार होता।
आदम

1
@JonathanAllan अच्छी तरह से, जिस तरह से मैं यह इरादा था, वह करता है, लेकिन आगे के प्रतिबिंब पर मुझे वास्तव में इसके लिए कोई कारण नहीं दिखता है, इसलिए मैं इसे बदल दूंगा।
पावेल

1
@ पेवेल केवल दंड होने पर बाइट पर आधारित नहीं है। यह इसे [कोड-चैलेंज] बनाता है, न कि [कोड-गोल्फ]। टैग से विकि: "यदि स्रोत कोड की लंबाई प्राथमिक स्कोरिंग मानदंड नहीं है, तो इसके बजाय किसी अन्य टैग का उपयोग करने पर विचार करें।" TL, DR, वास्तविक स्कोर के बाद से = / = प्रोग्राम की बाइट गिनती, और सबसे छोटे कोड का मतलब सर्वश्रेष्ठ स्कोर प्राप्त करना नहीं है, यह [कोड-गोल्फ] नहीं है।
mbomb007

जवाबों:


19

जेली , 18 बाइट्स + 0 दंड = 18

79Ọv2;$ḅ⁹b2+4\b4FẠ

रिटर्न 1अगर वहाँ लंबाई की कोई बराबरी नहीं बिट श्रृंखला के हैं 4 ASCII स्ट्रिंग इनपुट के 8 बिट शब्द प्रतिनिधित्व में या उससे अधिक है, और 0नहीं तो।

इसे ऑनलाइन आज़माएं! (कुछ अतिरिक्त मामलों के साथ परीक्षण सूट जोड़ा गया)

जेली के कोडपेज का उपयोग करते हुए समान लंबाई के 4 या उससे अधिक लंबे सब्सट्रिंग्स नहीं हैं:

7    0x37    00110111
9    0x39    00111001
Ọ    0xB5    10110101
v    0x76    01110110
2    0x32    00110010
;    0x3B    00111011
$    0x24    00100100
ḅ    0xD4    11010100
⁹    0x89    10001001
b    0x62    01100010
2    0x32    00110010
+    0x2B    00101011
4    0x34    00110100
\    0x5C    01011100
b    0x62    01100010
4    0x34    00110100
F    0x46    01000110
Ạ    0xAB    10101011

समान-बिट रन लंबाई के साथ:

221323221211111312322133122121221111213121123132213111122211311332313211313211111112

कैसे?

अवगुणों से बचने के लिए टोटके हैं:

  • "जेली कोड का इनपुट के साथ मूल्यांकन" के बाद एक चरित्र को Oसंख्या में परिवर्तित करके, "चरित्र से क्रमिक में परिवर्तित करें " सनक से बचने के लिए ,।79v

  • जेनेरिक डाइएडिक बेस रूपांतरण का उपयोग करके सरल टू-बाइट विकल्प द्वारा बाइनरी का उपयोग B( 0x42, 1000010) के लिए प्रत्यक्ष रूपांतरण से बचने के लिए b2

  • समान बिट्स के रन की गिनती के लिए कुछ सामान्य विकल्पों से बचने के लिए - पहली पसंद "दी गई लंबाई के सभी अतिव्यापी स्लाइस", ( 0xF5या 11110101) होगी। एक दूसरी पसंद "सभी सब्बलिस्ट", ( 0xCFया 11001111) का उपयोग करना हो सकता है ।
    एक वर्कअराउंड जो मैंने वर्तमान एक के पहले इस्तेमाल किया था, वह (लगातार तत्वों के बीच) वेतन वृद्धि ( Iज़ीरोस और लोगों को एक समान पायदान पर ) के साथ लेने के लिए था , और एक पंक्ति में तीन शून्य की किसी भी घटना को देखने के लिए। ऐसा करने के लिए मैंने द्विपदीय फलन के उपयोग से सभी शून्य को लोगों में परिवर्तित कर दिया 2cअर्थात 2Cx - जिससे -1s 0s 1s s s हो गया 2, और 0s बन गए।1एस; तरीका है कि कोड sublist की पहली आवृत्ति के लिए देख सकते [1,1,1]साथ w111
    हालांकि एक छोटा रास्ता स्पष्ट हो गया - "दिया लंबाई के सभी ओवरलैपिंग स्लाइस" की कार्रवाई की नकल करने के लिए, , एक एक का उपयोग कर सकते 4 , वार कुछ युग्म के साथ कम हो ओवरलैपिंग <dyad>4\। यदि इसे जोड़कर प्रदर्शित किया जाता है , तो +4\यह 1s को गिनता है , इसलिए किसी भी 0या 4मौजूद होने पर एक सत्य मान वापस करने के लिए संकेतक है। यहां मुद्दा यह है कि अगले स्पष्ट कदम सापेक्ष लेने के लिए होगा 4 के डाल करने के लिए 0और 4जबकि अन्य संभावित मान (छोड़ते समय एक समान स्तर पर प्रविष्टियों 1, 2और 3) में कोई बदलाव नहीं है, लेकिन +\%4है\%अंदर, जिसका बिट-वैल्यू 010111 0000 100100 है। उस दंड से बचने के लिए संख्याओं को आधार 4 के साथ परिवर्तित किया जाता है b4(मैपिंग 0टू [0], 1टू [1], 2टू [2], 3टू [3]और 4टू [1,0]) और पूरी सूची के साथ चपटा होता है F। अब अंतिम परीक्षा केवल यह जांचने के लिए है कि क्या 0सूची में कोई एस है, सीधे मोनाड के साथ प्राप्त करने योग्य है

79Ọv2;$ḅ⁹b2+4\b4FẠ - Main link: printable ASCII character list
79                 - 79
  Ọ                - character from ordinal : 'O'
   v               - evaluate as Jelly code : input -> 'O' converts the input to ordinals
      $            - last two links as a monad
    2              -     2
     ;             -     concatenate (why? see the note beneath the code block)
       ḅ⁹          - convert from base 256 : gets an integer representing the byte string
         b2        - convert to base 2 AKA binary
            4\     - 4-wise reduce with
           +       -     addition (sums all overlapping slices of length 4)
              b4   - convert to base 4 (vectorises)
                F  - flatten into a single list
                 Ạ - any falsy?

नोट: कारण 2 एक क्रमिक सूची के साथ समाप्‍त होता है किनारे के मामलों से निपटने के लिए जहां इनपुट स्ट्रिंग में 4 का एकमात्र रन बहुत पहले चरित्र के अग्रणी शून्य में है - ये वर्ण हैं: टैब; रेखा भरण; और गाड़ी-वापसी। इसके बिना आधार 256 रूपांतरण प्रभावी रूप से (पूरी तरह से संक्षिप्त) बाइनरी स्ट्रिंग से अग्रणी शून्य को स्ट्रिप्स करता है; अग्रणी 2 के साथ अग्रणी शून्य होगा और उनके सामने एक अतिरिक्त और शून्य होगा। चूंकि कोई मुद्रण योग्य ASCII में तीन अग्रणी शून्य नहीं हैं, इसलिए बाकी चेक से पहले इन अतिरिक्त बिट्स को छोड़ने की कोई आवश्यकता नहीं है।


मैं मान रहा हूं कि आप केवल एक नकारात्मक या कुछ ऐसा ही जोड़ सकते हैं जो आपके द्वारा उत्पादित मूल्य के साथ अनुपालन करने के लिए है / सच्चाई और झूठा के लिए वापसी सुसंगत होना चाहिए जो मैं "सत्य के लिए हर बार समान मूल्य" के रूप में व्याख्या करता हूं और झूठा के लिए भी। साथ ही आपके सच्चे / झूठे सवाल में लोगों के विपरीत है।
एमिग्ना

मैंने अभी इसके बारे में पूछताछ की है - जब मैंने मूल रूप से इसे पढ़ा था (कई घंटे पहले) मैंने लिया था "सत्य और मिथ्या के लिए आपके द्वारा आउटपुट / वापसी का मूल्य सुसंगत होना चाहिए।" इसका मतलब है कि हम या तो इस तरह से चारों ओर उत्पादन कर सकते हैं जब तक कि वह रनों के बीच उसी तरह से रहे ... एक सीधा आगे नकारात्मक अवगुण होगा।
जोनाथन एलन

मैं निश्चित रूप से कुछ बचा सकता है अगर मुझे ऐसा नहीं करना है। मैं जिस नए संस्करण पर काम कर रहा हूं, उसके साथ बहुत कम स्कोर तक नीचे। मुझे आशा है कि आप एक सही व्याख्या कर चुके हैं :)
Emigna

खैर मैंने एक दो बाइट प्रत्यय दिया है जो चाल करता है, उदाहरण के रूप में चारों ओर एक ही रास्ता दे रहा है 0और 1यदि आवश्यक हो तो कड़ाई से संगत मूल्यों और ।
जोनाथन एलन

अच्छा लगा। आगे यह देखने के लिए कि आपने यह कैसे किया। यदि मैं सभी अवगुणों को नजरअंदाज कर देता हूं तो मैं केवल 15 से नीचे उतरता हूं :)
एमिग्ना

12

जावा 7, 812 726 673 644 634 616 599 588 145 बाइट्स + 10 * 44 = 585

boolean
b(char[]b){String
g="";for(char
c:b)g+=g.format("%"+(1-1)+"8d",new
Integer(Integer.toString(c,2)));return!g.matches(".*(.)\\1\\1\\1.*");}

मैं जुर्माना कम करने की कोशिश करने के लिए रिक्त स्थान के बजाय नईलाइन्स का उपयोग कर रहा हूं ...

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

बाइनरी

01100010011011110110111101101100011001010110000101101110000010100110001000101000011000110110100001100001011100100101101101011101011000100010100101111011010100110111010001110010011010010110111001100111000010100110011100111101001000100010001000111011011001100110111101110010001010000110001101101000011000010111001000001010011000110011101001100010001010010110011100101011001111010110011100101110011001100110111101110010011011010110000101110100001010000010001000100101001000100010101100101000001100010010110100110001001010010010101100100010001110000110010000100010001011000110111001100101011101110000101001001001011011100111010001100101011001110110010101110010001010000100100101101110011101000110010101100111011001010111001000101110011101000110111101010011011101000111001001101001011011100110011100101000011000110010110000110010001010010010100100101001001110110111001001100101011101000111010101110010011011100010000101100111001011100110110101100001011101000110001101101000011001010111001100101000001000100010111000101010001010000010111000101001010111000101110000110001010111000101110000110001010111000101110000110001001011100010101000100010001010010011101101111101


पुराने बिटशफ्टिंग समाधान 141 बाइट्स + 10 * 101 = 1,151

boolean
b(char[]b){
int
o=0,p=0,i;
for(char
c:b){for(i=0;i<8;){if((c&(1<<i++))<1){o=0;p++;}else{p=0;o++;}if(3<o|3<p)return
6<5;}}return
5<6;}

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

बाइनरी

011000100110111101101111011011000110010101100001011011100000101001100010001010000110001101101000011000010111001001011011010111010110001000101001011110110000101001101001011011100111010000001010011011110011110100110000001011000111000000111101001100000010110001101001001110110000101001100110011011110111001000101000011000110110100001100001011100100000101001100011001110100110001000101001011110110110011001101111011100100010100001101001001111010011000000111011011010010011110000111000001110110010100101111011011010010110011000101000001010000110001100100110001010000011000100111100001111000110100100101011001010110010100100101001001111000011000100101001011110110110111100111101001100000011101101110000001010110010101100111011011111010110010101101100011100110110010101111011011100000011110100110000001110110110111100101011001010110011101101111101011010010110011000101000001100110011110001101111011111000011001100111100011100000010100101110010011001010111010001110101011100100110111000001010001101100011110000110101001110110111110101111101011100100110010101110100011101010111001001101110000010100011010100111100001101100011101101111101

न्यूलाइन्स के साथ अच्छी ट्रिक। गिनती 00000/ 11111दो रन के रूप में, 000000/ 111111तीन के रूप में, आदि मैं कुल 101 रन गिनता हूं।
ETHproductions

@ETHproductions फिक्स्ड
पोक

यह सिर्फ जीतना चाहिए क्योंकि जावा इस के लिए कभी नहीं था
क्रिस्टोफर

10

APL (Dyalog Classic) , 26 + 1 × 10 = 36 बाइट्स

टिप्पणियाँ

1s के एक 4 रन शामिल हैं। ⎕IO←0कई सिस्टम पर डिफ़ॉल्ट की आवश्यकता होती है। ध्यान दें कि यह एक क्लासिक दुभाषिया पर चलाया जाना चाहिए ताकि तार प्रति चरित्र एक बाइट हो।

प्रस्तुत करने

1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞

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

बाइनरी स्रोत

00110001101011001001110010110010100101110101110010111001001010001101011100110100010111001010100010 1111 0010111011101010111010101100101001101110101010100010011011001100010011000110001100010001000101001010001101

व्याख्या

 स्ट्रिंग इनपुट के लिए शीघ्र

11 ⎕DR1- बिट बूलियन में  परिवर्तित करें ( 1 ) डी एटा आर इलिकेशन

 संलग्न करें ताकि हम इसमें कई चीजें लागू कर सकें

(... ) ⍷¨ द्विआधारी संकेतक जहां निम्नलिखित अनुक्रमों में से प्रत्येक शुरू होता है ...

× साइन (बाइनरी डेटा पर नो-ऑप, लेकिन रन को विभाजित करने के लिए स्पेसर के रूप में शामिल)

4 \¨ विस्तार (प्रति) प्रत्येक लंबाई चार करने के लिए

 तक पूर्णांक

 का टैली

⍬⍬  दो खाली संख्यात्मक सूची से मिलकर सूची

 सूची (समतल)

⌈\ संचयी अधिकतम

 उलटा

 पहले उठाओ

1 ≠ एक से अलग है? (यानी नहीं)

वाल्क-के माध्यम से

हम "48" इनपुट को ungolfed un-de-runed संस्करण में करेंगे ~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞:

11 ⎕DR ⍞ "48" को 0 0 1 1 1 0 1 0 0 0 1 1 1 0 0 0 (यानी 52 दिसंबर 56, हेक्स 34 38) में परिवर्तित करता है।

(0 0 0 0)(1 1 1 1) ⍷¨ ⊂0-रन और 1-रन की शुरुआत पाता है; (0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)

∨/ ∊लगता है कि कोई सच्चाई है (यानी कोई रन); 1

~नकारता है कि; 0


4

जेली 28 + 140 अवगुण = 168

L8_0xṭ
OBUÇ€UFŒr<4FẠ

व्याख्या

OB

तर्क को उनके बाइनरी एन्कोडिंग की सूची में परिवर्तित करता है, जैसे

“U3”OB -> [[1, 0, 1, 0, 1, 0, 1], [1, 1, 0, 0, 1, 1]]

अगला टुकड़ा

UÇ€U

इस तथ्य को ठीक करता है कि उपरोक्त सूची में गायब चरित्र हो सकते हैं क्योंकि Bइसमें अग्रणी शून्य शामिल नहीं हैं। Ç€प्रत्येक तत्व पर पहले से परिभाषित लिंक को कॉल करता है जो कि पुनर्स्थापित करता है

L8_0xṭ

यह लिंक के बराबर है

lambda x: x + repeat(0, 8 - len(x))

उदाहरण के लिए

[1, 1, 0, 0, 1, 1] L8_0xṭ -> [1, 1, 0, 0, 1, 1, [0, 0]]

हम इस ऑपरेशन से पहले और उसके बाद की सूची ( Uउस सूची में दो कॉल) को अपेंडेड होने के बजाय एक प्रीपेन्ड होने के लिए उठाते हैं। अगला टुकड़ा

FŒr

सूची को चपटा करता है ( F), ASCII एन्कोडिंग की कुल बाइनरी स्ट्रिंग देता है, और रन-लंबाई आउटपुट ( Œr) को एन्कोड करता है । इसलिए उदाहरण के लिए

L8_0xṭ
“U3”OBUÇ€UF -> [1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0]

तथा

L8_0xṭ
“U3”OBUÇ€UFŒr -> [[1, 1], [0, 1], [1, 1], [0, 1], [1, 1], [0, 1], [1, 1], [0, 1], [1, 2], [0, 2], [1, 2], [0, 2]]

अंत में हम जांचते हैं कि क्या प्रत्येक तत्व <4 है (शुक्र है कि यह हमेशा 0,1 के लिए सच है)

<4F

उदाहरण के लिए

L8_0xṭ
“U3”OBUÇ€UFŒr<4F -> [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 अगर उनमें से कोई भी गलत है (इस मामले में, 0)।

कोड पृष्ठ

जेली के कोड पृष्ठ में यह कोड 20 बाइट्स है, लेकिन नियम के उल्लंघन के लायक 27 रन हैं। UTF-8 में यह 28 बाइट्स है लेकिन केवल 14 रनों के उल्लंघन के लायक है।


3

05AB1E , 22 + 3 * 10 = 52

जोनाथन एलन के जेली जवाब से डेल्टा ट्रिक उधार लेकर 2 जुर्माना लगाया

$Ç256+bvy¦}J¥J6Ìb¦å2ÍQ

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

व्याख्या

$                       # push 1 and input (1 to handle the empty string)
 Ç                      # convert to list of ascii values
  256+                  # add 256 to each
      b                 # convert each to binary
       vy¦}             # chop off the leading digit of each
           J            # join to string
            ¥           # take delta's
             J          # join to string
              6Ìb¦      # push bin(6+2)[1:] = 000 
                  å     # check if this exists in the delta's string
                   2ÍQ  # compare to 2-2 = 0

कोड का द्विआधारी प्रतिनिधित्व

00100100 11000111 00110010 00110101 00110110 00101011 01100010 01110110
01111001 10100110 01111101 01001010 10100101 01001010 00110110 11001100
01100010 10100110 11100101 00110010 11001101 01010001

3 पेनल्टी रन आते हैं, vy¦}जो प्रत्येक बाइनरी स्ट्रिंग में पहले बाइट को बंद करने के लिए उपयोग किया जाता है, लेकिन यह अभी भी 4 रन से सस्ता है जो हम छोटे से प्राप्त करेंगे €¦


@JonathanAllan: मैं अंत में इसका थोड़ा सा उल्लेख करता हूं (लेकिन विस्तार से नहीं), लेकिन दुर्भाग्य से सीपी -1252 में द्विआधारी प्रतिनिधित्व है 10000000जो स्वयं द्वारा 4 का जुर्माना लगाता है।
एमिग्ना

आह, तो आप करते हैं! ... और प्रतिनिधित्व पाने के लिए मेरा पायथन कोड गलत था क्योंकि मैंने # coding: cp1252शीर्ष पर रखा था _ _ <
जोनाथन एलन

3

पर्ल , 33 + 160 = 193

-nध्वज के लिए कोड + 1 बाइट के 32 बाइट्स ।

$_=unpack"B*";print!m+(.)\1\1\1+

(अंतिम न्यूलाइन के बिना इनपुट की आपूर्ति की जानी चाहिए। इसे ऑनलाइन आज़माएं लिंक -lको निकालने के लिए लिंक , लेकिन एक इनपुट के लिए, इसकी आवश्यकता नहीं है)।

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

xxd डंप:

00000000: 00100100 01011111 00111101 01110101 01101110 01110000  $_=unp
00000006: 01100001 01100011 01101011 00100010 01000010 00101010  ack"B*
0000000c: 00100010 00111011 01110000 01110010 01101001 01101110  ";prin
00000012: 01110100 00100001 01101101 00101011 00101000 00101110  t!m+(.
00000018: 00101001 01011100 00110001 01011100 00110001 01011100  )\1\1\
0000001e: 00110001 00101011                                      1+

कुछ नोट:

  • (.)\1\1\1कुछ दंड बचाता है (.)\1{3}, 1111|0{4}या किसी अन्य regex मैं के बारे में सोच सकता है (का उपयोग कर 0या {}एक भारी कीमत पर आता है)।
  • printउपयोग करने पर ~ 8 अंक बचाता है -pऔर $_=क्योंकि p4 का एक रन होता है0 , जबकि nऐसा नहीं करता।
  • +Regex के लिए सीमांकक के रूप में एक रन बचाता 1है/
  • एक के बजाय दो कदम करने से !~दो रन बचते हैं ( ~है)01111110 बाइनरी में)।
  • unpack"B*"काफी महंगा है (4 रन), लेकिन मुझे सस्ता नहीं मिला (समाधान आधार ordअधिक महंगे होंगे)।

3

PHP, 98 + 270 = 368 बाइट्स

मैं टाइटस ने जो प्रस्तावित किया था उससे एक अलग दृष्टिकोण लेना चाहता था , और थोड़े लंबे समय तक, कम दंडित कार्यक्रम के साथ समाप्त हुआ।

$v=unpack('H*',$argv[1]);$e=base_convert($v[1],16,2);echo!stristr($e,'0000')&&!stristr($e,'1111');

आउटपुट 1सत्य के लिए , फाल्स के लिए कुछ भी नहीं।

यहाँ यह कोशिश करो!

बाइनरी-एन्कोडेड:

0010010001110110001111010111010101101110011100000110000101100011011010110010100
0001001110100100000101010001001110010110000100100011000010111001001100111011101
1001011011001100010101110100101001001110110010010001100101001111010110001001100
0010111001101100101010111110110001101101111011011100111011001100101011100100111
0100001010000010010001110110010110110011000101011101001011000011000100110110001
0110000110010001010010011101101100101011000110110100001101111001000010111001101
1101000111001001101001011100110111010001110010001010000010010001100101001011000
0100111001100000011000000110000001100000010011100101001001001100010011000100001
0111001101110100011100100110100101110011011101000111001000101000001001000110010
1001011000010011100110001001100010011000100110001001001110010100100111011

(22 घटनाओं 0000और 5 घटनाओं की 1111, इसलिए 270 बाइट का जुर्माना)


2

PHP, 86 बाइट्स + 370 = 456

for(;$c=ord($argn[$i++]);)$s.=sprintf("%08b",$c);echo!preg_match("#(.)\\1\\1\\1#",$s);

बाइनरी स्ट्रिंग बनाता है और धारियों का पता लगाने के लिए एक रेगेक्स का उपयोग करता है। आउटपुट है1 सत्य के लिए है; झूठा के लिए खाली।

साथ दौड़ो echo '<string>' | php -nR '<code>'

बदलाव

  • backreferences 3 बाइट्स के लिए 100 दंड बचाते हैं। (-97 स्कोर)

विचारों को त्याग दिया

  • join(array_map(str_split())) 31 बाइट्स और 90 पेनल्टी का खर्च आएगा
  • और <?=/ के $argv[1]बजाय echo/ $argnलागत 2 + 40।
  • str_pad(decbin())की तुलना में महंगा है sprintf: 7 बाइट्स और 110 जुर्माना।
  • strtr 13 अतिरिक्त बाइट्स के लिए 80 जुर्माना बचाता है, लेकिन बैकरेफर बेहतर हैं।
  • बैकरेफ़र्स को समूहीकृत करना #(.)\\1{3}3 बाइट्स बचाता है, लेकिन 10 जुर्माना जोड़ता है।
  • foreach लागत 3 + 50।
  • चर नामों पर कोई बचत संभव नहीं है।
  • आउटपुट बफ़रिंग की लागत 42 + 120 है।

के लिए एक §पर जोड़ें । for(§;-9
क्रिस्टोफ़


2

जावास्क्रिप्ट (ईएस 8), 91 बाइट्स + 430 जुर्माना = 521 कुल

हो जाएगा ताकि उत्पादन 1के लिए trueऔर 0के लिए false

s=>1-/(.)\1\1\1/.test([...s].map(c=>c.charCodeAt().toString(2).padStart(3+5,1-1)).join(""))
01110011001111010011111000110001001011010010111100101000001011100010100101011100001100010101110000110001010111000011000100101111001011100111010001100101011100110111010000101000010110110010111000101110001011100111001101011101001011100110110101100001011100000010100001100011001111010011111001100011001011100110001101101000011000010111001001000011011011110110010001100101010000010111010000101000001010010010111001110100011011110101001101110100011100100110100101101110011001110010100000110010001010010010111001110000011000010110010001010011011101000110000101110010011101000010100000110011001010110011010100101100001100010010110100110001001010010010100100101110011010100110111101101001011011100010100000100010001000100010100100101001

कोशिश करो

f=

s=>1-/(.)\1\1\1/.test([...s].map(c=>c.charCodeAt().toString(2).padStart(3+5,1-1)).join(""))

console.log(f("U3"))
console.log(f("48"))
console.log(f("Foobar"))
console.log(f("Feeber"))
console.log(f("$H"))
console.log(f(""))


padStartES6 में नहीं है।
नील

लानत है! जब भी मैं इसका उपयोग करता हूं तो ES8 में बदलना भूल जाता हूं (ES7 और उसी के साथ Array.includes()) - धन्यवाद, @ नील।
झबरा

1

सीजेएम , 23 बाइट्स

डेल्टास के साथ काम करने के लिए जोनाथन एलन के विचार का उपयोग करता है ।

1q256b2b2ew::-[TTT]#)g-

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

बाइनरी प्रतिनिधित्व:

00110001011100010011001000110101
00110110011000100011001001100010
00110010011001010111011100111010
00111010001011010101101101010100
01010100010101000101110100100011
001010010110011100101101

स्पष्टीकरण:

1     e# Push a 1 for (much) later, because we can't use ! for logical NOT.
q     e# Read input.
256b  e# Treat characters as base 256 digits.
2b    e# Convert to binary. The last two steps together give us a flat binary
      e# representation of the input, avoiding both :~ and e_ for flattening.
2ew   e# Get all pairs of consecutive bits.
::-   e# Compute their differences.
[TTT] e# Push [0 0 0].
#     e# Find its index in the list of differences, or -1 if not found.
)g    e# Increment and take signum. We've now got the result we want but 
      e# with the wrong truth value.
-     e# Subtract it from the 1 we pushed earlier to negate the truth value.

1

पायथ, 19 + 12 * 10 = 139

!|}*"0"4.BQ}*"1"4.B

बाइनरी

00100001 01111100 01111101 00101010
00100010 00110000 00100010 00110100
00101110 01000010 01010001 01111101
00101010 00100010 00110001 00100010
00110100 00101110 01000010         

व्याख्या

!|}*"0"4.BQ}*"1"4.B
            *"1"4     # Repeat  ; '1111'
                 .B   # Convert ; input as a binary string
           }          # In      ; '1111' in the binary repr
   *"0"4              # Repeat  ; '0000'
        .BQ           # Convert ; input as a binary string
  }                   # In      ; '0000' in the binary repr
 |                    # Or      ; 4 consequent idenical digits found
!                     # Negate  ; True if not found, False if found

1

जावास्क्रिप्ट, 173 + 89 * 10 = 1063

जावास्क्रिप्ट बाइनरी में तारों को परिवर्तित करने में अच्छा नहीं है, लेकिन मुझे लगा कि मैं इस चुनौती को सिर्फ मनोरंजन के लिए एक शॉट दूंगा।

कोड:

function(n){b="";for(var t=0;t<n.length;t++)c=[n.charCodeAt(t).toString(2)],c.unshift(Array(8-c[0].length+1).join(0)),b+=c.join("");return b.match(/[1]{4,}|[0]{4,}/g)?!1:!0}

बाइनरी:

0110011001110101011011100110001101110100011010010110111101101110001010000110111000101001011110110110001000111101001000100010001000111011011001100110111101110010001010000111011001100001011100100010000001110100001111010011000000111011011101000011110001101110001011100110110001100101011011100110011101110100011010000011101101110100001010110010101100101001011000110011110101011011011011100010111001100011011010000110000101110010010000110110111101100100011001010100000101110100001010000111010000101001001011100111010001101111010100110111010001110010011010010110111001100111001010000011001000101001010111010010110001100011001011100111010101101110011100110110100001101001011001100111010000101000010000010111001001110010011000010111100100101000001110000010110101100011010110110011000001011101001011100110110001100101011011100110011101110100011010000010101100110001001010010010111001101010011011110110100101101110001010000011000000101001001010010010110001100010001010110011110101100011001011100110101001101111011010010110111000101000001000100010001000101001001110110111001001100101011101000111010101110010011011100010000001100010001011100110110101100001011101000110001101101000001010000010111101011011001100010101110101111011001101000010110001111101011111000101101100110000010111010111101100110100001011000111110100101111011001110010100100111111001000010011000100111010001000010011000001111101

स्पष्टीकरण:

इसके साथ काम करने के लिए एक स्ट्रिंग बनाएँ:

b="";

स्ट्रिंग में प्रत्येक वर्ण पर लूप:

for(var t=0;t<n.length;t++)

एक ऐरे बनाएं और कैरेक्टर कोड का उपयोग करके स्ट्रिंग को बाइनरी में बदलें:

c=[n.charCodeAt(t).toString(2)]

सरणी में अग्रणी शून्य जोड़ें:

c.unshift(Array(8-c[0].length+1).join(0))

सरणी को वापस स्ट्रिंग में शामिल करें:

b+=c.join("")

चार या अधिक 1 या 0 का एक स्ट्रिंग वापस लौटें या नहीं, बाइनरी परिणाम में एक नियमित अभिव्यक्ति का उपयोग करके पाया गया था:

return b.match(/[1]{4,}|[0]{4,}/g)?!1:!0

बेला:

https://jsfiddle.net/vrtLh97c/

आँकड़े:

लंबाई: 173 बाइट्स जुर्माना: 890 कुल: 1063

कोड गोल्फ कठिन है :)


क्या आप अपने कोड का द्विआधारी प्रतिनिधित्व प्रदान कर सकते हैं, और दंड का दस्तावेज दे सकते हैं?
पावेल

इसमें 1063 के कुल स्कोर के लिए 890 का जुर्माना है।
पावेल

मूल पोस्ट में जोड़े गए योग।
स्टीफनरिओस

1
1-1इसके बजाय 0कुछ स्थानों पर उपयोग करने से आप कुछ अवगुणों को बचा सकते हैं।
पोक

1

पायथ, 21 + 2 * 10 = 41

J-T2-4eS%2.nr.[dJ.BwJ

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

बाइनरी प्रतिनिधित्व:

01001010 00101101 010101[00 00]110010 00101101 00110100 01100101 01010011
00100101 00110010 00101110 01101110 01110010 00101110 01011011 01100100
01001010 00101110 01[0000]10 01110111 01001010

1

रेटिना, 101 + 1390 = 1491

कोड में अनपेक्षित वर्ण हैं, लेकिन यदि आप पोस्ट को संपादित करते हैं तो वे क्रोम में दिखाई देते हैं। -है \x01-\x7f

¶
±
S_`
%(S`±
{2`
$`
}T01`-`_o
)Ms`.
.+
$*
+`(1+)\1
${1}0
01
1
m+`^(?!.{8})
0
0{8}|¶

M&`(.)\1{3}
0

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

इस कोड का उपयोग करता है यहord , द्विआधारी के लिए रूपांतरण और चार के दृश्यों ओवरलैपिंग के लिए एक सरल चेक द्वारा पीछा किया।

बाइनरी में:

11000010101101100000101011000010101100010000101001010011010111110110000000001010001001010010100001010011011000001100001010110001000010100111101100110010011000000000101000100100011000000000101001111101010101000011000000110001011000000000000100101101011111110110000001011111011011110000101000101001010011010111001101100000001011100000101000101110001010110000101000100100001010100000101000101011011000000010100000110001001010110010100100000001000010100010010001111011001100010111110100110000000010100011000000110001000010100011000100001010011011010010101101100000010111100010100000111111001000010010111001111011001110000111110100101001000010100011000000001010001100000111101100111000011111010111110011000010101101100000101000001010010011010010011001100000001010000010111000101001000000010111101100110011011111010000101000110000

इस पायथन कार्यक्रम के साथ दंड की गणना की गई ।


कृपया एक हेक्सडंप और बाइनरी प्रतिनिधित्व प्रदान करें, क्योंकि इसमें अनप्रिंट्स शामिल हैं।
पावेल

मैंने पहले से ही कहा है कि क्या / जहां unprintables हैं, एक प्रोग्राम प्रदान करने के साथ-साथ बाइनरी स्ट्रिंग प्रिंट कर सकते हैं (नीचे की तरफ लाइन को अनलाइक करें)।
mbomb007

ठीक है, फिर ..
पावेल

1

पायथन 2 , 74 (लंबाई) + 130 (जुर्माना) = 204

k,n=2*[1]
for[c]in(input(n)*2*2*2)[:1:-1]:n,k=k*ord(c[:n%16%15])+n/2,k*128

आउटपुट निकास कोड के माध्यम से है; सत्य है, मिथ्या है। STDOUT और STDERR को कचरा उत्पादन करता है।

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

बाइनरी डंप

00000000: 01101011 00101100 01101110 00111101 00110010 00101010  k,n=2*
00000006: 01011011 00110001 01011101 00001010 01100110 01101111  [1].fo
0000000c: 01110010 01011011 01100011 01011101 01101001 01101110  r[c]in
00000012: 00101000 01101001 01101110 01110000 01110101 01110100  (input
00000018: 00101000 01101110 00101001 00101010 00110010 00101010  (n)*2*
0000001e: 00110010 00101010 00110010 00101001 01011011 00111010  2*2)[:
00000024: 00110001 00111010 00101101 00110001 01011101 00111010  1:-1]:
0000002a: 01101110 00101100 01101011 00111101 01101011 00101010  n,k=k*
00000030: 01101111 01110010 01100100 00101000 01100011 01011011  ord(c[
00000036: 00111010 01101110 00100101 00110001 00110110 00100101  :n%16%
0000003c: 00110001 00110101 01011101 00101001 00101011 01101110  15])+n
00000042: 00101111 00110010 00101100 01101011 00101010 00110001  /2,k*1
00000048: 00110010 00111000                                      28

मैंने पाया है कि 0शामिल करने के लिए बहुत बुरा है। इसका उपयोग करना बेहतर है1-1
पोक

@ प्रोक मुझे बस अपनी गलती का एहसास हुआ। परिणाम अप्रयुक्त है, इसलिए मुझे यकीन नहीं है कि मैंने 0पहले स्थान पर क्यों चुना ।
डेनिस

1

जावास्क्रिप्ट (ईएस 6), 87 88 + 390 380 = 477 468 बाइट्स

s=>1-/(.)\1\1\1/.test(s.replace(/[\S\s]/g,c=>(256+c.charCodeAt()).toString(2).slice(1)))

बाइनरी में:

01110011001111010011111000110001001011010010111100101000001011100010100101011100001100010101110000110001010111000011000100101111001011100111010001100101011100110111010000101000011100110010111001110010011001010111000001101100011000010110001101100101001010000010111101011011010111000101001101011100011100110101110100101111011001110010110001100011001111010011111000101000001100100011010100110110001010110110001100101110011000110110100001100001011100100100001101101111011001000110010101000001011101000010100000101001001010010010111001110100011011110101001101110100011100100110100101101110011001110010100000110010001010010010111001110011011011000110100101100011011001010010100000110001001010010010100100101001

आधे से अधिक जुर्माना बाइट्स के बीच ओवरलैप में शून्य करने के लिए नीचे है, बजाय निम्नलिखित वर्णों में रन =>//pa//=>aCoAo:।

के बाद से /है ( 00101111) एक दंड मैं एक करने की कोशिश की) से स्विच का भुगतान testकरने के लिए matchख) से स्विच replaceकरने के लिए mapलेकिन स्कोर हमेशा उच्च समाप्त हो गया। हालाँकि मैंने पाया कि [\S\s]यह एक सुधार था [^]। संपादित करें: सहेजे गए 9 बाइट्स कुल मिलाकर @ शुग्गी को धन्यवाद।


मुझे लगता |है कि चरित्र वर्ग में नहीं होना चाहिए
ETHproductions

@ETHproductions मुझे अपने स्पष्टीकरण में यह सही लगा ...
नील

आप बदल कर अपनी दंड से 10 दाढ़ी सकता है !साथ 1-468. के लिए कुल और आप की जगह 5 बाइट्स का एक और बचत कर सकता है [\S\s]के साथ .की 463. कुल
शैगी

@ शगुन थैंक्स, हालाँकि मुझे यकीन नहीं है कि क्या न्यूलाइन की छाप छपने लायक है, इसलिए मैं इसे अभी के लिए सुरक्षित रखूंगा।
नील

क्या js एक मल्टीलाइन रेगेक्स ध्वज का समर्थन करता है? यदि हां, तो आप झबरा के सुझाव को स्वीकार कर सकते हैं और ध्वज को जोड़कर अभी भी बाइट बचा सकते हैं।
पावेल

1

पायथ , 16 + 1 x 10 = 26 बाइट्स

qZsm:.BQjk*4]dZ2
   m           2  for d being the natural numbers below 2
            ]d        [d]
          *4          [d,d,d,d]
        jk            "dddd"
    :         Z       search for the above in
     .BQ              the binary representation of the input
                      (true/false)
  s               sum the 2-element array generated above, 1 for True, 0 for False
qZ                is equal to 0

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

बाइनरी

01110001 01011010 01110011 01101101
00111010 00101110 01[0000]10 01010001
01101010 01101011 00101010 00110100
01011101 01100100 01011010 00110010

ट्रिक्स

निम्नलिखित विकल्पों को अवगुणों से बचने के लिए किया जाता है:

  • (नकारात्मक) के qZबजाय !( शून्य के बराबर) का उपयोग करना
  • का उपयोग कर :xy0(के लिए खोज) है }xy(सबलिस्ट है)
  • (शून्य ही) के Zबजाय 0(शून्य से डिफ़ॉल्ट) का उपयोग करना

सुधार

मुझे दंड को दरकिनार करने का कोई तरीका नहीं मिला। हमारे पास बाइनरी से संबंधित ये कमांड हैं:

  • .Bबाइनरी ( 00101110 01[0000]10)
  • Cचारकोड ( 01[0000]11)
  • .Oअष्टक ( 00101110 0100[1111])
  • .Hहेक्साडेसिमल ( 00101110 01001[000)

ध्यान दें कि .Hहमें एक दंड भी दिया जाएगा, क्योंकि प्रत्येक मुद्रण योग्य चरित्र में इसकी द्विआधारी प्रतिनिधित्व होता है 0। इसलिए, मैंने सबसे प्रत्यक्ष एक का उपयोग किया, जो कि .B, इसे सीधे बाइनरी में परिवर्तित करना है।

मैं .Hदंड से बचने के लिए समाप्त हो सकता हूं , लेकिन इसकी लागत मुझे 27 बाइट्स ...

पीढ़ी

मुझे सभी स्वीकृत वर्ण मिले, जो कि इसमें शामिल नहीं हैं , 0000या 1111जो समाप्त नहीं होते हैं 000(क्योंकि अगला चरित्र शुरू होना चाहिए 0):

  • "#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw

यहाँ वे पात्र हैं जो समाप्त होते हैं 1000। उनका उपयोग केवल अंत में किया जा सकता है:

  • (8HXhx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.