Gleiche Länge, andere Saite

53

Herausforderung

Bei einer nicht leeren Zeichenfolge S der Länge L, die ausschließlich aus druckbaren ASCII-Zeichen besteht, wird eine weitere Zeichenfolge der Länge L ausgegeben , die ausschließlich aus druckbaren ASCII-Zeichen besteht, jedoch nicht gleich S ist .

Für die Zwecke dieser Abfrage liegt ein druckbares ASCII-Zeichen zwischen U + 0020 und U + 007E (einschließlich). das heißt von (Leerzeichen) bis ~(Tilde). Zeilenumbrüche und Tabulatoren sind nicht enthalten.

Zum Beispiel "abcde"könnten einige gültige Ausgaben sein:

  • "11111"
  • "abcdf"
  • "edcba"

Aber diese wären ungültig:

  • "abcde"
  • "bcde"
  • "abcde0"

Testfälle

"asdf"
"1111"
"       "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
"  0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

Regeln

  • Sie können davon ausgehen, dass die Eingabe ausschließlich aus druckbaren ASCII-Zeichen besteht.
  • Sie können nicht davon ausgehen, dass die Eingabe nicht alle 95 druckbaren Zeichen enthält.
  • Sie können davon ausgehen, dass die Eingabe mindestens ein Zeichen enthält und weniger als 256 Zeichen lang ist.
  • Die Ausgabe muss außerdem vollständig aus druckbaren ASCII-Zeichen bestehen. Sie können beispielsweise das Byte \ x7F nicht zur Eingabe ausgeben "~".
  • Die Ausgabe muss sich von der Eingabe mit der Wahrscheinlichkeit 1 unterscheiden. Das heißt, Sie können zufällige Zeichenfolgen generieren, bis sich eine von der Eingabe unterscheidet. Sie können jedoch nicht einfach L zufällige Zeichen ausgeben und hoffen, dass dies anders ist.
  • Zeilenumbrüche sind in der Ausgabe nicht zulässig, Sie können jedoch einen abschließenden Zeilenumbruch ausgeben, der nicht für die Zeichenfolge gezählt wird.

Wertung

Das ist , also gewinnt der kürzeste Code in Bytes in jeder Sprache.

ETHproductions
quelle
Beachten Sie, dass "positiv" die leere Zeichenfolge ausschließt. Ersetzen Sie aus Gründen der Übersichtlichkeit "positiv" durch "ungleich Null"?
CalculatorFeline
5
@CalculatorFeline Aber das würde auch Strings mit negativer Länge / s
einschließen
1
... Die gibt es nicht.
CalculatorFeline
@CalculatorFeline Jetzt besser?
ETHproductions
3
Eine weitere einfache, aber nicht triviale Herausforderung.
Weijun Zhou

Antworten:

34

Python 2 , 21 Bytes

lambda s:`s`[:len(s)]

Probieren Sie es online!

Nimmt die Zeichenfolgendarstellung der Eingabezeichenfolge und schneidet sie auf die Länge der Eingabezeichenfolge ab. Bei einer typischen Zeichenfolge wird dies in 'Anführungszeichen gesetzt und am Ende abgeschnitten:

abc  ->   'abc'  ->  'ab
     rep        chop

Beachten Sie, dass die neue Zeichenfolge mit beginnt '. Wir wollen zeigen, dass sich die Ausgabe immer von der Eingabe unterscheidet.

  • Wenn der Eingang nein hat ', beginnt der Ausgang mit 'und der Eingang nicht.

  • Wenn die Eingabe ein 'und aber kein enthält ", verwendet Python "für die äußeren Anführungszeichen ein erstes Zeichen ", das nicht in der Eingabezeichenfolge enthalten ist.

  • Wenn die Eingabe beides 'und enthält ", werden die äußeren Anführungszeichen verwendet 'und jedes 'wird als maskiert \'. Wo immer das erste "in der Eingabe erscheint, wird es durch die Initiale 'in der Ausgabe und durch ein mögliches Escape nach rechts verschoben . Dies bedeutet, dass es nicht mit einer "in der entsprechenden Position in der Ausgabe übereinstimmen kann.

