केंद्र का पता लगाएं


24

ASCII वर्णों की एक स्ट्रिंग को देखते हुए, उस चरित्र को आउटपुट करें जो बीच में है। यदि कोई मध्य वर्ण नहीं है (जब स्ट्रिंग की लंबाई समान होती है), तो ASCII वर्ण को आउटपुट करें, जिसका क्रमिक दो केंद्र वर्णों का फ़्लोर्ड औसत है। यदि स्ट्रिंग खाली है, तो एक खाली स्ट्रिंग आउटपुट होना चाहिए।

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

12345 => 3

Hello => l

Hiya => q

(empty input) => (empty output)

पात्रों में सबसे छोटा कार्यक्रम जीतता है। (बाइट्स नहीं।)

लीडरबोर्ड

इस पोस्ट के निचले हिस्से में स्टैक स्निपेट उत्तर से लीडरबोर्ड उत्पन्न करता है) ए प्रति भाषा में सबसे छोटे समाधान की सूची के रूप में और बी) एक समग्र लीडरबोर्ड के रूप में।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिख रहा है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

## Language Name, N characters 

Nआपके प्रस्तुत करने का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

## Ruby, <s>104</s> <s>101</s> 96 characters 

यदि आप अपने हेडर में कई संख्याओं को शामिल करना चाहते हैं (जैसे कि आपका स्कोर दो फ़ाइलों का योग है या आप दुभाषिया ध्वज दंड को अलग से सूचीबद्ध करना चाहते हैं), तो सुनिश्चित करें कि हेडर में वास्तविक अंक अंतिम संख्या है:

## Perl, 43 + 2 (-p flag) = 45 characters 

आप भाषा के नाम को एक लिंक भी बना सकते हैं जो बाद में स्निपेट में दिखाई देगा:

## [><>](http://esolangs.org/wiki/Fish), 121 characters 


15
आमतौर पर हम बाइट्स में स्कोर करते हैं ताकि लोग अपने पूरे कोड को कम न कर सकें, क्योंकि इससे बोरिंग समाधान निकलता है। क्या आप वाकई यह चाहते हैं?
डाउनगेट

1
@ V @ मुझे नहीं लगता कि यहां कोई समस्या होगी, क्योंकि समाधान वैसे भी बहुत कम होंगे, इसलिए कंप्रेसिंग इसके लायक नहीं होगी।
Ypnypn

9
PPCG में आपका स्वागत है! पहली पहली चुनौती!
कॉनर ओ'ब्रायन

2
क्या हम फ़ंक्शन लिख सकते हैं?
डाउनगोट

10
प्रो-टिप: UTF-32 में अपने उत्तरों को एनकोड करें। प्रति चरित्र 4 बाइट्स। या हो सकता है कि ओपी को केवल चरित्र स्कोरिंग से छुटकारा मिलना चाहिए।
मेगो

जवाबों:


9

अजगर, 15 बाइट्स

Cs.O@R/lz2_BCMz

प्रदर्शन

इनपुट के रूप में "हिया" से शुरू:

              z    "Hiya"                                      Input
            CM     [72, 105, 121, 97]                          Character values
          _B       [[72, 105, 121, 97], [97, 121, 105, 72]]    Pair with reversal
      /lz2         2                                           Halfway index
    @R             [121, 105]                                  That element in each
  .O               113.0                                       Average
 s                 113                                         Floor
C                  "q"                                         Cast to character
                   q                                           Print implicitly

ध्यान दें कि यह खाली इनपुट पर एक त्रुटि के साथ क्रैश होता है, और STDOUT को कुछ भी प्रिंट नहीं करता है, जो कि कोड-गोल्फ डिफॉल्ट्स द्वारा खाली स्ट्रिंग को आउटपुट करने का एक वैध तरीका है।


Bifurcate अपनी उपयोगिता को फिर से दिखाता है।
lirtosiast

whoa bifurcate कमाल का है।
माल्टीसेन

@KenanRhoton आपके प्रस्तावित संपादन के जवाब में, उस फ़ंक्शनलिटी की जाँच करें जिसने Cफ़र्श की कार्यक्षमता को जोड़ा है : github.com/isaacg1/pyth/commit/0baf23ec जिस दिन इसे जोड़ा गया था, उसी दिन यह प्रश्न पूछा गया था। ऐसा इसलिए है क्योंकि इस प्रश्न ने मुझे उस कार्यक्षमता को जोड़ने के लिए प्रेरित किया, जिससे मैं इस प्रश्न पर उपयोग करने के लिए अयोग्य हो गया।
isaacg

8

ब्रेनफ ***, 61 बाइट्स

चीनी , 16 वर्ण

इसके लिए इनपुट की आवश्यकता ASCII रेंज 1-127 में है और यह शून्य-समाप्त है। यह स्ट्रिंग के प्रारंभ और अंत से पात्रों के जोड़े को हटा देता है जब तक कि एक या दो वर्ण शेष न हों। यदि दो हैं, तो यह उन्हें एक साथ जोड़ता है, फिर नीचे की ओर 2 से विभाजित करता है। शेष चरित्र मुद्रित है।

,[>,]<<<[[<]>[-]>[>]<[-]<<<]>[[->+<]>[-[-<+<]>>]<[>]<[>]<<]>.

इस दुभाषिए पर कोशिश करें ।

विच्छेदन:

