उस शब्द पर हस्ताक्षर 2!


17

उस शब्द पर हस्ताक्षर 2!

ऐसा नहीं है कि बहुत पहले, मैंने उस शब्द को साइन करने के लिए एक चुनौती पोस्ट की थी ! । चुनौती में, आप शब्द के हस्ताक्षर है, जो पत्र के क्रम में रखा (जैसे के हस्ताक्षर है पता लगाना चाहिए thisहै hist)। अब, उस चुनौती ने काफी अच्छा किया, लेकिन एक प्रमुख मुद्दा था: यह बहुत आसान था ( गोल्फस्क्रिप्ट जवाब देखें )। इसलिए, मैंने एक समान चुनौती पोस्ट की है, लेकिन अधिक नियमों के साथ, जिनमें से अधिकांश पीपीसीजी उपयोगकर्ताओं द्वारा पिछली पहेली पर टिप्पणियों में सुझाए गए हैं। तो अब हम शुरू करें!

नियम

  1. आपके प्रोग्राम को एक इनपुट लेना होगा, फिर आपके द्वारा उपयोग की जाने वाली भाषा में STDOUT या समकक्ष के लिए हस्ताक्षर का उत्पादन करें।
  2. आपको अंतर्निहित सॉर्टिंग फ़ंक्शंस का उपयोग करने की अनुमति नहीं है, इसलिए $गोल्फस्क्रिप्ट में सामान की अनुमति नहीं है।
  3. मल्टीकैस का समर्थन किया जाना चाहिए - आपके कार्यक्रम में अपरकेस और लोअरकेस दोनों के समूह पत्र एक साथ होने चाहिए। इसलिए , जैसा कि आपने पहले संस्करण पर गोल्फस्क्रिप्ट उत्तर द्वारा दिया Helloहै eHllo, के हस्ताक्षर नहीं Helloहैं।
  4. आपके कार्यक्रम के लिए एक नि: शुल्क दुभाषिया / संकलक होना चाहिए, जिसे आपको लिंक करना चाहिए।

स्कोरिंग

आपका स्कोर आपकी बाइट गिनती है। सबसे कम बाइट काउंट जीतता है।

लीडरबोर्ड

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

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

# Language Name, N bytes

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

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


2
लोअरकेस और अपरकेस का आदेश दिया जाना चाहिए? उदाहरण के लिए ThHihs, क्या हम उत्पादन कर सकते हैं hHhistया क्या हमें उत्पादन करना है hhHistया Hhhist?
घातक

2
@Kllgh मैं इस प्रश्न को समझने के लिए एक गोल्फस्क्रिप्ट दुभाषिया स्थापित करना नहीं चाहता। प्रश्न में ही आवश्यकताओं को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।
feersum

1
@ फ़ेर्सम आपको ज़रूरत नहीं है एक ऑनलाइन दुभाषिया के जवाब में एक लिंक है। लेकिन मैं इसे स्पष्ट कर दूंगा।

8
यूनिकोड में निचले / ऊपरी मामले को सही ढंग से संभालना डरावना है, तो क्या यह प्रश्न स्वैच्छिक रूप से ASCII अक्षरों तक सीमित है: [a-zA-Z]?
मैथ्यू एम।

3
आप "इस गोल्फस्क्रिप्ट उत्तर को देखें" के बाद कोष्ठक को बंद करना भूल गए। xkcd.com/859
nyuszika7h

जवाबों:


11

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

sm@+drd1zG

इसे ऑनलाइन आज़माएँ: प्रदर्शन

स्पष्टीकरण:

             implicit: z = input string
 m       G   map each letter (variable d) of the alphabet to:
   +drd1        d + upper(d)
  @     z       filter z for these two letters
s            sum, join to a string

5

हास्केल, 51

f s=[x|(a,b)<-zip['a'..'z']['A'..],x<-s,x==a||x==b]

zipपात्रों में से जोड़ों की सूची बनाता है [('a','A'), ...('z','Z')]। ट्रंकेशन के कारण, दूसरे समापन बिंदु को निर्दिष्ट करने की आवश्यकता नहीं है। सूची में प्रत्येक जोड़ी के लिए, हम इनपुट स्ट्रिंग में अक्षरों को लेते sहैं जो जोड़ी में दोनों वर्णों में से एक हैं।


