Horloge (translittération) Chiffre

12

Introduction:

J'ai des tas de chiffrements différents stockés dans un document que j'ai compilé une fois enfant, j'ai choisi quelques-uns de ceux que je pensais être les mieux adaptés aux défis (pas trop triviaux et pas trop difficiles) et les ai transformés en défis. La plupart d'entre eux sont toujours dans le bac à sable, et je ne sais pas encore si je vais tous les poster, ou seulement quelques-uns. Voici le troisième et le plus simple (après le chiffre informatique et le chiffre Trifid que j'ai posté plus tôt).


Avec un chiffrement d'horloge, nous utilisons l'image suivante pour chiffrer le texte:

entrez la description de l'image ici
Donc une phrase comme ça this is a clock cipherdeviendrait:

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

Défi:

Étant donné une chaîne sentence_to_encipher, chiffrez-la comme décrit ci-dessus.

Règles du défi:

  • Vous pouvez supposer que le sentence_to_enciphertestament ne contiendra que des lettres et des espaces.
  • Vous pouvez utiliser des minuscules ou des majuscules (veuillez indiquer celui que vous avez utilisé dans votre réponse).
  • Vous n'êtes pas autorisé à ajouter des zéros en tête pour les lettres cryptes un chiffre bpar j, mais deux zéros 00sont obligatoires pour les espaces.
  • Vous devez utiliser :comme séparateur, et un début ou une fin supplémentaire :n'est pas autorisé.
  • Vous êtes autorisé à utiliser des minuscules amet pmau lieu de majuscules AMet PM, tant qu'il est cohérent.

Règles générales:

  • C'est le , donc la réponse la plus courte en octets l'emporte.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
  • Les failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
  • De plus, l'ajout d'une explication à votre réponse est fortement recommandé.

Cas de test:

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
la source
En relation
Kevin Cruijssen
Est-il autorisé à sortir [7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]pour hi bob, ou doit-on joindre le résultat? Au fait, chiffrement soigné!
M. Xcoder
@ Mr.Xcoder Désolé, pour le bien du thème de chiffrement, je dirais qu'il devrait être joint à une seule chaîne (ou le tout comme une liste de caractères comme ['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']).
Kevin Cruijssen

Réponses:

5

05AB1E , 22 21 octets

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

Essayez-le en ligne! ou comme suite de tests

Quelques solutions alternatives de 21 octets:

':ýAð«24L„AMš„PMª00ª‡
00„AM24L„PM)˜AIk>è':ý
Emigna
la source
Belle réponse, j'ai réussi à obtenir 23 octets via plusieurs approches (dont l'une était ma réponse actuellement supprimée). C'est une bonne façon d'organiser votre pile pour enregistrer un octet!
M. Xcoder
1
Un autre 22 octets combinant nos réponses: Essayez-le en ligne!
M. Xcoder
@ Mr.Xcoder: Ma première idée ressemblait en fait à cela, mais 2 octets de moins parce que je ne me souvenais pas que cela ªavait changé :)
Emigna
J'ai trouvé un 20 octets en utilisant une partie de l' approche de @ Mr.Xcoder , mais je vous laisse le découvrir vous-même avant de le dévoiler. :)
Kevin Cruijssen
1
@KevinCruijssen: Je vous ferai savoir après avoir regardé un peu plus;)
Emigna
4

Perl 6 , 47 octets

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

Essayez-le en ligne!

Anonyme Quel que soit lambda qui prend une chaîne dans les deux cas et renvoie la chaîne chiffrée.

Explication:

*.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
Jo King
la source
3

Pyth, 25 octets

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

Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .

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
la source
3

Java (JDK) , 95 octets

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

Essayez-le en ligne!

Crédits

  • -1 octet grâce à Kevin Cruijssen
Olivier Grégoire
la source
Un golf facile: charà var. :)
Kevin Cruijssen
Merci! Si évident maintenant que tu me le montres ...
Olivier Grégoire
3

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

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

Prend l'entrée comme une chaîne de lettres minuscules. Vérifiez d'abord si le caractère est un espace, et si c'est le cas, convertissez-le en 00. Ensuite, il vérifie si le caractère est un A et le convertit en AM. Il vérifie à nouveau Z et le convertit PMsi c'est le cas. Enfin, si le personnage réussit tous les contrôles, il est converti dans son ordre alphabétique-1.

-2 octets grâce à @dana

Essayez-le en ligne!

// 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 + ""))
Incarnation de l'ignorance
la source
2

Rubis , 49 octets

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

Essayez-le en ligne!

Réponse de Port of Jo King's Perl . Prend l'entrée comme un tableau de caractères, renvoie une chaîne avec AM / PM en majuscules.

Kirill L.
la source
2

Rouge , 124 121 110 109 octets

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

Essayez-le en ligne!

Galen Ivanov
la source
2

05AB1E , 20 octets

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

Très inspiré par les 22 octets de @ Mr.Xcoder dans le commentaire de la réponse 05AB1E existante par @Emigna .

Prend l'entrée comme une liste de caractères minuscules (serait de 21 octets avec un interligne Ssi je prends l'entrée comme une chaîne).

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

':ý            '# 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
la source
1
Ah oui. Le remplacement de l'espace séparément enregistre un octet. J'aurais dû essayer ça. Nice :)
Emigna
1

Tcl , 100 octets

proc C s {join [lmap c [split $s ""] {scan $c %c v
expr $v==65?"AM":$v==90?"PM":$v==32?00:$v-65}] :}

Essayez-le en ligne!

sergiol
la source
1

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

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

Prend l'entrée comme un tableau de caractères (en minuscules). Essayez-le en ligne!

mon pronom est monicareinstate
la source
82 octets: s=>string.Join(':',s.Select(c=>new[]{c-97+"","AM","PM","00"}["az ".IndexOf(c)+1])).
dana
1

Fusain , 26 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend l'entrée en minuscules (peut être trivialement changé en majuscules). Explication:

UB:

Définissez le caractère d'arrière-plan sur :. Cela comble les écarts entre les valeurs de sortie créées par le bon mouvement.

Fθ«→

Faites une boucle sur chaque personnage, en laissant un espace à chaque fois. (Le premier mouvement n'a aucun effet car le canevas est encore vide à ce stade.)

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

Allumez le caractère et si son espace, aou zsortie , alors le code approprié. J'utilise ×0²au lieu d' 00ici car ce dernier coûterait deux octets dans des séparateurs supplémentaires.

I⌕βι

Sinon, affichez la position indexée 0 de la lettre dans l'alphabet minuscule sous forme de chaîne.

Neil
la source