Unterschreib das Wort 2!

17

Unterschreib das Wort 2!

Vor nicht allzu langer Zeit habe ich eine Challenge namens Sign that word! . In der Herausforderung müssen Sie die Signatur des Wortes finden, dh die Buchstaben, die in Reihenfolge gebracht wurden (z. B. Die Signatur von thisist hist). Nun, diese Herausforderung hat sich sehr gut bewährt , aber es gab ein zentrales Problem: Es war viel zu einfach (siehe die GolfScript-Antwort ). Also habe ich eine ähnliche Herausforderung gepostet, aber mit mehr Regeln, von denen die meisten von PPCG-Benutzern in den Kommentaren zum vorherigen Puzzle vorgeschlagen wurden. Auf geht's!

Regeln

  1. Ihr Programm muss eine Eingabe vornehmen und dann die Signatur an STDOUT oder eine gleichwertige Sprache ausgeben.
  2. Sie dürfen keine eingebauten Sortierfunktionen verwenden, daher sind $Inhalte wie in GolfScript nicht zulässig.
  3. Multicase muss unterstützt werden - Ihr Programm muss Groß- und Kleinbuchstaben zusammenfassen. Die Signatur von Helloist also eHllonicht so, Hellowie Sie es von der GolfScript-Antwort auf die erste Version erhalten.
  4. Es muss einen kostenlosen Interpreter / Compiler für Ihr Programm geben, auf den Sie verlinken sollten.

Wertung

Ihre Punktzahl ist Ihre Byteanzahl. Die niedrigste Byteanzahl gewinnt.

Bestenliste

Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Gemeinschaft
quelle
2
Müssen Klein- und Großbuchstaben bestellt werden? Können ThHihswir zum Beispiel ausgeben hHhistoder müssen wir ausgeben hhHistoder Hhhist?
Fatalize
2
@Kslkgh Ich möchte keinen GolfScript-Interpreter installieren, um die Frage zu verstehen. Die Anforderungen sollten in der Frage selbst klar spezifiziert werden.
Feersum
1
@feersum Das musst du nicht. Die Antwort auf einen Online-Dolmetscher enthält einen Link. Aber ich werde es klarer machen.
8
Die korrekte Behandlung von Groß- und Kleinschreibung in Unicode ist beängstigend. Ist diese Frage freiwillig auf ASCII-Buchstaben beschränkt: [a-zA-Z]?
Matthieu M.
3
Sie haben vergessen, die Klammer nach "Diese GolfScript-Antwort anzeigen" zu schließen. xkcd.com/859
nyuszika7h

Antworten:

11

Pyth, 10 Bytes

sm@+drd1zG

Probieren Sie es online aus: Demonstration

Erläuterung:

             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
Jakube
quelle
5

Haskell, 51

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

Das ziperzeugt eine Liste von Zeichenpaaren [('a','A'), ...('z','Z')]. Aufgrund von Kürzungen muss der zweite Endpunkt nicht angegeben werden. Für jedes Paar in der Liste nehmen wir die Buchstaben in der Eingabezeichenfolge s, die eines der beiden Zeichen im Paar sind.

xnor
quelle
5

Python 3, 72-70 Bytes

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

Angenommen, die Eingabe besteht nur aus [a-zA-Z].

(-2 Bytes dank @xnor)

Sp3000
quelle
Ich glaube , Sie tun können , "".join(c*b ...)für "".join(c ... if b) die gleiche Art und Weise sum(n ... if b)sein kann sum(n*b ...).
xnor
Zusammenfassen der beiden Schleifen zu einer einzigen Schleife mit einem Sentinel und Komprimieren der Gleichheitsprüfung: c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'(67)
xnor
@xnor Ich habe den ersten Tipp hinzugefügt (danke!), aber ich denke, Sie sollten den zweiten als separate Antwort
posten
4

GOTO ++, 531 Bytes

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

GOTO ++ Projektseite