Beachten Sie schließlich, dass das Zitieren der Eingabe und möglicherweise das Entstehen von Zeichen immer die Anzahl der Zeichen erhöht. Wenn Sie also die Ausgabe abschneiden, entspricht dies der Länge der Eingabe.

Beachten Sie, dass es entscheidend war, dass Python "im zweiten Fall adaptiv umschaltet . Andernfalls schlägt die Eingabe mit drei Zeichen fehl '\'. Oder ein längeres Präfix des Fixes show string using '. Daher funktioniert diese Methode für die meisten Sprachen nicht.

xnor
quelle
Was ist die Begründung für die Indizierung bis len(s)statt -2?
Julian Wolf
1
@JulianWolf Für eine Eingabe, die sowohl 'als auch enthält ", wurden mehr als 2 Zeichen hinzugefügt, da die Anführungszeichen maskiert werden müssen.
Anders Kaseorg
Macht Sinn; hatte das nicht bedacht. Vielen Dank!
Julian Wolf
Sie können [2:]statt verwenden [:len(s)], um bis zu 16 Zeichen zu erhalten.
Xbarbie
@xbarbie Das gibt nicht immer die gleiche Länge, wenn Zeichen maskiert werden müssen.
XNOR
16

05AB1E , 3 Bytes

ÇÈJ

Probieren Sie es online!

Ç   # Convert to ASCII values
 È  # is even? (0 is 48 and 1 is 49 therefore 0 -> 1 and 1 -> 0)
  J # Join
Riley
quelle
Nett, sehr schlau
Adnan
15

JavaScript (ES6), 37 33 36 29 26 18 21 19 Bytes

s=>s.slice(1)+ +!+s

Probieren Sie es online!

-4 Bytes dank ETHProductions

-7 + -5 + -2 Bytes dank CalculatorFeline

-3 Bytes dank Rick Hitchcock

Verschiebt das erste Zeichen an das Ende und setzt es auf 0, wenn es numerisch und nicht null ist, und ansonsten auf 1.

Erläuterung

s=>                    anonymous function with parameter s
                 +s    convert s to a number
                !      not (converts to boolean; relevant: 0->true,1->false)
               +       convert !+s back to number (true->1, false->0)
   s.slice(1)+         prefix the rest of the string
              ␣        needed to avoid the +s combining

Beweis

Da das zweite Zeichen das erste, das dritte das zweite usw. ist, müssen alle Zeichen identisch sein. Das letzte verbleibende Zeichen kann nur eine 0 oder eine 1 sein, sodass das wiederholte Zeichen entweder 0 oder 1 sein muss. Daher ist es nicht möglich, eine Eingabe zu erstellen, die der Ausgabe entspricht. -ETHProductions

Siehe Änderungen für frühere Versionen und Erklärungen.

f=
s=>s.slice(1)+ +!+s

console.log(f("000"))
console.log(f("111"))
console.log(f("001"))
console.log(f("110"))
console.log(f("~"))
console.log(f("111111111111111111111111111111111111111111111111111"))
console.log(f("Hello world!"))
console.log(f("23"))
console.log(f(" "))
console.log(f("1x"))

Stephen S
quelle
13

Gelee , 3 Bytes

~Ṿṁ

Die Ausgabe ist eine Folge von Ziffern, Kommas und Minuszeichen, deren erstes Zeichen vom ersten Zeichen der Eingabezeichenfolge abweicht.

Probieren Sie es online!

Wie es funktioniert

~Ṿṁ  Main link. Argument: s (string)

~    Map bitwise NOT over the characters c in s.
     This attempts to cast c to int and then apply bitwise NOT, mapping
     '0', ..., '9' to 0, ..., 9 (before ~), then -1, ..., -10 (after ~).
     For non-digits, the attempt fails, mapping c to 0.
 Ṿ   Uneval, yielding a comma-separated string of integers in [-10, ..., 0].
     The first character will be '-' if s starts with a digit and '0' if not.
  ṁ  Mold; truncate the result to the length of s.