,[>,]         Get the null terminated input
<<<           Move to the second last character
[             While there are at least 3 characters
  [<]>           Move to the first character
  [-]            Delete it
  >[>]<          Move to the last character
  [-]            Delete it
  <<<            Move the the third last character
]
>              Move to the second last character
[              If there are two characters remaining
  [->+<]         Add the two characters together
  >[-[-<+<]>>]   Divide the character by 2 rounding down
  <[>]<[>]<<     Move to before the character to exit the if loop
]
>.             Print the remaining character

* यह देखते हुए कि प्रत्येक निर्देश को 3 बिट्स के लिए संकुचित किया जा सकता है और UTF-32 में एन्कोड किया जा सकता है, पूरे कार्यक्रम को तकनीकी रूप से 6 वर्णों में व्यक्त किया जा सकता है।

संपादित करें: और मुझे चीनी से परिचित कराने के लिए जान ड्वोरक का धन्यवाद , जो इसे 16 पात्रों में संपीड़ित करता है, डेनिस के सीजाम के उत्तर के साथ

蜐蕈帑聿纂胯箩悚衅鹊颂鹛拮拮氰人

5
Given each instruction could be compressed to 3 bits and encoded in UTF64, the whole program could technically be expressed in 3 characters.तुम जीते। इंटरनेट। और सब कुछ।
बिल्ली

1
मुझे नहीं लगता कि यह मान्य है। ब्रेनफक स्रोत कोड वर्ण हैं +-<>,.[] , जो भी एन्कोडिंग में हैं, न कि उनके बाइनरी प्रतिनिधित्व। हमारे पास एक आम सहमति है कि एक एन्कोडिंग जिसका उपयोग मौजूदा दुभाषिया द्वारा नहीं किया जा सकता है वह अमान्य है।
lirtosiast

2
@ThomasKwa, इसलिए मैंने अपने स्कोर को मुख्य रूप से संयुक्त राष्ट्र के एनकोडेड बाइट्स में दिया। चरित्र एन्कोडिंग सिर्फ इस विचार में शामिल हो रहा था कि पात्रों द्वारा स्कोरिंग का दुरुपयोग किया जा सकता है।
हाथ-ई-फूड

4
@ThomasKwa: हम में से कुछ के लिए इस तरह के दुभाषिया बनाने का समय है, जिसका उपयोग भविष्य की चुनौतियों में किया जाएगा। कल्पना कीजिए कि बीएफ सर्वश्रेष्ठ गोल्फस्क्रिप्ट समाधान को हरा रहा है! :)
vsz


6

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

q:i_W%.+_,2/=2/c

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

यह काम किस प्रकार करता है

q                e# Read all input.
 :i              e# Cast each character to integer.
   _W%           e# Push a reversed copy.
      .+         e# Perform vectorized addition.
        _,2/     e# Get the length, divided by 2.
            =    e# Select the corresponding sum.
             2/c e# Divide by 2 and cast to character.

9
लगभग कोई भी CJam / Pyth गोल्फ 10-30 वर्ण का क्यों नहीं होता है? ऊ
ज़ेरेगेस

1
कठिनाई? यह एक साधारण औसत गणना है, माइनस द सॉर्टिंग ...
डेनिस

4
@ डेनिस मुझे लगता है कि उसका यही मतलब है। यह आसान और कठिन दोनों प्रश्नों के लिए समान लंबाई के बारे में हो सकता है।
जियोकॉवेल

@Zereges वास्तव में नहीं। 10-30 आसान समस्याओं के लिए विशिष्ट है। इसे देखें यदि आप एक उदाहरण चाहते हैं कि यह कुछ और जटिल कैसे दिखता है: codegolf.stackexchange.com/a/64086/32852
रेटो कोराडी

6

टीस्क्रिप्ट , 23 बाइट्स 25 30 31 33

²(x[t=xn/2]c+xv[t]c)/2)

@ Isaacg के स्ट्रिंग को उलटने के विचार का उपयोग करता है।

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

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

अनप्लग्ड && स्पष्टीकरण

TeaScript अभी भी जावास्क्रिप्ट है इसलिए यह जावास्क्रिप्ट की तरह भी बहुत काम करता है।

C((x[t=xn/2]c+xv[t]c)/2)

C((           // Char code to char
   x[t=xn/2]c // Floored center
   +          // Add to
   xv[t]c     // Ceil'd center
  ) / 2)      // Divide by 2

5
वह कर्निंग ...
lirtosiast

10
वह हेडर रेड है। मैं चाहता हूं कि हर गॉडडैम भाषा के लिए हेडर।
बिल्ली

हाँ, सिवाय kening के।
बिल्ली

@sysreq योग्य, यह इस तथ्य के साथ करना था कि मैं एक अलग फ़ॉन्ट का उपयोग कर रहा हूं, निश्चित।
डाउनगैट


5

मतलाब, 39 37 बाइट्स

floor((end+[1,2])/2) यदि लंबाई समान है, तो स्ट्रिंग के मध्य दो सूचकांकों को लौटाता है और यदि लंबाई विषम है तो मध्य सूचक को दो बार लौटाता है।

mean बस उन मूल्यों का मतलब देता है और char स्वचालित रूप से इसे फर्श करता है।

@(s)char(mean(s(floor(end/2+[.5,1]))))

5

8086 मशीन कोड + डॉस, 31 बाइट्स

Hexdump:

BA 1E 01 B4 0A CD 21 8B F2 46 8A 1C D0 EB 8A 50
01 72 06 74 08 02 10 D0 EA B4 02 CD 21 C3 FF