Hier ist eine etwas besser lesbare und kommentierte Version des Codes (Anmerkung, GOTOdie einen Kommentar in GOTO ++ startet):

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
Tödlich
quelle
2
Kennzeichen einer großartigen Programmiersprache: Alle Befehle sind auf Französisch und auf der offiziellen Website steht "Sende dein Logo und sieh blöd aus".
Alex A.
@AlexA. Zeichen einer tollen Programmiersprache: function(arg)und function() argsind beide gültig. Auch Prioritätsklammern sind } {und nicht die langweiligen( )
Fatalize
4

Pyth, 15 bis 14 Bytes

s*V/LzJ.irG1GJ

Vielen Dank für Isaacg für das Entfernen von 1 Byte.

Ich weiß noch nicht viel über Pyth, daher kann es sein, dass hier nicht gut gespielt wird.

Probieren Sie es hier aus.

jimmy23013
quelle
Ein einfaches Golfspiel: Es sist dasselbe wie jkauf einer Saitenliste.
isaacg
4

JavaScript (ES6), 71 74

Beschränkt auf A-Za-z (siehe Kommentar von @Matthieu M)

Bearbeiten Wird auch verwendet, um einen einzelnen Ausdruck mit Kommas zu erstellen, um ein 'Zurückgeben' zu vermeiden. Hier ist eine Ausgabe erforderlich, damit ich ein einfaches forKomma verwenden und vergessen kann.

Bei Verwendung des Array-Verständnisses beträgt die Byteanzahl 73, dies ist jedoch kein gültiges EcmaScript 6 mehr

Üblicher Hinweis: Testen Sie die Ausführung des Snippets in jedem EcmaScript 6-kompatiblen Browser (insbesondere nicht in Chrome und nicht in MSIE. Ich habe es in Firefox getestet, Safari 9 könnte funktionieren).

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>

edc65
quelle
4

Javascript, 112 194 Bytes

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(''))

Dies ist weit weg von "Golf", aber ich bin gerade ein bisschen beschäftigt, nur bearbeitet, um Sortierung zu entfernen.

Frikinside
quelle
1
@frikinside Diese Lösung ist möglicherweise nicht hilfreich, da das Sortieren nicht zulässig war. Mit den Pfeilfunktionen von Javascript ES6 kann dies jedoch verkürzt werden. (ES6 wird noch nicht von allen Browsern unterstützt, versuchen Sie es mit Firefox.) Vielleicht hilft es aber Ihren zukünftigen Lösungen! :) Ein Beispiel dafür, wie es aussehen könnte:console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
jrich
@UndefinedFunction Eigentlich benutze ich absichtlich einfaches Javascript, für die "Herausforderung", aber vielen Dank für den netten Vorschlag!
Frikinside
@ edc65 eigentlich war mir das in einem vorherigen kommentar bewusst (wie du sagtest) und ich habe es nicht vergessen, ich hatte bis jetzt keine zeit.
Frikinside
4

Python 3, 64

Eine kleine Verbesserung gegenüber der Antwort von Sp3000 , bei der die Idee verwendet wird, die Zeichenindizes zu iterieren und für jeden einzelnen Index die Eingabe zu durchlaufen, um Zeichen zu ermitteln, die der Groß- und Kleinschreibung entsprechen.

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

Dies verwendet eine einzelne Schleife, die den Eingang 26 Mal durchläuft. Das Trennzeichen ~wird verwendet, um zu wissen, wann zum nächsten Zeichenindex übergegangen werden soll c. Um festzustellen, ob ein Zeichen dmit einem Wert cbis zu Groß- / Kleinschreibung übereinstimmt , werden die letzten fünf Bits des dBitwerts mit xoderiert c, wobei eine 0 eine Übereinstimmung angibt.

Dann wird das Zeichen dgenau dann gedruckt, wenn das Ergebnis ist 0, ansonsten mit einer leeren Zeichenfolge.

xnor
quelle
3

Python 2.7, 114 106 Bytes

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))