5

पायथन 3, 72 70 बाइट्स

s=input()
print("".join(d*(ord(d)&31==c)for c in range(27)for d in s))

मान लें कि इनपुट में केवल शामिल हैं [a-zA-Z]

(-2 बाइट्स @xnor की बदौलत)


मुझे लगता है कि आप कर सकते हैं "".join(c*b ...)के लिए "".join(c ... if b) एक ही तरह से sum(n ... if b)हो सकता है sum(n*b ...)
xnor

एक प्रहरी के साथ एक ही लूप में दो छोरों को c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
ढंकना

@xnor मैंने पहला टिप (धन्यवाद!) जोड़ दिया है, लेकिन मुझे लगता है कि आपको एक अलग उत्तर के रूप में दूसरा पोस्ट करना चाहिए :)
Sp3000

4

गोटो ++, 531 बाइट्स

niveaugourou 0
s=ENTRETONTEXTE()
§2 a=LeCaracNumero()&s *(1)
n=*(1)
costaud i=*(2)/&i infeg NombreDeLettres(&s)/i=+*(1)
b=LeCaracNumero()&s &i
c=&b
d=&a
GOTONULPOURLESNULS %4 }&b sup *(96){
c=-*(32)
§4 GOTONULPOURLESNULS %5 }&a sup *(96){
d=-*(32)
§5 GOTONULPOURLESNULS %1 }&c inf &d{
a=&b
n=&i
§1 faiblard
GOTOPRINTDUTEXTE()&a
s=Marijuana()}BOITEAPINGOUINS()}PrendsUnMorceau()&s *(0) &n{ }PrendsUnMorceau()&s }&n+*(1){ *(0){{ «»
GOTONONNULPOURLESNULS %3 }NombreDeLettres(&s) eg *(1){
GOTOPASMALIN %2
§3 GOTOPRINTDUTEXTE()&s

गोटो ++ प्रोजेक्ट पेज

यहां कोड की अधिक पठनीय और टिप्पणी करने योग्य संस्करण है (नोट जो GOTOGOTO ++ में टिप्पणी शुरू करता है):

niveaugourou 0                                          GOTO Allow every keyword to be used
s=ENTRETONTEXTE()                                       GOTO Read from STDIN
§2 a=LeCaracNumero()&s *(1)                             GOTO Get first char in s
n=*(1)                                                  
costaud i=*(2)/&i infeg NombreDeLettres(&s)/i=+*(1)     GOTO Loop on every char of s
b=LeCaracNumero()&s &i                                  GOTO b = i-th char
c=&b                                            
d=&a
GOTONULPOURLESNULS %4 }&b sup *(96){                    GOTO If b is uppercase, goto §4 
c=-*(32)                                                GOTO Get the uppercase ASCII value of b
§4 GOTONULPOURLESNULS %5 }&a sup *(96){                 GOTO same as above but with a
d=-*(32)                                                
§5 GOTONULPOURLESNULS %1 }&c inf &d{                    GOTO If b is after a in alphabetical order, goto §1 (next loop iteration)
a=&b                                                    GOTO Else replace a by b
n=&i                                                                
§1 faiblard                                             GOTO End loop
GOTOPRINTDUTEXTE()&a                                    GOTO Print the value of a
t=PrendsUnMorceau()&s *(0) &n                           GOTO Get the part of s before a
u=PrendsUnMorceau()&s }&n+*(1){ *(0)                    GOTO Get the part of s after a
e=BOITEAPINGOUINS()&t &u                                GOTO Create an array of penguins containing the two substrings
s=Marijuana()&e «»                                      GOTO Concatenate the penguins in the array
GOTONONNULPOURLESNULS %3 }NombreDeLettres(&s) eg *(1){  GOTO If s is one char long, goto §3
GOTOPASMALIN %2                                         GOTO Else goto §2
§3 GOTOPRINTDUTEXTE()&s                                 GOTO Print the last char

2
एक महान प्रोग्रामिंग भाषा के निशान: सभी कमांड फ्रेंच में हैं और आधिकारिक वेबसाइट कहती है "अपना लोगो एट लुक गूंगा भेजें।"
एलेक्स ए।

@AlexA। एक महान प्रोग्रामिंग भाषा का निशान: function(arg)और function() argदोनों वैध हैं। इसके अलावा, प्राथमिकता कोष्ठक हैं } {और उबाऊ नहीं( )
19:22

4

पायथ, 15 14 बाइट्स

s*V/LzJ.irG1GJ

1 बाइट निकालने के लिए इसाॅक के लिए धन्यवाद।

मैं अभी तक अजगर के बारे में ज्यादा नहीं जानता, इसलिए यह अच्छी तरह से गोल्फ नहीं हो सकता है।

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


एक आसान गोल्फ: तार की सूची पर के sरूप में ही है jk
isaacg

4

जावास्क्रिप्ट (ईएस 6), 71 74

A-Za-z तक सीमित करें (@ Matthieu M द्वारा टिप्पणी देखें)

संपादित करें, 'वापसी' से बचने के लिए, कॉमा के साथ एकल अभिव्यक्ति बनाने के लिए उपयोग किया जाता है। यहां एक आउटपुट की आवश्यकता है, इसलिए मैं एक साधारण का उपयोग कर सकता हूं forऔर कॉमा के बारे में भूल सकता हूं ।

बाइट काउंट को समझने के लिए 73 का उपयोग करते हुए, लेकिन यह अब तक EcmaScript 6 मान्य नहीं है

सामान्य नोट: किसी भी EcmaScript 6 अनुरूप ब्राउज़र पर स्निपेट चलाने का परीक्षण (विशेष रूप से क्रोम नहीं MSIE। मैंने फ़ायरफ़ॉक्स, सफारी 9 पर परीक्षण किया है।

f=w=>{v=[];for(c of w)v[n=parseInt(c,36)]=(v[n]||'')+c;alert(v.join``)}
<input id=I value='Hellzapoppin'><button onclick=f(I.value)>-></button>


4

जावास्क्रिप्ट, 112 194 बाइट्स

r=[];t=[];a=s.split('').map(function(x){t[i=parseInt(x,36)]?t[i].push(x):t[i]=[x];return i;});while(l=a.length)r[l-1]=t[a.splice(a.indexOf(Math.max.apply({},a)),1)].pop();console.log(r.join(''))

यह "गोल्फ" से बहुत दूर है, लेकिन मैं अभी थोड़ा व्यस्त हूं, बस इसे हटाने के लिए एडिट किया गया है।


1
@frikinside छँटाई के बाद से इस समाधान में मदद नहीं मिल सकती है, जावास्क्रिप्ट ES6 तीर फ़ंक्शन इसे छोटा करने में मदद कर सकते हैं। (सभी ब्राउज़र अभी तक ES6 का समर्थन नहीं करते हैं, फ़ायरफ़ॉक्स का प्रयास करें)। हो सकता है कि यह आपके भविष्य के समाधानों की मदद करे! :) यह कैसा लग सकता है का एक उदाहरण:console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
jrich

@UndefinedFunction वास्तव में मैं "चुनौती" के लिए उद्देश्य पर सादे जावास्क्रिप्ट का उपयोग करने का चयन करता हूं, लेकिन अच्छे सुझाव के लिए बहुत कुछ!
फ्रिककिंसाइड

@ edc65 वास्तव में मुझे पता था कि पिछली टिप्पणी में (जैसे कि यू ने कहा था) और मैं इसे नहीं भूला, मेरे पास अब तक समय नहीं था।
फ्रिककिंसाइड

4

अजगर 3, 64

Sp3000 के उत्तर पर एक छोटा सा सुधार , जो चरित्र सूचकांकों को पुनरावृत्त करने के विचार का उपयोग करता है, और हर एक के लिए, इनपुट के माध्यम से पुनरावृत्ति करने वाले पात्रों को लेने के लिए जो मामले से मेल खाते हैं।

c=1
for d in(input__+'~')*26:print(end=d[ord(d)&31^c:]);c+=d>'z'

यह 26 बार इनपुट के माध्यम से लूपिंग का उपयोग करता है। विभाजक ~का उपयोग यह जानने के लिए किया जाता है कि अगले चरित्र सूचकांक में कब जाना है c। इस बात के लिए कि क्या चरित्र मामले से dमेल खाता है c, बिट-वैल्यू के अंतिम पाँच बिट्स dxor-ed हैंc , जिसमें 0 का मिलान होता है।

फिर, dपरिणाम ठीक होने पर वर्ण मुद्रित होता है 0, अन्यथा रिक्त स्ट्रिंग के साथ।


3

पायथन 2.7, 114 106 बाइट्स

l=[0]*123
for e in raw_input():l[ord(e)]+=1
print''.join(chr(j)*l[j]for i in range(26)for j in(i+65,i+97))

एक 123 लंबाई सरणी (दोनों AZ और az पर्वतमाला के लिए) में एक चार की उपस्थिति लॉग करता है और फिर गैर-शून्य प्रविष्टियों को प्राप्त करने के लिए इसके माध्यम से पुनरावृति करता है।
अक्षम, लेकिन यह मजबूर करने के लिए जानवर की तुलना में अधिक कुशल (लेकिन अब :()।

इसका परीक्षण-

<< HelloWorldhi
>> deHhillloorW

जब मैं इसे चलाता हूं HelloWorldhi, तो मुझे मिलता है['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
ब्लू

@ मुडफिश मेरी बुरी लगती है। मैंने कुछ चीजों को आज़माते हुए गलत कोड पेस्ट किया। उस के लिए धन्यवाद :)
Kamehameha

आप if l[j]या तो की जरूरत नहीं है ।
ब्लू

@ मड्डीफिश नाइस, वे खाली तार बन जाते हैं (और जब joinएड हटाए जाते हैं )। -8 बाइट्स। धन्यवाद :)
कम्मेहा

1
@SirParselot हाँ, लेकिन यह प्रश्न में दिए गए इनपुट को संशोधित करने जैसा लगता था, इसलिए ऐसा नहीं किया
Kamehameha

3

PHP, 275 270 बाइट्स

<?php
for($i=65;$i<123;$i++){$v[$i]=chr($i);}foreach(str_split($argv[1])as$c){$a=array_search($c,$v);if($a<97){$p[]=($a+32);$z[]=$a;}else{$p[]=$a;}}foreach($p as$chr){$m=min($p);if($z[0]+32==$m){echo chr($m-32);unset($z[0]);}else{echo chr($m);}unset($p[array_search($m,$p)]);}


स्पष्टीकरण:
कोड वर्णमाला के प्रत्येक अक्षर के साथ एक सरणी बनाता है, जिसमें इसका ASCII मान एरियर कुंजी के रूप में है। बाद में कोड एक नया सरणी उत्पन्न करता है जिसमें इनपुट का ASCII मान होता है। तब सबसे कम मूल्य प्रिंट हो जाता है और हटा दिया जाता है।

उपयोग:
एक तर्क के साथ स्क्रिप्ट को बुलाओ: php -d error_reporting=0 script.php Hello

Ungolfed संस्करण:

<?php
$input = $argv[1];
$valueArray = [];
for($i=65;$i<123;$i++) {
    $valueArray[$i] = chr($i);
}
$new = str_split($input);
foreach($new as $char) {
    if(array_search($char, $valueArray)<97) {
        $newArray[] = (array_search($char, $valueArray)+32);
        $checkArray[] = array_search($char, $valueArray);
    } else {
        $newArray[] = array_search($char, $valueArray);
    }
}
foreach($newArray as $chr) {
    if($checkArray[0]+32 == min($newArray)) {
        $string .= chr(min($newArray)-32);
        unset($checkArray[0]);
    } else {
        $string .= chr(min($newArray));
    }
    $key = array_search(min($newArray), $newArray);
    unset($newArray[$key]);
}

echo $string;


किसी भी सलाह बहुत सराहना की है।


अपरकेस अक्षर काम नहीं कर रहे हैं ... इसे ठीक करने की आवश्यकता है।
jrenk

निश्चित है कि इनपुट के बड़े अक्षर होने पर कोड भी काम करता है।
jrenk

3

हास्केल, 83 53 बाइट्स

import Data.Char
f y=[c|x<-[' '..],c<-y,toLower c==x]

उपयोग: f "HelloWorldhi"->"deHhillloorW"

यह कैसे काम करता है: yइनपुट स्ट्रिंग हो

[ |x<-[' '..]                  ]  -- for every x from Space to the last Unicode character
             ,c<-y                -- loop through all character c from the input string
 c                ,toLower c==x   -- and keep those where the lowercase version equals x

संपादित करें: 30 बाइट्स बचाए गए, कल्पना करें कि! साभार @ मौरिस


2
सिर्फ import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x](53 बाइट्स) क्यों नहीं ? (इसे समाप्त करने में कुछ समय लगेगा, क्योंकि length [' '..] == 1114080- लेकिन यह परिमित है।)
लिन

1
@ मोरिस: वाह! Btw: 4 साल पुराने लैपटॉप पर 8.5sec बहुत लंबा नहीं है।
नीमी

3

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

एक अलग तकनीक के लिए एक नया जवाब!

z=['']*42
for c in input():z[ord(c)&31]+=c
print(*z,sep='')

कि ध्यान देने योग्य बात ord('a')&31==ord('A')&31और है कि ord('z')&31==ord('Z')&31, हम बस रिक्त स्ट्रिंग की एक सरणी बना सकते हैं और हर किरदार के लिए यह अपने ASCII मूल्य की सरणी सूची में जोड़ना&31 । जब आप इसे प्रिंट करते हैं, तो इसे सॉर्ट किया जाएगा।

इनपुट तक सीमित a-zA-Z


2

पायथन 3, 97 92 बाइट्स

from itertools import*;print(*min(permutations(input()),key=lambda z:str(z).lower()),sep='')

सॉर्ट करने का सबसे अच्छा तरीका स्पष्ट रूप से सभी क्रमपरिवर्तन उत्पन्न करना है, और फिर न्यूनतम को चुनना है, जो बस सॉर्ट किया जाना है :)

'केस-अवेयर' नियमों का पालन करने की तुलना में स्ट्रिंग्स को कम किया जाता है।

चेतावनी: बहुत धीमी गति से हो सकता है बड़े तार के साथ ।

एक दुभाषिया यहाँ स्थित है


2

पायथन 3, 118 बाइट्स

i=input();i,x=map(list,(i,i.lower()))
while x:q=min(x);x.remove(q);q=[q.upper(),q][q in i];i.remove(q);print(q,end="")

मैं बहुत छोटा हो सकता है, मुझे पता है


आप बदल सकते हैं if q not in i:के साथ if~-(q in i):
पुरकाकूदरी

मैं करता हूं क्योंकि मैं इस .remove()पर फ़ंक्शन को बुला रहा हूं ।
ब्लू

2

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

मुझे यकीन है कि ऐसा करने के लिए एक क्लीनर तरीका है, लेकिन मैं किसी और चीज के साथ नहीं आ सकता। बस इनपुट को एक कैरेक्टर एरे के रूप में लेता है, एक इंसर्शन सॉर्ट करता है, और आउटपुट को स्पिट करता है। अन्य गैर-गोल्फ भाषाओं के लिए भी बुरी तरह से हारता है।

कोड:

$a=[char[]]($args[0]);For($u=1;$u-lt$a.Count;$u++){$n=$a[$u];$l=$u;while(($l-gt0)-and((""+$a[$l-1]).CompareTo(""+$n)-gt0)){$a[$l]=$a[$l-1];$l--}$a[$l]=$n};$a-join''

उपयोग:

PS C:\scripts> .\sign-word-2.ps1 tTHhis
hHistT

विस्तारित और समझाया गया:

$a=[char[]]($args[0])               # Takes command-line argument, recasts as char array
For($u=1;$u-lt$a.Count;$u++){       # Performs a quick-n-dirty insertion sort
  $n=$a[$u]
  $l=$u
  while(($l-gt0)-and((""+$a[$l-1]).CompareTo(""+$n)-gt0)){
  # Ugly, ugly code here. String.CompareTo(String) is case-insensitive, but
  # because we cast as a char[], Char.CompareTo(Char) is case-sensitive ...
  # So, need to do an on-the-fly re-casting as a string with ""+
    $a[$l]=$a[$l-1]
    $l--
  }
  $a[$l]=$n
}
$a-join''             # Without the -join'', it would print out the chars with a space between

2

जूलिया, 61 बाइट्स

f=s->s>""?(k=indmax([s...]%32);f(s[k+1:end]s[1:k-1])s[k:k]):s

यदि आप इसे REPL में कहते हैं, तो जूलिया इसे एक स्ट्रिंग आउटपुट के रूप में प्रदर्शित करेगा। यह तो है STDOUT के लिए बाहर मुद्रित करने के लिए, तो यह 78 बाइट्स की जरूरत है:

x->(f=s->s>""?(k=indmax([s...]%32);f(s[k+1:end]s[1:k-1])s[k:k]):s;print(f(x)))

जूलिया के लिए एक दुभाषिया यहां पाया जा सकता है । एक और, जो मैंने पहले ही कुछ कोड डाल दिया है, वह यहाँ है । ध्यान दें, दूसरे के साथ, आपको सीमा को ऊपर खींचकर टर्मिनल को (नीचे की तरफ) दिखाई देने की आवश्यकता होगी। "निष्पादित" पर क्लिक करने से यह टर्मिनल में सामान्य कमांड लाइन पर चलेगा (और इस तरह आउटपुट को प्रिंटल के बिना कहा जाएगा) नहीं दिखाएगा। वैकल्पिक रूप से, आप बस टाइप कर सकते हैंjulia टर्मिनल में ही , फिर REPL के अंदर सब कुछ संभाल लेंगे जो सामने आएगा।

और थोड़ा अतिरिक्त मज़ा के लिए, यहां कुछ अन्य कार्यान्वयन हैं

सूक्ति सॉर्ट (83 बाइट्स):

s->(for m=2:endof(s),n=m:-1:2 s[n]%32<s[n-1]%32&&(s=s[[1:n-2,n,n-1,n+1:end]])end;s)

मेरी अपनी छँटाई एल्गोरिथ्म (84 बाइट्स):

s->(k=1;while length(k)>0 k=find(diff([s...]%32).<0);s=s[setdiff(1:end,k)]s[k]end;s)

2

स्काला, 82 बाइट्स

print((""/:args(0)){case(s,c)=>val(a,b)=s.span(h=>{if(h<97)32 else 0}+h<c);a+c+b})

कमांड लाइन से:

$ scala -e 'print((""/:args(0)){case(s,c)=>val(a,b)=s.span(h=>{if(h<97)32 else 0}+h<c);a+c+b})' Hello
eHllo

शायद थोड़ा आगे गोल्फ हो सकता है ... बस फोल्ड का उपयोग करके प्रविष्टि प्रकार को लागू करना।


2

x86 मशीन कोड, 51 42 बाइट्स

00000000  b3 82 89 da 8b 07 80 fc  0d 74 12 b9 20 20 09 c1  |.........t..  ..|
00000010  38 e9 7e 06 86 c4 89 07  31 d2 43 eb e7 85 d2 74  |8.~.....1.C....t|
00000020  df c6 47 01 24 b4 09 cd  21 c3                    |..G.$...!.|
0000002a

बबल सॉर्ट, कुछ रजिस्टर पुन: उपयोग के साथ यहां और वहां बाइट्स दाढ़ी बनाने के लिए चालें; .COM फ़ाइल से DOSBox में रन कमांड लाइन से इनपुट प्राप्त और मानक आउटपुट में उत्पादन प्रिंट करता है।

नमूना सत्र

टिप्पणी विधानसभा:

    org 100h

section .text

start:
    ; bubble sort - external loop
ext:
    ; start from the first character (assume bh=0, true on every DOS)
    mov bl,82h
    ; "not-swapped" flag - 82h => no swaps in current iteration;
    ; 0 => a swap happened (the 82h will come in handy later)
    mov dx,bx
    ; bubble sort - internal loop
int:
    ; read 2 characters at time in the full ax
    mov ax,word[bx]   ; al     ah
                      ; ^[bx]  ^[bx+1]
    ; check if we are at the end (the command line is CR terminated)
    cmp ah,0dh
    je skip
    ; make uppercase in cx
    mov cx,2020h
    or cx,ax
    ; compare
    cmp cl,ch
    jle next
    ; wrong order - swap and rewrite
    xchg al,ah
    mov word[bx],ax
    ; mark that we did a swap
    xor dx,dx
next:
    ; next character
    inc bx
    jmp int
skip:
    ; loop as far as we swapped something
    test dx,dx
    jz ext
end:
    ; $-terminate the string
    mov byte[bx+1],'$'
    ; print
    ; dx already contains the location of the string, since that's the
    ; flag value we used for "no swaps"
    mov ah,9
    int 21h
    ret


1

पर्ल, 88 बाइट्स

@_=/./g;a:{for(0..@_-2){@_[$_,$_+1]=@_[$_+1,$_],redo a if uc$_[$_]gt uc$_[$_+1]}}print@_

बस एक साधारण बुलबुला क्रमबद्ध करें। टेक्स्ट पास करने के लिए एन विकल्प के साथ कॉल करें।

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

echo "tThHiIsS" | perl -n sort2.pl

आउटपुट:

hHiIsStT

1

PHP, 106 बाइट्स

कोड:

$c=count_chars($argv[1]);$r=str_repeat;for($i=64;++$i<91;)echo$r(chr($i),$c[$i]),$r(chr($i+32),$c[$i+32]);

कोड में कुछ खास नहीं है; count_chars()ASCII कोड द्वारा अनुक्रमित एक सरणी का निर्माण करता है जिसमें प्रत्येक ASCII वर्ण के लिए घटनाओं की संख्या होती है। शेष इस सरणी पर एक सुस्त चलना है।

निष्पादन का उदाहरण:

$ php -d error_reporting=0 sign.php qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKasdfJHGFDSAZXCVBNM
AaaBbCcDddEeFffGgHhIiJjKkLlMmNnOoPpQqRrSssTtUuVvWwXxYyZz

बदल देते हैं: एक अतिरिक्त बाइट पीएचपी 7 का उपयोग कर बचाया जा सकता है $c[$i]के साथ ($c=count_chars($argv[1]))[$i]और काम के हटाने $cकार्यक्रम की शुरुआत से।


1

हास्केल, 74 बाइट्स

l=(`mod`32).fromEnum
f=foldr(#)""
e#[]=[e]
e#a@(h:t)|l e<l h=e:a|1<2=h:e#t

मेरे अन्य उत्तर से पूरी तरह से अलग । इस बार यह एक साधारण प्रविष्टि सॉर्ट है।


1

पिप, १ 18 14 बाइट्स

पिप के लिए GitHub रिपॉजिटरी

लगता है कि पाइथ के साथ कोई प्रतिस्पर्धा नहीं है, लेकिन यह बहुत सम्मानजनक है।

FcAZ OcQUC_FIa

केवल तार युक्त पर काम करता है a-zA-Z। वर्णमाला के प्रत्येक अक्षर के लिए, इनपुट स्ट्रिंग से अक्षरों को खींचने के लिए एक फिल्टर ऑपरेशन का उपयोग करता है जो उस पत्र के मामले-असंवेदनशील के बराबर होता है:

                    a <- cmdline arg, AZ <- string containing uppercase alphabet (implicit)
FcAZ                For each character c in AZ:
           FIa      Filter characters of a on the following lambda function:
      UC_           Uppercase of character...
         Qc         ... is equal to c
     O              Output the resulting list, joined on empty string by default

दो नोट:

  • स्थान आवश्यक है; अन्यथा, अनुक्रम के AZOरूप में स्कैन करेगाA ZO बजाय केAZ O ;
  • कार्यक्रम एक अनुगामी न्यूलाइन आउटपुट नहीं करता है। एक जोड़ने के लिए, एक डाल दियाx के लिए, कोड के अंत में (जैसे लूप के बाद एक खाली स्ट्रिंग को प्रिंट करना) डालें।

नमूना रन ( xसंस्करण का उपयोग करके ):

dlosc@dlosc:~/pip$ pip -e "FcAZ OcQUC_FIax" "HelLo wOrld"
deHlLloOrw

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