विधानसभा स्रोत कोड (tasm के साथ इकट्ठा किया जा सकता है):

    .MODEL TINY

    .CODE
    org 100h

    MAIN PROC

    mov dx, offset buf
    mov ah, 10      ; DOS function "read string"
    int 21h

    mov si, dx
    inc si          ; si now points to the length of the string
    mov bl, [si]    ; 
    shr bl, 1       ; divide the length by 2
    mov dl, [si+bx+1] ; load the middle char
    jc calc_done    ; if length was odd - done
    jz output_done  ; if length was zero - exit
    add dl, [si+bx] ; add the other middle char
    shr dl, 1       ; divide by 2
calc_done:
    mov ah, 2       ; DOS function "output char"
    int 21h
output_done:
    ret

buf db 255          ; maximum bytes to input

    MAIN ENDP
    END MAIN

यहां FLAGS रजिस्टर के कुछ नाजुक उपयोग हैं। इसके बाद यह स्ट्रिंग की लंबाई 1 बिट (जो कि 2 से विभाजन के बराबर है) की लंबाई को बदल देता है, दो झंडे अतिरिक्त जानकारी संग्रहीत करते हैं:

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

आम तौर पर, झंडे को तुरंत जांचना चाहिए, लेकिन यहां मैं इस तथ्य का उपयोग करता हूं कि movनिर्देश झंडे को नहीं बदलता है। इसलिए मध्य वर्ण को लोड करने के बाद उनकी जांच की जा सकती है।


4

पायथन 3, 61 59 57 55 बाइट्स

मैं उन भाषाओं के साथ गोल्फ नहीं करने की कोशिश करता हूं जिनमें मैं काम करता हूं, लेकिन यह बहुत बुरी नहीं है।

2 बाइट्स के लिए @xsot को धन्यवाद!

