Cree un programa que tome un argumento de línea de comando n
, que será un entero menor que 2147483648 (2 ^ 31), y luego lee un archivo input.txt
e imprime las líneas input.txt
que contienen cualquier subcadena que sea un múltiplo positivo (distinto de cero) de n
. Puede optar por ignorar los múltiplos mayores que 2147483647.
Caso de prueba
Si input.txt
contiene
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
luego find_multiples 4
imprimirá todo el archivo e find_multiples 40
imprimirá
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
fuente
fuente
33. Oregon Feb. 14, 1859 1811
? ¿Es el4
en14
, dando a entender que el partido está en contra de cualquier subcadena más que cualquier cadena de dígitos delimitado por los no-dígitos o final de la línea?Respuestas:
Perl, 67 caracteres
Tenga en cuenta que el recuento de caracteres dado se está aprovechando de una de las características más horribles de Perl, es decir, una variable especial de la forma
$^X
se puede escribir en dos caracteres en lugar de tres, reemplazando el^X
con un carácter ctrl- X literal .Y, por supuesto, esta solución no sería posible sin un par de extensiones de expresiones regulares posiblemente igualmente aterradoras de Perl que le permitan incrustar código real dentro de un patrón de expresiones regulares. (Pero al menos esas características están claramente documentadas como potencialmente aterradoras).
[EDITADO para corregir un error en el manejo de argumentos debido a no leer la descripción con suficiente cuidado]
fuente
input.txt
.Mathematica
f
elimina todos los no dígitos;g
encuentra todos los números que se pueden encontrar en una sola línea de fecha.h
comprueba si Mod [x, n] es verdadero para cualquiera de los números devueltos porg
.w
llama a las subrutinas y formatea la salida.Ejemplos
fuente
dates={"1. Delaware Dec.7,1787"}
Luego intentew[17]
. Debería devolver la misma línea de información.dates = {"1. Delaware Dec.7,1787",...}
luegoExport["input.txt",dates]
. Lo usasImport["input.txt", dates]
para recuperarlo.Q, 94
Sin duda, hay una forma más elegante de encontrar subcadenas en q.
.
fuente
Ruby 2.0, 129 caracteres
Con algo de ayuda de @chron:
Esa larga línea se rompió un poco:
Ejemplo:
fuente
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}}}}
me encanta#combination
pero es una palabra muy larga!$
variables, ¡así que ahora casi parece perl!n
debe ser un argumento de línea de comando en lugar de un valor leído desde stdin. Para que pueda eliminar su primera línea por completo y reemplazarlan
en la segunda línea con$*[0].to_i