Protokolliert das Vorhandensein eines Zeichens in einem 123-Längen-Array (um sowohl AZ- als auch az-Bereiche einzuschließen) und durchläuft es dann, um die Nicht-Null-Einträge zu erhalten.
Ineffizient, aber effizienter als brachiales Erzwingen (aber länger :().

Testen Sie es-

<< HelloWorldhi
>> deHhillloorW
Kamehameha
quelle
Wenn ich es mit laufe HelloWorldhi, bekomme ich['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
Blue
@ Schlammfisch oops mein schlechtes. Ich habe den falschen Code eingefügt, während ich ein paar Dinge ausprobiert habe. Vielen Dank dafür :)
Kamehameha
Das brauchst du auch nicht if l[j].
Blau
@muddyfish Schön, sie werden leere Zeichenfolgen (und werden entfernt, wenn joined). -8 Bytes. Danke :)
Kamehameha
1
@ SirParselot Ja, aber das schien die Eingabe zu modifizieren, wie in der Frage angegeben, also habe ich das nicht getan
Kamehameha
3

PHP, 275 270 Bytes

<?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)]);}


Erläuterung:
Der Code generiert mit jedem Buchstaben im Alphabet ein Array, dessen ASCII-Wert als Array-Schlüssel vorliegt. Anschließend generiert der Code ein neues Array, das die ASCII-Werte der Eingabe enthält. Dann wird der niedrigste Wert ausgedruckt und entfernt.

Verwendung:
Rufe das Skript mit einem Argument auf: php -d error_reporting=0 script.php Hello

Ungolfed Version:

<?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;


Alle Ratschläge sind sehr dankbar.

jrenk
quelle
Großbuchstaben funktionieren nicht ... müssen behoben werden.
Juli
Es wurde behoben, dass der Code auch funktioniert, wenn die Eingabe Großbuchstaben enthält.
Juli
3

Haskell, 83 53 Bytes

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

Verwendung: f "HelloWorldhi"-> "deHhillloorW".

So funktioniert es: Sei ydie Eingabezeichenfolge

[ |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

Edit: 30 Bytes gespeichert, stell dir das vor! Vielen Dank @ Mauris.

nimi
quelle
2
Warum nicht einfach import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x](53 Bytes)? (Dies wird einige Zeit in Anspruch nehmen, da length [' '..] == 1114080- aber es ist endlich.)
Lynn
1
@ Mauris: Wow! Übrigens: 8,5 Sekunden auf einem 4 Jahre alten Laptop sind nicht zu lang.
nimi
3

Python 3, 61 Bytes

Eine neue Antwort für eine andere Technik!

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

Dies ord('a')&31==ord('A')&31und das beachtend, ord('z')&31==ord('Z')&31können wir einfach ein Array von leeren Strings erstellen und für jedes Zeichen zum Array-Index seines ASCII-Werts hinzufügen &31. Wenn Sie es drucken, wird es sortiert.

Beschränkt auf Eingabe a-zA-Z.

Tryth
quelle
2

Python 3, 97-92 Bytes

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

Die beste Art zu sortieren ist, alle Permutationen zu generieren und dann das Minimum auszuwählen, das gerade sortiert wird :)

Die Zeichenfolgen werden vor dem Vergleich in Kleinbuchstaben gesetzt, um die Regeln für die Berücksichtigung der Groß- und Kleinschreibung einzuhalten.

Warnung: Kann mit großen Saiten sehr langsam sein .

Ein Dolmetscher befindet sich hier .

Tryth
quelle
2

Python 3, 118 Bytes

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="")

Könnte viel kürzer golfen sein, ich weiß

Blau
quelle
Sie können ersetzen if q not in i:mit if~-(q in i):.
PurkkaKoodari
Das mache ich, weil ich die .remove()Funktion darauf aufrufe.
Blue
2

Powershell, 164 Bytes

Ich bin mir sicher, dass es einen saubereren Weg gibt, aber ich konnte mir nichts anderes einfallen lassen. Nimmt einfach die Eingabe als Zeichenarray, führt eine Einfügesortierung durch und spuckt die Ausgabe aus. Verliert schrecklich, auch zu anderen nicht Golf spielenden Sprachen.

Code:

$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''

Verwendung:

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

Erweitert und erklärt:

$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
AdmBorkBork
quelle
2