lambda x:chr((ord(x[len(x)//2])+ord(x[~len(x)//2]))//2)

पूरा कार्यक्रम 59 बाइट्स है:

x=input()
l=len(x)//2
print(chr((ord(x[l])+ord(x[~l]))//2))

इसे यहाँ आज़माएँ ।


आह, तुम मुझे क्या मेरी अगली काम हो जा रहा था को हराया (था मैं नहीं बंद दाढ़ी बनाने के लिए 10 बाइट्स पाया जाता है)
बिल्ली

नहीं, नहीं, 10 बाइट्स मेरे 166 बाइट गो सॉल्यूशन को शेव करने के लिए तुम्हारा हालांकि अधिक सुरुचिपूर्ण है।
बिल्ली 2

@sysreq आह, मुझे गलत समझा गया। और धन्यवाद।
lirtosiast

-1-len(x)//2इस ~len(x)//2वजह से बराबर है कि कैसे फर्श विभाजन नकारात्मक पूर्णांक पर काम करता है।
xsot

@xsot धन्यवाद- यह कोड को थोड़ा और बुरा बनाता है हालांकि :)
lirtosiast

4

प्रोलॉग, 111 बाइट्स

कोड

p(X):-atom_codes(X,L),length(L,N),I is N//2,J is(N-1)//2,nth0(I,L,A),nth0(J,L,B),Q is(A+B)//2,writef('%n',[Q]).

व्याख्या की

p(X):-atom_codes(X,L),       % Convert to list of charcodes
      length(L,N),           % Get length of list
      I is N//2,             % Get mid index of list
      J is(N-1)//2,          % Get 2nd mid index of list if even length
      nth0(I,L,A),           % Get element at mid index
      nth0(J,L,B),           % Get element at 2nd mid index
      Q is(A+B)//2,          % Get average of elements at mid indices
      writef('%n',[Q]).      % Print as character

उदाहरण

>p('Hello').
l

>p('Hiya').
q

4

आर , 73 बाइट्स

function(x,y=utf8ToInt(x),n=sum(1|y))if(n)intToUtf8(mean(y[n/2+c(1,.5)]))

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

इस गैर-पुनरावर्ती विचार के साथ आने के लिए @ngm को बहुत धन्यवाद - 20 बाइट्स के लिए गोल्फ की अनुमति।

पुराना समाधान:

आर , 101 95 बाइट्स

"!"=function(x,n=sum(1|x))"if"(n<3,mean(x),!x[-c(1,n)])
try(intToUtf8(!utf8ToInt(scan(,""))),T)

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

पुनरावर्ती समाधान। 2 बाइट्स की कीमत पर एक समस्या को ठीक किया:

  • try(expr, silent = TRUE)उस मामले को ठीक से प्रबंधित करने के लिए जोड़ा गया जहां इनपुट खाली है।

4 बाइट्स के लिए धन्यवाद Giusppe!


intToUtf8गैर-पूर्णांक को छोटा नहीं करता है ?
Giuseppe

@Giuseppe आप हमेशा की तरह सही हैं :)
JayCe

92 बाइट्स गैर-पुनरावर्ती समाधान।
एन जी एम

82 बाइट्स मैं आपको एक अलग उत्तर के रूप में पोस्ट करूंगा - यह मेरे उत्तर से पूरी तरह से अलग है!
JayCe

जब तक आपने मूल प्रयास नहीं किया था, तब तक मैं इसके साथ नहीं आया था। और मेरा उत्तर शीर्ष मत प्राप्त करने वाले पायनियर उत्तर का एक बंदरगाह था। ट्रिक्स के एक समूह के साथ हम आर लोग आ गए हैं। और फिर आपने इसे छोटा कर दिया। तो आगे बढ़ो और एक स्पष्ट विवेक के साथ संपादन करें!
एन जी एम

4

भूसी , 11 बाइट्स

c½S¤+öc→←½↔

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

व्याख्या

स्वादिष्ट, स्वादिष्ट कंघी बनाने वाले सभी तरह से नीचे। ö"इन चार कार्यों की रचना" है, ¤"दो तर्क को अलग से दो तर्क देने के परिणामों पर पहला तर्क लागू करें", S"इस फ़ंक्शन (जो दो तर्क लेने चाहिए) को Sतीसरे तर्क और परिणाम के लिए लागू करें" Sइसके तीसरे तर्क को लागू करने के लिए "। इसलिए,

   Function       Type                Semantics
     öc→←½        [TChar]->TInt       ASCII code of middle (floored) char in string
   ¤+öc→←½        [TC]->[TC]->TI      Sum of ASCII codes of middle of two strings
  S¤+öc→←½↔       [TC]->TI            Sum of ASCII codes of the middle of a string and its reverse
c½S¤+öc→←½↔       [TC]->TC            ASCII character represented by half the above, QEF

जोड़ने के लिए संपादित: सख्ती से बोलना, यह समस्या विनिर्देशन के अनुरूप थोड़ा विफल हो जाता है, जो खाली इनपुट के मामले में एक स्ट्रिंग और अन्य मामलों में एक चरित्र का अनुरोध करता है।

हस्क के सख्त टाइपिंग के कारण, यह केवल एक फ़ंक्शन / प्रोग्राम को परिभाषित करना संभव नहीं है जो दो प्रकारों में से वापस आ सकता है। मैंने सभी मामलों में एक एकल चरित्र वापस करने के लिए चुना, और भूसी के लिए, खाली स्ट्रिंग का प्रतिनिधित्व करने के लिए एक एकल चरित्र के लिए सबसे उचित विकल्प है '(space)'क्योंकि यह "डिफ़ॉल्ट" मान है (और वास्तव में, यही कारण है कि यह कार्यक्रम इसे वापस लौटाता है; डिफ़ॉल्ट) मान का उपयोग तब किया जाता है जब एक खाली सूची का अंतिम ( ) आइटम ले जाता है ।

मैं यथोचित रूप से शून्य या एक वर्ण के तारों को लौटाने के लिए चुना जा सकता था, जो दूसरी दिशा में विनिर्देश को विफल कर देगा, लेकिन मैंने इसलिए नहीं किया क्योंकि इसमें चार बाइट्स जोड़े गए हैं: चरित्र को एक-वर्ण स्ट्रिंग Ṡ&ö;c½S¤+öc→←½↔में ;परिवर्तित करने के साथ , दूसरा öस्पष्ट रूप से जरूरतमंदों की रचना करने के लिए, और Ṡ&झूठी इनपुट के मामले में शॉर्टकट के लिए।


3

सी ++ 14, 56 बाइट्स

[](auto s){int l=s.size();return(s[(l-1)/2]+s[l/2])/2;};

अनाम लंबोदर एक तर्क के रूप में स्ट्रिंग ले रहा है और चार कोड के रूप में इंट वापस कर रहा है। के लिए "", यह लौटता है0 । यह सुनिश्चित नहीं है कि इनपुट और आउटपुट बिल्कुल कैसे दिखना चाहिए (यह प्रश्न में निर्दिष्ट नहीं है)।

उपयोग के साथ, अपुष्ट

#include <string>
int main()
{
    auto lmbd = [](auto str)
    {
        int len = str.size();
        return (str[(len - 1) / 2] + str[len / 2]) / 2;
    };

    std::cout << (char) lmbd("Hiya"s) << std::endl; // outputs q
}

@ C @O'Bʀɪᴇɴ किया।
ज़ेरेगेस 24'15

मुझे नहीं लगता कि आप वर्ण कोड के साथ आउटपुट कर सकते हैं, और मुझे नहीं लगता कि आप 0या तो "" के लिए आउटपुट कर सकते हैं।
lirtosiast

स्पष्ट नियम रखना अच्छा होगा।
ज़ेरेगेस


3

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

2 बाइट्स @ Cʀɪᴇɴ O'Bed की बदौलत सहेजे गए

सहेजे गए 6 बाइट्स @ETHproductions की बदौलत

s=>String.fromCharCode((s[~~(t=s.length/2-.5)][q='charCodeAt']()+s[0|t+.9][q]())/2)

जावास्क्रिप्ट यह सब स्ट्रिंग चार कोड में बहुत अच्छा नहीं है।


आपने मुझे इसमें हरा दिया। ओह ठीक है, कम से कम मैं आपकी मदद कर सकता हूं;) s=>String.fromCharCode((s[~~(t=s.length/2-.5)][r="charCodeAt"]()+s[Math.ceil(t)][r])/2)5 बाइट्स छोटी है।
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ मीठा। मैं ()आसपास की जरूरत है charCodeAtतो यह वास्तव में 3 वर्ण है, लेकिन वैसे भी धन्यवाद!
डाउनगैट

@ Is n anuɐɯɹɐ ɯ oɯ अगर tएक पूर्णांक है जो काम नहीं करेगा
डाउगाट

Math.ceil(t)को बदला जा सकता है0|t+.9
ETHproductions

@ETHproductions धन्यवाद, 6 बाइट्स बचाए गए!
डाउनगैट

3

, 44 34 बाइट्स

पार किया 44 अभी भी नियमित है 44 :(

ise.eJ;2/m[(\($L;dJ{#\#+2/c}L;?o];

बाइट्स बर्बाद पर:

  • जाँच की जा रही है कि इनपुट की लंबाई सम / विषम है या नहीं
  • मध्य चरित्र प्राप्त करना

7
मुझे यकीन है कि आपने यह कहने के लिए एक ungolfed संस्करण पोस्ट किया है;)
कॉनर ओ'ब्रायन

4
@ C @O'Bʀɪᴇɴ मैं अभी-अभी भाग्यशाली हुआ: D
चरण

2

मिंकोलंग 0.13 , 23 20 बाइट्स

$oI2$%d$z,-Xz3&+2:O.

इसे यहाँ आज़माएँ।

व्याख्या

$o        Read in the whole stack as characters
I2$%      Push I,2, then pop them and push I//2,I%2
d$z       Duplicate top of stack (I%2) and store in register (z)
,-X       <not> the top of stack, subtract, and dump that many off the top of stack
z3&       Retrieve value from register and jump 3 spaces if this is not zero
   +2:    Add and then divide by 2
O.        Output as character and stop.

1
hiyaके iबजाय रिटर्नq
डाउगाट

@ V @: ओह। मैंने इसे गलत बताया। मुझे लगा कि प्रश्न बीच में चरित्र के लिए पूछ रहा था, अगर लंबाई समान थी तो फ्लोवर औसत स्थिति में जा रहा था।
एलेंडिया स्ट्राटन

@ThomasKwa: फिक्स्ड।
एलेंडिया स्ट्राटन

@ V @: ^ फिक्स्ड।
एलेंडिया स्ट्राटन

2

जाप , ४० २ ९ २३ २१ 20 बाइट्स

सहेजे गए 4 बाइट्स @ ɟ nɯuן ɯ oed के लिए धन्यवाद

अब केवल आधी मूल लंबाई! मुझे कोड गोल्फ पसंद है। :-D

UcV=K*Ul)+Uw cV)/2 d

खाली स्ट्रिंग पर ठीक से काम करता है। इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

          // Implicit: U = input string, K = 0.5
Uc        // Take the char-code at position
 V=K*Ul   //  V = 0.5 * length of U
+         //  (auto-floored), plus
Uw cV     //  the char-code at position V (auto-floored) in the reversed string,
/2 d      //  divide by 2, and turn back into a character (auto-floored).
          // Implicit: output last expression

जैसा कि आप देख सकते हैं, यह बहुत सारे ऑटो-फ़्लोरिंग का उपयोग करता है। (धन्यवाद, जावास्क्रिप्ट!) सुझावों का स्वागत है!


उलटी बात शानदार है +1
डाउनगोट

क्या आप बस नहीं कर सकते थे V=Ul /2;((UcV +Uw cV )/2 d?
मामा फन रोल

@ @ N duuɐɯɹɐ ɯ oɯ खैर, duh: P मैंने cकई बार बिना किसी तर्क के उपयोग किया है कि मैं इसे भूल गया। धन्यवाद!
ETHproductions

2

गो, १६६ १५६ 153 बाइट्स

गो गोल्फिंग के लिए सबसे अच्छी भाषा नहीं हो सकती है ... लेकिन मुझे यह बहुत पसंद है, और मैं इसे सीख रहा हूं, इसलिए।

यह कार्यान्वयन रिक्त ( \n) इनपुट स्वीकार करता है और संभवतः गैर-एएससीआईआई / एएससीआईआई-विस्तारित इनपुट के साथ टूट जाएगा। हालाँकि, OP ने इनपुट / आउटपुट एन्कोडिंग को निर्दिष्ट नहीं किया है, इस प्रकार ASCII वह सब है जिसका मैंने स्पष्ट रूप से समर्थन किया है।

संपादित करें : निकलता हैif / else से छोटा है switch। अब मुझे पता है, मुझे लगता है।

golfed:

package main;import ."fmt";func main(){a:="";_,_=Scanln(&a);if b:=len(a);b>0{x:=b/2;if b%2==0{Printf("%c",(a[x]+a[x+1])/2)}else{Println(string(a[x]))}}}

Ungolfed:

package main # everything in go is a package.

import . "fmt" # the dot allows for absolute package method references 
# (think "from string import *" in python)

func main() {
    a := ""
    _, _ = Scanln(&a) # a pointer to a
    if b := len(a); b > 0 { # if statements allow local assignment statements
        x := b / 2
        if b%2 == 0 { # modulo 2 is the easiest way to test evenness
#in which case, average the charcodes and print the result
            Printf("%c", (a[x]+a[x+1])/2)
        } else {
# else just find the middle character (no rounding needed; integer division in Go always results in an integer)
            Println(string(a[x]))
        }
    }
}

2

S, 23 वर्ण

a=ïꝈ/2,ϚĎ((ïüa+ᴙïüa)/2)

Try it here (Firefox only).

विचार के लिए @ETHProductions का धन्यवाद!


2
लकी, बाइट्स के बजाय
चार्ट

अरे हाँ! हम सब बंधे हुए हैं।
मामा फन रोल

जो किसी ने भी इसे अस्वीकृत किया है, क्या मुझे स्पष्टीकरण मिल सकता है?
मामा फन रोल

2

सी #, 77 बाइट्स

s=>{int n=s.Length;return n<1?' ':(char)(n%2>0?s[n/2]:(s[n/2-1]+s[n/2])/2);};

यह वास्तव में एक स्ट्रिंग नहीं लौटाता है, और यदि इनपुट स्ट्रिंग खाली है, तो आपको एक स्पेस कैरेक्टर मिलेगा क्योंकि फ़ंक्शन को हमेशा एक मान वापस करना होगा। एक स्ट्रिंग को वापस करने के लिए 2 और बाइट्स की आवश्यकता होगी।

परीक्षण मामलों के साथ पूरा कार्यक्रम:

using System;

namespace FindTheCenter
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<string,char>f= s=>{int n=s.Length;return n<1?' ':(char)(n%2>0?s[n/2]:(s[n/2-1]+s[n/2])/2);};   //77 bytes
            Console.WriteLine(f(""));
            Console.WriteLine(f("Hello"));
            Console.WriteLine(f("Hiya"));
        }
    }
}

वैकल्पिक रूप से, एक पूरा कार्यक्रम जो उपयोगकर्ता इनपुट को पढ़ता है और दर्ज किए गए स्ट्रिंग के केंद्र को प्रिंट करता है:

सी #, 144 बाइट्स

using C=System.Console;class P{static void Main(){var s=C.ReadLine();int n=s.Length;C.Write(n<1?' ':(char)(n%2>0?s[n/2]:(s[n/2-1]+s[n/2])/2));}}

फिर से, यह स्पेस कैरेक्टर को प्रिंट करने की उसी ट्रिक का उपयोग करता है, जिसे उपयोगकर्ता नोटिस नहीं करेगा, और न ही एक खाली स्ट्रिंग, अन्यथा समाधान 2 बाइट्स लंबा है।


2

विम, 38 24 23 कीस्ट्रोक्स

क्योंकि vim में मध्य रेखा को खोजने के लिए एक अंतर्निहित फ़ंक्शन है, लेकिन मध्य वर्ण नहीं है , हम हर वर्ण को पहली बार उपयोग करने वाली एक अलग रेखा पर विभाजित करते हैं substitute, मध्य रेखा को ढूंढते हैं, फिर उसके बाद और उससे पहले की सभी चीज़ों को हटा देते हैं।

:s/\./\0\r/g<cr>ddMjdGkdgg

यदि आप इसे चलाना चाहते हैं, तो उन .vimrcफ़ाइलों से सावधान रहें, जो .(मैजिक रेगेक्स) के व्यवहार को बदल सकती हैं औरg (गेडफॉल्ट) । ध्यान दें कि यह वास्तव में मुझे मेरी मशीन पर 3 कीस्ट्रोक्स बचाता है :)

पिछला उत्तर

:exe 'norm '.(virtcol('$')/2).'|d^ld$'

इनपुट के रूप में एक लाइन बफर लेता है, मध्य चरित्र के साथ वर्तमान बफर को अपडेट करता है। मैंने सोचा था कि इस के लिए एक शॉर्टकट होता विम में!

नोट: एक संभावित छोटा समाधान एक अनंत लूप का कारण लगता है ... अगर किसी को एक विचार है: qq^x$x@qq@qp(12 कीस्ट्रोक्स) - यह <c-c>अंतिम के बाद के साथ काम करता है @q...


1

गणितज्ञ, ११hem ९९ वर्ण

Floor
If[#=="","",FromCharacterCode[%@Mean@#[[Ceiling[l=Length@#/2];;%[l+1]]]&@ToCharacterCode@#]]&

Mma वर्ण कोड हेरफेर महंगा है ...


यह फ़ंक्शन केवल एक बार काम करता है, जब तक आप हर बार जब आप इसे कॉल करना चाहते हैं तो पूरे कोड को दोहराते हैं। फ़ंक्शन सबमिशन का बिंदु उनके लिए पुन: प्रयोज्य होना है । अपने फ़ंक्शन को कॉल करना वैश्विक के मूल्य को तोड़ता है %जो उस पर निर्भर करता है।
मार्टिन एंडर

1
क्यों नहीं फर्श और छत के छोटे रूपों का उपयोग करें?
डेविड सीपी

1

VBA, 130 बाइट्स

Function a(q)
h=Len(q):a=Mid(q,(h)/2,2)
If h Mod 2=0 Then:a=Chr((Asc(Left(a,1))+Asc(Right(a,1)))\2):Else:a=Right(a,1)
End Function

मध्य 2 वर्ण पाता है।
यदि वर्णों की संख्या विषम है, तो मध्य 2 का अधिकार प्राप्त करें, जो कि हम नीचे गोल होते ही सही मध्य होगा।
यदि asc()2 वर्णों के ASCII मानों को 2 से विभाजित न करें और ASCII वर्ण वापस लौटाएंchr() उस मान के आधार पर ।

मुझे लगता है कि मैं एक asc()कॉल को दूर कर सकता हूं , लेकिन इसे कम काम करने के लिए नहीं मिला।



1

> <>, 24 + 3 (के लिए) = 27 बाइट्स

l1+l4(*9$.~{~
;
o;
+2,o;

पुराना समाधान (खाली इनपुट के लिए काम नहीं करता है):

l3(?v~{~
?vo;>l2=
;>+2,o

दोनों स्टैक पर इनपुट लेते हैं -s । दोनों 24 बाइट्स हैं।

इसे यहाँ ऑनलाइन आज़माएँ।


1

pb , 83 बाइट्स

^<b[1]>>>w[B!0]{<w[B!0]{t[B]<b[T]>>}<b[0]<b[0]<[X]>>}w[B=0]{<}t[B]<[X]t[B+T]vb[T/2]

जबकि इनपुट स्ट्रिंग में कम से कम 3 अक्षर हैं, पहले और आखिरी को हटा दिया जाता है। यह या तो 1 वर्ण को छोड़ देता है (अनमॉडिफाइड मुद्रित होना चाहिए) या 2 (औसत और मुद्रित होना चाहिए)। इसे संभालने के लिए, स्ट्रिंग के पहले और अंतिम पात्रों को एक साथ जोड़ा जाता है और दो से विभाजित किया जाता है। अगर वहाँ केवल एक चरित्र था (a+a)/2==a। अगर दो था, (a+b)/2तो वह चरित्र है जिसे मुद्रित करने की आवश्यकता है। pb "उधार" पायथन के अभिव्यक्ति मूल्यांकन ( def expression(e): return eval(e, globals())) इसलिए यह स्वचालित रूप से फ़्लॉयर किया जाता है।

खाली इनपुट को संभालने में मेरी लागत 5 बाइट होती है। विशेष रूप से,<b[1]> पहली पंक्ति पर। इससे पहले, जब मैंने "स्ट्रिंग" कहा, तो यह कुल झूठ था। पंजाब में तार नहीं हैं, इसमें ऐसे अक्षर हैं जो एक दूसरे के करीब होते हैं। "एक स्ट्रिंग के अंतिम चरित्र" की तलाश में बस ब्रश को बाईं ओर ले जाने का मतलब है जब तक कि यह एक चरित्र को हिट नहीं करता है। जब कोई इनपुट प्रदान नहीं किया जाता है, तो "जबकि कम से कम 3 वर्ण हैं" लूप पूरी तरह से छोड़ दिया जाता है और यह अंतिम चरित्र की तलाश शुरू करता है। इसके बिना <b[1]>, यह हमेशा के लिए देखती रहेगी। यह कोड विशेष रूप से इनपुट खाली होने पर 1 के मान से एक वर्ण (-1, -1) रखता है। स्ट्रिंग के "अंतिम वर्ण" को खोजने के बाद ब्रश मान लेता है कि पहला (0, -1) है और सीधे वहां जाता है, 0. (1+0)/2का मान ज्ञात करते हुए pb में 0 है,

लेकिन मोनोरेल, यह अभी भी छपाई है! चुनौती विनिर्देश कहता है(empty input) => (empty output) ! क्या एक अशक्त चरित्र को धोखा देना नहीं है? इसके अलावा, यह असंबंधित है, लेकिन आप स्मार्ट और सुंदर हैं।

धन्यवाद, काल्पनिक प्रश्न पूछने वाला इससे पहले, जब मैंने "प्रिंट" कहा, तो यह कुल झूठ था। Pb में, आप वास्तव में मान नहीं छापते हैं, आप बस उन्हें कैनवास पर रखते हैं। "आउटपुट के लिए एक रास्ता" के बजाय, कैनवास को असीम रूप से बड़े 2 डी सरणी के रूप में कल्पना करना अधिक सटीक है। यह किसी भी आयाम में नकारात्मक सूचकांकों की अनुमति देता है, और pb में बहुत सारी प्रोग्रामिंग वास्तव में यह सुनिश्चित करने के बारे में है कि ब्रश कैनवास पर उस स्थान पर पहुंच जाता है जिसे आप चाहते हैं। जब प्रोग्राम निष्पादित करना समाप्त करता है, तो गैर-नकारात्मक एक्स और वाई निर्देशांक के साथ कैनवास पर कुछ भी कंसोल पर उपयुक्त स्थान पर मुद्रित होता है। जब प्रोग्राम शुरू होता है, तो पूरा कैनवास 0. के मानों से भरा होता है, जिसमें अनंत पंक्तियों को प्रिंट नहीं करना पड़ता है, प्रत्येक में अनंत संख्या में नल बाइट्स होते हैं, आउटपुट की प्रत्येक पंक्ति केवल पिछले नॉनज़ेरो कैरेक्टर तक ही प्रिंट की जाती है, और इसमें केवल नॉनज़ेरो कैरेक्टर वाली लाइनें ही आखिरी तक प्रिंट की जाती हैं। इसलिए ए डाल रहा है0 पर (0, 0) अभी भी एक खाली आउटपुट है।

Ungolfed:

^<b[1]>                # Prevent an infinite loop on empty input

>>w[B!0]{              # While there are at least 3 chars of input:

    <w[B!0]{              # Starting at the second character:
            t[B]<b[T]>>         # Copy all characters one position to the left
                                # (Effectively erasing the first character)
    }

    <b[0]<b[0]            # Delete both copies of the last character

    <[X]>>                # Get in place to restart loop
}

w[B=0]{<}                 # Go to last character of remaining string
t[B]<[X]t[B+T]            # Find it plus the first character
vb[T/2]                   # Divide by 2 and print

1

गंभीरता से , 22 20 बाइट्स

,O3 >WXXaXa3 >WXkæ≈c

धन्यवाद @Mego आपकी भाषा में महान होने के लिए

इसे ऑनलाइन या जो भी कोशिश करें


1
यह खाली इनपुट के लिए विफल है। मेरे पास एक डिलीट किया गया 20-बाइट सॉल्यूशन है जिसे मैं खाली इनपुट के लिए भी ठीक करने की कोशिश कर रहा हूं।
lirtosiast

,;``@(lIƒयदि lenयह 0 है, या स्टैक पर इनपुट मान के साथ आपको छोड़ देगा , या अन्यथा कार्यक्रम को समाप्त कर देगा। नोट यह है कि बैकटिक में एक गंदा - चरित्र 127.
Mego

@Mego यह काम नहीं कर रहा है।
चरण

@phase आप इनपुट के लिए उद्धरण तार करेंगे। यह काम करता है।
मेव

@Mego क्या ƒकरना चाहिए है?
चरण

1

कॉफ़ीस्क्रिप्ट, 104 103 बाइट्स

f=(x)->((y=x.length)%2&&x[y//2]||y&&String.fromCharCode (x[y/=2][z='charCodeAt']()+x[y-1][z] 0)//2)||''

1

रूबी, 43 42 41 बाइट्स

->a{s=a.size;puts s<1?'':s%2<1??q:a[s/2]}

42 बाइट्स

->a{s=a.size;puts s==0?'':s%2<1??q:a[s/2]}

43 बाइट्स

->a{s=a.size;puts s==0?'':s%2<1?'q':a[s/2]}

उपयोग:

->a{s=a.size;puts s<1?'':s%2<1??q:a[s/2]}['12345']
=> 3

1

जावा 7, 152 बाइट्स

String c(String s){char[]a=s.toCharArray();int l=a.length,x,y;return l<2?s:""+(l%2>0?a[l/2]:(char)((x=a[l/2])>(y=a[(l/2)-1])?y+((x-y)/2):x+((y-x)/2)));}

अनगढ़ और परीक्षण के मामले:

इसे यहाँ आज़माएँ।

class M{
  static String c(String s){
    char[] a = s.toCharArray();
    int l = a.length,
            x,
            y;
    return l < 2
            ? s
            : "" + (l%2 > 0
                     ? a[l/2]
                     : (char)((x = a[l/2]) > (y = a[(l/2)-1])
                                ? y + ((x-y)/2)
                                : x + ((y-x)/2)));
  }

  public static void main(String[] a){
    System.out.println(c("12345"));
    System.out.println(c("Hello"));
    System.out.println(c("Hiya"));
    System.out.println(c(""));
    System.out.println(c("x")); // Additional test case that will fail on some other answers
  }
}

आउटपुट:

3
l
q
(empty output)
x

1

PHP, 147 93 बाइट्स

मेरे जवाब 54 बाइट्स नीचे गोल्फ के लिए Jörg Hülsermann को श्रेय और विशेष धन्यवाद !

<?=($l=strlen($s=$argv[1]))%2?$s[($l-1)/2]:chr(floor((ord($s‌​[$l/2])+ord($s[$l/2-‌​1]))/2));

पुराना वर्जन:

$s=$argv[1];$l=strlen($s);echo($l%2!=0?substr($s,$n=($l-1)/2,-$n):chr(floor(abs((ord($x=substr($s,$l/2-1,1))-ord(substr($s,$l/2,1)))/2))+ord($x)));

परीक्षण कोड:

$argv[1] = 'Hiya';
$s=$argv[1];
$l=strlen($s);
echo($l%2!=0?substr($s,$n=($l-1)/2,-$n):chr(floor(abs((ord($x=substr($s,$l/2-1,1))-ord(substr($s,$l/2,1)))/2))+ord($x))); 

ऑनलाइन टेस्ट करें

मुझे लग रहा है कि इसमें सुधार किया जा सकता है, लेकिन इसके लिए पर्याप्त समय नहीं ...


<?=($l=strlen($s=$argv[1]))%2?$s[($l-1)/2]:chr(floor((ord($s[$l/2])+ord($s[$l/2-1]))/2));मेरा प्रस्ताव है
Jörg Hülsermann

@ JörgHülsermann शानदार गोल्फ! आपको इसे अपने उत्तर के रूप में पोस्ट करना चाहिए। अगर मेरे पास समय है तो मैं आपके अच्छे समाधानों के साथ अपने जवाब को और अधिक गोल्फ दूंगा। धन्यवाद।
मारियो

इसे बेझिझक अपने जवाब के रूप में लें
Jörg Hülsermann

1

एक्सेल, 122 79 बाइट्स

वास्तव में @ सोफिया Lechner का जवाब अब:

=IFERROR(CHAR(CODE(MID(A8,LEN(A8)/2+.5,1))/2+CODE(MID(A8,LEN(A8)/2+1,1))/2),"")

प्रारंभिक समाधान से -5 बाइट्स @ टेलर स्कॉट के लिए धन्यवाद।

=IFERROR(IF(ISODD(LEN(A1)),MID(A1,LEN(A1)/2+1,1),CHAR((CODE(MID(A1,LEN(A1)/2,1))+CODE(MID(A1,LEN(A1)/2+1,1)))/2)),"")

खाली स्ट्रिंग के लिए आवश्यक 12 बाइट्स।


-5 बाइट के लिए ड्रॉप Average(...,...)और उपयोग करें (...+...)/2=IFERROR(IF(ISODD(LEN(A1)),MID(A1,LEN(A1)/2+1,1),CHAR((CODE(MID(A1,LEN(A1)/2,1))+CODE(MID(A1,LEN(A1)/2+1,1)))/2)),"")
टेलर स्कॉट

एक्सेल स्वीकार करेगा (और फर्श) एक गैर-पूर्णांक एमआईडी को दूसरा तर्क देता है, इसलिए आपको इसे मामलों में विभाजित करने की आवश्यकता नहीं है - =IFERROR(CHAR(CODE(MID(A1,LEN(A1)/2+1,1))/2+CODE(MID(A1,LEN(A1)/2+.5,1))/2),"") 79 बाइट्स के लिए
सोफिया लेचनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.