Dennis
quelle
6

Haskell , 20 Bytes

map$head.show.(<'M')

Probieren Sie es online!

Konvertiert in eine Zeichenfolge von Fund T. Was zählt ist, dass sich die Charaktere Fund TBekehrten ineinander verwandeln. Dies wird durch die Überprüfung erfolgt , wenn der Charakter weniger als Mzu bekommen Trueoder False, dann das erste Zeichen der Zeichenfolge Darstellung nehmen.


Haskell , 23 Bytes

q '~'=' '
q _='~'
map q

Probieren Sie es online aus

Ersetzt jedes Zeichen mit ~, außer es ~wird ein Leerzeichen.

xnor
quelle
Welche Bedeutung hat der Raum in q '~'? Warum kann es nicht entfernt werden?
Cyoce
@Cyoce Haskell erlaubt 'als Zeichen in Bezeichnern, so q'~'=' 'würde analysiert werden als q' ~ '=' '(Meldung eines lexikalischen Fehlers, weil der letzte nicht 'übereinstimmt.)
Ørjan Johansen
5

Leerzeichen, 59 Bytes

Sichtbare Darstellung

NSSNSSSTSSSSSNSNSSNSSNSTNTSTTTTSSTNTTSNSNSTSSSNSSSNTNSSNSNN

Was es macht:

Für jedes gelesene Zeichen wird ein Leerzeichen ausgegeben, außer wenn es ein Leerzeichen ist, wird ein @ ausgegeben.

Demontage:

loop:
    push 32
     dup
      dup
       dup
        ichr
       get
       sub
      jn not_32
     dup
      add
not_32:
     pchr
    jmp loop
CensoredUsername
quelle
Immer schön, eine Lösung in Whitespace zu sehen. Vor allem, wenn Sie es normalerweise nicht sehen können. +1
Josiah Winslow
Gute Antwort! Ich habe versucht, etwas kürzeres für die Struktur zu finden, konnte aber nichts finden. Sie können jedoch 2 Bytes Golf spielen, indem Sie das SSSTSSSSSN (push 32)to SSSTSSTN (push 9)und das TSSS (add)to ändern TSSN (multiply). Es wird ein Tabulator für jedes Zeichen mit einem Unicode-Wert über 9 und ein Q(9 * 9 = 81) für jedes Zeichen mit einem Unicode-Wert von gedruckt 0..9. Versuchen Sie es online rohen 57 Bytes , oder versuchen Sie es online mit zusätzlichen Hervorhebungen und Erklärungen
Kevin Cruijssen
Ignoriere meinen Kommentar oben. Für die Herausforderung wird ein Tabulator nicht als druckbares ASCII-Zeichen betrachtet.
Kevin Cruijssen
5

MATL , 6 5 Bytes

Qo!V!

Probieren Sie es online!

Erläuterung

Q     % Implicitly input a string. Add 1 to each code point.
o     % Parity: 0 if odd, 1 if even. Note that '0' has ASCII code 48, so after
      % having added 1 it now gives 1. Similarly. '1' has ASCII code 49, so it
      % now gives 0. All other chars give 0 or 1. 
!V!   % Convert each number to the corresponding char. Implicitly display
Luis Mendo
quelle
Das ist 5 in CJam: l'0f=(wenn es das tut, was ich denke, dass es das tut)
Martin Ender
@MartinEnder Ja, genau das ist es :-) Ich habe gerade eine Erklärung hinzugefügt
Luis Mendo
5

Haskell , 19 Bytes

Eine anonyme Funktion, die a annimmt und zurückgibt String. Verwenden Sie als (map$(!!1).show.succ) "1111".

map$(!!1).show.succ