Julia, 61 Bytes

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

Julia zeigt es als String-Ausgabe an, wenn Sie es in der REPL aufrufen. Wenn es hat zu STDOUT auszudrucken, dann braucht es 78 Bytes:

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

Einen Dolmetscher für Julia finden Sie hier . Eine andere, in die ich bereits Code eingefügt habe, ist hier . Beachten Sie, dass Sie bei der zweiten das Terminal (unten) sichtbar machen müssen, indem Sie die Grenze nach oben ziehen. Wenn Sie auf "Ausführen" klicken, wird es in der normalen Befehlszeile im Terminal ausgeführt (und zeigt daher die Ausgabe nicht an, wenn es ohne println aufgerufen wird). Alternativ können Sie einfach juliain das Terminal selbst tippen und dann alles in der REPL erledigen, was auftaucht.

Und für ein bisschen mehr Spaß sind hier einige andere Implementierungen

Gnome-Sortierung (83 Bytes):

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)

Mein eigener Sortieralgorithmus (84 Bytes):

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

Scala, 82 Bytes

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

von der Kommandozeile:

$ 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

wahrscheinlich kann ein bisschen weiter golfen werden ... einfach das Einfügen mit fold sortieren.

Gilad hoch
quelle
2

x86-Maschinencode, 51-42 Byte

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

Blasensortierung mit einigen Tricks zur Wiederverwendung von Registern, um hier und da Bytes zu rasieren; Die COM-Datei wird in DosBox ausgeführt, empfängt die Eingabe von der Befehlszeile und druckt die Ausgabe auf die Standardausgabe.

Beispielsitzung

Kommentierte Versammlung:

    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
Matteo Italia
quelle
2

Java (JDK 10) , 125 Byte

s->{for(int i=s.length,j;i-->1;)for(j=i;j-->0;)s[i]^=(s[i]&95)<(s[j]&95)?s[j]^(s[j]=s[i]):0;System.out.print(new String(s));}

Probieren Sie es online!

Mit einer naiven Art.

Olivier Grégoire
quelle
1

Perl, 88 Bytes

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

Nur eine einfache Blasensorte. Rufen Sie mit der Option -n auf, um den Text zu übergeben.

z.B:

echo "tThHiIsS" | perl -n sort2.pl

Ausgabe:

hHiIsStT
Samgak
quelle
1

PHP, 106 Bytes

Der Code:

$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]);

Der Code enthält nichts Besonderes. count_chars()Erzeugt ein durch ASCII-Codes indiziertes Array, das die Anzahl der Vorkommen für jedes ASCII-Zeichen enthält. Der Rest ist eine langweilige Iteration über dieses Array.

Beispiel für die Ausführung:

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

Ein zusätzliches Byte kann mit PHP 7 gespeichert werden: Ersetzen $c[$i]durch($c=count_chars($argv[1]))[$i] und entfernen Sie die Zuweisung $cvon am Anfang des Programms.

Axiac
quelle
1

Haskell, 74 Bytes

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

Ganz anders als meine andere Antwort . Diesmal ist es eine einfache Einfügesorte.

nimi
quelle
1

Pip, 18 14 Bytes

GitHub-Repository für Pip

Es scheint, als gäbe es keine Konkurrenz zu Pyth, aber das ist ziemlich respektabel.

FcAZ OcQUC_FIa

Funktioniert nur mit Strings mit a-zA-Z. Verwendet für jeden Buchstaben des Alphabets eine Filteroperation, um die Buchstaben aus der Eingabezeichenfolge zu ermitteln, bei denen die Groß- / Kleinschreibung nicht berücksichtigt wird:

                    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

Zwei Notizen:

  • Der Raum ist notwendig; Andernfalls AZOwürde die Sequenz A ZOanstelle von scannenAZ O ;
  • Das Programm gibt keinen abschließenden Zeilenumbruch aus. Um eine hinzuzufügen, setzen Sie einex Code an das Ende des Codes (und drucken Sie dabei eine leere Zeichenfolge, nachdem die Schleife beendet ist).

Probelauf (mit der xVariante):

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