Ot wes thi bist uf tomis


36

Ich liebe diese einfache Chiffre, es macht so viel Spaß, nicht ganz von Menschen lesbare Wörter zu lesen und die Lücken zu füllen ...

Ot wes thi bist uf tomis, ot wes thi wurst uf tomis, 
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss, 
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty, 
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss, 
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor, 
wi hed ivirythong bifuri as, wi hed nuthong bifuri as, 
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey – 
on shurt, thi piroud wes su fer loki thi prisint piroud, 
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid, 
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.

Die Regeln sind sehr einfach:

  • Akzeptieren Sie Text als Eingabe (ASCII-Zeichen, Groß- / Kleinbuchstaben und Interpunktion).
  • Drehen Sie für jeden Vokal zum nächsten Vokal oder zurück zum Anfang.
    • a => e
    • e => i
    • i => o
    • o => u
    • u => a
  • Vokale in Großbuchstaben bleiben in Großbuchstaben, Vokale in Kleinbuchstaben bleiben in Kleinbuchstaben.
  • Geben Sie den Text nach diesen Konvertierungen aus.
  • Keine Notwendigkeit, Akzente zu setzen.
  • Alle anderen Zeichen sollten unverändert bleiben.
  • Versuchen Sie es mit der kleinsten Anzahl von Bytes.
  • Jede alte Sprache, die du magst.

Testfälle

It was the best of times, it was the worst of times,
it was the age of wisdom, it was the age of foolishness,
it was the epoch of belief, it was the epoch of incredulity,
it was the season of light, it was the season of darkness,
it was the spring of hope, it was the winter of despair,
we had everything before us, we had nothing before us,
we were all going direct to heaven, we were all going direct the other way –
in short, the period was so far like the present period,
that some of its noisiest authorities insisted on its being received,
for good or for evil, in the superlative degree of comparison only.

Aus:

Ot wes thi bist uf tomis, ot wes thi wurst uf tomis, 
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss, 
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty, 
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss, 
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor, 
wi hed ivirythong bifuri as, wi hed nuthong bifuri as, 
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey – 
on shurt, thi piroud wes su fer loki thi prisint piroud, 
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid, 
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.

Im:

The quick brown fox jumps over the lazy dog.

Aus:

Thi qaock bruwn fux jamps uvir thi lezy dug.

Im:

Home is where the heart is.

Aus:

Humi os whiri thi hiert os.

Im:

Boaty McBoatface

Aus:

Buety McBuetfeci

Im:

AEIOUaeiou

Aus:

EIOUAeioua

Im:

Programming Puzzles And Code Golf

Aus:

Prugremmong Pazzlis End Cudi Gulf


4
Hmm. Altes Englisch?
iammax

10
Immer noch leichter zu lesen als Beowulf.
Smeato

4
Sieht für mich aus wie ein Kiwi-Übersetzer.
Magoo

1
Mir gefällt, wie "böse", wenn Chiffren zu "ivol", effektiv auf die gleiche Weise ausgesprochen wird.
Enrico Borba

Antworten:



22

MS-SQL, 51 Bytes

Funktioniert mit SQL 2017 oder höher:

SELECT TRANSLATE(v,'AEIOUaeiou','EIOUAeioua')FROM t

Die neue Funktion ersetzt TRANSLATEeinzelne Zeichen und ist daher ideal für diese Herausforderung geeignet.

Die Eingabe erfolgt über eine bereits vorhandene Tabelle t mit Varchar - Spalte v , je unseren IO Regeln .

In diesem Fall muss die Tabelle mit einer Sortierung erstellt werden, bei der zwischen Groß- und Kleinschreibung unterschieden wird , entweder indem sie auf einem Server mit Groß- und Kleinschreibung ausgeführt wird, oder indem das COLLATESchlüsselwort verwendet wird (das nicht zur Gesamtsumme der Zeichen gezählt wird):

CREATE TABLE t(v varchar(max) COLLATE Latin1_General_CS_AS)

EDIT : SSMS kann das lange Zitat oben bei der Rückkehr des Ergebnisses in einem „Ergebnisse in Text“ Fenstern abgeschnitten, dies ist eine Client - Einstellung, nicht um einen Fehler in meinem Programm .

