Erstellen Sie ein Programm, das ein Befehlszeilenargument verwendet n
, das eine Ganzzahl kleiner als 2147483648 (2 ^ 31) ist, und liest dann eine Datei input.txt
und druckt die Zeilen, input.txt
deren Teilzeichenfolge ein positives (nicht null) Vielfaches ist von n
. Sie können Vielfache größer als 2147483647 ignorieren.
Testfall
Wenn input.txt
enthält
1. Delaware Dec. 7, 1787
2. Pennsylvania Dec. 12, 1787 1682
3. New Jersey Dec. 18, 1787 1660
4. Georgia Jan. 2, 1788 1733
5. Connecticut Jan. 9, 1788 1634
6. Massachusetts Feb. 6, 1788 1620
7. Maryland Apr. 28, 1788 1634
8. South Carolina May 23, 1788 1670
9. New Hampshire June 21, 1788 1623
10. Virginia June 25, 1788 1607
11. New York July 26, 1788 1614
12. North Carolina Nov. 21, 1789 1660
13. Rhode Island May 29, 1790 1636
14. Vermont Mar. 4, 1791 1724
15. Kentucky June 1, 1792 1774
16. Tennessee June 1, 1796 1769
17. Ohio Mar. 1, 1803 1788
18. Louisiana Apr. 30, 1812 1699
19. Indiana Dec. 11, 1816 1733
20. Mississippi Dec. 10, 1817 1699
21. Illinois Dec. 3, 1818 1720
22. Alabama Dec. 14, 1819 1702
23. Maine Mar. 15, 1820 1624
24. Missouri Aug. 10, 1821 1735
25. Arkansas June 15, 1836 1686
26. Michigan Jan. 26, 1837 1668
27. Florida Mar. 3, 1845 1565
28. Texas Dec. 29, 1845 1682
29. Iowa Dec. 28, 1846 1788
30. Wisconsin May 29, 1848 1766
31. California Sept. 9, 1850 1769
32. Minnesota May 11, 1858 1805
33. Oregon Feb. 14, 1859 1811
34. Kansas Jan. 29, 1861 1727
35. West Virginia June 20, 1863 1727
36. Nevada Oct. 31, 1864 1849
37. Nebraska Mar. 1, 1867 1823
38. Colorado Aug. 1, 1876 1858
39. North Dakota Nov. 2, 1889 1812
40. South Dakota Nov. 2, 1889 1859
41. Montana Nov. 8, 1889 1809
42. Washington Nov. 11, 1889 1811
43. Idaho July 3, 1890 1842
44. Wyoming July 10, 1890 1834
45. Utah Jan. 4, 1896 1847
46. Oklahoma Nov. 16, 1907 1889
47. New Mexico Jan. 6, 1912 1610
48. Arizona Feb. 14, 1912 1776
49. Alaska Jan. 3, 1959 1784
50. Hawaii Aug. 21, 1959 1820
Dann find_multiples 4
wird die gesamte Datei find_multiples 40
gedruckt und gedruckt
10. Virginia June 25, 1788 1607
17. Ohio Mar. 1, 1803 1788
21. Illinois Dec. 3, 1818 1720
32. Minnesota May 11, 1858 1805
40. South Dakota Nov. 2, 1889 1859
41. Montana Nov. 8, 1889 1809
code-golf
math
arithmetic
ojblass
quelle
quelle
33. Oregon Feb. 14, 1859 1811
? Ist es das4
In14
, was bedeutet, dass die Übereinstimmung eher mit einem Teilstring als mit einer durch Nicht-Ziffern oder Zeilenende begrenzten Ziffernfolge erfolgt?Antworten:
Perl, 67 Zeichen
Bitte beachten Sie, dass die angegebene Anzahl von Zeichen eine der schrecklichsten Funktionen von Perl ausnutzt, nämlich dass eine spezielle Variable des Formulars
$^X
in zwei statt drei Zeichen geschrieben werden kann, indem die^X
durch ein wörtliches Strg- X- Zeichen ersetzt wird.Und natürlich wäre diese Lösung ohne ein paar von Perls wohl ebenso furchterregenden Regex-Erweiterungen nicht möglich, mit denen man tatsächlichen Code in ein Regex-Muster einbetten kann. (Aber zumindest diese Funktionen sind eindeutig als potenziell beängstigend dokumentiert.)
[BEARBEITET, um Fehler in der Argumentationsbehandlung zu beheben, da die Beschreibung nicht sorgfältig genug gelesen wurde.]
quelle
input.txt
.Mathematica
f
entfernt alle nicht Ziffern;g
findet alle Zahlen, die in einer einzigen Datumszeile gefunden werden können.h
prüft, ob Mod [x, n] für eine der von zurückgegebenen Zahlen wahr istg
.w
ruft die Unterprogramme auf und formatiert die Ausgabe.Beispiele
quelle
dates={"1. Delaware Dec.7,1787"}
Dann versuchen Sie esw[17]
. Es sollte dieselbe Informationszeile zurückgeben.dates = {"1. Delaware Dec.7,1787",...}
, dannExport["input.txt",dates]
. Sie verwenden esImport["input.txt", dates]
, um es zurückzubekommen.Q, 94
Es gibt zweifellos eine elegantere Möglichkeit, Teilzeichenfolgen in q zu finden.
.
quelle
Ruby 2.0, 129 Zeichen
Mit etwas Hilfe von @chron:
Diese lange Schlange hat sich ein bisschen aufgelöst:
Beispiel:
quelle
IO.foreach('input.txt'){|l|puts l if l.scan(/\d+/).any?{|a|(0..s=a.size).any?{|i|(1..s).any?{|j|(v=a[i,j].to_i)%n<1&&v>0}}}}
Ich liebe,#combination
aber es ist so ein langes Wort!$
Variablen ausgenutzt habe , also sieht es jetzt fast wie Perl aus!n
muss es sich anscheinend eher um ein Befehlszeilenargument als um einen von stdin gelesenen Wert handeln. So können Sie Ihre erste Zeile vollständig löschen undn
in der zweiten Zeile durch$*[0].to_i