Clock (transliterate) Chiffre

12

Einführung:

In einem Dokument, das ich als Kind zusammengestellt habe, sind viele verschiedene Chiffren gespeichert. Ich habe einige ausgewählt, die meiner Meinung nach am besten für Herausforderungen geeignet sind (nicht zu trivial und nicht zu schwierig), und sie in Herausforderungen umgewandelt. Die meisten von ihnen sind noch im Sandkasten und ich bin mir noch nicht sicher, ob ich sie alle oder nur einige veröffentlichen werde. Hier ist die dritte und einfachste (nach der Computer-Chiffre und der Trifid-Chiffre, die ich zuvor veröffentlicht habe).


Mit einem Clock Cipher verwenden wir das folgende Bild, um Text zu verschlüsseln:

Bildbeschreibung hier eingeben
So würde ein Satz wie this is a clock cipher:

t  h i s     i s     a     c l  o  c k     c i p  h e r    (without additional spaces of course, but added as clarification)
19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17

Herausforderung:

sentence_to_encipherVerschlüsseln Sie einen String wie oben beschrieben.

Herausforderungsregeln:

  • Sie können davon ausgehen, dass das sentence_to_enciphernur Buchstaben und Leerzeichen enthält.
  • Sie können entweder Kleinbuchstaben oder Großbuchstaben verwenden (bitte geben Sie an, welche Sie in Ihrer Antwort verwendet haben).
  • Sie sind nicht hinzuzufügen führende Nullen für den einstelligen verschlüsselten Buchstaben erlaubt bdurch j, aber zwei Nullen 00für Räume sind Pflichtfelder.
  • Sie sollten :als Trennzeichen verwenden, und ein zusätzliches Vor- oder Nachstellen :ist nicht zulässig.
  • Sie dürfen Kleinbuchstaben amund pmanstelle von Großbuchstaben AMund verwenden PM, sofern dies konsistent ist.

Allgemeine Regeln:

  • Das ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden.
  • Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
  • Standardlücken sind verboten.
  • Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
  • Es wird außerdem dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.

Testfälle:

Input:  "this is a clock cipher"
Output: "19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17"

Input:  "test"
Output: "19:4:18:19"

Input:  "what time is it"
Output: "22:7:AM:19:00:19:8:12:4:00:8:18:00:8:19"

Input:  "acegikmoqsuwy bdfhjlnprtvxz"
Output: "AM:2:4:6:8:10:12:14:16:18:20:22:24:00:1:3:5:7:9:11:13:15:17:19:21:23:PM"

Input:  "easy peazy"
Output: "4:AM:18:24:00:15:4:AM:PM:24"
Kevin Cruijssen
quelle
Related
Kevin Cruijssen
Ist es zu Ausgang erlaubt [7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]für hi bob, oder muss man das Ergebnis anschließen? Übrigens, ordentliche Chiffre!
Mr. Xcoder
@ Mr.Xcoder Tut mir leid, wegen des Chiffrierthemas würde ich sagen, dass es mit einer einzelnen Zeichenfolge (oder der gesamten Sache als Liste von Zeichen wie ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']) verbunden werden sollte.
Kevin Cruijssen

Antworten:

5

05AB1E , 22 21 Bytes

„AM24L„PM00)˜Að«s‡':ý

Probieren Sie es online! oder als Testsuite

Einige alternative 21- Byte-Lösungen:

':ýAð«24L„AMš„PMª00ª‡
00„AM24L„PM)˜AIk>è':ý
Emigna
quelle
Schöne Antwort, ich habe es geschafft, 23 Bytes durch mehrere Ansätze zu bekommen (einer davon war meine aktuell gelöschte Antwort). Auf diese Weise können Sie Ihren Stack ordnen, um ein Byte zu sparen!
Mr. Xcoder
1
Ein alternativer 22-Byte-Code, der unsere Antworten kombiniert: Probieren Sie es online aus!
Mr. Xcoder
@ Mr.Xcoder: Meine erste Idee sah tatsächlich so aus, aber 2 Bytes schlimmer, weil ich mich nicht daran erinnerte, dass sich ªdas geändert hatte :)
Emigna
Ich habe einen 20-Byte-Code gefunden, der einen Teil des @ Mr.Xcoder -Ansatzes verwendet, aber ich lasse Sie es selbst herausfinden, bevor ich ihn enthülle. :)
Kevin Cruijssen
1
@ KevinCruijssen: Ich werde Sie wissen lassen, nachdem ich etwas mehr geschaut habe;)
Emigna
4

Perl 6 , 47 Bytes

*.ords>>.&{<<00 AM{1..24}PM>>[$_%32]}.join(":")

Probieren Sie es online!

Anonym Welches Lambda auch immer, das eine Zeichenfolge in beiden Fällen verwendet und die verschlüsselte Zeichenfolge zurückgibt.

Erläuterung:

*.ords>>.&{                         } # Map the ordinal values to
           <<              >>[$_%32]  # The index in the list
              00 AM{1..24}PM  # 00, AM, the numbers 1 to 24 and PM
                                     .join(":")   # And join with colons
Scherzen
quelle
3

Pyth, 25 Bytes

j\:m@+++"AM"S24"PM""00"xG

Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .

j\:m@+++"AM"S24"PM""00"xGdQ   Implicit: Q=eval(input()), G=lowercase alphabet
                              Trailing dQ inferred
            S24               [1-24]
       +"AM"                  Prepend "AM"
      +        "PM"           Append "PM"
     +             "00"       Append "00" - this is the dictionary
   m                      Q   Map each element of Q, as d, using:
                       xGd      Get the index of d in G, -1 if not present (i.e. space)
    @                           Get the element from the dictionary at the above index