Zum Korrigieren gehen Sie zu Tools > Options > Query Results > SQL Server > Results to Text"Maximale Anzahl der in jeder Spalte angezeigten Zeichen" und erhöhen Sie diese.


1
Ich bin wirklich schockiert, dass SQL in dieser Hinsicht sogar nahezu wettbewerbsfähig ist. Auch das ist eine coole Funktion! Vielen Dank für Ihre Nachricht :)
Nic Hartley

@NicHartley Ja, sie scheinen in jeder Version ein paar nützliche Funktionen hinzuzufügen. Sie können es auch mit REPLACEeinigen Tricks verschachteln : REPLACE(TRANSLATE(v,'1234567890','xxxxxxxxxx'),'x','')Zum Beispiel, um alle Ziffern aus einer Zeichenfolge zu entfernen. Immer noch lang, aber viel kürzer als 10 verschachtelte REPLACEs.
BradC


14

Haskell , 52 Bytes

(a:b)!c|a/=c=b!c|1>0=b!!0
a!b=b
map("aeiouaAEIOUA"!)

Probieren Sie es online!

Lynn hat mir zwei Bytes gespart, indem sie darauf hingewiesen hat, dass !!0es kürzer ist als head.

Erläuterung

Wenn Sie noch nie in Haskell programmiert haben, wird dies wahrscheinlich wie ein Haufen Quatsch aussehen. Also lasst es uns zuerst loswerden und dann aufschlüsseln:

(a:b)!c
 |   a/=c   = b!c
 |otherwise = b!!0
a!b=b
map("aeiouaAEIOUA"!)

Zuerst haben wir eine Funktion !, die einen String sund ein Zeichen nimmt c. Unsere ersten Musterübereinstimmungen akzeptieren Eingaben, wenn die Zeichenfolge nicht leer ist. Wenn der String nicht leer ist, vergleichen wir sein erstes Zeichen mit c. Wenn das erste Zeichen nicht gleich ist, cwerfen wir es und rufen !es mit dem Rest der Zeichenfolge und erneut auf c. Wenn es gleich ist, geben wir das zweite Zeichen in der Zeichenkette zurück.

Unsere nächste Musterübereinstimmung fängt die Zeichenfolge in allen anderen Fällen ab, dh wenn die Zeichenfolge leer ist. In diesem Fall kehren wir einfach zurück c.

Alles in allem nimmt diese Funktion ein Zeichen cund einen String sund gibt das Zeichen nach dem ersten Auftreten von cin zurück s. Wenn wir dies mit bestehen aeiouaAEIOUA, wird unsere Verschlüsselung für ein einzelnes Zeichen durchgeführt. Um unsere gesamte Funktion zu erstellen, müssen wir dies auf die Zeichenfolge abbilden.


12

Netzhaut ,10 9 8 Bytes

T`uo`vVA

Probieren Sie es online!

1 Byte gespart dank Neil! Und noch ein Dankeschön an Martin!

Die neue Version der Netzhaut hat Vokalklassen, was das Ergebnis etwas kürzer macht. Die Transliteration verwendet auch die "andere" Klasse. So tosieht die Klasse aus wie "aeiouAEIOUA", während die fromKlasse aussieht wie "uaeiouAEIOUA"

Dies verursacht keine Probleme, da das zweite uMapping Aniemals durchgeführt wird, da ues bereits gemappt wurde a.


9 Bytes T`_o`uvUV.
Neil

Dies ist eine bemerkenswert kurze Antwort!
AjFaraday

@ Neil clever, danke! Ich dachte, ein From- _Set würde es buchstäblich behandeln, aber es sieht so aus, als würde es das nicht tun.
FryAmTheEggman

3
Sie können sich noch einen rasieren, aber ich kann Stax leider nicht binden: tio.run/##HYnBDoIwEAXv/…
Martin Ender

@ MartinEnder Danke! Das ist eine clevere Mischung aus beidem. Ich habe noch nicht Yviel ausprobiert, also werde ich es morgen versuchen .
FryAmTheEggman


6

Python 3, 62 Bytes

