Die Aufgabe ist einfach: Ihr Programm liest eine Ganzzahl als Eingabe und gibt aus, ob es sich um eine Primzahl handelt oder nicht. Sie können "ja / nein", "wahr / falsch" oder irgendetwas drucken, was das Ergebnis eindeutig identifiziert.
Die Herausforderung besteht darin, dass der Code mit vertauschten Zeilen und Spalten arbeiten muss.
Um die offensichtliche Lösung auszuschließen (kürzeste "einfache" Lösung, die vertikal char-by-char mit der Verwendung von Kommentaren wiederholt wird), unterscheidet sich die Metrik ein wenig vom üblichen Code-Golf:
Da die Formatierung bei dieser Herausforderung sehr wichtig ist , wird die Codegröße im Bereich des kleinsten Rechtecks gemessen, in das der Code passt. Mit anderen Worten, Leerzeichen zählen, und die Zeilen sollten mit der gleichen Länge gefüllt werden (dies ist nicht der Fall) müssen es tatsächlich tun, wenn Sie die Lösung veröffentlichen (der Einfachheit halber). Beispielsweise
int main()
{
return 0;
}
hätte eine Größe von 4 * 13 = 52 (und offensichtlich entspricht es keinem der beiden Kriterien: Primerkennung und transponierbar.)
Die kleinste Größe gewinnt.
Sie können jede Sprache und jede Bibliotheksfunktion verwenden, es sei denn, der einzige Zweck dieser Funktion besteht darin, Primzahlen zu finden, zu generieren oder zu erkennen.
Bearbeiten:
Während der Gewinner wahrscheinlich die Golfscript-Lösung sein wird, werde ich eine Prämie von 50 Punkten für die beste C- oder C ++ - Lösung vergeben!
Antworten:
GolfScript, 13 × 1
GolfScript schlägt wieder zu!
Wiederholt die Eingabe, wenn es sich um eine Primzahl handelt, andernfalls wird die Eingabe zusammen mit dem kleinsten geeigneten Divisor gedruckt. Ja, ich weiß, dass dies die Definition von "irgendetwas, was das Ergebnis eindeutig identifiziert" erweitert, aber alles, was schicker ist, würde ein paar zusätzliche Zeichen kosten. Wenn Sie eine bessere Ausgabe wünschen, können Sie die drei Zeichen
;]!
an den Code anhängen,1
um Primzahlen und0
zusammengesetzte Zahlen zu erhalten.Der Algorithmus ist wirklich ineffizient, nur eine Brute-Force-Teilung von 2 auf n −1. Die meisten GolfScript-Operatoren bestehen nur aus einzelnen Zeichen, daher funktioniert dieser Code genauso gut transponiert. Leider
:
erlaubt der Zuweisungsoperator keine Leerzeichen zwischen sich und seinem Ziel, daher musste ich dies komplett ohne Variablen tun.quelle
!
? Oder hatten Sie etwas ausgefalleneres im Sinn?)
vor dem,
so, dass es immer einen Teiler findet und=
am Ende.:
gefolgt von newline, weist dem newline-zeichen zu - es ist also nicht das whitespace nicht erlaubt, sondern nur das:
erlaubt kein Leerzeichen oder irgendetwas anderes zwischen sich und seinem Ziel: Was auch immer unmittelbar darauf folgt, ob Leerzeichen oder ein anderes Token (ja, gerade Zahlen, Zeichenfolgen oder Codeblöcke), wird zugewiesen. In der offiziellen Dokumentation wird jedoch aus gutem Grund ausdrücklich auf Whitespace hingewiesen, da das Hinzufügen von Whitespace zwischen Tokens in GolfScript an den meisten anderen Stellen nichts bewirkt (normalerweise, es sei denn, es wurde ... zugewiesen).C
2 * 702 * 60Drucke
y
für Primzahlen, sonst nichts.BEARBEITEN : Code geändert, um 10 Zeichen zu sparen. Muss ohne Parameter ausgeführt werden (so
m=1
).Die Methode zur Bearbeitung der Transposition ist sehr allgemein und kann auf jedes Programm angewendet werden.
Es basiert auf der Konvertierung von:
Dazu:
Und beide meinen einfach
abcd
.quelle
C - 13 × 13
Liest die Eingabe von stdin und gibt ein
1
für Prim und ein0
für nicht Prim aus.edit: kompiliert jetzt mit gcc und clang, andere compiler wurden nicht getestet
quelle
C, 12 × 12 Zeichen
Eine zweidimensionale Lösung, die im Gegensatz zu meiner anderen Antwort auf demselben Code basiert (und die wie diese
y
für prime druckt , nichts für composite).Die Struktur ähnelt der Antwort von Quasimodo , aber mein Code ist kürzer und ich denke, dass meine Verwendung von Comemnts ein bisschen effizienter ist, sodass ich 12x12 anpassen kann.
quelle
Perl, 14 x 14
Ich glaube, ich bekomme den Dreh raus. Geben Sie die Nummer als Befehlszeilenargument an, geben Sie
0
oder aus1
. Wahrscheinlich mehr Raum für Verbesserungen.quelle
Q.
Missbrauchte Kommentare für eine symmetrische, ineffiziente Lösung.
Übernimmt die Eingabe von STDIN und gibt einen Booleschen Wert zurück.
quelle
sqrt
da drin . Wenn Sie in Code-Golf nach Primzahlen suchen, ist es normalerweise vorteilhaft, (verschwenderisch) bis zu n zu teilen, anstatt bei sqrt n anzuhalten.Gelee , 2x2 Quadrat
Probieren Sie es online!
Ich denke, ich habe den Transpositionsteil richtig und wenn ja, ist die transponierte Version davon
Probieren Sie es online!
(das ist der gleiche Code)
quelle
05AB1E ,
1x51x3 (53 Bytes )Dies ist kein einziges großes Programm. Jede Zeile ist ein separates alternatives Programm, um den Prime Check zu lösen (ohne das eingebaute Prime zu verwenden).
-2 Bytes dank Grimy .
Leerzeichen zwischen den Zeilen sind in 05AB1E No-Ops, und da ich nur 1-Byte-Befehle verwende, funktioniert dies nach dem Transponieren einwandfrei.
Ausgänge
1
/0
für Wahrhaftigkeit / Falschheit.Probieren Sie den ersten online aus oder überprüfen Sie einige weitere Testfälle für alle (mit eval builtin
.V
) .Transponiert: Probieren Sie den ersten online aus .
Erläuterung:
HINWEIS: Wenn nur ein truthy / Falsey Wert gültig ist , und es nicht nötig hat verschieden sein, entweder
Òg
oderÕα
könnte als gültige 2-byters verwendet werden, nur weil1
truthy in 05AB1E ist, und alles andere ist Falsey: beide Versuchen von sie für einige Testfälle .Wenn Builtins erlaubt
p
wären, hätte ein einzelnes ausgereicht: Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .quelle
ÑPQ
oderÒgΘ
oderÒQP
für 3 Bytes. (Ñ
undÒ
beide haben andere Zwecke als "Primzahlen zu finden, zu generieren oder zu erkennen", so dass sie nach meiner Lektüre nicht in das Verbot einbezogen sind).ÕαΘ
,fQO
,fs¢
,f`Q
Õα
! Das ist ziemlich nett.Runenverzauberungen , 7 × 1
Probieren Sie es online!
Runic kümmert sich nicht um Ihre schwachen Versuche, die Quelle neu zu ordnen! Entsprechend der Anforderung, nach dem Umsetzen der Quelle noch zu funktionieren, werden +3 Byte (+2 Rechteckbreite) für den Reflexionsmodifikator und den Einstiegspunkt berechnet.
Transponiert oder transponiert, wobei das kombinierende Zeichen dem übergeordneten Element zugeordnet bleibt .
quelle
dzaima / APL, 8 × 9 = 72
Probieren Sie das Original oder transponiert !
quelle
Python 3 , 28 x 28 Größe
Probieren Sie es online!
quelle
JavaScript (Node.js) ,
26x 25Probieren Sie es online!
Transponiert:
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 10 x 11
Probieren Sie es online!
Die Funktion wurde korrigiert, um den Spezifikationen zu entsprechen. Vielen Dank an @ Adám für das Heads-up.
Gibt 0 für wahr, 1 für falsch zurück .
Wie
Die transponierte Fassung ist genau die gleiche.
quelle