j\:                           Join the result on ":", implicit print
Sok
quelle
3

Java (JDK) , 95 Byte

s->{int a=0;for(var c:s)System.out.print((a++<1?"":":")+(c<33?"00":c<66?"AM":c>89?"PM":c-65));}

Probieren Sie es online!

Credits

  • -1 Byte dank Kevin Cruijssen
Olivier Grégoire
quelle
Ein einfaches Golf: charzu var. :)
Kevin Cruijssen
Vielen Dank! So offensichtlich, dass Sie es mir zeigen ...
Olivier Grégoire
3

C # (Visual C # Interactive Compiler) , 70 Byte

s=>string.Join(":",s.Select(a=>a<33?"00":a<66?"AM":a>89?"PM":a%65+""))

Nimmt die Eingabe als Folge von Kleinbuchstaben. Überprüft zuerst, ob das Zeichen ein Leerzeichen ist und konvertiert es in 00. Als nächstes wird geprüft, ob das Zeichen ein A ist, und es wird in konvertiertAM . Es prüft erneut auf Z und konvertiert es in, PMwenn es ist. Wenn das Zeichen alle Prüfungen besteht, wird es in die alphabetische Reihenfolge 1 konvertiert.

-2 Bytes dank @dana

Probieren Sie es online!

// Input taking a string
s => 
// Join the following IEnumerable<char> with a ":" character
string.Join(":", 
// Map all the characters in the string
s.Select(a => 
// Is the char less than 33, aka a space?
a < 33 ? 
// If so, it's a "00"
"00" 
// Else, is this an 'A'?
: a < 66 ?
// If so, convert it to "AM"
"AM" : 
// If it's not 'A' or a space, could it be a 'Z'?
a > 89 ?
// If it is, turn the character into "PM"
"PM" : 
// If it fails all of the checks above, get the characters position in the alphabet and subtract one from that.
a % 65 + ""))
Verkörperung der Ignoranz
quelle
2

Ruby , 49 Bytes

->a{a.map{|c|["00",:AM,*1..24,:PM][c.ord%32]}*?:}

Probieren Sie es online!

Antwort von Port of Jo King's Perl . Nimmt Eingaben als ein Array von Zeichen und gibt eine Zeichenfolge mit AM / PM in Großbuchstaben zurück.

Kirill L.
quelle
2

Rot , 124 121 110 109 Bytes

func[s][replace/all form collect[forall s[keep switch/default
c: -97 + s/1[0['AM]25['PM]-65["00"]][c]]]sp":"]

Probieren Sie es online!

Galen Ivanov
quelle
2

05AB1E , 20 Bytes

':ýð00:A24L„AMš„PMª‡

Sehr inspiriert von @ Mr.Xcoders 22-Bytes im Kommentar der bestehenden 05AB1E-Antwort von @Emigna .

Nimmt die Eingabe als eine Liste von Kleinbuchstaben (würde 21 Bytes mit einem führenden sein, Swenn ich die Eingabe als eine Zeichenkette nehme).

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

':ý            '# Join the (implicit) input list of characters by ":"
                #  i.e. ["e","a","s","y"," ","p","e","a","z","y"] → "e:a:s:y: :p:e:a:z:y"
ð00:            # Replace all spaces " " with "00"
                #  i.e. "e:a:s:y: :p:e:a:z:y" → "e:a:s:y:00:p:e:a:z:y"
A               # Push the lowercase alphabet
 24L            # Push a list in the range [1,24]
    AMš        # Prepend "AM" at the start of this list
        PMª    # And append "PM" at the end of the list
               # Transliterate; mapping letters to the list-items at the same indices
                # (and output the result implicitly)
                #  i.e. "e:a:s:y:00:p:e:a:z:y" → "4:AM:18:24:00:15:4:AM:PM:24"
Kevin Cruijssen
quelle
1
Ah ja. Durch das separate Ersetzen des Speicherplatzes wird ein Byte gespart. Ich hätte das versuchen sollen. Schön :)
Emigna
1

C # (Visual C # Interactive Compiler) , 98 Byte

s=>string.Join(':',s.Select(c=>"az ".Contains(c)?new[]{"AM","PM","00"}["az ".IndexOf(c)]:c-97+""))

Übernimmt die Eingabe als (Kleinbuchstaben-) Zeichen-Array. Probieren Sie es online!

Mein Pronomen ist monicareinstate
quelle
82 Bytes s=>string.Join(':',s.Select(c=>new[]{c-97+"","AM","PM","00"}["az ".IndexOf(c)+1])).
Dana
1

Holzkohle , 26 Bytes

UB:Fθ«→≡ι ×0²a¦AM¦z¦PMI⌕βι

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt die Eingabe in Kleinbuchstaben vor (kann trivial in Großbuchstaben geändert werden). Erläuterung:

UB:

Stellen Sie das Hintergrundzeichen auf :. Dies füllt die Lücken zwischen den Ausgabewerten, die durch die richtige Bewegung erzeugt werden.

Fθ«→

Durchlaufe jedes Zeichen und lasse jedes Mal eine Lücke. (Der erste Zug hat keine Auswirkung, da die Zeichenfläche zu diesem Zeitpunkt noch leer ist.)

≡ι ×0²a¦AM¦z¦PM

Schalten Sie das Zeichen ein und prüfen Sie, ob es ein Leerzeichen ist, aoder zgeben Sie den entsprechenden Code aus. Ich benutze ×0²stattdessen 00hier, da letzteres bei zusätzlichen Trennzeichen zwei Bytes kosten würde.

I⌕βι

Andernfalls geben Sie die 0-indizierte Position des Buchstabens im Kleinbuchstaben als Zeichenfolge aus.

Neil
quelle