Probieren Sie es online! (Mit dem Testgurt von @ xnor.)

  • Inkrementiert das Zeichen für jedes Zeichen in der Eingabezeichenfolge und konvertiert es in das Zeichenliteralformat. Anschließend wird das zweite Zeichen des Literal verwendet, das das Zeichen unmittelbar nach dem 'Anfangsanführungszeichen ist.
  • Für fast alle druckbaren Zeichen ergibt dies einfach das inkrementierte Zeichen. Die Ausnahmen sind &und ~, die stattdessen geben \, weil ihre Nachfolger 'und \DELCharaktere in Literaten geflüchtet werden.
Ørjan Johansen
quelle
ziemlich sicher headkann anstelle (!!1)für ein zusätzliches Byte verwendet werden
Julian Wolf
Nein, headist (!!0)nicht (!!1). Es würde am Charakter scheitern '.
Ørjan Johansen
Ah richtig. Ich hatte gerade die Python-Antwort gelesen und vergessen, dass Zitate normalerweise einer besonderen Behandlung bedurften.
Julian Wolf
4

05AB1E , 5 Bytes

žQDÀ‡

Probieren Sie es online!

Erläuterung

Ersetzt jedes Zeichen durch das nächste druckbare ASCII-Zeichen, das von der Tilde in das Leerzeichen übergeht.

žQ     # push a string of printable acsii chars (space to tilde)
  D    # duplicate
   À   # rotate left
    ‡  # translate
Emigna
quelle
4

V , 7 Bytes

íÁ/a
g?

Probieren Sie es online! oder Überprüfen Sie alle Testfälle!

Wie funktioniert es?

Berücksichtigen Sie alle Zeichenfolgen, die aus druckbarem ASCII bestehen. Jede Zeichenfolge muss entweder 1) Buchstaben enthalten oder 2) keine Buchstaben enthalten.

Die Funktionsweise dieses Programms besteht also darin, zuerst ein nicht-alphabetisches Zeichen in zu konvertieren 'a'und dann ROT13 für die Eingabezeichenfolge auszuführen.

í       " Substitute:
 Á      "   A non-alphabetic character ([^a-zA-Z])
  /     "   with
   a    "   the letter 'a'
g?      " Perform ROT13 on...
        "   (Implicit) the current line.
DJMcMayhem
quelle
Dies bricht ab, wenn Sie eine Zahl wie " 9Alleine" haben. Wenn Sie diese
erhöhen
@ nmjcman101 Ah, das ist ein guter Punkt. Ich habe zurückgesetzt
DJMcMayhem
Ich mag die ROT13-Sache, aber ich wusste nicht, dass V (im) das kann
nmjcman101
4

C (gcc) , 22 Bytes

f(char*s){*s=65+*s%2;}

Nimmt einen Zeichenkettenzeiger und modifiziert das erste Zeichen an der richtigen Stelle.

Probieren Sie es online!

Dennis
quelle
1
Kürzere: *s=159-*s. Ändert immer das letzte Bit, gibt also niemals das gleiche Zeichen. Beachten Sie, dass159 = ' ' + '~'
Celtschk
Ich denke du meinst 158 ​​= '' + '~'. 159-32 = 127, was ein Zeichen wäre, das außerhalb des Bereichs liegt. Aber gute Idee.
Computronium
@celtschk Involutions können nicht funktionieren, da es eine ungerade Menge (95) druckbarer Zeichen gibt, sodass mindestens eines von ihnen sich selbst zugeordnet werden kann.
Dennis
@Computronium: Hoppla, du hast recht, ich habe den ~falschen Zeichencode .
Celtschk
4

C (gcc) , 20 Bytes

Sah Dennis Antwort, dachte an eine 2-Byte-wesentliche Verbesserung.

f(char*s){*s^=*s/3;}

Probieren Sie es online! (Fußzeile von Dennis.)

Ändert wie das Original das erste Zeichen der Zeichenfolge an der richtigen Stelle, xort es jedoch mit dem durch 3 geteilten Wert (die kleinste funktionierende Zahl. 2 schlägt für das einzelne Zeichen fehl, 'U'das 127 ergibt, nicht druckbar).

Ørjan Johansen
quelle
4