lambda x:x.translate(str.maketrans('aeiouAEIOU','eiouaEIOUA'))

Erstellen Sie eine Übersetzungstabelle (Wörterbuch) mit strder statischen str.maketransMethode von. Übersetzen Sie relevante Zeichen in ihr Zielzeichen.


Wo führt das I / O durch?
Reinierpost

@reinierpost Es ist eine Funktion. Die Eingabe erfolgt über den xParameter. In Python benötigen Lambda-Funktionen keine return-Anweisung.
Mypetlion

6

C 85 76 67 65 64 Bytes

f(char*c){for(;*c;)putchar(1[index("AEIOUAaeioua",*c++)?:c-2]);}

Portierung der Java- Antwort von Kevin Cruijssen . Probieren Sie es hier online aus .

Dank an Kevin Cruijssen für das Golfen von 9 Bytes, an Christoph für das Golfen von 11 Bytes und an ceilingcat für das Golfen von 1 Byte.

Ungolfed-Version:

f(char* c) { // function taking a char array as parameter and implicitly returning an unused int
    for(; *c ;) // loop over the input
        putchar(1 [index("AEIOUAaeioua", * c++) ?: c-2]); // find the first pointer to the current char in the vowels string, NULL if not present; if it's not NULL, print the next vowel, otherwise just print the char
}

1
Scheint keine Standarderweiterung von gcc zu sein. Ich kannte es von PHP und habe es einfach ausprobiert.
Christoph

1
@Christoph Ich mag Ihre Verwendung der Rekursion, aber ich bin nicht sicher, ob wir ein Trailing ausgeben können \0. Dies funktioniert auch nicht, wenn es mit clang kompiliert wird: tio.run/##S9ZNzknMS///…
OOBalance

1
@Christoph: Ich war neugierig, wo das undefinierte Verhalten war, also habe ich die Clang-Version debuggt, nachdem ich sie noch etwas entgolfet hatte. const char *res = strchr("AEIOU...", 0)Gibt einen Zeiger auf das Abschlusszeichen im Zeichenfolgenliteral zurück. putchar(res[1])Liest über das Ende des String-Literal hinaus. Mit gcc scheint es zufällig ein weiteres Null-Byte zu finden und es funktioniert, aber mit clang bekommt es ein 73 'I'(wahrscheinlich aus maindem String-Literal "Es war ...", aber ich habe das asm nicht überprüft). So putcharkehrt nicht 0, und wir schließlich segfault wenn *c++ein nicht zugeordneten Seite liest.
Peter Cordes

2
@PeterCordes ja, ich habe es hier herausgefunden, nachdem ich einen Verdacht hatte. Trotzdem werden hier noch 2 Bytes gespeichert f(char*c){for(;*c;)putchar(1[strchr("AEIOUAaeioua",*c++)?:c-2]);}. Das ist alles für den Moment, denke ich.
Christoph

1
@Rogem Wegen der kommutativen Eigenschaft der Addition a[b]==*(a+b)==*(b+a)==b[a]. Daher1[...]==(...)[1]
Ceilingcat



5

Python 2 , 79 68 67 Bytes

-1 Byte dank @ArnoldPalmer

V='uaeiouAEIOUA'
print''.join((V[1:]+c)[V.find(c)]for c in input())

Probieren Sie es online!


67 Bytes . Tut mir leid, wenn du mit Benachrichtigungen überflutet wurdest, ich habe eine Weile keinen Kommentar mehr gepostet und vergessen, wie das geht.
Arnold Palmer

@ArnoldPalmer Danke! Es ist in Ordnung, ich war weg und sie haben mich alle vermisst: D
Dead Possum





4

Java 10, 97 87 Bytes

s->{for(var c:s){var t="AEIOUAaeioua"+c+c;System.out.print(t.charAt(t.indexOf(c)+1));}}

-10 Bytes, nachdem er von @Arnauld 's JavaScript-Antwort inspiriert wurde (seine 60-Bytes-Version) .

Probieren Sie es online aus.

Erläuterung:

