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 Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache.
Antworten:
Python 2 , 21 Bytes
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: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.quelle
len(s)
statt-2
?'
als auch enthält"
, wurden mehr als 2 Zeichen hinzugefügt, da die Anführungszeichen maskiert werden müssen.[2:]
statt verwenden[:len(s)]
, um bis zu 16 Zeichen zu erhalten.05AB1E , 3 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
3733362926182119 BytesProbieren 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
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.
quelle
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
quelle
Haskell , 20 Bytes
Probieren Sie es online!
Konvertiert in eine Zeichenfolge von
F
undT
. Was zählt ist, dass sich die CharaktereF
undT
Bekehrten ineinander verwandeln. Dies wird durch die Überprüfung erfolgt , wenn der Charakter weniger alsM
zu bekommenTrue
oderFalse
, dann das erste Zeichen der Zeichenfolge Darstellung nehmen.Haskell , 23 Bytes
Probieren Sie es online aus
Ersetzt jedes Zeichen mit
~
, außer es~
wird ein Leerzeichen.quelle
q '~'
? Warum kann es nicht entfernt werden?'
als Zeichen in Bezeichnern, soq'~'=' '
würde analysiert werden alsq' ~ '=' '
(Meldung eines lexikalischen Fehlers, weil der letzte nicht'
übereinstimmt.)Leerzeichen, 59 Bytes
Sichtbare Darstellung
Was es macht:
Für jedes gelesene Zeichen wird ein Leerzeichen ausgegeben, außer wenn es ein Leerzeichen ist, wird ein @ ausgegeben.
Demontage:
quelle
SSSTSSSSSN (push 32)
toSSSTSSTN (push 9)
und dasTSSS (add)
to ändernTSSN (multiply)
. Es wird ein Tabulator für jedes Zeichen mit einem Unicode-Wert über 9 und einQ
(9 * 9 = 81) für jedes Zeichen mit einem Unicode-Wert von gedruckt0..9
. Versuchen Sie es online rohen 57 Bytes , oder versuchen Sie es online mit zusätzlichen Hervorhebungen und ErklärungenMATL ,
65 BytesProbieren Sie es online!
Erläuterung
quelle
l'0f=
(wenn es das tut, was ich denke, dass es das tut)Haskell , 19 Bytes
Eine anonyme Funktion, die a annimmt und zurückgibt
String
. Verwenden Sie als(map$(!!1).show.succ) "1111"
.Probieren Sie es online! (Mit dem Testgurt von @ xnor.)
'
Anfangsanführungszeichen ist.&
und~
, die stattdessen geben\
, weil ihre Nachfolger'
und\DEL
Charaktere in Literaten geflüchtet werden.quelle
head
kann anstelle(!!1)
für ein zusätzliches Byte verwendet werdenhead
ist(!!0)
nicht(!!1)
. Es würde am Charakter scheitern'
.05AB1E , 5 Bytes
Probieren Sie es online!
Erläuterung
Ersetzt jedes Zeichen durch das nächste druckbare ASCII-Zeichen, das von der Tilde in das Leerzeichen übergeht.
quelle
V , 7 Bytes
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.quelle
9
Alleine" haben. Wenn Sie dieseC (gcc) , 22 Bytes
Nimmt einen Zeichenkettenzeiger und modifiziert das erste Zeichen an der richtigen Stelle.
Probieren Sie es online!
quelle
*s=159-*s
. Ändert immer das letzte Bit, gibt also niemals das gleiche Zeichen. Beachten Sie, dass159 = ' ' + '~'
~
falschen Zeichencode .C (gcc) , 20 Bytes
Sah Dennis Antwort, dachte an eine 2-Byte-wesentliche Verbesserung.
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).quelle
Python 2 , 25 Bytes
Probieren Sie es online!
Anders Kaseorg hat ein Byte gespeichert, indem er das erste Zeichen aus
True
oder extrahiert hatFalse
.quelle
'?'
zu einem 2-stelligen Zeichencode zu wechseln , aber Python ist keine der Sprachen, in denen Sie das tun können :(lambda s:`+(s<'1')`+s[1:]
lambda s:`s<'T'`[0]+s[1:]
Haskell,
3026 BytesProbieren Sie es online!
Ersetzt jeden Buchstaben durch seinen Vorgänger und das Leerzeichen durch Tilde.
quelle
Oktave ,
1918 BytesProbieren Sie es online!
Erläuterung:
quelle
CJam , 5 Bytes
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.
quelle
Retina ,
106 Bytes4 Bytes dank @Neil golfen
Probieren Sie es online!
Dies bedeutet übersetzt
zu
~
,!
zu,
"
zu!
, ...,~
zu}
.quelle
Japt , 4 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Cubix , 10 Bytes
Probieren Sie es online! oder Schau es dir an!
Gibt für jedes Zeichen aus,
1
ob das Zeichen einen geraden Codepunkt hat,2
andernfalls.1
hat einen ungeraden und einen geraden Codepunkt2
, sodass die Ausgabe niemals der Eingabe entspricht.Erläuterung
Dieser Code entspricht dem folgenden Würfelnetz:
Der IP (Anweisungszeiger) beginnt in der linken oberen Ecke der linken Seite und zeigt nach Osten. Es folgt diese Reihe von Anweisungen:
quelle
Alice , 9 Bytes
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.
quelle
t
für Mod 10 ist wirklich clever, nett. :)Aufdringlich , 1 Byte
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
n
zugeordnetchr(ord(n) % 26 + 65)
. Mit diesem Programm können Sie sehen, wie das Mapping funktioniert.Die Ausgabe:
n
so dasschr(ord(n) % 26 + 65) == n
, wie dies der Fall zu sein , muss eine ganze Zahl sein ,x
so dass26x = 65
, für die es keine Lösung gibt.1 Byte
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 ,
n
so dasschr(ord(n) % 26 + 97) == n
.quelle
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!
quelle
Gelee , 4 Bytes
Gibt eine Ziffernfolge aus. Kein Ausgabezeichen entspricht dem entsprechenden Eingabezeichen.
Probieren Sie es online!
Wie es funktioniert
quelle
Bash + Coreutils, 13
Transliteriert die Zeichen
mit
~
(0x20 - 0x7e)~
und dannmit
}
(0x7e, 0x20 - 0x7d).Probieren Sie es online aus .
quelle
PHP,
3027Ändert jedes Zeichen gleich dem ersten Zeichen mit dem Zeichen, das das niedrigstwertige Bit umgedreht hat.
quelle
~
funktioniert und gibt aus1
.!$a
oder~$a
funktioniert?!$a
abwechselnd"12"
in"12"
dafalse
auf einen leeren String umgewandelt wird , so dass nichts ersetzt wird und~$a
dreht sich alles in unprintables weil~"12"
nicht erst in int konvertieren , aber buchstäblich Flips alle Bits in der Zeichenkette.Ruby , 20 + 1 = 21 Bytes
Verwendet die
-p
Flagge.Probieren Sie es online!
Ersetzt das erste Zeichen in der Eingabe durch ein,
0
wenn dies der Fall ist1
oder1
nicht.quelle
Brachylog , 9 Bytes
Probieren Sie es online!
Erläuterung
Dies ersetzt alle Zeichen durch ein Leerzeichen, mit Ausnahme der Leerzeichen, durch die es ersetzt wird
"0"
.quelle
PHP <7.1, 31 Bytes
Probieren Sie es online!
quelle
A non-numeric value encountered
. Und Sie können~
anstelle von verwendena&
.Golfscript, 3 Bytes
Probieren Sie es online!
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!
quelle
Funky ,
2622 BytesBerechnet,
~a
welche Werte für Nicht-Ziffern NaN zurückgeben. Dann wird1&
es entweder auf 0 oder 1 begrenzt, für die Ziffer 0 wird dies sein1
, und1
dies wird es sein0
. Diese Saite ist also immer einzigartig.Probieren Sie es online!
quelle