Python 2 , 25 Bytes

lambda s:`s<'T'`[0]+s[1:]

Probieren Sie es online!

Anders Kaseorg hat ein Byte gespeichert, indem er das erste Zeichen aus Trueoder extrahiert hat False.

xnor
quelle
Ich würde vorschlagen, '?'zu einem 2-stelligen Zeichencode zu wechseln , aber Python ist keine der Sprachen, in denen Sie das tun können :(
CalculatorFeline
Varianten, die ein Byte speichern (aber Python 3-Kompatibilität lambda s:`+(s<'1')`+s[1:]lambda s:`s<'T'`[0]+s[1:]
verwerfen
3

Haskell, 30 26 Bytes

f ' '='~'
f c=pred c
map f

Probieren Sie es online!

Ersetzt jeden Buchstaben durch seinen Vorgänger und das Leerzeichen durch Tilde.

nimi
quelle
3

Oktave , 19 18 Bytes

@(s)['',(s<66)+65]

Probieren Sie es online!

Erläuterung:

@(s)                 % Anonymous function taking a string s as input
         s<66        % A boolean vector with `1` for all characters below ASCII-66.
        (s<66)+65    % Add 65 to this, so that all elements that are 32-65 are now 66.
                     % All other elements are 65 
    ['',         ]   % Implicitly convert the list of 65 and 66 to the letters A and B
Stewie Griffin
quelle
3

CJam , 5 Bytes

l)iA%

Probieren Sie es online!

Wandelt das letzte Zeichen in seinen Codepunkt um und übernimmt das Modulo 10. Dies ist bei nichtstelligen Zeichen an der letzten Position deutlich anders. Die Ziffern beginnen jedoch am Code-Punkt 48. Wenn Sie also diese Mod 10 nehmen, werden sie zyklisch nach links verschoben, und daher wird immer das letzte Zeichen geändert.

Martin Ender
quelle
3

Japt , 4 Bytes

®c v

Probieren Sie es online!

Erläuterung:

®c v
®    At each char:
 c     Convert to its ASCII value
   v   Return 1 if divisible by 2, otherwise return 0
Oliver
quelle
3

Cubix , 10 Bytes

..@|i?2%)O

Probieren Sie es online! oder Schau es dir an!

Gibt für jedes Zeichen aus, 1ob das Zeichen einen geraden Codepunkt hat, 2andernfalls. 1hat einen ungeraden und einen geraden Codepunkt 2, sodass die Ausgabe niemals der Eingabe entspricht.

Erläuterung

Dieser Code entspricht dem folgenden Würfelnetz:

    . .
    @ |
i ? 2 % ) O . .
. . . . . . . .
    . .
    . .

Der IP (Anweisungszeiger) beginnt in der linken oberen Ecke der linken Seite und zeigt nach Osten. Es folgt diese Reihe von Anweisungen:

i     Grab a char-code from STDIN and push it to the stack (-1 if there is no more input).
?     If the top item is negative, turn left and hit @ which ends the program.
      If it's positive (any printable ASCII char), turn right. The IP runs through a bunch
        of no-ops, then hits:
)     Increment the top item.
|     Mirror the IP's direction horizontally (turns it around).
)     Increment the top item again. The IP then wraps around again until it hits:
?     The top item is positive, so turn right.
2     Push a 2 to the stack.
%     Push the modulus of the top two items (0 for even char-code, 1 for odd).
)     Increment the result (now 1 for even char-code, 2 for odd).
O     Output as a number. The IP wraps back around to the i and the process starts again.
ETHproductions
quelle
3

Alice , 9 Bytes

#oi/
t i@

Probieren Sie es online!

Erläuterung

Die Idee stammt von Martin Enders CJam-Beitrag. Das erste Zeichen wird als Codepunkt genommen, mod 10 verkleinert und an das Ende der Ausgabe verschoben. Da genau ein Zeichen geändert wurde, kann das Permutieren der Zeichen nicht dazu führen, dass dieselbe Zeichenfolge zurückgegeben wird.