s->{                         // Method with character-array parameter and no return-type
  for(var c:s){              //  Loop over the input characters
    var t="AEIOUAaeioua"     //  Temp-String containing the order of vowels 
                             //  (including additional 'A' and 'a'),
          +c+c;              //  appended with two times the current character
    System.out.print(        //  Print:
      t.charAt(              //   The character in String `t` at index:
         t.indexOf(c)+1));}} //    The (first) index of the current character in `t` + 1

4

05AB1E , 14 13 11 Bytes

žMDÀ‡žMuDÀ‡

Probieren Sie es online!


1
Sie können zwei Bytes einsparen, indem Sie die Eingabe einfach als mehrzeilige Zeichenfolge verwenden. Sie brauchen also nicht das |und »: Probieren Sie es online aus: 11 Bytes .
Kevin Cruijssen

@ KevinCruijssen Danke! Ist das nicht etwas, das in einer kürzlichen Version von 05AB1E behoben wurde?
Kaldo

Keine Ahnung, tbh. Startete erst seit ca. Anfang dieses Jahres mit 05AB1E. Sie könnten @Adnan im 05AB1E-Chat fragen, wenn die Funktion hinzugefügt wurde, wenn Sie wissen möchten.
Kevin Cruijssen


3

APL + WIN, 55 Bytes

Eingabeaufforderungen für Eingabezeichenfolge:

i←(10≥n←'AEIOUaeiou'⍳s)/⍳⍴s←⎕⋄s[i]←'EIOUAeioua'[n~11]⋄s

3

Mumps, 38 Bytes

R T W $TR(T,"AEIOUaeiou","EIOUAeioua")

Mumps fügt normalerweise kein Wagenrücklaufzeichen hinzu, da ich keine Anforderung sah, die Eingabe von der Ausgabe zu trennen, sieht es beim ersten Start etwas seltsam aus. Die Ausgabe für den letzten Testfall sieht beispielsweise folgendermaßen aus:

Programming Puzzles And Code GolfPrugremmong Pazzlis End Cudi Gulf

Wenn Sie einen Wagenrücklauf hinzufügen möchten, fügen Sie zwei Bytes hinzu:

R T W !,$TR(T,"AEIOUaeiou","EIOUAeioua")

3

Vim + tpope / vim-abolish , 30 Bytes

:%S/{a,e,i,o,u}/{e,i,o,u,a}/g<cr>

Alternative Lösung, auch 30 Bytes:

Oe,i,o,u<esc>|D:%s/{a,<C-r>"}/{<C-r>",a}/g

Laut Meta können VIM-Antworten Plugins ohne Byte-Einbußen verwenden. Dies ist keine vim Antwort, sondern eine vim + abolish Antwort.


Abolish ist ein äußerst nützliches Plugin. In diesem Abschnitt der README-Datei wird genau beschrieben, wie dieser Befehl (der SubvertBefehl) funktioniert.


3

CJam , 29 19 Bytes

q"aeioua"_eu+_1m<er

Probieren Sie es online!

-10 Bytes dank @Peter Taylor

Erläuterung:

q                       # take all input
 "aeioua"               # push vowel pairs
         _eu            # duplicate, uppercase
            +_          # concatenate, duplicate again
              1m<       # rotate left by 1
                 er     # transliterate

Obwohl die Frage nicht spezifisch für die Eingabe ist, sollten Sie sie meines Erachtens qeher verwenden als lfür die Eingabe. Der erste Testfall scheint mehrzeilig zu sein. Sie können auch verkürzen "eioua"zu _1m<. In der Tat können Sie weiter gehen und Golf spielenq"aeioua"_eu+_1m<er
Peter Taylor


2

PHP, 90 Bytes

Probieren Sie es online aus

Code

function f($s){echo strtr($s,array_combine(str_split(UuAaEeIiOo),str_split(AaEeIiOoUu)));}

Erläuterung

function f($s){
 echo strtr(
       $s,                          #The string to operate
       array_combine(               #combining arrays
            str_split(UuAaEeIiOo),  #splitting this strings
            str_split(AaEeIiOoUu))
              # With array combine php creates an array like
              # ["U"=>"A", "a"=>"e"....and so on]
              # strtr can replace strings in a string, using an array with 
              # the values to replace and with what replace each value.
 );
}

75 Bytes wenn mit php -rusing gelaufen$argv

