Ihre Aufgabe ist es, eine 103-glatte Zahl mit der unten beschriebenen Methode in ein englisches Wort zu übersetzen .
Wie?
- Generieren Sie die Liste der Primfaktoren (mit Wiederholung) der eingegebenen Zahl.
- Liste sortieren:
- Wenn 2 nicht zu den Primfaktoren gehört, sortieren Sie die Liste in aufsteigender Reihenfolge.
- Wenn 2 einer der Hauptfaktoren ist, entfernen Sie ihn aus der Liste und sortieren Sie die verbleibenden Faktoren in absteigender Reihenfolge.
Übersetzen Sie jeden Faktor anhand der folgenden Tabelle in einen Buchstaben:
3 = S 13 = L 29 = X 43 = O 61 = Z 79 = H 101 = K 5 = P 17 = Q 31 = N 47 = R 67 = T 83 = V 103 = Y 7 = M 19 = U 37 = C 53 = A 71 = E 89 = D 11 = F 23 = I 41 = W 59 = G 73 = J 97 = B
Anmerkung : Diese Tabelle wurde empirisch erstellt, um die Anzahl der möglichen Wörter zu maximieren. Für die Neugierigen ist hier eine Liste von 2.187 Wörtern , die auf diese Weise codiert werden können (einschließlich unhöflicher Sprache). Es ist definitiv nicht garantiert, dass es optimal ist, aber es ist gut genug für diese Herausforderung.
Beispiele
Beispiel 1: 579085261 (aufsteigende Reihenfolge)
- Die Primfaktoren sind [37, 47, 53, 61, 103] .
- 2 ist kein Primfaktor, daher wird die Liste in aufsteigender Reihenfolge sortiert.
- 37 = C, 47 = R usw. Die Ausgabe ist "CRAZY".
Beispiel 2: 725582 (absteigende Reihenfolge)
- Die Primfaktoren sind [2, 11, 13, 43, 59] .
- 2 ist ein Primfaktor, also entfernen wir ihn und sortieren die Liste in absteigender Reihenfolge, was ergibt:
[59, 43, 13, 11] . - 59 = G, 43 = O usw. Die Ausgabe ist "GOLF".
Beispiel 3: 10757494 (mit einem wiederholten Faktor)
- Die Primfaktoren sind [2, 11, 71, 71, 97] .
- 2 ist ein Primfaktor, also entfernen wir ihn und sortieren die Liste in absteigender Reihenfolge, was ergibt:
[97, 71, 71, 11] . - 97 = B, 71 = E, 11 = F. Die Ausgabe ist "BEEF".
Erläuterungen und Regeln
- Die eingegebene Zahl ist garantiert 103-glatt und höchstens einmal durch 2 teilbar.
- Per Definition ist eine glatte Zahl eine positive ganze Zahl .
- Die Ein- und Ausgabe kann in jedem vernünftigen Format erfolgen. Die Ausgabe kann in Klein- oder Großbuchstaben erfolgen. Nachgestellte Leerzeichen sind akzeptabel. Führendes Leerzeichen ist das nicht.
- Wenn Ihr Programm / Ihre Funktion keine großen Eingaben unterstützen kann, geben Sie dies bitte in Ihrer Antwort an.
- Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes.
Testfälle
34874 --> ARM
483254 --> BAR
353722 --> EAR
494302 --> EGG
39061 --> FAT
6479 --> FUN
60421 --> ICE
54166 --> JAM
48911474 --> BETA
2510942 --> BOOM
2303854 --> DOOM
844261 --> FIRE
1606801 --> MAZE
1110085 --> PAGE
5212974 --> BALLS
67892046 --> BEANS
885396199 --> CREEK
67401037 --> FUNKY
27762173 --> QUICK
1238440506 --> ARROWS
33045832681 --> CRAGGY
1362714005 --> PIRATE
137302698 --> TROLLS
358310128062 --> BEGGARS
40255151586 --> DETAILS
164633248153 --> FIXATED
621172442227 --> UNRATED
2467812606 --> VACUUMS
86385078330 --> GROWNUPS
26607531423091 --> UNWORTHY
Ò
on579085261
, fühle mich wie <s> Emigna </ s> Adnan hat bereits begonnen.<=103
... Ihr Ergebnis istPIRATE MAZE
, oderDOOM VACUUMS
...Antworten:
Jelly ,
2927 BytesVielen Dank an @JonathanAllan für das Abschlagen von 1 Byte!
Probieren Sie es online!
Hintergrund
ist ein numerisches Literal. Die Zeichen zwischen den Anführungszeichen werden in der Jelly-Codepage durch ihre auf 1 basierenden Indizes ersetzt , und das resultierende Array wird als Basis-250-Zahl interpretiert. Dies ergibt die Ganzzahl c: = 288824892868083015619552399 .
Wie es funktioniert
quelle
Gelee , 36 Bytes
Probieren Sie es online!
Erläuterung
Hilfskonstante
1£
(produziert“SPMFLQUIXNCWORAGZTEJHVDBKY ”
mit einer 1 voran)Hauptprogramm
Ich habe das Gefühl, dass meine Komprimierung der Liste die andere Jelly-Antwort leicht übertrifft, aber dass mein Algorithmus für die Verwendung viel effizienter sein könnte. Vielleicht werde ich versuchen, sie zu kombinieren.
Jelly , 31 Bytes, inspiriert von @ Leakynuns Antwort
Probieren Sie es online! (leicht modifiziert, um viel schneller zu laufen)
Ist inkonsistent, ob eine nachgestellte Zeile gedruckt wird (PPCG lässt normalerweise Antworten mit oder ohne nachgestellte Zeile zu, also funktioniert das wohl auch?). Ist sehr langsam (O ( n ), wobei n die Eingabe ist und diese Zahlen nicht genau klein sind ...)
Erläuterung
Helper Konstante
1£
(produziert“¶SPMFLQUIXNCWORAGZTEJHVDBKY”
, wo¶
ist Neue - Zeile)Hauptprogramm
quelle
05AB1E ,
3938 BytesVerwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Ø
war der Teil davon, der meine sowieso um 20 Bytes schlug: P.Python 2
220217 BytesProbieren Sie es online aus - es wird nur der kleinste Testfall ohne Speichermangel ausgeführt
Ungolfed:
Diese Version wird nicht verwendet
exec
, sodass Sie alle Testfälle testen können, ohne dass der Arbeitsspeicher knapp wird.Probieren Sie es online aus
quelle
Ruby ,
139138134125120115 + 7 =146145141132127122 BytesVerwendet das
-rprime
Flag für +7 Bytes.-1 Byte von @daniero. -4 Bytes, indem ich daran denke, dass ich einfach eine reguläre Teilbarkeitsprüfung durchführen kann, anstatt die Primzahldivision auf das Vorhandensein von zu prüfen
2
.-9 Bytes aus der Python-Lösung von @ mbomb007, die mich an einen kürzeren Weg erinnert, den passenden Buchstaben abzurufen.
-5 Bytes, da abschließende Leerzeichen jetzt zulässig sind.
-5 Bytes von der Entdeckung
Enumerable#find_index
Probieren Sie es online! (alle Testfälle)
Erläuterung
quelle
zip
und entfernen"
Bash + GNU-Dienstprogramme + BSD-Spiele-Paket, 170
Scheint ziemlich nicht optimal, aber es funktioniert:
Probieren Sie es online aus .
quelle
Gelee , 33 Bytes
Probieren Sie es online!
quelle
Japt ,
5150 Bytes49 Byte Code, +1 für das
-P
Flag.Probieren Sie es online!
Dies könnte viel kürzer sein, wenn nur Japt ein paar Features mehr hätte ...
Erläuterung
`yspmflquixncÙgz’jhvdbk`
ist genau derselbe String, den alle anderen Benutzer komprimiert haben, so oft Japt ihn komprimieren kann (3 Byte kürzer als das Original!). Das derzeit einzige in Japt integrierte Komprimierungsprogramm ersetzt gängige Paare von Kleinbuchstaben durch ein Einzelbyte-Zeichen.Schauen wir uns also den aktuellen Code an:
Anschließend
£
wird jedes ElementX
im Ergebnis folgendermaßen ersetzt:Das Ergebnis ist an dieser Stelle ein Array von Zeichen. Das
-P
Flag fügt es zu einer einzelnen Zeichenfolge zusammen und das Ergebnis wird implizit an die Ausgabe gesendet.quelle
Gelee , 40 Bytes
Probieren Sie es online!
Überprüfen Sie alle Testfälle auf einmal! (leicht verändert)
quelle
Pyth ,
5447 Bytes7 bytes dank isaacg
(steht
❤
für ein nicht druckbares Zeichen)Pyth hat nicht viele erstklassige Funktionen ...
Hexdump:
Probieren Sie es online!
quelle
J , 59 Bytes
Probieren Sie es online!
Ziemlich einfach...
quelle
PHP, 173 Bytes
Online Version
Erweitert
PHP, 178 Bytes
Online Version
Erweitert
quelle
Python, 1420 Bytes
Dies könnte definitiv einige kurzschließen, aber es ist mein Versuch, es ohne Zahlen oder String-Literale zu lösen. Mir ist klar, dass dies ein Code-Golf-Problem ist und dass dies nicht gerade kurz ist, aber ich wollte es trotzdem teilen, nicht sicher, ob dies gegen Regeln verstößt oder nicht.
Es hat viel Spaß gemacht, den Algorithmus in diesem Blog-Beitrag zu verwenden, um die numerische ASCII-Darstellung von "SPMFLQUIXNCWORAGZTEJHVDBKY" auf den von mir verwendeten Bit-Shift-Ausdruck zu reduzieren. Ich habe mich auch generell sehr von diesem Blog inspirieren lassen, ich wollte es selbst ausprobieren und das schien eine gute Herausforderung zu sein.
Hier ist eine etwas besser lesbare Version mit einigen sinnvolleren Variablennamen
quelle