#   skip next command
o   (skipped)
i   push first byte onto stack
    STACK: [97]
/   reflect to SE, switch to ordinal mode (implicit reflect to SW)
i   push remaining input onto stack as string (implicit reflect to NW)
    STACK: [97, "sdf"]
o   output top of stack (implicit reflect to SW)
    STACK: [97]
t   implicitly convert code point to decimal string, and extract last character
    (implicit reflect to NE)
    STACK: ["9", "7"]
o   output this last digit (implicit reflect to SE)
i   push empty string, since there is no more input to take (implicit reflect to NE)
/   reflect to S, switch to cardinal mode
@   terminate
Nitrodon
quelle
Die Verwendung tfür Mod 10 ist wirklich clever, nett. :)
Martin Ender
3

Aufdringlich , 1 Byte

Q

Probieren Sie es online!

Dadurch wird die angegebene Zeichenfolge in eine Liste von ASCII-Zeichencodes konvertiert, sie werden indiziert (modulare Indizierung) und das Ergebnis wird gedruckt. Im Wesentlichen wird jedes Zeichen nzugeordnet chr(ord(n) % 26 + 65). Mit diesem Programm können Sie sehen, wie das Mapping funktioniert.

Die Ausgabe:

  • Wird immer die gleiche Länge wie die Eingabe haben, da die Zeichen direkt neuen zugeordnet werden.
  • Enthält immer nur druckbare ASCII-Zeichen (da nur Großbuchstaben enthalten sind)
  • Immer mit dem Eingang unterschiedlich sein, da es keine möglichen Eingabezeichen ist , nso dass chr(ord(n) % 26 + 65) == n, wie dies der Fall zu sein , muss eine ganze Zahl sein , xso dass 26x = 65, für die es keine Lösung gibt.

1 Byte

q

Probieren Sie es online!

Diese Antwort ist genau die gleiche, außer dass sie eher Kleinbuchstaben als Großbuchstaben entspricht . Dies ist immer noch gültig , da es keine möglichen Eingabezeichen ist , nso dass chr(ord(n) % 26 + 97) == n.

FlipTack
quelle
2

Brain-Flak , 53 Bytes

Beinhaltet +1 für -c

([(((()()()()){}){}){}()]({}())){{}(<({}[()()])>)}{}

Dadurch wird das erste Zeichen dekrementiert, sofern es sich nicht um ein Leerzeichen handelt. In diesem Fall wird das erste Zeichen inkrementiert.

Probieren Sie es online!

([(((()()()()){}){}){}()]      )                     # Push: input + 1 != 33 on top of...
                         ({}())                      #    input + 1
                                {{}(<          >)}{} # If (input + 1 != 33)
                                     ({}[()()])      #   Push: (input + 1) - 2
Riley
quelle
2

Gelee , 4 Bytes

^1Ṿ€

Gibt eine Ziffernfolge aus. Kein Ausgabezeichen entspricht dem entsprechenden Eingabezeichen.

Probieren Sie es online!

Wie es funktioniert

^1Ṿ€  Main link. Argument: s (string)

^1    XOR each character c in with 1.
      This attempts to cast c to int, mapping '0', ..., '9' to 0, ..., 9.
      For non-digits, the attempt fails, mapping c to 0.
      After XORing with 1, we get 1, 0, 3, 2, 5, 4, 7, 6, 9, 8 for '0', ..., '9', 
      and 1 for all non-digits.
  Ṿ€  Uneval each; mapping 0, ..., 9 to '0', ..., '9'. This yields a character
      array, which is Jelly's string type.
      Note that no character is mapped to itself.
Dennis
quelle
2

Bash + Coreutils, 13

tr \ -~ ~\ -}

Transliteriert die Zeichen mit ~(0x20 - 0x7e) ~und dann mit }(0x7e, 0x20 - 0x7d).

Probieren Sie es online aus .

Digitales Trauma
quelle
2

PHP, 30 27

<?=strtr($a=$argn,$a,$a^1);