<?=strtr($argv,array_combine(str_split(UuAaEeIiOo),str_split(AaEeIiOoUu)));


2

str , 18 bytes

[aeiouaAEIOUA]#D#U

Probieren Sie es online!

Erläuterung

                       implicit: over each character of the input:
[aeiouaAEIOUA]#D#U
[            ]         push this string
              #D       set this to the operation domain
                #U     set the charcter to the next character in the domain

2

PHP, 38 Bytes

Ganz einfach, nicht sehr kreativ, verwendet strtr, um die Vokale zu ersetzen:

<?=strtr($argn,aeiouAEIOU,eiouaEIOUA);

Laufen Sie mit echo '<input>' | php -nF <filename>oder versuchen Sie es online .


Geht das nicht davon aus, dass der Eingang der vordefinierten Variablen zugeordnet ist argn? Wenn ja, dann ist das nicht gültig; Sie müssen die Zeichenfolge als Argument übergeben und $argv1]stattdessen verwenden.
Shaggy

2
@Shaggy Nein, wenn Sie es mit dem -FFlag ausführen , funktioniert es mit Eingaben in der Befehlszeile. In den PHP-Dokumenten zu Optionen : -F --process-file PHP file to execute for every input line. Added in PHP 5.Die Definition der Online-Variablen "Try it" ist nur deshalb so, weil einige Leute PHP nicht lokal installiert haben und ich das -FFlag in TIO nicht zum Laufen bringen konnte.
Davіd

1
Danke, @ David - das ist mein "etwas Neues" für PHP heute :)
Shaggy

2

q / kdb +, 36 33 Bytes

Lösung:

{(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'

Beispiele:

q){(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'"AEIOUaeiou"
"EIOUAeioua
q){(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'"Programming Puzzles And Code Golf"
"Prugremmong Pazzlis End Cudi Gulf"

Erläuterung:

Finden Sie den Index der Vokale heraus, fügen Sie einen hinzu, um ihn zum nächsten zu verschieben, und indizieren Sie ihn. Denken Sie immer noch, dass dieser Ansatz erheblich verbessert werden kann ...

{(v,2#x)1+(v:"aeiouaAEIOUA")?x}@' / the solution
{                             }@' / apply lambda to each character of input
                            ?x    / look up x in...
          (                )      / do together
             "aeiouaAEIOUA"       / lookup list
           v:                     / save as v
        1+                        / add one
 (     )                          / do together
    2#x                           / take 2 copies of x
  v,                              / prepend v

Bonus:

Meine alte ** 36-Byte (()) -Lösung, die ich für ziemlich cool halte, die ich aber erst in die Liste aufnehmen muss, um wettbewerbsfähig zu sein:

ssr/[;"uoiea%UOIEA%";"%uoiea%UOIEA"]

2

Kohle , 35 Bytes

UT≔AUOIEAauoieaσF¹¹⊞υ➙§σ⊕ι§σι▷SR⟦Sυ

Probieren Sie es online!

Naive Methode.

Erläuterung:

UT                                         Set trim option to on, so output won't be a rectangle
    ≔AUOIEAauoieaσ                          Assign "AUIOEAauioea" to s
                   F¹¹                      For i (ι) from 0 to 10
                       ⊞υ                   Push to u (initially empty list)
                          ➙                 Rule of:
                            §σ⊕ι            S[i + 1]
                                 §σι         to S[i]. This is so a->A gets overwriteen by a->e
                                    ▷SR⟦Sυ  Replace input as string using u (now a list of rules)

2

PHP , 76 Bytes.

$s=strtr($s,array_combine(str_split("aeiouAEIOU"),str_split("eiouaEIOUA")));

Hör zu!

Dies war das kürzeste Mal, dass ich dies in PHP konnte.

$s = //overwrite $s variable ($s should be a defined string or input)
    strtr(  //strtr replaces key => value pairs from arrays in a string
        $s, //the string we are converting
        array_combine( //create an array with key value pairs, key should be original vowel letter and value should be it's replacement
            str_split("aeiouAEIOU") //turn vowels (lower and upper) into an array
            ,str_split("eiouaEIOUA") //turn vowel replacements into an array
        )
    );
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.