Ändert jedes Zeichen gleich dem ersten Zeichen mit dem Zeichen, das das niedrigstwertige Bit umgedreht hat.

Christoph
quelle
Funktioniert "~"?
CalculatorFeline
Es kippt nicht das am wenigsten signifikante Bit des ersten Zeichens. es konvertiert es in eine Ganzzahl und kippt das niedrigstwertige Bit davon . Also ja, @CalculatorFeline ~funktioniert und gibt aus 1.
ETHproductions
Oh. Funktioniert !$aoder ~$afunktioniert?
CalculatorFeline
@ETHproductions Ich habe die letzte Bearbeitung kurz vor dem Schlafengehen durchgeführt und hatte keine Zeit, sie zu aktualisieren. Natürlich konvertiert es Ihr Recht zuerst in eine Ganzzahl und ändert daher möglicherweise nicht einmal das erste Zeichen, aber vielleicht wird das zweite, z. B. "12", zu "13".
Christoph
@CalculatorFeline leider beide nicht !$aabwechselnd "12"in "12"da falseauf einen leeren String umgewandelt wird , so dass nichts ersetzt wird und ~$adreht sich alles in unprintables weil ~"12"nicht erst in int konvertieren , aber buchstäblich Flips alle Bits in der Zeichenkette.
Christoph
2

Ruby , 20 + 1 = 21 Bytes

Verwendet die -pFlagge.

sub(/./){$&=~/1/||1}

Probieren Sie es online!

Ersetzt das erste Zeichen in der Eingabe durch ein, 0wenn dies der Fall ist 1oder 1nicht.

Wert Tinte
quelle
2

Brachylog , 9 Bytes

{¬Ṣ|∧Ịh}ᵐ

Probieren Sie es online!

Erläuterung

Dies ersetzt alle Zeichen durch ein Leerzeichen, mit Ausnahme der Leerzeichen, durch die es ersetzt wird "0".

{      }ᵐ      Map on each char of the Input
 ¬Ṣ              The Input char is not " ", and the Output char is " "
   |             Or
    ∧Ịh          The Output char is "0"
Tödlich
quelle
2

PHP <7.1, 31 Bytes

for(;~$c=$argn[$i++];)echo$c^1;

Probieren Sie es online!

Jörg Hülsermann
quelle
Bitte entfernen Sie die 66-Byte-Lösung, da sie ungültig ist.
CalculatorFeline
Fehler bei Eingängen "1", "10", "101" usw. Sie können nicht nur von der Stringlänge abhängen.
CalculatorFeline
@CalculatorFeline "1" gibt "0", "10" "01" und "101" "010" aus. Wo ist das problem
Christoph
@CalculatorFeline "1" => 0, "10" => 01, "101" => 010 Wo schlägt es fehl?
Jörg Hülsermann 30.
1
PHP 7.1 liefert A non-numeric value encountered. Und Sie können ~anstelle von verwenden a&.
Titus
2

Golfscript, 3 Bytes

Probieren Sie es online!

)5%

Nehmen Sie den ASCII-Wert Modulo 5 des letzten Zeichens und ersetzen Sie das letzte Zeichen durch das Ergebnis. Dies funktioniert natürlich für nicht-stellige Zeichen, aber wenn das letzte Zeichen eine Ziffer ist, ändert es sich ebenfalls ("0" mod 5 = 3, "1" mod 5 = 4 usw.).

Dies würde auch mit 7 oder 9 funktionieren, während die Länge gleich bleibt.

Auch yay! Ich habe hier eine Golfscript-Lösung, die so gut ist wie die besten!

Josiah Winslow
quelle
2

Funky , 26 22 Bytes

s=>s::gsub("."a=>1&~a)

Berechnet, ~awelche Werte für Nicht-Ziffern NaN zurückgeben. Dann wird 1&es entweder auf 0 oder 1 begrenzt, für die Ziffer 0 wird dies sein 1, und 1dies wird es sein 0. Diese Saite ist also immer einzigartig.

Probieren Sie es online!

Ein Taco
quelle